aboutsummaryrefslogtreecommitdiffstats
path: root/trunk/etherpad/src/static/js/pad_cookie.js
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/etherpad/src/static/js/pad_cookie.js')
-rw-r--r--trunk/etherpad/src/static/js/pad_cookie.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/trunk/etherpad/src/static/js/pad_cookie.js b/trunk/etherpad/src/static/js/pad_cookie.js
new file mode 100644
index 0000000..3cc31ed
--- /dev/null
+++ b/trunk/etherpad/src/static/js/pad_cookie.js
@@ -0,0 +1,101 @@
+/**
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+var padcookie = (function(){
+ function getRawCookie() {
+ // returns null if can't get cookie text
+ if (! document.cookie) {
+ return null;
+ }
+ // look for (start of string OR semicolon) followed by whitespace followed by prefs=(something);
+ var regexResult = document.cookie.match(/(?:^|;)\s*prefs=([^;]*)(?:;|$)/);
+ if ((! regexResult) || (! regexResult[1])) {
+ return null;
+ }
+ return regexResult[1];
+ }
+ function setRawCookie(safeText) {
+ var expiresDate = new Date();
+ expiresDate.setFullYear(3000);
+ document.cookie = ('prefs='+safeText+';expires='+expiresDate.toGMTString());
+ }
+ function parseCookie(text) {
+ // returns null if can't parse cookie.
+
+ try {
+ var cookieData = JSON.parse(unescape(text));
+ return cookieData;
+ }
+ catch (e) {
+ return null;
+ }
+ }
+ function stringifyCookie(data) {
+ return escape(JSON.stringify(data));
+ }
+ function saveCookie() {
+ if (! inited) {
+ return;
+ }
+ setRawCookie(stringifyCookie(cookieData));
+
+ if (pad.getIsProPad() && (! getRawCookie()) && (! alreadyWarnedAboutNoCookies)) {
+ alert("Warning: it appears that your browser does not have cookies enabled."+
+ " EtherPad uses cookies to keep track of unique users for the purpose"+
+ " of putting a quota on the number of active users. Using EtherPad without "+
+ " cookies may fill up your server's user quota faster than expected.");
+ alreadyWarnedAboutNoCookies = true;
+ }
+ }
+
+ var wasNoCookie = true;
+ var cookieData = {};
+ var alreadyWarnedAboutNoCookies = false;
+ var inited = false;
+
+ var self = {
+ init: function(prefsToSet) {
+ var rawCookie = getRawCookie();
+ if (rawCookie) {
+ var cookieObj = parseCookie(rawCookie);
+ if (cookieObj) {
+ wasNoCookie = false; // there was a cookie
+ delete cookieObj.userId;
+ delete cookieObj.name;
+ delete cookieObj.colorId;
+ cookieData = cookieObj;
+ }
+ }
+
+ for(var k in prefsToSet) {
+ cookieData[k] = prefsToSet[k];
+ }
+
+ inited = true;
+ saveCookie();
+ },
+ wasNoCookie: function() { return wasNoCookie; },
+ getPref: function(prefName) {
+ return cookieData[prefName];
+ },
+ setPref: function(prefName, value) {
+ cookieData[prefName] = value;
+ saveCookie();
+ }
+ };
+ return self;
+}()); \ No newline at end of file