xref: /dokuwiki/lib/scripts/cookie.js (revision 680824244fa1719cdf9dae5b8c6e74d748459067)
1/**
2 * Handles the cookie used by several JavaScript functions
3 *
4 * Only a single cookie is written and read. You may only save
5 * sime name-value pairs - no complex types!
6 *
7 * You should only use the getValue and setValue methods
8 *
9 * @author Andreas Gohr <andi@splitbrain.org>
10 */
11DokuCookie = {
12    data: Array(),
13    name: 'DOKU_PREFS',
14
15    /**
16     * Save a value to the cookie
17     *
18     * @author Andreas Gohr <andi@splitbrain.org>
19     */
20    setValue: function(key,val){
21        DokuCookie.init();
22        DokuCookie.data[key] = val;
23
24        // prepare expire date
25        var now = new Date();
26        DokuCookie.fixDate(now);
27        now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); //expire in a year
28
29        //save the whole data array
30        var text = '';
31        for(var key in DokuCookie.data){
32            if (!DokuCookie.data.hasOwnProperty(key)) continue;
33            text += '#'+escape(key)+'#'+DokuCookie.data[key];
34        }
35        DokuCookie.setCookie(DokuCookie.name,text.substr(1),now,DOKU_BASE);
36    },
37
38    /**
39     * Get a Value from the Cookie
40     *
41     * @author Andreas Gohr <andi@splitbrain.org>
42     */
43    getValue: function(key){
44        DokuCookie.init();
45        return DokuCookie.data[key];
46    },
47
48    /**
49     * Loads the current set cookie
50     *
51     * @author Andreas Gohr <andi@splitbrain.org>
52     */
53    init: function(){
54        if(DokuCookie.data.length) return;
55        var text  = DokuCookie.getCookie(DokuCookie.name);
56        if(text){
57            var parts = text.split('#');
58            for(var i=0; i<parts.length; i+=2){
59                DokuCookie.data[unescape(parts[i])] = unescape(parts[i+1]);
60            }
61        }
62    },
63
64    /**
65     * This sets a cookie by JavaScript
66     *
67     * @link http://www.webreference.com/js/column8/functions.html
68     */
69    setCookie: function(name, value, expires, path, domain, secure) {
70        var curCookie = name + "=" + escape(value) +
71            ((expires) ? "; expires=" + expires.toGMTString() : "") +
72            ((path) ? "; path=" + path : "") +
73            ((domain) ? "; domain=" + domain : "") +
74            ((secure) ? "; secure" : "");
75        document.cookie = curCookie;
76    },
77
78    /**
79     * This reads a cookie by JavaScript
80     *
81     * @link http://www.webreference.com/js/column8/functions.html
82     */
83    getCookie: function(name) {
84        var dc = document.cookie;
85        var prefix = name + "=";
86        var begin = dc.indexOf("; " + prefix);
87        if (begin == -1) {
88            begin = dc.indexOf(prefix);
89            if (begin !== 0){ return null; }
90        } else {
91            begin += 2;
92        }
93        var end = document.cookie.indexOf(";", begin);
94        if (end == -1){
95            end = dc.length;
96        }
97        return unescape(dc.substring(begin + prefix.length, end));
98    },
99
100    /**
101     * This is needed for the cookie functions
102     *
103     * @link http://www.webreference.com/js/column8/functions.html
104     */
105    fixDate: function(date) {
106        var base = new Date(0);
107        var skew = base.getTime();
108        if (skew > 0){
109            date.setTime(date.getTime() - skew);
110        }
111    }
112};
113