JSAN based cookie library, simpler interface, just wanna give it a try for now..
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 21 Nov 2005 19:36:15 +0000 (19:36 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 21 Nov 2005 19:36:15 +0000 (19:36 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@2102 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/common/js/Cookies.js [new file with mode: 0644]

diff --git a/Open-ILS/web/opac/common/js/Cookies.js b/Open-ILS/web/opac/common/js/Cookies.js
new file mode 100644 (file)
index 0000000..1724009
--- /dev/null
@@ -0,0 +1,178 @@
+// HTTP.Cookies - Burak Gürsoy <burak[at]cpan[dot]org>
+if (!HTTP) var HTTP = {}; // create base class if undefined
+
+HTTP.Cookies = function () { // HTTP.Cookies constructor
+   this.JAR = ''; // data cache
+}
+
+HTTP.Cookies.VERSION = '1.01';
+
+HTTP.Cookies.Date = function () { // expire time calculation class
+   this.format = {
+   's' : 1,
+   'm' : 60,
+   'h' : 60 * 60,
+   'd' : 60 * 60 * 24,
+   'M' : 60 * 60 * 24 * 30,
+   'y' : 60 * 60 * 24 * 365
+   };
+}
+
+HTTP.Cookies.Date.prototype.parse = function (x) {
+   if(!x || x == 'now') return 0;
+   var date = x.match(/^(.+?)(\w)$/i);
+   var of = 0;
+   return (this.is_num(date[1]) && (of = this.is_date(date[1],date[2]))) ? of : 0;
+}
+
+HTTP.Cookies.Date.prototype.is_date = function (num, x) {
+   if (!x || x.length != 1) return 0;
+   var ar = [];
+   return (ar = x.match(/^(s|m|h|d|w|M|y)$/) ) ? num * 1000 * this.format[ar[0]] : 0;
+}
+
+HTTP.Cookies.Date.prototype.is_num = function (x) {
+   if (x.length == 0) return;
+   var ok = 1;
+   for (var i = 0; i < x.length; i++) {
+      if ("0123456789.-+".indexOf(x.charAt(i)) == -1) {
+         ok--;
+         break;
+      }
+   }
+   return ok;
+}
+
+HTTP.Cookies.prototype.date = new HTTP.Cookies.Date; // date object instance
+
+// Get the value of the named cookie. Usage: password = cookie.read('password');
+HTTP.Cookies.prototype.read = function (name) {
+   var value  = '';
+   if(!this.JAR) {
+               this.JAR = {};
+      var array  = document.cookie.split(';');
+      for (var x = 0; x < array.length; x++) {
+         var pair = array[x].split('=');
+         if(pair[0].substring (0,1) == ' ') pair[0] = pair[0].substring(1, pair[0].length);
+         if(pair[0] == name) {
+            value = pair[1];
+         }
+         this.JAR[pair[0]] = pair[1];
+      }
+   } else {
+      for(var cookie in this.JAR) {
+         if(cookie == name) {
+            value = this.JAR[cookie];
+         }
+          }
+   }
+   return value ? unescape(value) : '';
+}
+
+// Create a new cookie or overwrite existing. Usage: cookie.write('password', 'secret', '1m');
+HTTP.Cookies.prototype.write = function (name, value, expires, path, domain, secure) {
+   var extra = '';
+   if (!expires) expires = '';
+   if (expires == '_epoch') {
+      expires = new Date(0);
+   } else if (expires != -1) {
+      var Now  = new Date;
+      Now.setTime(Now.getTime() + this.date.parse(expires));
+      expires = Now.toGMTString();
+   }
+   if(expires) extra += "; expires=" + expires;
+   if(path   ) extra += "; path="    + path;
+   if(domain ) extra += "; domain="  + domain;
+   if(secure ) extra += "; secure="  + secure;
+   document.cookie = name + "=" + escape(value) + extra;
+}
+
+// Delete the named cookie. Usage: cookie.remove('password');
+HTTP.Cookies.prototype.remove = function (name, path, domain, secure) {
+   this.write(name, '', '_epoch', path, domain, secure);
+}
+
+/*
+
+=head1 NAME
+
+HTTP.Cookies - JavaScript class for reading, writing and deleting cookies
+
+=head1 SYNOPSIS
+
+   var cookie    = new HTTP.Cookies;
+   var password  = cookie.read('password');
+   var lastvisit = cookie.read('lastvisit');
+   cookie.write('lastvisit',1079383075,'+1y');
+   cookie.remove('password');
+
+=head1 DESCRIPTION
+
+HTTP.Cookies is a class for http cookies manipulation. It defines
+three object methods to read, write and remove cookies. Implementation
+is somehow similar to the Perl module CGI.pm' s C<cookie()> method.
+
+=head1 METHODS
+
+=head2 read NAME
+
+Reads the cookie named C<name> and returns it's value or an empty
+string upon failure.
+
+=head2 write NAME, VALUE [, EXPIRES, PATH, DOMAIN, SECURE]
+
+Creates a new cookie with C<NAME> and C<VALUE>. Optional C<EXPIRES>
+value sets the cookie lifetime.
+
+Expire date format: you can use negative or positive numbers combined
+with 's', 'm', 'h', 'd', 'w', 'M', 'y' or you can use 'now' to
+expire as soon as possible. Meanings:
+
+    s   = second
+    m   = minute
+    h   = hour
+    d   = day
+    w   = week
+    M   = month
+    y   = year
+    now = immediately
+
+for a session cookie; pass "-1" as the expires value.
+
+Optional parameter C<DOMAIN> can be used to define the domain
+for which the HTTP cookie is valid.
+
+Optional parameter C<EXPIRES> can be used to make it a secure cookie
+(secure cookies can only be used with HTTPS protocol).
+
+=head2 remove NAME [, PATH, DOMAIN, SECURE]
+
+Deletes/removes the named cookie from the client.
+
+=head1 SEE ALSO
+
+=head1 BUGS
+
+Contact the author if you find any.
+
+This library is tested with: Opera 8.01, MSIE 6.0,
+Netscape Communicator 4.77, Mozilla 1.7.8
+and Mozilla FireFox 1.0.4 under Windows XP Professional SP2.
+
+=head1 AUTHOR
+
+Burak Gürsoy, E<lt>burakE<64>cpan.orgE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2005 Burak Gürsoy. All rights reserved.
+
+=head1 LICENSE
+
+This library is free software; you can redistribute it and/or modify
+it under the terms of the "Artistic License":
+L<http://dev.perl.org/licenses/artistic.html>.
+
+=cut
+
+*/