WordPress.org

Make WordPress Core

Changeset 19954


Ignore:
Timestamp:
02/19/12 23:08:10 (2 years ago)
Author:
azaozz
Message:

Refresh wpCookie, fixes #20078

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/js/utils.dev.js

    r16282 r19954  
    44// The following functions are from Cookie.js class in TinyMCE, Moxiecode, used under LGPL. 
    55 
    6     each : function(o, cb, s) { 
     6    each : function(obj, cb, scope) { 
    77        var n, l; 
    88 
    9         if (!o) 
     9        if ( !obj ) 
    1010            return 0; 
    1111 
    12         s = s || o; 
     12        scope = scope || obj; 
    1313 
    14         if (typeof(o.length) != 'undefined') { 
    15             for (n=0, l = o.length; n<l; n++) { 
    16                 if (cb.call(s, o[n], n, o) === false) 
     14        if ( typeof(obj.length) != 'undefined' ) { 
     15            for ( n = 0, l = obj.length; n < l; n++ ) { 
     16                if ( cb.call(scope, obj[n], n, obj) === false ) 
    1717                    return 0; 
    1818            } 
    1919        } else { 
    20             for (n in o) { 
    21                 if (o.hasOwnProperty(n)) { 
    22                     if (cb.call(s, o[n], n, o) === false) { 
     20            for ( n in obj ) { 
     21                if ( obj.hasOwnProperty(n) ) { 
     22                    if ( cb.call(scope, obj[n], n, obj) === false ) { 
    2323                        return 0; 
    2424                    } 
     
    2929    }, 
    3030 
    31     getHash : function(n) { 
    32         var v = this.get(n), h; 
     31    /** 
     32     * Get a multi-values cookie. 
     33     * Returns a JS object with the name: 'value' pairs. 
     34     */          
     35    getHash : function(name) { 
     36        var all = this.get(name), ret; 
    3337 
    34         if (v) { 
    35             this.each(v.split('&'), function(v) { 
    36                 v = v.split('='); 
    37                 h = h || {}; 
    38                 h[v[0]] = v[1]; 
     38        if ( all ) { 
     39            this.each( all.split('&'), function(pair) { 
     40                pair = pair.split('='); 
     41                ret = ret || {}; 
     42                ret[pair[0]] = pair[1]; 
    3943            }); 
    4044        } 
    41         return h; 
     45        return ret; 
    4246    }, 
    4347 
    44     setHash : function(n, v, e, p, d, s) { 
    45         var o = ''; 
     48    /** 
     49     * Set a multi-values cookie. 
     50     * 
     51     * 'values_obj' is the JS object that is stored. It is encoded as URI in wpCookies.set(). 
     52     */          
     53    setHash : function(name, values_obj, expires, path, domain, secure) { 
     54        var str = ''; 
    4655 
    47         this.each(v, function(v, k) { 
    48             o += (!o ? '' : '&') + k + '=' + v; 
     56        this.each(values_obj, function(val, key) { 
     57            str += (!str ? '' : '&') + key + '=' + val; 
    4958        }); 
    5059 
    51         this.set(n, o, e, p, d, s); 
     60        this.set(name, str, expires, path, domain, secure); 
    5261    }, 
    5362 
    54     get : function(n) { 
    55         var c = document.cookie, e, p = n + "=", b; 
     63    /** 
     64     * Get a cookie. 
     65     */      
     66    get : function(name) { 
     67        var cookie = document.cookie, e, p = name + "=", b; 
    5668 
    57         if (!c) 
     69        if ( !cookie ) 
    5870            return; 
    5971 
    60         b = c.indexOf("; " + p); 
     72        b = cookie.indexOf("; " + p); 
    6173 
    62         if (b == -1) { 
    63             b = c.indexOf(p); 
     74        if ( b == -1 ) { 
     75            b = cookie.indexOf(p); 
    6476 
    65             if (b != 0) 
     77            if ( b != 0 ) 
    6678                return null; 
    6779 
     
    7082        } 
    7183 
    72         e = c.indexOf(";", b); 
     84        e = cookie.indexOf(";", b); 
    7385 
    74         if (e == -1) 
    75             e = c.length; 
     86        if ( e == -1 ) 
     87            e = cookie.length; 
    7688 
    77         return decodeURIComponent(c.substring(b + p.length, e)); 
     89        return decodeURIComponent( cookie.substring(b + p.length, e) ); 
    7890    }, 
    7991 
    80     set : function(n, v, e, p, d, s) { 
    81         document.cookie = n + "=" + encodeURIComponent(v) + 
    82             ((e) ? "; expires=" + e.toGMTString() : "") + 
    83             ((p) ? "; path=" + p : "") + 
    84             ((d) ? "; domain=" + d : "") + 
    85             ((s) ? "; secure" : ""); 
     92    /** 
     93     * Set a cookie. 
     94     * 
     95     * The 'expires' arg can be either a JS Date() object set to the expiration date (back-compat) 
     96     * or the number of seconds until expiration 
     97     */      
     98    set : function(name, value, expires, path, domain, secure) { 
     99        var d = new Date(); 
     100 
     101        if ( typeof(expires) == 'object' && expires.toGMTString ) { 
     102            expires = expires.toGMTString(); 
     103        } else if ( parseInt(expires, 10) ) { 
     104            d.setTime( d.getTime() + ( parseInt(expires, 10) * 1000 ) ); // time must be in miliseconds 
     105            expires = d.toGMTString(); 
     106        } else { 
     107            expires = ''; 
     108        } 
     109 
     110        document.cookie = name + "=" + encodeURIComponent(value) + 
     111            ((expires) ? "; expires=" + expires : "") + 
     112            ((path) ? "; path=" + path : "") + 
     113            ((domain) ? "; domain=" + domain : "") + 
     114            ((secure) ? "; secure" : ""); 
    86115    }, 
    87116 
    88     remove : function(n, p) { 
    89         var d = new Date(); 
    90  
    91         d.setTime(d.getTime() - 1000); 
    92  
    93         this.set(n, '', d, p, d); 
     117    /** 
     118     * Remove a cookie. 
     119     * 
     120     * This is done by setting it to an empty value and setting the expiration time in the past. 
     121     */      
     122    remove : function(name, path) { 
     123        this.set(name, '', -1000, path); 
    94124    } 
    95125}; 
     
    97127// Returns the value as string. Second arg or empty string is returned when value is not set. 
    98128function getUserSetting( name, def ) { 
    99     var o = getAllUserSettings(); 
     129    var obj = getAllUserSettings(); 
    100130 
    101     if ( o.hasOwnProperty(name) ) 
    102         return o[name]; 
     131    if ( obj.hasOwnProperty(name) ) 
     132        return obj[name]; 
    103133 
    104134    if ( typeof def != 'undefined' ) 
     
    110140// Both name and value must be only ASCII letters, numbers or underscore 
    111141// and the shorter, the better (cookies can store maximum 4KB). Not suitable to store text. 
    112 function setUserSetting( name, value, del ) { 
     142function setUserSetting( name, value, _del ) { 
    113143    if ( 'object' !== typeof userSettings ) 
    114144        return false; 
    115145 
    116     var c = 'wp-settings-' + userSettings.uid, o = wpCookies.getHash(c) || {}, d = new Date(), p, 
     146    var cookie = 'wp-settings-' + userSettings.uid, all = wpCookies.getHash(cookie) || {}, path = userSettings.url, 
    117147    n = name.toString().replace(/[^A-Za-z0-9_]/, ''), v = value.toString().replace(/[^A-Za-z0-9_]/, ''); 
    118148 
    119     if ( del ) { 
    120         delete o[n]; 
     149    if ( _del ) { 
     150        delete all[n]; 
    121151    } else { 
    122         o[n] = v; 
     152        all[n] = v; 
    123153    } 
    124154 
    125     d.setTime( d.getTime() + 31536000000 ); 
    126     p = userSettings.url; 
    127  
    128     wpCookies.setHash(c, o, d, p); 
    129     wpCookies.set('wp-settings-time-'+userSettings.uid, userSettings.time, d, p); 
     155    wpCookies.setHash(cookie, all, 31536000, path); 
     156    wpCookies.set('wp-settings-time-'+userSettings.uid, userSettings.time, 31536000, path); 
    130157 
    131158    return name; 
Note: See TracChangeset for help on using the changeset viewer.