MediaWiki:Gadget-jQuery.storage.js

MediaWiki系统消息页面
'use strict';

/* <nowiki> */
/**
 * SPDX-License-Identifier: MIT or GPLv2+
 * _addText: '{{Gadget Header|license=MIT|license2=GPLv2+}}'
 *
 * @source <zh.wikipedia.org/w/index.php?oldid=62520995>
 */
/**
 * jQuery.storage
 *
 * Support browsers: IE 10+, Firefox 2+, Safari 4+, Chrome 4+ and Opera 10.5+
 *
 * Usage:
 *   set: $.storage( foo, bar )
 *      or $.storage( { foo1 : bar1, foo2 : bar2, ... } )
 *
 *   get: $.storage( foo )
 *
 *   remove: $.storage( foo, null )
 *
 *   get keys index: $.storageIndex( foo )
 *                 or all: $.storageIndex()
 *
 *   used space: $.storageUsedSpace()
 *
 * Don't worry about IE's single file limit, the script will
 * split data and store them into multiple files automatically.
 *
 * Released under the MIT, BSD, and GPL Licenses.
 */
jQuery.storage = function (key, val) {
  if (key instanceof Object) {
    for (var k in key) {
      if (Object.prototype.hasOwnProperty.call(key, k)) {
        jQuery.storage.success = jQuery.storage.set(k, key[k]);
      }
    }
    return jQuery;
  } else if (val === null) {
    jQuery.storage.remove(key);
    return jQuery;
  } else if (val !== undefined) {
    jQuery.storage.success = jQuery.storage.set(key, val);
    return jQuery;
  }
  return jQuery.storage.get(key);
};
jQuery.storageIndex = function (key) {
  if (key) {
    return jQuery.storage.getIndex()[key];
  }
  return jQuery.storage.getIndex();
};
jQuery.storageUsedSpace = function () {
  var index = jQuery.storage.getIndex();
  var size = 0;
  for (var key in index) {
    if (Object.prototype.hasOwnProperty.call(index, key)) {
      size += index[key];
    }
  }
  return size;
};
jQuery.storage.notsupport = false;
jQuery.storage.nopermission = false;
jQuery.storage.success = false;
if (window.localStorage) {
  try {
    if (window.localStorage) {
      jQuery.storage._storage = window.localStorage;
    }
  } catch (_unused) {
    jQuery.storage.nopermission = true;
  }
  jQuery.storage.getIndex = function () {
    var st = jQuery.storage._storage;
    var index = st.jQueryStorageIndex;
    return index ? JSON.parse(index) : {};
  };
  jQuery.storage.setIndex = function (index) {
    var st = jQuery.storage._storage;
    index = JSON.stringify(index);
    st.jQueryStorageIndex = index;
    return true;
  };
  jQuery.storage.set = function (key, val) {
    var st = jQuery.storage._storage;
    val = JSON.stringify(val);
    try {
      st["jQueryStorage_".concat(key)] = val;
      var index = jQuery.storage.getIndex();
      index[key] = val.length;
      jQuery.storage.setIndex(index);
      return true;
    } catch (_unused2) {
      return false;
    }
  };
  jQuery.storage.get = function (key) {
    var st = jQuery.storage._storage;
    var val = st["jQueryStorage_".concat(key)];
    return val ? JSON.parse(val) : null;
  };
  jQuery.storage.remove = function (key) {
    var st = jQuery.storage._storage;
    delete st["jQueryStorage_".concat(key)];
    var index = jQuery.storage.getIndex();
    delete index[key];
    jQuery.storage.setIndex(index);
  };
} else {
  jQuery.storage.notsupport = true;
}

/* </nowiki> */