src/cm/media/js/lib/yui/yui3.0.0/build/cache/cache.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1549
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('cache', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
 * The Cache utility provides a common configurable interface for components to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
 * cache and retrieve data from a local JavaScript struct.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
 * @module cache
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
var LANG = Y.Lang,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
 * Base class for the YUI Cache utility.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
 * @class Cache
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
 * @extends Plugin.Base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
 * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
 */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
Cache = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
    Cache.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
    /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
    //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
    // Cache static properties
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
    //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
    /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
Y.mix(Cache, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
     * The namespace for the plugin. This will be the property on the host which
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
     * references the plugin instance.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
     * @property NS
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
     * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
     * @final
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
     * @value "cache"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
    NS: "cache",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
     * Class name.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
     * @property NAME
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
     * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
     * @static     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
     * @final
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
     * @value "cache"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
    NAME: "cache",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
    ATTRS: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
        //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
        // Cache Attributes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
        //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
        /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        * @attribute max
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
        * @description Maximum number of entries the Cache can hold.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
        * Set to 0 to turn off caching.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
        * @default 0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
        max: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
            value: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
            validator: function(value) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
                return (LANG.isNumber(value));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
            setter: function(value) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
                // If the cache is full, make room by removing stalest element (index=0)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
                var entries = this._entries;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
                if(value > 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
                    if(entries) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
                        while(entries.length > value) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
                            entries.shift();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
                else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
                    this._entries = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
                return value;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
        * @attribute size
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
        * @description Number of entries currently cached.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
        size: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
            readOnly: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
            getter: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
                return this._entries.length;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
        * @attribute uniqueKeys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
        * @description Validate uniqueness of stored keys. Default is false and
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
        * is more performant.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
        uniqueKeys: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
            value: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
            validator: function(value) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
                return (LANG.isBoolean(value));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
         * @attribute entries
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
         * @description Cached entries.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
         * @type Array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
        entries: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
            readOnly: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
            getter: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
                return this._entries;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
Y.extend(Cache, Y.Plugin.Base, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
    /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
    //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
    // Cache private properties
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
    //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
    /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
     * Array of request/response objects indexed chronologically.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
     * @property _entries
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
     * @type Object[]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
     * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
    _entries: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
    /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
    //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
    // Cache private methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
    //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
    /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
    * @method initializer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
    * @description Internal init() handler.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
    * @param config {Object} Config object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
    * @private        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
    */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
    initializer: function(config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
        * @event add
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
        * @description Fired when an entry is added.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
        * @param e {Event.Facade} Event Facade with the following properties:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
         * <dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
         * <dt>entry (Object)</dt> <dd>The cached entry.</dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
         * </dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
        * @preventable _defAddFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
        this.publish("add", {defaultFn: this._defAddFn});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
        * @event flush
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
        * @description Fired when the cache is flushed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
        * @param e {Event.Facade} Event Facade object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
        * @preventable _defFlushFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
        this.publish("flush", {defaultFn: this._defFlushFn});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
        * @event request
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
        * @description Fired when an entry is requested from the cache.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
        * @param e {Event.Facade} Event Facade with the following properties:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
        * <dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
        * <dt>request (Object)</dt> <dd>The request object.</dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
        * </dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
        * @event retrieve
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
        * @description Fired when an entry is retrieved from the cache.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
        * @param e {Event.Facade} Event Facade with the following properties:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
        * <dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
        * <dt>entry (Object)</dt> <dd>The retrieved entry.</dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
        * </dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
        // Initialize internal values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
        this._entries = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
    * @method destructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
    * @description Internal destroy() handler.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
    * @private        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
    */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
    destructor: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
        this._entries = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
    /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
    //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
    // Cache protected methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
    //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
    /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
     * Adds entry to cache.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
     * @method _defAddFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
     * @param e {Event.Facade} Event Facade with the following properties:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
     * <dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
     * <dt>entry (Object)</dt> <dd>The cached entry.</dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
     * </dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
     * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
    _defAddFn: function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
        var entries = this._entries,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
            max = this.get("max"),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
            entry = e.entry;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
        if(this.get("uniqueKeys") && (this.retrieve(e.entry.request))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
            entries.shift();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
        // If the cache at or over capacity, make room by removing stalest element (index=0)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
        while(entries.length>=max) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
            entries.shift();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
        // Add entry to cache in the newest position, at the end of the array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
        entries[entries.length] = entry;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
     * Flushes cache.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
     * @method _defFlushFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
     * @param e {Event.Facade} Event Facade object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
     * @protected     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
    _defFlushFn: function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
        this._entries = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
     * Default overridable method compares current request with given cache entry.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
     * Returns true if current request matches the cached request, otherwise
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
     * false. Implementers should override this method to customize the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
     * cache-matching algorithm.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
     * @method _isMatch
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
     * @param request {Object} Request object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
     * @param entry {Object} Cached entry.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
     * @return {Boolean} True if current request matches given cached request, false otherwise.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
     * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
    _isMatch: function(request, entry) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
        return (request === entry.request);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
    /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
    //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
    // Cache public methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
    //
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
    /////////////////////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
     * Adds a new entry to the cache of the format
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
     * {request:request, response:response, payload:payload}.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
     * If cache is full, evicts the stalest entry before adding the new one.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
     * @method add
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
     * @param request {Object} Request value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
     * @param response {Object} Response value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
     * @param payload {Object} (optional) Arbitrary data payload.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
    add: function(request, response, payload) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
        if(this.get("entries") && (this.get("max")>0) &&
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
                (LANG.isValue(request) || LANG.isNull(request) || LANG.isUndefined(request))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
            this.fire("add", {entry: {request:request, response:response, payload:payload}});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
        else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
     * Flushes cache.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
     * @method flush
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
    flush: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
        this.fire("flush");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
     * Retrieves cached entry for given request, if available, and refreshes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
     * entry in the cache. Returns null if there is no cache match.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
     * @method retrieve
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
     * @param request {Object} Request object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
     * @return {Object} Cached entry object with the properties request, response, and payload, or null.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
    retrieve: function(request) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
        // If cache is enabled...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
        var entries = this._entries,     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
            length = entries.length,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
            entry = null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
            i = length-1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
        if((this.get("max") > 0) && (length > 0)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
            this.fire("request", {request: request});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
            // Loop through each cached entry starting from the newest
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
            for(; i >= 0; i--) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
                entry = entries[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
                // Execute matching function
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
                if(this._isMatch(request, entry)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
                    this.fire("retrieve", {entry: entry});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
                    // Refresh the position of the cache hit
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
                    if(i < length-1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
                        // Remove element from its original location
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
                        entries.splice(i,1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
                        // Add as newest
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
                        entries[entries.length] = entry;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
                    } 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
                    return entry;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
        return null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
Y.Cache = Cache;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
}, '3.0.0' ,{requires:['plugin']});