From 420934f901a9c013fb01283cdfe2fccdd6e31121 Mon Sep 17 00:00:00 2001 From: moabi Date: Mon, 2 May 2016 13:46:02 +0200 Subject: [PATCH 1/5] add session storage option --- .idea/copyright/profiles_settings.xml | 3 + .idea/encodings.xml | 6 + .idea/misc.xml | 13 ++ .idea/modules.xml | 8 + .idea/navgoco.iml | 8 + .idea/vcs.xml | 6 + .idea/workspace.xml | 296 ++++++++++++++++++++++++++ README.md | 8 + demo/index.html | 6 +- src/jquery.navgoco.js | 39 +++- 10 files changed, 385 insertions(+), 8 deletions(-) create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/navgoco.iml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..72abef0 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..0a00a3a --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/navgoco.iml b/.idea/navgoco.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/navgoco.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..5b3ee17 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1462179239797 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file://$PROJECT_DIR$/src/jquery.navgoco.js + 210 + + + + file://$PROJECT_DIR$/src/jquery.navgoco.js + 185 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 33268a6..bcc7d94 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,14 @@ Preserve expanded sub-menus between session. If jquery.cookie is not included it ---------- +#### storageType: + * **Type:** `string` + * **Default:** `cookie` + +Choose the storage type you want between a cookie and an html session storage : 'cookie' or 'local' + +---------- + #### cookie: * **Type:** `object` * `name`: Cookie name diff --git a/demo/index.html b/demo/index.html index 56ca70f..769ced3 100644 --- a/demo/index.html +++ b/demo/index.html @@ -19,6 +19,7 @@ $(document).ready(function() { // Initialize navgoco with default options $("#demo1").navgoco({ + storageType: 'local', caretHtml: '', accordion: false, openClass: 'open', @@ -49,7 +50,10 @@ diff --git a/src/jquery.navgoco.js b/src/jquery.navgoco.js index 11f79d1..287a653 100644 --- a/src/jquery.navgoco.js +++ b/src/jquery.navgoco.js @@ -4,6 +4,8 @@ * * Copyright (c) 2014 Chris T (@tefra) * BSD - https://github.com/tefra/navgoco/blob/master/LICENSE-BSD + * + * THIS IS A FORK */ (function($) { @@ -170,6 +172,7 @@ * saved with a cookie. For size reasons only the open sub-menus indexes are stored. * */ _save: function() { + if (this.options.save) { var save = {}; for (var key in this.state) { @@ -177,8 +180,19 @@ save[key] = 1; } } - cookie[this.uuid] = this.state = save; - $.cookie(this.options.cookie.name, JSON.stringify(cookie), this.options.cookie); + //save data with a cookie or localStorage + if(this.options.storageType === 'local' && typeof(Storage) !== "undefined"){ + lclStorage = (lclStorage === null) ? {}: lclStorage; + lclStorage[this.uuid] = this.state = save; + var $strLocal = JSON.stringify(lclStorage); + sessionStorage.setItem(this.options.cookie.name, $strLocal); + } else { + cookie[this.uuid] = this.state = save; + var $str = JSON.stringify(cookie); + $.cookie(this.options.cookie.name, $str, this.options.cookie); + } + + } }, /** @@ -186,12 +200,21 @@ * navgoco menus so the read happens only once and stored in the global `cookie` var. */ _load: function() { + //console.log(cookie[this.uuid]); if (this.options.save) { - if (cookie === null) { - var data = $.cookie(this.options.cookie.name); - cookie = (data) ? JSON.parse(data) : {}; + + if(this.options.storageType === 'local' && typeof(Storage) !== "undefined"){ + var dataStrg = sessionStorage.getItem(this.options.cookie.name); + var lclStorage = (dataStrg && dataStrg !== 'undefined') ? JSON.parse(dataStrg) : {}; + this.state = lclStorage.hasOwnProperty(this.uuid) ? lclStorage[this.uuid] : {}; + } else if (cookie === null && this.options.storageType === 'cookie') { + var data = $.cookie(this.options.cookie.name), + cookie = (data) ? JSON.parse(data) : {}; + this.state = cookie.hasOwnProperty(this.uuid) ? cookie[this.uuid] : {}; + } else { + this.state = cookie.hasOwnProperty(this.uuid) ? cookie[this.uuid] : {}; } - this.state = cookie.hasOwnProperty(this.uuid) ? cookie[this.uuid] : {}; + } }, /** @@ -285,7 +308,8 @@ * * @type {Object} */ - var cookie = null; + var cookie = null, + lclStorage = null; /** * Default navgoco options @@ -293,6 +317,7 @@ * @type {Object} */ $.fn.navgoco.defaults = { + storageType: 'cookie', caretHtml: '', accordion: false, openClass: 'open', From 81f55ed95958714c98b1010864d20fdd3b576344 Mon Sep 17 00:00:00 2001 From: moabi Date: Mon, 2 May 2016 13:48:23 +0200 Subject: [PATCH 2/5] add session storage option --- .gitignore | 2 -- .idea/workspace.xml | 37 ++++++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 15 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b0ce1cc..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules/ -/nbproject/ diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 5b3ee17..54f9001 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,16 +2,8 @@ - - - - - - - - - - + + @@ -55,7 +47,7 @@ - + @@ -68,6 +60,16 @@ + + + + + + + + + + @@ -89,6 +91,7 @@ @@ -199,12 +202,12 @@ \ No newline at end of file From 16af7d1b34a69771fcbe75cac622781ba5c9e9ba Mon Sep 17 00:00:00 2001 From: moabi Date: Mon, 2 May 2016 14:02:28 +0200 Subject: [PATCH 3/5] add min --- .idea/copyright/profiles_settings.xml | 3 - .idea/encodings.xml | 6 - .idea/misc.xml | 13 -- .idea/modules.xml | 8 - .idea/navgoco.iml | 8 - .idea/vcs.xml | 6 - .idea/workspace.xml | 307 -------------------------- src/jquery.navgoco.js | 3 +- src/jquery.navgoco.min.js | 9 +- 9 files changed, 2 insertions(+), 361 deletions(-) delete mode 100644 .idea/copyright/profiles_settings.xml delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/navgoco.iml delete mode 100644 .idea/vcs.xml delete mode 100644 .idea/workspace.xml diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3..0000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 97626ba..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 72abef0..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 0a00a3a..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/navgoco.iml b/.idea/navgoco.iml deleted file mode 100644 index c956989..0000000 --- a/.idea/navgoco.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 54f9001..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1462179239797 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - file://$PROJECT_DIR$/src/jquery.navgoco.js - 210 - - - - file://$PROJECT_DIR$/src/jquery.navgoco.js - 185 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/jquery.navgoco.js b/src/jquery.navgoco.js index 287a653..92fb7bf 100644 --- a/src/jquery.navgoco.js +++ b/src/jquery.navgoco.js @@ -191,8 +191,7 @@ var $str = JSON.stringify(cookie); $.cookie(this.options.cookie.name, $str, this.options.cookie); } - - + } }, /** diff --git a/src/jquery.navgoco.min.js b/src/jquery.navgoco.min.js index 4ba4475..dc466c4 100644 --- a/src/jquery.navgoco.min.js +++ b/src/jquery.navgoco.min.js @@ -1,8 +1 @@ -/* - * jQuery Navgoco Menus Plugin v0.2.1 (2014-04-11) - * https://github.com/tefra/navgoco - * - * Copyright (c) 2014 Chris T (@tefra) - * BSD - https://github.com/tefra/navgoco/blob/master/LICENSE-BSD - */ -!function(a){"use strict";var b=function(b,c,d){return this.el=b,this.$el=a(b),this.options=c,this.uuid=this.$el.attr("id")?this.$el.attr("id"):d,this.state={},this.init(),this};b.prototype={init:function(){var b=this;b._load(),b.$el.find("ul").each(function(c){var d=a(this);d.attr("data-index",c),b.options.save&&b.state.hasOwnProperty(c)?(d.parent().addClass(b.options.openClass),d.show()):d.parent().hasClass(b.options.openClass)?(d.show(),b.state[c]=1):d.hide()});var c=a("").prepend(b.options.caretHtml),d=b.$el.find("li > a");b._trigger(c,!1),b._trigger(d,!0),b.$el.find("li:has(ul) > a").prepend(c)},_trigger:function(b,c){var d=this;b.on("click",function(b){b.stopPropagation();var e=c?a(this).next():a(this).parent().next(),f=!1;if(c){var g=a(this).attr("href");f=void 0===g||""===g||"#"===g}if(e=e.length>0?e:!1,d.options.onClickBefore.call(this,b,e),!c||e&&f)b.preventDefault(),d._toggle(e,e.is(":hidden")),d._save();else if(d.options.accordion){var h=d.state=d._parents(a(this));d.$el.find("ul").filter(":visible").each(function(){var b=a(this),c=b.attr("data-index");h.hasOwnProperty(c)||d._toggle(b,!1)}),d._save()}d.options.onClickAfter.call(this,b,e)})},_toggle:function(b,c){var d=this,e=b.attr("data-index"),f=b.parent();if(d.options.onToggleBefore.call(this,b,c),c){if(f.addClass(d.options.openClass),b.slideDown(d.options.slide),d.state[e]=1,d.options.accordion){var g=d.state=d._parents(b);g[e]=d.state[e]=1,d.$el.find("ul").filter(":visible").each(function(){var b=a(this),c=b.attr("data-index");g.hasOwnProperty(c)||d._toggle(b,!1)})}}else f.removeClass(d.options.openClass),b.slideUp(d.options.slide),d.state[e]=0;d.options.onToggleAfter.call(this,b,c)},_parents:function(b,c){var d={},e=b.parent(),f=e.parents("ul");return f.each(function(){var b=a(this),e=b.attr("data-index");return e?void(d[e]=c?b:1):!1}),d},_save:function(){if(this.options.save){var b={};for(var d in this.state)1===this.state[d]&&(b[d]=1);c[this.uuid]=this.state=b,a.cookie(this.options.cookie.name,JSON.stringify(c),this.options.cookie)}},_load:function(){if(this.options.save){if(null===c){var b=a.cookie(this.options.cookie.name);c=b?JSON.parse(b):{}}this.state=c.hasOwnProperty(this.uuid)?c[this.uuid]:{}}},toggle:function(b){var c=this,d=arguments.length;if(1>=d)c.$el.find("ul").each(function(){var d=a(this);c._toggle(d,b)});else{var e,f={},g=Array.prototype.slice.call(arguments,1);d--;for(var h=0;d>h;h++){e=g[h];var i=c.$el.find('ul[data-index="'+e+'"]').first();if(i&&(f[e]=i,b)){var j=c._parents(i,!0);for(var k in j)f.hasOwnProperty(k)||(f[k]=j[k])}}for(e in f)c._toggle(f[e],b)}c._save()},destroy:function(){a.removeData(this.$el),this.$el.find("li:has(ul) > a").unbind("click"),this.$el.find("li:has(ul) > a > span").unbind("click")}},a.fn.navgoco=function(c){if("string"==typeof c&&"_"!==c.charAt(0)&&"init"!==c)var d=!0,e=Array.prototype.slice.call(arguments,1);else c=a.extend({},a.fn.navgoco.defaults,c||{}),a.cookie||(c.save=!1);return this.each(function(f){var g=a(this),h=g.data("navgoco");h||(h=new b(this,d?a.fn.navgoco.defaults:c,f),g.data("navgoco",h)),d&&h[c].apply(h,e)})};var c=null;a.fn.navgoco.defaults={caretHtml:"",accordion:!1,openClass:"open",save:!0,cookie:{name:"navgoco",expires:!1,path:"/"},slide:{duration:400,easing:"swing"},onClickBefore:a.noop,onClickAfter:a.noop,onToggleBefore:a.noop,onToggleAfter:a.noop}}(jQuery); \ No newline at end of file +(function($){"use strict";var Plugin=function(el,options,idx){this.el=el;this.$el=$(el);this.options=options;this.uuid=this.$el.attr("id")?this.$el.attr("id"):idx;this.state={};this.init();return this};Plugin.prototype={init:function(){var self=this;self._load();self.$el.find("ul").each(function(idx){var sub=$(this);sub.attr("data-index",idx);if(self.options.save&&self.state.hasOwnProperty(idx)){sub.parent().addClass(self.options.openClass);sub.show()}else if(sub.parent().hasClass(self.options.openClass)){sub.show();self.state[idx]=1}else{sub.hide()}});var caret=$("").prepend(self.options.caretHtml);var links=self.$el.find("li > a");self._trigger(caret,false);self._trigger(links,true);self.$el.find("li:has(ul) > a").prepend(caret)},_trigger:function(sources,isLink){var self=this;sources.on("click",function(event){event.stopPropagation();var sub=isLink?$(this).next():$(this).parent().next();var isAnchor=false;if(isLink){var href=$(this).attr("href");isAnchor=href===undefined||href===""||href==="#"}sub=sub.length>0?sub:false;self.options.onClickBefore.call(this,event,sub);if(!isLink||sub&&isAnchor){event.preventDefault();self._toggle(sub,sub.is(":hidden"));self._save()}else if(self.options.accordion){var allowed=self.state=self._parents($(this));self.$el.find("ul").filter(":visible").each(function(){var sub=$(this),idx=sub.attr("data-index");if(!allowed.hasOwnProperty(idx)){self._toggle(sub,false)}});self._save()}self.options.onClickAfter.call(this,event,sub)})},_toggle:function(sub,open){var self=this,idx=sub.attr("data-index"),parent=sub.parent();self.options.onToggleBefore.call(this,sub,open);if(open){parent.addClass(self.options.openClass);sub.slideDown(self.options.slide);self.state[idx]=1;if(self.options.accordion){var allowed=self.state=self._parents(sub);allowed[idx]=self.state[idx]=1;self.$el.find("ul").filter(":visible").each(function(){var sub=$(this),idx=sub.attr("data-index");if(!allowed.hasOwnProperty(idx)){self._toggle(sub,false)}})}}else{parent.removeClass(self.options.openClass);sub.slideUp(self.options.slide);self.state[idx]=0}self.options.onToggleAfter.call(this,sub,open)},_parents:function(sub,obj){var result={},parent=sub.parent(),parents=parent.parents("ul");parents.each(function(){var par=$(this),idx=par.attr("data-index");if(!idx){return false}result[idx]=obj?par:1});return result},_save:function(){if(this.options.save){var save={};for(var key in this.state){if(this.state[key]===1){save[key]=1}}if(this.options.storageType==="local"&&typeof Storage!=="undefined"){lclStorage=lclStorage===null?{}:lclStorage;lclStorage[this.uuid]=this.state=save;var $strLocal=JSON.stringify(lclStorage);sessionStorage.setItem(this.options.cookie.name,$strLocal)}else{cookie[this.uuid]=this.state=save;var $str=JSON.stringify(cookie);$.cookie(this.options.cookie.name,$str,this.options.cookie)}}},_load:function(){if(this.options.save){if(this.options.storageType==="local"&&typeof Storage!=="undefined"){var dataStrg=sessionStorage.getItem(this.options.cookie.name);var lclStorage=dataStrg&&dataStrg!=="undefined"?JSON.parse(dataStrg):{};this.state=lclStorage.hasOwnProperty(this.uuid)?lclStorage[this.uuid]:{}}else if(cookie===null&&this.options.storageType==="cookie"){var data=$.cookie(this.options.cookie.name),cookie=data?JSON.parse(data):{};this.state=cookie.hasOwnProperty(this.uuid)?cookie[this.uuid]:{}}else{this.state=cookie.hasOwnProperty(this.uuid)?cookie[this.uuid]:{}}}},toggle:function(open){var self=this,length=arguments.length;if(length<=1){self.$el.find("ul").each(function(){var sub=$(this);self._toggle(sub,open)})}else{var idx,list={},args=Array.prototype.slice.call(arguments,1);length--;for(var i=0;i a").unbind("click");this.$el.find("li:has(ul) > a > span").unbind("click")}};$.fn.navgoco=function(options){if(typeof options==="string"&&options.charAt(0)!=="_"&&options!=="init"){var callback=true,args=Array.prototype.slice.call(arguments,1)}else{options=$.extend({},$.fn.navgoco.defaults,options||{});if(!$.cookie){options.save=false}}return this.each(function(idx){var $this=$(this),obj=$this.data("navgoco");if(!obj){obj=new Plugin(this,callback?$.fn.navgoco.defaults:options,idx);$this.data("navgoco",obj)}if(callback){obj[options].apply(obj,args)}})};var cookie=null,lclStorage=null;$.fn.navgoco.defaults={storageType:"cookie",caretHtml:"",accordion:false,openClass:"open",save:true,cookie:{name:"navgoco",expires:false,path:"/"},slide:{duration:400,easing:"swing"},onClickBefore:$.noop,onClickAfter:$.noop,onToggleBefore:$.noop,onToggleAfter:$.noop}})(jQuery); \ No newline at end of file From 1005a3863fe725452d53d1508cf22d02abe397e4 Mon Sep 17 00:00:00 2001 From: moabi Date: Mon, 2 May 2016 15:00:53 +0200 Subject: [PATCH 4/5] fix cookie storage --- demo/index.html | 4 ++-- src/jquery.navgoco.js | 15 +++++++-------- src/jquery.navgoco.min.js | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/demo/index.html b/demo/index.html index 769ced3..bf7a30e 100644 --- a/demo/index.html +++ b/demo/index.html @@ -19,7 +19,7 @@ $(document).ready(function() { // Initialize navgoco with default options $("#demo1").navgoco({ - storageType: 'local', + storageType: 'cookie', caretHtml: '', accordion: false, openClass: 'open', @@ -51,7 +51,7 @@