mirror of
https://github.com/processwire/processwire.git
synced 2025-08-14 18:55:56 +02:00
Fix issue processwire/processwire-issues#332 FieldsetTab was sometimes not auto-loading AJAX-loaded tab after form submit
This commit is contained in:
@@ -40,6 +40,7 @@
|
||||
var $target = $(this);
|
||||
var lastTabID = ''; // ID attribute of last tab that was clicked
|
||||
var generate = true; // generate markup/manipulate DOM?
|
||||
var queueTabClick = []; // queued wiretabclick event, becomes false after document.ready
|
||||
|
||||
function init() {
|
||||
|
||||
@@ -103,6 +104,12 @@
|
||||
} else {
|
||||
$tabList.children("li:first").children("a").click();
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// if a wiretabclick event queued before document.ready, trigger it now
|
||||
if(queueTabClick.length) $(document).trigger('wiretabclick', [ queueTabClick[0], queueTabClick[1] ]);
|
||||
queueTabClick = false;
|
||||
});
|
||||
}
|
||||
|
||||
function addTab() {
|
||||
@@ -192,7 +199,11 @@
|
||||
if(options.rememberTabs == 1) setTabCookie(newTabID);
|
||||
lastTabID = newTabID;
|
||||
}
|
||||
$(document).trigger('wiretabclick', [ $newTabContent, $oldTabContent ]);
|
||||
if(queueTabClick === false) {
|
||||
$(document).trigger('wiretabclick', [ $newTabContent, $oldTabContent ]);
|
||||
} else {
|
||||
queueTabClick = [ $newTabContent, $oldTabContent ];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
(function(a){a.fn.WireTabs=function(d){var e={rememberTabs:0,requestID:"",cookieName:"WireTabs",items:null,skipRememberTabIDs:[],itemsParent:null,ulClass:"WireTabs nav",ulAttrs:"",liActiveClass:"",aActiveClass:"on",id:""};var c=0;var b=ProcessWire.config.JqueryWireTabs;var g=["rememberTabs","requestID","cookieName","liActiveClass","aActiveClass","ulClass","ulAttrs"];for(var h=0;h<g.length;h++){var f=g[h];if(typeof b[f]!="undefined"){e[f]=b[f]}}a.extend(e,d);return this.each(function(m){var o=null;var i=a(this);var l="";var q=true;function r(){if(!e.items){return}if(e.items.length<1){return}if(e.id.length){o=a("#"+e.id);if(o.length){q=false}else{o=null}}if(!o){o=a("<ul"+(e.ulAttrs?" "+e.ulAttrs:"")+"></ul>");o.addClass(e.ulClass);if(e.id.length){o.attr("id",e.id)}}e.items.each(j);if(q){i.prepend(o)}var t=i;var w=null;var y=p();if(e.rememberTabs==0){t.submit(function(){k(l);return true})}var s=window.location.href;var u="";if(s.indexOf("WireTab")){var v=new RegExp("[&;?]WireTab=([-_a-z0-9]+)","i");u=s.match(v);u=u?u[1]:"";if(u.length){w=o.find("a#_"+u)}}if(w==null){var x=document.location.hash.replace("#","");if(x.length){w=o.find("a#_"+x);if(w.length==0){w=null}else{document.location.hash=""}}}if(w==null&&y.length>0&&e.rememberTabs>-1){w=o.find("a#"+y)}if(w&&w.length>0){w.click();if(e.rememberTabs==0){k("")}setTimeout(function(){w.click()},200)}else{o.children("li:first").children("a").click()}}function j(){c++;var y=a(this);if(!y.attr("id")){y.attr("id","WireTab"+c)}var x=y.attr("title")||y.attr("id");y.removeAttr("title");var s=y.attr("id");var v=a("a#_"+s);if(v.length>0){v.click(n)}else{var v=a("<a></a>").attr("href","#"+s).attr("id","_"+s).html(x).click(n);o.append(a("<li></li>").append(v))}var u=y.attr("data-tooltip");if(y.hasClass("WireTabTip")||u){if(!u){u=x}for(var t in b.tooltipAttr){var w=b.tooltipAttr[t];if(w.indexOf("{tip}")>-1){w=w.replace("{tip}",u)}if(t==="class"){v.addClass(w)}else{v.attr(t,w)}}}y.hide()}function n(){var t=e.aActiveClass;var z=e.liActiveClass;var u=o.find("a."+t);var x=a(this);if(!u.length){u=o.find("a:eq(0)")}var w=u.attr("href");var y=x.attr("href");var v=w&&w.indexOf("#")===0?a(w):null;var s=y&&y.indexOf("#")===0?a(y):null;var B=x.attr("id");var A=u.attr("id");u.removeClass(t);x.addClass(t);if(z.length){o.find("li."+z).removeClass(z);x.closest("li").addClass(z)}if(v){v.hide()}if(s){s.show()}else{if(y&&y.length){window.location.href=y;return true}}if(A){i.removeClass(v.attr("id"))}i.addClass(B);if(e.rememberTabs>-1){if(jQuery.inArray(B,e.skipRememberTabIDs)!=-1){B=""}if(e.rememberTabs==1){k(B)}l=B}a(document).trigger("wiretabclick",[s,v]);return false}function k(s){document.cookie=e.cookieName+"="+e.requestID+"-"+escape(s)}function p(){var t=new RegExp("(?:^|;)\\s?"+e.cookieName+"="+e.requestID+"-(.*?)(?:;|$)","i");var s=document.cookie.match(t);s=s?s[1]:"";return s}r()})}})(jQuery);
|
||||
(function($){$.fn.WireTabs=function(customOptions){var options={rememberTabs:0,requestID:"",cookieName:"WireTabs",items:null,skipRememberTabIDs:[],itemsParent:null,ulClass:"WireTabs nav",ulAttrs:"",liActiveClass:"",aActiveClass:"on",id:""};var totalTabs=0;var cfg=ProcessWire.config.JqueryWireTabs;var keys=["rememberTabs","requestID","cookieName","liActiveClass","aActiveClass","ulClass","ulAttrs"];for(var n=0;n<keys.length;n++){var key=keys[n];if(typeof cfg[key]!="undefined")options[key]=cfg[key]}$.extend(options,customOptions);return this.each(function(index){var $tabList=null;var $target=$(this);var lastTabID="";var generate=true;var queueTabClick=[];function init(){if(!options.items)return;if(options.items.length<1)return;if(options.id.length){$tabList=$("#"+options.id);if($tabList.length)generate=false;else $tabList=null}if(!$tabList){$tabList=$("<ul"+(options.ulAttrs?" "+options.ulAttrs:"")+"></ul>");$tabList.addClass(options.ulClass);if(options.id.length)$tabList.attr("id",options.id)}options.items.each(addTab);if(generate)$target.prepend($tabList);var $form=$target;var $rememberTab=null;var cookieTab=getTabCookie();if(options.rememberTabs==0){$form.submit(function(){setTabCookie(lastTabID);return true})}var href=window.location.href;var hrefMatch="";if(href.indexOf("WireTab")){var regex=new RegExp("[&;?]WireTab=([-_a-z0-9]+)","i");hrefMatch=href.match(regex);hrefMatch=hrefMatch?hrefMatch[1]:"";if(hrefMatch.length){$rememberTab=$tabList.find("a#_"+hrefMatch)}}if($rememberTab==null){var hash=document.location.hash.replace("#","");if(hash.length){$rememberTab=$tabList.find("a#_"+hash);if($rememberTab.length==0){$rememberTab=null}else{document.location.hash=""}}}if($rememberTab==null&&cookieTab.length>0&&options.rememberTabs>-1){$rememberTab=$tabList.find("a#"+cookieTab)}if($rememberTab&&$rememberTab.length>0){$rememberTab.click();if(options.rememberTabs==0)setTabCookie("");setTimeout(function(){$rememberTab.click()},200)}else{$tabList.children("li:first").children("a").click()}$(document).ready(function(){if(queueTabClick.length)$(document).trigger("wiretabclick",[queueTabClick[0],queueTabClick[1]]);queueTabClick=false})}function addTab(){totalTabs++;var $t=$(this);if(!$t.attr("id"))$t.attr("id","WireTab"+totalTabs);var title=$t.attr("title")||$t.attr("id");$t.removeAttr("title");var href=$t.attr("id");var $a=$("a#_"+href);if($a.length>0){$a.click(tabClick)}else{var $a=$("<a></a>").attr("href","#"+href).attr("id","_"+href).html(title).click(tabClick);$tabList.append($("<li></li>").append($a))}var tip=$t.attr("data-tooltip");if($t.hasClass("WireTabTip")||tip){if(!tip)tip=title;for(var key in cfg.tooltipAttr){var val=cfg.tooltipAttr[key];if(val.indexOf("{tip}")>-1)val=val.replace("{tip}",tip);if(key==="class"){$a.addClass(val)}else{$a.attr(key,val)}}}$t.hide()}function tabClick(){var aActiveClass=options.aActiveClass;var liActiveClass=options.liActiveClass;var $oldTab=$tabList.find("a."+aActiveClass);var $newTab=$(this);if(!$oldTab.length)$oldTab=$tabList.find("a:eq(0)");var oldTabHref=$oldTab.attr("href");var newTabHref=$newTab.attr("href");var $oldTabContent=oldTabHref&&oldTabHref.indexOf("#")===0?$(oldTabHref):null;var $newTabContent=newTabHref&&newTabHref.indexOf("#")===0?$(newTabHref):null;var newTabID=$newTab.attr("id");var oldTabID=$oldTab.attr("id");$oldTab.removeClass(aActiveClass);$newTab.addClass(aActiveClass);if(liActiveClass.length){$tabList.find("li."+liActiveClass).removeClass(liActiveClass);$newTab.closest("li").addClass(liActiveClass)}if($oldTabContent)$oldTabContent.hide();if($newTabContent){$newTabContent.show()}else if(newTabHref&&newTabHref.length){window.location.href=newTabHref;return true}if(oldTabID)$target.removeClass($oldTabContent.attr("id"));$target.addClass(newTabID);if(options.rememberTabs>-1){if(jQuery.inArray(newTabID,options.skipRememberTabIDs)!=-1)newTabID="";if(options.rememberTabs==1)setTabCookie(newTabID);lastTabID=newTabID}if(queueTabClick===false){$(document).trigger("wiretabclick",[$newTabContent,$oldTabContent])}else{queueTabClick=[$newTabContent,$oldTabContent]}return false}function setTabCookie(value){document.cookie=options.cookieName+"="+options.requestID+"-"+escape(value)}function getTabCookie(){var regex=new RegExp("(?:^|;)\\s?"+options.cookieName+"="+options.requestID+"-(.*?)(?:;|$)","i");var match=document.cookie.match(regex);match=match?match[1]:"";return match}init()})}})(jQuery);
|
@@ -18,7 +18,7 @@ class JqueryWireTabs extends ModuleJS implements ConfigurableModule {
|
||||
return array(
|
||||
'title' => __('jQuery Wire Tabs Plugin', __FILE__),
|
||||
'summary' => __('Provides a jQuery plugin for generating tabs in ProcessWire.', __FILE__),
|
||||
'version' => 108,
|
||||
'version' => 109,
|
||||
'permanent' => true,
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user