-
diff --git a/assets/js/main.js b/assets/js/main.js
index 16b54fec..3a3e0aeb 100644
--- a/assets/js/main.js
+++ b/assets/js/main.js
@@ -5338,7 +5338,7 @@
selTarget: "",
widthElement: false,
showOnUp: false,
- targetOffset: true
+ targetOffset: false
},
computed: {
selTarget: function(ref, $el) {
diff --git a/assets/navgoco/jquery.cookie.js b/assets/navgoco/jquery.cookie.js
new file mode 100755
index 00000000..c4f99af0
--- /dev/null
+++ b/assets/navgoco/jquery.cookie.js
@@ -0,0 +1,95 @@
+/*!
+ * jQuery Cookie Plugin v1.3.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2013 Klaus Hartl
+ * Released under the MIT license
+ */
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as anonymous module.
+ define(['jquery'], factory);
+ } else {
+ // Browser globals.
+ factory(jQuery);
+ }
+}(function ($) {
+
+ var pluses = /\+/g;
+
+ function raw(s) {
+ return s;
+ }
+
+ function decoded(s) {
+ return decodeURIComponent(s.replace(pluses, ' '));
+ }
+
+ function converted(s) {
+ if (s.indexOf('"') === 0) {
+ // This is a quoted cookie as according to RFC2068, unescape
+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+ }
+ try {
+ return config.json ? JSON.parse(s) : s;
+ } catch(er) {}
+ }
+
+ var config = $.cookie = function (key, value, options) {
+
+ // write
+ if (value !== undefined) {
+ options = $.extend({}, config.defaults, options);
+
+ if (typeof options.expires === 'number') {
+ var days = options.expires, t = options.expires = new Date();
+ t.setDate(t.getDate() + days);
+ }
+
+ value = config.json ? JSON.stringify(value) : String(value);
+
+ return (document.cookie = [
+ config.raw ? key : encodeURIComponent(key),
+ '=',
+ config.raw ? value : encodeURIComponent(value),
+ options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+ options.path ? '; path=' + options.path : '',
+ options.domain ? '; domain=' + options.domain : '',
+ options.secure ? '; secure' : ''
+ ].join(''));
+ }
+
+ // read
+ var decode = config.raw ? raw : decoded;
+ var cookies = document.cookie.split('; ');
+ var result = key ? undefined : {};
+ for (var i = 0, l = cookies.length; i < l; i++) {
+ var parts = cookies[i].split('=');
+ var name = decode(parts.shift());
+ var cookie = decode(parts.join('='));
+
+ if (key && key === name) {
+ result = converted(cookie);
+ break;
+ }
+
+ if (!key) {
+ result[name] = converted(cookie);
+ }
+ }
+
+ return result;
+ };
+
+ config.defaults = {};
+
+ $.removeCookie = function (key, options) {
+ if ($.cookie(key) !== undefined) {
+ // Must not alter options, thus extending a fresh object...
+ $.cookie(key, '', $.extend({}, options, { expires: -1 }));
+ return true;
+ }
+ return false;
+ };
+
+}));
diff --git a/assets/navgoco/jquery.cookie.min.js b/assets/navgoco/jquery.cookie.min.js
new file mode 100755
index 00000000..cbe7d909
--- /dev/null
+++ b/assets/navgoco/jquery.cookie.min.js
@@ -0,0 +1,8 @@
+/*!
+ * jQuery Cookie Plugin v1.3.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2013 Klaus Hartl
+ * Released under the MIT license
+ */
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){function b(a){return a}function c(a){return decodeURIComponent(a.replace(e," "))}function d(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return f.json?JSON.parse(a):a}catch(b){}}var e=/\+/g,f=a.cookie=function(e,g,h){if(void 0!==g){if(h=a.extend({},f.defaults,h),"number"==typeof h.expires){var i=h.expires,j=h.expires=new Date;j.setDate(j.getDate()+i)}return g=f.json?JSON.stringify(g):String(g),document.cookie=[f.raw?e:encodeURIComponent(e),"=",f.raw?g:encodeURIComponent(g),h.expires?"; expires="+h.expires.toUTCString():"",h.path?"; path="+h.path:"",h.domain?"; domain="+h.domain:"",h.secure?"; secure":""].join("")}for(var k=f.raw?b:c,l=document.cookie.split("; "),m=e?void 0:{},n=0,o=l.length;o>n;n++){var p=l[n].split("="),q=k(p.shift()),r=k(p.join("="));if(e&&e===q){m=d(r);break}e||(m[q]=d(r))}return m};f.defaults={},a.removeCookie=function(b,c){return void 0!==a.cookie(b)?(a.cookie(b,"",a.extend({},c,{expires:-1})),!0):!1}});
\ No newline at end of file
diff --git a/assets/navgoco/jquery.navgoco.css b/assets/navgoco/jquery.navgoco.css
new file mode 100755
index 00000000..48117130
--- /dev/null
+++ b/assets/navgoco/jquery.navgoco.css
@@ -0,0 +1,71 @@
+.nav, .nav ul, .nav li {
+ list-style: none;
+}
+
+.nav ul {
+ padding: 0;
+ margin: 0 0 0 18px;
+}
+
+.nav {
+ padding: 4px;
+ margin: 0px;
+}
+
+.nav > li {
+ margin: 4px 0;
+}
+
+.nav > li li {
+ margin: 2px 0;
+}
+
+.nav a {
+ color: #333;
+ display: block;
+ outline: none;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ text-decoration: none;
+}
+
+.nav li > a > span {
+ float: right;
+ font-size: 19px;
+ font-weight: bolder;
+}
+
+.nav li > a:hover > span {
+ color: #fff;
+}
+
+.nav li > a > span:after {
+ content: '\25be';
+}
+.nav li.open > a > span:after {
+ content: '\25b4';
+}
+
+.nav a:hover, .nav li.active > a {
+ background-color: #726e6e;
+ color: #f5f5f5;
+ font-weight: 500;
+}
+
+.nav > li.active > a {
+ background-color: #4D90FE;
+}
+
+.nav li a {
+ font-size: 14px;
+ line-height: 20px;
+ padding: 5px 10px;
+}
+
+.nav > li > a {
+ font-size: 16px;
+ line-height: 1.4;
+ padding: 5px 10px;
+ font-weight: 800;
+}
\ No newline at end of file
diff --git a/assets/navgoco/jquery.navgoco.js b/assets/navgoco/jquery.navgoco.js
new file mode 100755
index 00000000..11f79d1d
--- /dev/null
+++ b/assets/navgoco/jquery.navgoco.js
@@ -0,0 +1,314 @@
+/*
+ * 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($) {
+
+ "use strict";
+
+ /**
+ * Plugin Constructor. Every menu must have a unique id which will either
+ * be the actual id attribute or its index in the page.
+ *
+ * @param {Element} el
+ * @param {Object} options
+ * @param {Integer} idx
+ * @returns {Object} Plugin Instance
+ */
+ 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 methods
+ */
+ Plugin.prototype = {
+ /**
+ * Load cookie, assign a unique data-index attribute to
+ * all sub-menus and show|hide them according to cookie
+ * or based on the parent open class. Find all parent li > a
+ * links add the carent if it's on and attach the event click
+ * to them.
+ */
+ 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);
+ },
+ /**
+ * Add the main event trigger to toggle menu items to the given sources
+ * @param {Element} sources
+ * @param {Boolean} isLink
+ */
+ _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);
+ });
+ },
+ /**
+ * Accepts a JQuery Element and a boolean flag. If flag is false it removes the `open` css
+ * class from the parent li and slides up the sub-menu. If flag is open it adds the `open`
+ * css class to the parent li and slides down the menu. If accordion mode is on all
+ * sub-menus except the direct parent tree will close. Internally an object with the menus
+ * states is maintained for later save duty.
+ *
+ * @param {Element} sub
+ * @param {Boolean} open
+ */
+ _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);
+ },
+ /**
+ * Returns all parents of a sub-menu. When obj is true It returns an object with indexes for
+ * keys and the elements as values, if obj is false the object is filled with the value `1`.
+ *
+ * @since v0.1.2
+ * @param {Element} sub
+ * @param {Boolean} obj
+ * @returns {Object}
+ */
+ _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;
+ },
+ /**
+ * If `save` option is on the internal object that keeps track of the sub-menus states is
+ * 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) {
+ if (this.state[key] === 1) {
+ save[key] = 1;
+ }
+ }
+ cookie[this.uuid] = this.state = save;
+ $.cookie(this.options.cookie.name, JSON.stringify(cookie), this.options.cookie);
+ }
+ },
+ /**
+ * If `save` option is on it reads the cookie data. The cookie contains data for all
+ * navgoco menus so the read happens only once and stored in the global `cookie` var.
+ */
+ _load: function() {
+ if (this.options.save) {
+ if (cookie === null) {
+ var data = $.cookie(this.options.cookie.name);
+ cookie = (data) ? JSON.parse(data) : {};
+ }
+ this.state = cookie.hasOwnProperty(this.uuid) ? cookie[this.uuid] : {};
+ }
+ },
+ /**
+ * Public method toggle to manually show|hide sub-menus. If no indexes are provided all
+ * items will be toggled. You can pass sub-menus indexes as regular params. eg:
+ * navgoco('toggle', true, 1, 2, 3, 4, 5);
+ *
+ * Since v0.1.2 it will also open parents when providing sub-menu indexes.
+ *
+ * @param {Boolean} open
+ */
+ 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 < length; i++) {
+ idx = args[i];
+ var sub = self.$el.find('ul[data-index="' + idx + '"]').first();
+ if (sub) {
+ list[idx] = sub;
+ if (open) {
+ var parents = self._parents(sub, true);
+ for (var pIdx in parents) {
+ if (!list.hasOwnProperty(pIdx)) {
+ list[pIdx] = parents[pIdx];
+ }
+ }
+ }
+ }
+ }
+
+ for (idx in list) {
+ self._toggle(list[idx], open);
+ }
+ }
+ self._save();
+ },
+ /**
+ * Removes instance from JQuery data cache and unbinds events.
+ */
+ destroy: function() {
+ $.removeData(this.$el);
+ this.$el.find("li:has(ul) > a").unbind('click');
+ this.$el.find("li:has(ul) > a > span").unbind('click');
+ }
+ };
+
+ /**
+ * A JQuery plugin wrapper for navgoco. It prevents from multiple instances and also handles
+ * public methods calls. If we attempt to call a public method on an element that doesn't have
+ * a navgoco instance, one will be created for it with the default options.
+ *
+ * @param {Object|String} options
+ */
+ $.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);
+ }
+ });
+ };
+ /**
+ * Global var holding all navgoco menus open states
+ *
+ * @type {Object}
+ */
+ var cookie = null;
+
+ /**
+ * Default navgoco options
+ *
+ * @type {Object}
+ */
+ $.fn.navgoco.defaults = {
+ 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
diff --git a/assets/navgoco/jquery.navgoco.min.js b/assets/navgoco/jquery.navgoco.min.js
new file mode 100755
index 00000000..4ba44753
--- /dev/null
+++ b/assets/navgoco/jquery.navgoco.min.js
@@ -0,0 +1,8 @@
+/*
+ * 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