From 3e3fc3d7d7f9e1de691a1db82f673d7f95b5a67e Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Sat, 21 Nov 2009 02:22:39 +0000 Subject: [PATCH] ENHANCEMENT Using "concrete" jQuery plugin for SilverStripe tabset git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@92479 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- forms/TabSet.php | 8 +++++++ javascript/TabSet.js | 54 ++++++++++++++++++++++++++++++++------------ 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/forms/TabSet.php b/forms/TabSet.php index 8dd6572f6..cc3e077d4 100644 --- a/forms/TabSet.php +++ b/forms/TabSet.php @@ -59,6 +59,14 @@ class TabSet extends CompositeField { Requirements::css(THIRDPARTY_DIR . '/jquery/themes/smoothness/ui.all.css'); Requirements::css(THIRDPARTY_DIR . '/jquery/themes/smoothness/ui.tabs.css'); + // concrete + Requirements::javascript(THIRDPARTY_DIR . '/jquery/plugins/concrete/jquery.class.js'); + Requirements::javascript(THIRDPARTY_DIR . '/jquery/plugins/concrete/jquery.selector.js'); + Requirements::javascript(THIRDPARTY_DIR . '/jquery/plugins/concrete/jquery.selector.specifity.js'); + Requirements::javascript(THIRDPARTY_DIR . '/jquery/plugins/concrete/jquery.selector.matches.js'); + Requirements::javascript(THIRDPARTY_DIR . '/jquery/plugins/concrete/jquery.dat.js'); + Requirements::javascript(THIRDPARTY_DIR . '/jquery/plugins/concrete/jquery.concrete.js'); + Requirements::javascript(SAPPHIRE_DIR . '/javascript/TabSet.js'); return $this->renderWith("TabSetFieldHolder"); diff --git a/javascript/TabSet.js b/javascript/TabSet.js index 6b825b419..fe029c7a8 100644 --- a/javascript/TabSet.js +++ b/javascript/TabSet.js @@ -1,18 +1,42 @@ -jQuery(document).ready(function () { +(function($){ /** - * Replace prefixes for all hashlinks in tabs. - * SSViewer rewrites them from "#Root_MyTab" to - * e.g. "/admin/#Root_MyTab" which makes them - * unusable for jQuery UI. + * Lightweight wrapper around jQuery UI tabs. + * Ensures that anchor links are set properly, + * and any nested tabs are scrolled if they have + * their height explicitly set. This is important + * for forms inside the CMS layout. */ - jQuery('.ss-tabset > ul a').each(function() { - var href = jQuery(this).attr('href').replace(/.*(#.*)/, '$1'); - jQuery(this).attr('href', href); - }) - - // Initialize tabset - jQuery('.ss-tabset').tabs(); - - // if tab has no nested tabs, set overflow to auto - jQuery('.ss-tabset .tab').not(':has(.tab)').css('overflow', 'auto'); + $('.ss-tabset').concrete({ + onmatch: function() { + this.rewriteHashlinks(); + + // Initialize jQuery UI tabs + this.tabs(); + }, + + /** + * Replace prefixes for all hashlinks in tabs. + * SSViewer rewrites them from "#Root_MyTab" to + * e.g. "/admin/#Root_MyTab" which makes them + * unusable for jQuery UI. + */ + rewriteHashlinks: function() { + $(this).find('ul a').each(function() { + var href = $(this).attr('href').replace(/.*(#.*)/, '$1'); + if(href) $(this).attr('href', href); + }) + }, + + /** + * If tab has no nested tabs, set overflow to auto + */ + setOverflows: function() { + $(this).find('.tab').not(':has(.tab)').css('overflow', 'auto'); + } + }); +})(jQuery); + +jQuery(document).ready(function() { + // @todo remove + jQuery.concrete.triggerMatching(); }); \ No newline at end of file