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/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..7496301 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,17 @@
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;
+ $.cookie(this.options.cookie.name, JSON.stringify(cookie), this.options.cookie);
+ }
+
}
},
/**
@@ -187,11 +199,20 @@
*/
_load: function() {
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(this.options.storageType === 'cookie') {
+ if (cookie === null) {
+ var data = $.cookie(this.options.cookie.name);
+ cookie = (data) ? JSON.parse(data) : {};
+ }
+ this.state = cookie.hasOwnProperty(this.uuid) ? cookie[this.uuid] : {};
}
- this.state = cookie.hasOwnProperty(this.uuid) ? cookie[this.uuid] : {};
+
+
}
},
/**
@@ -263,7 +284,7 @@
args = Array.prototype.slice.call(arguments, 1);
} else {
options = $.extend({}, $.fn.navgoco.defaults, options || {});
- if (!$.cookie) {
+ if (!$.cookie && options.storageType === 'cookie') {
options.save = false;
}
}
@@ -285,7 +306,8 @@
*
* @type {Object}
*/
- var cookie = null;
+ var cookie = null,
+ lclStorage = null;
/**
* Default navgoco options
@@ -293,6 +315,7 @@
* @type {Object}
*/
$.fn.navgoco.defaults = {
+ storageType: 'cookie',
caretHtml: '',
accordion: false,
openClass: 'open',
diff --git a/src/jquery.navgoco.min.js b/src/jquery.navgoco.min.js
index 4ba4475..4109d0d 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;$.cookie(this.options.cookie.name,JSON.stringify(cookie),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(this.options.storageType==="cookie"){if(cookie===null){var data=$.cookie(this.options.cookie.name);cookie=data?JSON.parse(data):{}}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.storageType==="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