All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ovea.js.storage.store.js Maven / Gradle / Ivy

/*
 * Copyright (C) 2011 Ovea 
 *
 * 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.
 */
if (window.Store == undefined) {
    (function ($) {

        var order = [];
        var stores = {};
        var instances = 0;

        /* Storage API */

        window.Store = function (opts) {
            var self = this;
            this.options = $.extend({
            }, opts || {});
            if (this.options.order) {
                this.order = this.options.order;
            } else {
                this.order = order;
            }
            this.stores = stores;
            for (var i = 0; i < order.length; i++) {
                if (stores[order[i]].check()) {
                    this.impl = stores[order[i]];
                    break;
                }
            }
            if (!this.impl) {
                throw new Error('No appropriate storage found amongst: ' + order);
            }
        };

        window.Store.prototype = {

            set:function (key, obj) {
                if (obj == undefined || obj == null) {
                    return this.del(key)
                } else {
                    var old = this.get(key);
                    this.impl.set(key, obj, this.options);
                    return old;
                }
            },

            get:function (key) {
                return this.impl.get(key, this.options);
            },

            del:function (key) {
                var old = this.get(key);
                this.impl.del(key, this.options);
                return old;
            }

        };

        /* HTML5 Storage */

        order.push('html5');
        stores.html5 = {

            name:'html5',

            check:function () {
                if ('localStorage' in window) {
                    try {
                        localStorage.setItem('__ovea_feature_test__', 'on');
                        if (localStorage.getItem('__ovea_feature_test__') === 'on') {
                            localStorage.removeItem('__ovea_feature_test__');
                            return true;
                        }
                    } catch (e) {
                    }
                }
                return false;
            },

            set:function (key, obj, opts) {
                localStorage.setItem(key, $.toJSON(obj));
            },

            del:function (key, opts) {
                localStorage.removeItem(key);
            },

            get:function (key, opts) {
                var v = localStorage.getItem(key);
                return v == null ? null : $.parseJSON(v);
            }

        };

        /* Cookie Storage */

        order.push('cookie');
        stores.cookie = {

            name:'cookie',

            check:function () {
                return "cookie" in document;
            },

            set:function (key, obj, opts) {
                var e = '', dt = new Date();
                if (obj == null) {
                    dt.setDate(dt.getDate() - 1);
                    e = ";expires=" + dt.toGMTString();
                }
                if (opts != undefined && 'days' in opts) {
                    dt.setDate(dt.getDate() + opts['days']);
                    e = ";expires=" + dt.toGMTString();
                }
                if (key.indexOf('=') != -1 || key.indexOf(';') != -1) {
                    key = "_" + encodeURIComponent(key);
                }
                var val = '';
                if (obj != null) {
                    val = $.toJSON(obj);
                    if (val.indexOf('=') != -1 || val.indexOf(';') != -1) {
                        val = "_" + encodeURIComponent(val);
                    }
                }
                document.cookie = key + "=" + val + ";path=/" + e;
            },

            del:function (key, opts) {
                this.set(key, null, opts);
            },

            get:function (key, opts) {
                if (key.indexOf('=') != -1 || key.indexOf(';') != -1) {
                    key = "_" + encodeURIComponent(key);
                }
                var result = new RegExp('(?:^|; )' + key + '=([^;]*)').exec(document.cookie);
                return result ? $.parseJSON(result[1].indexOf('_') == 0 ? decodeURIComponent(result[1].substring(1)) : result[1]) : null;
            }

        };

        /* In-Page Storage */

        order.push('page');
        stores.page = (function () {

            var data = {};

            return {
                name:'page',

                check:function () {
                    return true;
                },

                set:function (key, obj, opts) {
                    data[key] = obj;
                },

                del:function (key, opts) {
                    delete data[key];
                },

                get:function (key, opts) {
                    var v = data[key];
                    return v == undefined ? null : v;
                }
            };
        })();


    })(jQuery);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy