arch-8.x-1.x-dev/modules/compare/assets/js/compare-storage.js

modules/compare/assets/js/compare-storage.js
var ArchCompareStorage = {};

(function (drupalSettings) {
  'use strict';

  var limit = ((drupalSettings.arch_compare || {}).limit || 0)
    , max_age = ((drupalSettings.arch_compare || {}).max_age || 0)
    , storage = localStorage
    ;

  ArchCompareStorage.remove = function (pid) {
    var items = ArchCompareStorage.list().filter(function (item) {
      return item.pid !== pid;
    });
    ArchCompareStorage.save(items);
  };

  ArchCompareStorage.clear = function () {
    ArchCompareStorage.save([]);
  };

  ArchCompareStorage.save = function (items) {
    if (
      !storage
      || (typeof storage.setItem) !== 'function'
    ) {
      return;
    }
    storage.setItem('arch_compare_items', JSON.stringify(items));
    storage.setItem('arch_compare_item_last_saved', currentTimestamp());
  };

  ArchCompareStorage.has = function (pid) {
    var items = ArchCompareStorage.list();
    for (var i = 0, l = items.length; i < l; i++) {
      if (items[i].pid && items[i].pid === pid) {
        return true;
      }
    }
    return false;
  };

  ArchCompareStorage.add = function (data) {
    if (
      !ArchCompareStorage.has(data.pid)
      && ArchCompareStorage.isUnderLimit()
    ) {
      var items = ArchCompareStorage.list();
      items.push(data);
      ArchCompareStorage.save(items);
    }
  };

  ArchCompareStorage.list = function () {
    if (storageExpired()) {
      ArchCompareStorage.clear();
      return [];
    }

    if (
      !storage
      || (typeof storage.getItem) !== 'function'
    ) {
      return [];
    }

    var items = JSON.parse(storage.getItem('arch_compare_items'));
    return items || [];
  };

  ArchCompareStorage.setLimit = function (limit) {
    limit = parseInt(limit);
  };

  ArchCompareStorage.getLimit = function () {
    return limit;
  };

  ArchCompareStorage.isUnderLimit = function () {
    if (!limit) {
      return true;
    }

    return ArchCompareStorage.list().length < limit;
  };

  function currentTimestamp() {
    return parseInt(((new Date()).getTime()) / 1000);
  }

  function storageExpired() {
    if (!max_age) {
      return false;
    }

    if (
      !storage
      || (typeof storage.getItem) !== 'function'
    ) {
      return false;
    }

    var last_saved = storage.getItem('arch_compare_item_last_saved') || 0;
    if (!last_saved) {
      return true;
    }

    return last_saved + max_age <= currentTimestamp();
  }

})(drupalSettings);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc