diff --git a/thirdparty/tabstrip/images/add.png b/thirdparty/tabstrip/images/add.png new file mode 100644 index 000000000..f6a3516aa Binary files /dev/null and b/thirdparty/tabstrip/images/add.png differ diff --git a/thirdparty/tabstrip/images/images/add.png b/thirdparty/tabstrip/images/images/add.png new file mode 100644 index 000000000..f6a3516aa Binary files /dev/null and b/thirdparty/tabstrip/images/images/add.png differ diff --git a/thirdparty/tabstrip/images/images/norm_a_bg.gif b/thirdparty/tabstrip/images/images/norm_a_bg.gif new file mode 100644 index 000000000..88a2193b8 Binary files /dev/null and b/thirdparty/tabstrip/images/images/norm_a_bg.gif differ diff --git a/thirdparty/tabstrip/images/images/norm_li_bg.gif b/thirdparty/tabstrip/images/images/norm_li_bg.gif new file mode 100644 index 000000000..8fbe080e5 Binary files /dev/null and b/thirdparty/tabstrip/images/images/norm_li_bg.gif differ diff --git a/thirdparty/tabstrip/images/images/sel_a_bg.gif b/thirdparty/tabstrip/images/images/sel_a_bg.gif new file mode 100644 index 000000000..491c4d5f6 Binary files /dev/null and b/thirdparty/tabstrip/images/images/sel_a_bg.gif differ diff --git a/thirdparty/tabstrip/images/images/sel_li_bg.gif b/thirdparty/tabstrip/images/images/sel_li_bg.gif new file mode 100644 index 000000000..c1077aa46 Binary files /dev/null and b/thirdparty/tabstrip/images/images/sel_li_bg.gif differ diff --git a/thirdparty/tabstrip/images/images/tab_bg.gif b/thirdparty/tabstrip/images/images/tab_bg.gif new file mode 100644 index 000000000..ea4e0f974 Binary files /dev/null and b/thirdparty/tabstrip/images/images/tab_bg.gif differ diff --git a/thirdparty/tabstrip/images/norm_a_bg.gif b/thirdparty/tabstrip/images/norm_a_bg.gif new file mode 100644 index 000000000..88a2193b8 Binary files /dev/null and b/thirdparty/tabstrip/images/norm_a_bg.gif differ diff --git a/thirdparty/tabstrip/images/norm_li_bg.gif b/thirdparty/tabstrip/images/norm_li_bg.gif new file mode 100644 index 000000000..8fbe080e5 Binary files /dev/null and b/thirdparty/tabstrip/images/norm_li_bg.gif differ diff --git a/thirdparty/tabstrip/images/sapphire.tabs.css b/thirdparty/tabstrip/images/sapphire.tabs.css new file mode 100644 index 000000000..cf4b80793 --- /dev/null +++ b/thirdparty/tabstrip/images/sapphire.tabs.css @@ -0,0 +1,104 @@ +/* Caution! Ensure accessibility in print and other media types... */ +@media projection, screen { /* Use class for showing/hiding tab content, so that visibility can be better controlled in different media types... */ + .ui-tabs-hide { + display: none; + } +} + +/* Hide useless elements in print layouts... */ +@media print { + .ui-tabs-nav { + display: none; + } +} + +/* Skin */ +.ui-tabs-nav { + list-style: none; + margin: 0; + padding: 0 0 0 3px; + + border-bottom: 1px #AAA solid; + padding: 0; + margin: 0 !important; + clear: left; + float: left; + width: 100%; + /* Need this to stop tabs from disappearing sometimes */ + position: relative; +} +.ui-tabs-nav:after { /* clearing without presentational markup, IE gets extra treatment */ + display: block; + clear: both; + content: " "; +} + +/* If I just say li I get into problems with ".ul-tabs-nav .ui-tabs-selected" below */ +.ui-tabs-nav li { + float: left; + list-style: none; + background: url(images/norm_li_bg.gif) no-repeat left 3px; + margin: 0 2px 0 0; + padding: 0 0 0 9px; + cursor: pointer; + position: relative; + top: 1px; +} +.ui-tabs-nav a, .ui-tabs-nav a span { +} +.ui-tabs-nav a { + background: url(images/norm_a_bg.gif) no-repeat right 3px; + display: block; + float: left; + outline: none; + padding: 7px 9px 3px 0; + text-decoration: none; + color: #555; + font-size: 11px; + font-weight: bold; +} + +.ui-tabs-nav li.ui-tabs-selected { + background: url(images/sel_li_bg.gif) no-repeat left top; + top: 1px; +} +.ui-tabs-nav li.ui-tabs-selected a { + background: url(images/sel_a_bg.gif) no-repeat right top; + padding: 6px 9px 5px 0; + color: #0074c6; +} + +.ui-tabs-nav .ui-tabs-selected a:link, .ui-tabs-nav .ui-tabs-selected a:visited, +.ui-tabs-nav .ui-tabs-disabled a:link, .ui-tabs-nav .ui-tabs-disabled a:visited { /* @ Opera, use pseudo classes otherwise it confuses cursor... */ + cursor: text; +} +.ui-tabs-nav a:hover, .ui-tabs-nav a:focus, .ui-tabs-nav a:active, +.ui-tabs-nav .ui-tabs-unselect a:hover, .ui-tabs-nav .ui-tabs-unselect a:focus, .ui-tabs-nav .ui-tabs-unselect a:active { /* @ Opera, we need to be explicit again here now... */ + cursor: pointer; +} +.ui-tabs-disabled { + opacity: .4; + filter: alpha(opacity=40); +} +.ui-tabs-nav .ui-tabs-disabled a:link, .ui-tabs-nav .ui-tabs-disabled a:visited { + color: #000; +} +.ui-tabs-panel { + clear: left; + overflow: auto; + border: 1px solid #aaa; + border-top: none; + position: relative; + top: 0; + margin: 0; + padding: 10px; +} + + +/* Additional IE specific bug fixes... */ +* html .ui-tabs-nav { /* auto clear @ IE 6 & IE 7 Quirks Mode */ + display: inline-block; +} +*:first-child+html .ui-tabs-nav { /* auto clear @ IE 7 Standards Mode - do not group selectors, otherwise IE 6 will ignore complete rule (because of the unknown + combinator)... */ + display: inline-block; +} \ No newline at end of file diff --git a/thirdparty/tabstrip/images/sel_a_bg.gif b/thirdparty/tabstrip/images/sel_a_bg.gif new file mode 100644 index 000000000..491c4d5f6 Binary files /dev/null and b/thirdparty/tabstrip/images/sel_a_bg.gif differ diff --git a/thirdparty/tabstrip/images/sel_li_bg.gif b/thirdparty/tabstrip/images/sel_li_bg.gif new file mode 100644 index 000000000..c1077aa46 Binary files /dev/null and b/thirdparty/tabstrip/images/sel_li_bg.gif differ diff --git a/thirdparty/tabstrip/images/tab_bg.gif b/thirdparty/tabstrip/images/tab_bg.gif new file mode 100644 index 000000000..ea4e0f974 Binary files /dev/null and b/thirdparty/tabstrip/images/tab_bg.gif differ diff --git a/thirdparty/tabstrip/tabstrip.css b/thirdparty/tabstrip/tabstrip.css new file mode 100644 index 000000000..31cdf4027 --- /dev/null +++ b/thirdparty/tabstrip/tabstrip.css @@ -0,0 +1,70 @@ +/* + * tabstrip-default.css + * Default styling for tabstrips + * Designed to look like windows-xp tabs + * + * Modified by Sean Harvey, SilverStripe Ltd 02/11/2007 + */ + +ul.tabstrip { + border-bottom: 1px #AAA solid; + padding: 0; + margin: 0 !important; + clear: left; + float: left; + width: 100%; + /* Need this to stop tabs from disappearing sometimes */ + position: relative; +} + ul.tabstrip li { + float: left; + list-style: none; + background: url(images/norm_li_bg.gif) no-repeat left 3px; + margin: 0 2px 0 0; + padding: 0 0 0 9px; + cursor: pointer; + position: relative; + top: 1px; + } + ul.tabstrip li a { + background: url(images/norm_a_bg.gif) no-repeat right 3px; + display: block; + float: left; + outline: none; + padding: 7px 9px 3px 0; + text-decoration: none; + color: #555; + font-size: 11px; + font-weight: bold; + } + ul.tabstrip li a:hover { + text-decoration: none; + color: #000; + } + ul.tabstrip li.current, + ul.tabstrip li.ui-tabs-selected, + ul.tabstrip li.sel, + ul.tabstrip li.over { + background: url(images/sel_li_bg.gif) no-repeat left top; + top: 1px; + } + ul.tabstrip li.current a, + ul.tabstrip li.ui-tabs-selected a, + ul.tabstrip li.sel a, + ul.tabstrip li.over a { + background: url(images/sel_a_bg.gif) no-repeat right top; + padding: 6px 9px 5px 0; + color: #0074c6; + } + +.tab { + clear: left; + overflow: auto; + border: 1px solid #aaa; + border-top: none; + position: relative; + top: 0; + margin: 0; + padding: 10px; + background-color: #FFFFFF; +} diff --git a/thirdparty/tabstrip/tabstrip.js b/thirdparty/tabstrip/tabstrip.js new file mode 100644 index 000000000..48446aa2b --- /dev/null +++ b/thirdparty/tabstrip/tabstrip.js @@ -0,0 +1,304 @@ +// jQuery loader +jQuery('ul.tabstrip').livequery(function() { + initTabstrip(this); + if(window.ontabschanged) window.ontabschanged(); +}); + +var _CUR_TABS = []; +var _TABS_ON_PAGE = []; +var _TAB_DIVS_ON_PAGE = []; + +function initTabstrip(tabstrip, namedAnchors) { + + var i, anchor, container, anchorName, li; + var childAnchors = tabstrip.getElementsByTagName('a'); + var base, curTab = null, curURL = window.location.href; + var previousTab = null; + var firstTab, foundATab = false; + + // Strip query string from current URL + var curQuery = window.location.search; + + // Detect a current tab from the # link + if(curURL.indexOf('#') == -1) { + base = curURL.length - curQuery.length; + } else { + base = curURL.indexOf('#') - curQuery.length; + curTab = curURL.substr(curURL.indexOf('#')+1); + } + + // Get a stored current tab, used when Ajax-switching between pages + if(_CUR_TABS[tabstrip.parentNode.id] && $(_CUR_TABS[tabstrip.parentNode.id]) ) { + curTab = _CUR_TABS[tabstrip.parentNode.id]; + + } else { + // Default to showing the first tab + for(i=0;i 1 ) + anchorName = tabNames.shift() + 'set'; + while( anchorName ) { + if( _TABS_ON_PAGE[anchorName] ) _TABS_ON_PAGE[anchorName].openTab( _TABS_ON_PAGE[anchorName].getElementsByTagName('a')[0] ); + + if( tabNames.length == 0 ) + anchorName = null; + else { + anchorName = anchorName + tabNames.shift() + 'set'; + } + } +} + +/* + * Returns the form object that the given element is + * inside; or null if it's not inside a form + */ +function findParentForm(el) { + var ownerForm = el.parentNode, tn; + while((tn = ownerForm.tagName.toLowerCase()) != "body" && tn != "form") { + ownerForm = ownerForm.parentNode; + } + if(tn == "form") return ownerForm; + else return null; +} + + +function tabstrip_showTab(evt) { + if(this.tagName.toLowerCase() == "a") var el = this.parentNode; + else el = this; + + _CUR_TABS[el.tabstrip.parentNode.id] = el.container.id; + + if(el.tabstrip.currentlyShowing && el.tabstrip.currentlyShowing.container && el.tabstrip.currentlyShowing != el) { + el.tabstrip.currentlyShowing.container.style.display = 'none'; + removeClass(el.tabstrip.currentlyShowing.container, 'current'); + removeClass(el.tabstrip.currentlyShowing, 'current'); + } + + var container = document.getElementById( el.container.id ); + + if( container && container.style.display == 'none' ) { + container.style.display = 'block'; + addClass( container, 'current' ); + } + + // el.container.style.display = ''; + addClass(el, 'current'); + + el.tabstrip.currentlyShowing = el; + + setHashLink(el.anchorName); + + if(evt != 'init') { + if(window.ontabschanged) window.ontabschanged(); + else if(window.onresize) window.onresize(); + } + + return false; +} + +/* + * Redirect to the given hash link + * It won't actually reload the page, but it will update the current URL + */ +function setHashLink(hashLink) { + return; //temporarily disabled this + + var preserveScroll = preserveScrollPosition(hashLink); + + // Mac/IE5 cannot handle this + if(navigator.userAgent.indexOf("Mac") > -1 && navigator.userAgent.indexOf("MSIE") > -1) + return; + + if(window.location.href.indexOf('#') == -1) + window.location.href += '#' + hashLink; + else + window.location.href = window.location.href.replace(/#.*$/, '#' + hashLink); + + if(typeof preserveScroll != 'undefined') + restoreScrollPosition(preserveScroll); +} + +/** + * Preserve the scroll position prior to visiting the given hashlink. + * Returns an object that you can pass to restoreScrollPosition + */ +function preserveScrollPosition(hashLink) { + var el = document.getElementById(hashLink); + var preserved = []; + while(el) { + preserved[preserved.length] = el; + el.oldScroll = el.scrollTop; + + if(el.tagName && el.tagName.toLowerCase() == "body") break; + el = el.parentNode; + } + return preserved; +} + +/* + * Restores the preserved scroll position + */ +function restoreScrollPosition(preserved) { + var i; + for(i=0;i