1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-13 18:24:57 +02:00

Update JqueryWireTabs module to use jquery.cookie.js rather than settings it's own, hopefully to fix issue processwire/processwire-issues#1188

This commit is contained in:
Ryan Cramer
2020-07-24 14:15:59 -04:00
parent 4c8b474c29
commit 4b1eefa9d0
4 changed files with 19 additions and 12 deletions

View File

@@ -55,6 +55,8 @@ function _checkForHttpHostError(Config $config) {
$valid = true;
} else if(isset($_SERVER['SERVER_NAME']) && $httpHost === strtolower($_SERVER['SERVER_NAME'])) {
$valid = true;
} else if(in_array($httpHost, $config->httpHosts)) {
$valid = true;
}
if(!$valid) $config->error(
@@ -204,7 +206,8 @@ if($ajax) {
ob_end_clean();
}
$config->js(array('httpHost', 'httpHosts'), true);
// config properties that should be mirrored to ProcessWire.config.property in JS
$config->js(array('httpHost', 'httpHosts', 'https'), true);
if($controller && $controller->isAjax()) {
if(empty($content) && count($notices)) $content = $controller->jsonMessage($notices->last()->text);

View File

@@ -123,7 +123,7 @@
if($a.length > 0) {
$a.click(tabClick);
} else {
var $a = $("<a></a>")
$a = $("<a></a>")
.attr('href', '#' + href)
.attr('id', '_' + href) // ID equal to tab content ID, but preceded with underscore
.html(title)
@@ -208,14 +208,13 @@
}
function setTabCookie(value) {
document.cookie = options.cookieName + '=' + options.requestID + '-' + escape(value);
jQuery.cookie(options.cookieName, options.requestID + '-' + 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;
var value = jQuery.cookie(options.cookieName);
if(!value || value.indexOf(options.requestID + '-') !== 0) return '';
return value.substring(options.requestID.length + 1);
}
init();

View File

@@ -1 +1 @@
(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);
(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{$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){jQuery.cookie(options.cookieName,options.requestID+"-"+value)}function getTabCookie(){var value=jQuery.cookie(options.cookieName);if(!value||value.indexOf(options.requestID+"-")!==0)return"";return value.substring(options.requestID.length+1)}init()})}})(jQuery);

View File

@@ -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' => 109,
'version' => 110,
'permanent' => true,
);
}
@@ -45,9 +45,10 @@ class JqueryWireTabs extends ModuleJS implements ConfigurableModule {
'title' => '{tip}',
),
);
$config = $this->wire()->config;
$className = 'JqueryWireTabs';
$settings = $this->wire('config')->get($className);
$settings = $config->get($className);
if(is_array($settings)) {
$settings = array_merge($defaults, $settings);
@@ -56,8 +57,12 @@ class JqueryWireTabs extends ModuleJS implements ConfigurableModule {
}
$this->loadStyles = $settings['loadStyles'];
/** @var JqueryCore $jQueryCore */
$jQueryCore = $this->wire()->modules->get('JqueryCore');
$jQueryCore->use('cookie');
$this->wire('config')->js($className, $settings);
$config->js($className, $settings);
parent::init();
}