oops, this is needed for the status messages
authorIvan Kohler <ivan@freeside.biz>
Fri, 11 Nov 2016 23:19:19 +0000 (15:19 -0800)
committerIvan Kohler <ivan@freeside.biz>
Fri, 11 Nov 2016 23:19:19 +0000 (15:19 -0800)
httemplate/docs/credits.html
httemplate/docs/license.html
httemplate/elements/js.cookie.js [new file with mode: 0644]

index 596c627..8bae26d 100644 (file)
@@ -87,6 +87,7 @@ Gary Jones<BR>
 Fernando M. Kiernan<BR>
 Frederico Caldeira Knabben<BR>
 Greg Kuhnert<BR>
+Steven Levithan<BR>
 Randall Lucas<BR>
 Foteos Macrides<BR>
 Roger Mangraviti<BR>
@@ -95,6 +96,7 @@ Mack Nagashima<BR>
 David Peters<BR>
 Matt Peterson<BR>
 Luke Pfeifer<BR>
+Alan Phipps<BR>
 Ricardo Signes<BR>
 Steve Simitzis<BR>
 Stanislav Sinyagin<BR>
index 0f0a3c6..4d2f7a6 100644 (file)
@@ -138,6 +138,10 @@ of the MIT license.
 Contains the Google Maps Longitude and Latitude Picker, by Richard Dancsi,
 licensed under the terms of the MIT license.
 
+<P>
+Contains js-cookie by Klaus Hartl, Fagner Brack and contributors, licensed
+under the terms of the MIT license.
+
 <!-- artwork -->
 
 <P>
diff --git a/httemplate/elements/js.cookie.js b/httemplate/elements/js.cookie.js
new file mode 100644 (file)
index 0000000..12fa0ee
--- /dev/null
@@ -0,0 +1,156 @@
+/*!
+ * JavaScript Cookie v2.1.3
+ * https://github.com/js-cookie/js-cookie
+ *
+ * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
+ * Released under the MIT license
+ */
+;(function (factory) {
+       var registeredInModuleLoader = false;
+       if (typeof define === 'function' && define.amd) {
+               define(factory);
+               registeredInModuleLoader = true;
+       }
+       if (typeof exports === 'object') {
+               module.exports = factory();
+               registeredInModuleLoader = true;
+       }
+       if (!registeredInModuleLoader) {
+               var OldCookies = window.Cookies;
+               var api = window.Cookies = factory();
+               api.noConflict = function () {
+                       window.Cookies = OldCookies;
+                       return api;
+               };
+       }
+}(function () {
+       function extend () {
+               var i = 0;
+               var result = {};
+               for (; i < arguments.length; i++) {
+                       var attributes = arguments[ i ];
+                       for (var key in attributes) {
+                               result[key] = attributes[key];
+                       }
+               }
+               return result;
+       }
+
+       function init (converter) {
+               function api (key, value, attributes) {
+                       var result;
+                       if (typeof document === 'undefined') {
+                               return;
+                       }
+
+                       // Write
+
+                       if (arguments.length > 1) {
+                               attributes = extend({
+                                       path: '/'
+                               }, api.defaults, attributes);
+
+                               if (typeof attributes.expires === 'number') {
+                                       var expires = new Date();
+                                       expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
+                                       attributes.expires = expires;
+                               }
+
+                               try {
+                                       result = JSON.stringify(value);
+                                       if (/^[\{\[]/.test(result)) {
+                                               value = result;
+                                       }
+                               } catch (e) {}
+
+                               if (!converter.write) {
+                                       value = encodeURIComponent(String(value))
+                                               .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
+                               } else {
+                                       value = converter.write(value, key);
+                               }
+
+                               key = encodeURIComponent(String(key));
+                               key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
+                               key = key.replace(/[\(\)]/g, escape);
+
+                               return (document.cookie = [
+                                       key, '=', value,
+                                       attributes.expires ? '; expires=' + attributes.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+                                       attributes.path ? '; path=' + attributes.path : '',
+                                       attributes.domain ? '; domain=' + attributes.domain : '',
+                                       attributes.secure ? '; secure' : ''
+                               ].join(''));
+                       }
+
+                       // Read
+
+                       if (!key) {
+                               result = {};
+                       }
+
+                       // To prevent the for loop in the first place assign an empty array
+                       // in case there are no cookies at all. Also prevents odd result when
+                       // calling "get()"
+                       var cookies = document.cookie ? document.cookie.split('; ') : [];
+                       var rdecode = /(%[0-9A-Z]{2})+/g;
+                       var i = 0;
+
+                       for (; i < cookies.length; i++) {
+                               var parts = cookies[i].split('=');
+                               var cookie = parts.slice(1).join('=');
+
+                               if (cookie.charAt(0) === '"') {
+                                       cookie = cookie.slice(1, -1);
+                               }
+
+                               try {
+                                       var name = parts[0].replace(rdecode, decodeURIComponent);
+                                       cookie = converter.read ?
+                                               converter.read(cookie, name) : converter(cookie, name) ||
+                                               cookie.replace(rdecode, decodeURIComponent);
+
+                                       if (this.json) {
+                                               try {
+                                                       cookie = JSON.parse(cookie);
+                                               } catch (e) {}
+                                       }
+
+                                       if (key === name) {
+                                               result = cookie;
+                                               break;
+                                       }
+
+                                       if (!key) {
+                                               result[name] = cookie;
+                                       }
+                               } catch (e) {}
+                       }
+
+                       return result;
+               }
+
+               api.set = api;
+               api.get = function (key) {
+                       return api.call(api, key);
+               };
+               api.getJSON = function () {
+                       return api.apply({
+                               json: true
+                       }, [].slice.call(arguments));
+               };
+               api.defaults = {};
+
+               api.remove = function (key, attributes) {
+                       api(key, '', extend(attributes, {
+                               expires: -1
+                       }));
+               };
+
+               api.withConverter = init;
+
+               return api;
+       }
+
+       return init(function () {});
+}));