Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MINOR Moved SilverStripeNavigator from 'sapphire' to 'cms'
- Loading branch information
Showing
4 changed files
with
345 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} | ||
} | ||
} | ||
|
||
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
| ||
<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> |