Permalink
Browse files

MINOR Moved SilverStripeNavigator from 'sapphire' to 'cms'

  • Loading branch information...
1 parent 16d818c commit c660284236c81f8f374f176644c4b50c28a5e2db @chillu chillu committed Mar 22, 2011
@@ -0,0 +1,189 @@
+<?php
+/**
+ * @package cms
+ * @subpackage content
+ */
+class SilverStripeNavigator {
+
+ /**
+ * @param SiteTree $record
+ * @return Array template data
+ */
+ static function get_for_record($record) {
+ $items = '';
+ $message = '';
+
+ $navItemClasses = ClassInfo::subclassesFor('SilverStripeNavigatorItem');
+ array_shift($navItemClasses);
+
+ // Sort menu items according to priority
+ $menuPriority = array();
+ $i = 0;
+ foreach($navItemClasses as $navItemClass) {
+ if($navItemClass == 'SilverStripeNavigatorItem') continue;
+
+ $i++;
+ $obj = new $navItemClass();
+ // This funny litle formula ensures that the first item added with the same priority will be left-most.
+ $priority = Object::get_static($navItemClass, 'priority');
+ $menuPriority[$priority * 100 - 1] = $obj;
+ }
+ ksort($menuPriority);
+
+ foreach($menuPriority as $obj) {
+
+ $text = $obj->getHTML($record);
+ if($text) $items .= $text;
+ $newMessage = $obj->getMessage($record);
+ if($newMessage) $message = $newMessage;
+ }
+
+ return array(
+ 'items' => $items,
+ 'message' => $message
+ );
+ }
+}
+
+/**
+ * Navigator items are links that appear in the $SilverStripeNavigator bar.
+ * To add an item, extends this class.
+ *
+ * @package cms
+ * @subpackage content
+ */
+class SilverStripeNavigatorItem extends Object {
+ function getHTML($page) {}
+ function getMessage($page) {}
+}
+
+/**
+ * @package cms
+ * @subpackage content
+ */
+class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem {
+ static $priority = 10;
+
+ function getHTML($page) {
+ if(is_a(Controller::curr(), 'CMSMain')) {
+ return '<a class="current">CMS</a>';
+ } else {
+ $cmsLink = 'admin/show/' . $page->ID;
+ $cmsLink = "<a href=\"$cmsLink\" class=\"newWindow\" target=\"cms\">". _t('ContentController.CMS', 'CMS') ."</a>";
+
+ return $cmsLink;
+ }
+ }
+
+ function getLink($page) {
+ if(is_a(Controller::curr(), 'CMSMain')) {
+ return Controller::curr()->AbsoluteLink('show') . $page->ID;
+ }
+ }
+
+}
+
+/**
+ * @package cms
+ * @subpackage content
+ */
+class SilverStripeNavigatorItem_StageLink extends SilverStripeNavigatorItem {
+ static $priority = 20;
+
+ function getHTML($page) {
+ if(Versioned::current_stage() == 'Stage' && !(ClassInfo::exists('SiteTreeFutureState') && SiteTreeFutureState::get_future_datetime())) {
+ return "<a class=\"current\">". _t('ContentController.DRAFTSITE', 'Draft Site') ."</a>";
+ } else {
+ $draftPage = Versioned::get_one_by_stage('SiteTree', 'Stage', '"SiteTree"."ID" = ' . $page->ID);
+ if($draftPage) {
+ $pageLink = Controller::join_links($draftPage->AbsoluteLink(), "?stage=Stage");
+ return "<a href=\"$pageLink\" class=\"newWindow\" target=\"site\" style=\"left : -1px;\">". _t('ContentController.DRAFTSITE', 'Draft Site') ."</a>";
+ }
+ }
+ }
+
+ function getMessage($page) {
+ if(Versioned::current_stage() == 'Stage') {
+ return "<div id=\"SilverStripeNavigatorMessage\" title=\"". _t('ContentControl.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors') ."\">". _t('ContentController.DRAFTSITE', 'Draft Site') ."</div>";
+ }
+ }
+
+ function getLink($page) {
+ if(Versioned::current_stage() == 'Stage') {
+ return Controller::join_links($page->AbsoluteLink(), '?stage=Stage');
+ }
+ }
+}
+
+/**
+ * @package cms
+ * @subpackage content
+ */
+class SilverStripeNavigatorItem_LiveLink extends SilverStripeNavigatorItem {
+ static $priority = 30;
+
+ function getHTML($page) {
+ if(Versioned::current_stage() == 'Live') {
+ return "<a class=\"current\">". _t('ContentController.PUBLISHEDSITE', 'Published Site') ."</a>";
+ } else {
+ $livePage = Versioned::get_one_by_stage('SiteTree', 'Live', '"SiteTree"."ID" = ' . $page->ID);
+ if($livePage) {
+ $pageLink = Controller::join_links($livePage->AbsoluteLink(), "?stage=Live");
+ return "<a href=\"$pageLink\" class=\"newWindow\" target=\"site\" style=\"left : -3px;\">". _t('ContentController.PUBLISHEDSITE', 'Published Site') ."</a>";
+ }
+ }
+ }
+
+ function getMessage($page) {
+ if(Versioned::current_stage() == 'Live') {
+ return "<div id=\"SilverStripeNavigatorMessage\" title=\"". _t('ContentControl.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors') ."\">". _t('ContentController.PUBLISHEDSITE', 'Published Site') ."</div>";
+ }
+ }
+
+ function getLink($page) {
+ if(Versioned::current_stage() == 'Live') {
+ return Controller::join_links($page->AbsoluteLink(), '?stage=Live');
+ }
+ }
+}
+
+/**
+ * @package cms
+ * @subpackage content
+ */
+class SilverStripeNavigatorItem_ArchiveLink extends SilverStripeNavigatorItem {
+ static $priority = 40;
+
+ function getHTML($page) {
+ if(Versioned::current_archived_date()) {
+ return "<a class=\"current\">". _t('ContentController.ARCHIVEDSITE', 'Archived Site') ."</a>";
+ } else {
+ // Display the archive link if the page currently displayed in the CMS is other version than live and draft
+ $currentDraft = Versioned::get_one_by_stage('SiteTree', 'Draft', '"SiteTree"."ID" = ' . $page->ID);
+ $currentLive = Versioned::get_one_by_stage('SiteTree', 'Live', '"SiteTree"."ID" = ' . $page->ID);
+ if(
+ (!$currentDraft || ($currentDraft && $page->Version != $currentDraft->Version))
+ && (!$currentLive || ($currentLive && $page->Version != $currentLive->Version))
+ ) {
+ $pageLink = $page->AbsoluteLink();
+ return "<a href=\"$pageLink?archiveDate={$page->LastEdited}\" class=\"newWindow\" target=\"site\" style=\"left : -3px;\">". _t('ContentController.ARCHIVEDSITE', 'Archived Site') ."</a>";
+ }
+ }
+ }
+
+ function getMessage($page) {
+ if($date = Versioned::current_archived_date()) {
+ $dateObj = Object::create('Datetime');
+ $dateObj->setValue($date);
+ return "<div id=\"SilverStripeNavigatorMessage\" title=\"". _t('ContentControl.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors') ."\">". _t('ContentController.ARCHIVEDSITEFROM', 'Archived site from') ."<br>" . $dateObj->Nice() . "</div>";
+ }
+ }
+
+ function getLink($page) {
+ if($date = Versioned::current_archived_date()) {
+ return $page->AbsoluteLink() . '?archiveDate=' . $date;
+ }
+ }
+}
+
+?>
@@ -0,0 +1,111 @@
+
+#SilverStripeNavigator {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ border-top: 2px solid #d4d0c8;
+ background-color:#81858d;
+ height: 22px;
+ background: #4d4e5a url(../../cms/images/textures/footerBg.gif) repeat-x left top;
+}
+
+#SilverStripeNavigator * {
+ font-family: Arial,Helvetica,sans-serif;
+ font-size: 10px !important;
+}
+
+#SilverStripeNavigator .holder {
+ text-align: center;
+ padding-top : 4px;
+ padding-left : 3px;
+ padding-right : 6px;
+ color: white;
+ border-top: 1px solid #555555;
+}
+#SilverStripeNavigator #logInStatus {
+ float: right;
+}
+#SilverStripeNavigator #switchView {
+ float: left;
+
+}
+
+#SilverStripeNavigator a {
+ color: #fff;
+ background-color: transparent;
+ text-decoration: underline;
+}
+#SilverStripeNavigator a:hover {
+ background-color: transparent;
+}
+
+#SilverStripeNavigator .bottomTabs a {
+ margin-right: 8px;
+ text-decoration: underline;
+}
+
+#SilverStripeNavigator .bottomTabs div.blank {
+ display: block;
+ float : left;
+ height : 13px;
+ position:relative;
+ top : -2px;
+ cursor: pointer;
+ border : none;
+ background-color: transparent;
+ padding: 2px 4px 2px 2px;
+ font-weight: bold;
+}
+
+
+#SilverStripeNavigator .bottomTabs a.current {
+ font-weight:bold;
+ text-decoration: none;
+}
+
+#SilverStripeNavigatorMessage {
+ font-family: 'Lucida Grande', Verdana, Arial, 'sans-serif';
+ position: absolute;
+ right: 20px;
+ top: 40px;
+ padding: 10px;
+ border-color: #c99;
+ color: #fff;
+ background-color: #c00;
+ border: 1px solid #000;
+}
+
+#SilverStripeNavigator #logInStatus {
+ background:transparent url(../../cms/images/logout.gif) no-repeat scroll right top !important;
+ padding-bottom:4px;
+ padding-right:20px;
+}
+
+#SilverStripeNavigatorLinkPopup {
+ display: none;
+ position: absolute;
+ top: -60px;
+ height: 50px;
+ width: 350px;
+ left: 200px;
+ background-color: white;
+ border: 1px solid black;
+ z-index: 100;
+ color: black;
+ padding: 5px;
+}
+
+#SilverStripeNavigatorLinkPopup input {
+ width: 250px;
+}
+
+#SilverStripeNavigatorLinkPopup a.close {
+ color: blue;
+ text-align: right;
+ width: 80%;
+ border: none !important;
+ cursor: pointer;
+}
+
+
@@ -0,0 +1,35 @@
+function windowName(suffix) {
+ var base = document.getElementsByTagName('base')[0].href.replace('http://','').replace(/\//g,'_').replace(/\./g,'_');
+ return base + suffix;
+}
+
+(function($) {
+ $('#switchView a.newWindow').live('click',
+ function() {
+ var w = window.open(this.href, windowName(this.target));
+ w.focus();
+ return false;
+ }
+ );
+
+ $('#SilverStripeNavigatorLink').live('click',
+ function() {
+ $('#SilverStripeNavigatorLinkPopup').toggle();
+ return false;
+ }
+ );
+
+ $('#SilverStripeNavigatorLinkPopup a.close').live('click',
+ function() {
+ $('#SilverStripeNavigatorLinkPopup').hide();
+ return false;
+ }
+ );
+
+ $('#SilverStripeNavigatorLinkPopup input').live('focus',
+ function() {
+ this.select();
+ }
+ );
+
+})(jQuery);
@@ -0,0 +1,10 @@
+&nbsp; &nbsp;
+<a id="SilverStripeNavigatorLink" href="#">
+ <% _t('SilverStripeNavigatorLink.ShareLink','Share link') %>
+</a>
+<div id="SilverStripeNavigatorLinkPopup">
+ <a class="close"><% _t('SilverStripeNavigatorLinkl.CloseLink','Close') %></a>
+ <p>
+ <% _t('SilverStripeNavigatorLink.ShareInstructions','To share a this to this page, copy and paste the link below.') %></p>
+ <input value="$Link" />
+</div>

0 comments on commit c660284

Please sign in to comment.