// name: sammy.cache // version: 0.5.0 // ** deprecated (function($) { Sammy = Sammy || {}; // A simple cache strategy that stores key/values in memory. Sammy.MemoryCacheProxy = function(initial) { this._cache = initial || {}; }; $.extend(Sammy.MemoryCacheProxy.prototype, { exists: function(name) { return (typeof this._cache[name] != "undefined"); }, set: function(name, value) { return this._cache[name] = value; }, get: function(name) { return this._cache[name]; }, clear: function(name) { delete this._cache[name]; } }); // A simple cache strategy that stores key/values $element.data() with a cache. prefix Sammy.DataCacheProxy = function(initial, $element) { initial = initial || {}; this.$element = $element; $.each(initial, function(key, value) { $element.data('cache.' + key, value); }); }; $.extend(Sammy.DataCacheProxy.prototype, { exists: function(name) { return (typeof this.$element.data('cache.' + name) != "undefined"); }, set: function(name, value) { return this.$element.data('cache.' + name, value); }, get: function(name) { return this.$element.data('cache.' + name); }, clear: function(name) { this.$element.removeData('cache.' + name); } }); // Sammy.Cache provides helpers for caching data within the lifecycle of a // Sammy app. The plugin provides two main methods on Sammy.Application, // cache and clearCache. Each app has its own cache store so that // you dont have to worry about collisions. There are currently two different 'cache proxies' // that share the same API but store the data in different ways. // // === Arguments // // +proxy+:: decides which caching proxy to use, either 'memory'(default) or 'data' // Sammy.Cache = function(app, proxy) { app.log('**WARNING:** This version of Sammy.Cache has been deprecated in favor of using the version in Sammy.Storage and will be removed in 1.0') if (proxy == 'data') { this.cache_proxy = new Sammy.DataCacheProxy({}, this.$element()); } else { this.cache_proxy = new Sammy.MemoryCacheProxy({}); } app.cache_partials = true; $.extend(app, { // cache is the main method for interacting with the cache store. The same // method is used for both setting and getting the value. The API is similar // to jQuery.fn.attr() // // === Examples // // // setting a value // cache('key', 'value'); // // // getting a value // cache('key'); //=> 'value' // // // setting a value with a callback // cache('key', function() { // // this is the app // return app.element_selector; // }); // cache: function(name, value) { if (typeof value == 'undefined') { return this.cache_proxy.get(name); } else if ($.isFunction(value) && !this.cache_proxy.exists(name)) { return this.cache_proxy.set(name, value.apply(this)); } else { return this.cache_proxy.set(name, value) } }, // clears the cached value for name clearCache: function(name) { return this.cache_proxy.clear(name); } }); app.helpers({ // a helper shortcut for use in Sammy.EventContext cache: function(name, value) { return this.app.cache(name, value); } }); }; })(jQuery);