Your IP : 18.219.40.177


Current Path : /usr/local/mgr5/skins/orion/src/
Upload File :
Current File : //usr/local/mgr5/skins/orion/src/App.LocalStorage.js

/**
 * LocalStorage module
 *
 * read and write data to localStorage
 *  @param {object} window  global object
 *  @param {function} $ jQuery library
 *  @param {object} EventMgr EventMgr library
 */
/*global App:true */
App.LocalStorage = function(window, $, EventMgr) {
  'use strict';
  var init = function() {
    if (window.localStorage) {
      EventMgr.bind('changedTabs', updateTabsState);
      EventMgr.bind('loadPage', readTabsState);
      EventMgr.bind('writeDatatoLocalStorage', writeData);
      EventMgr.bind('readDatafromLocalStorage', readData);
      EventMgr.bind('removeDatafromLocalStorage', removeData);
      EventMgr.bind('loadPage', readGlobalSettings);
      EventMgr.bind('setGlobalSetting', setGlobalSetting);
    }
  },

      pageInfo = window.pageInfo,
      productId = pageInfo.product + '_5_' + pageInfo.user + '_' +
          pageInfo.hostName + '_' + pageInfo.lang + pageInfo.project,

      writeData = function(e, data) {
        if (data && data.id) {
          localStorage.setItem(data.id, JSON.stringify(data.data));
        }
      },

      readData = function(e, data) {

      },

      removeData = function(e, data) {
        if (data && data.id) {
          localStorage.removeItem(data.id);
        }
      },

      sortByIndex = function(a, b) {
        if (a[0] && b[0]) {
          return a[0].sIndex - b[0].sIndex;  
        } else {
          return 0;
        }
      },
      /**
       * Update data of active tab in local storage
       * @param {object} e
       * @param {object} data
       */
      updateTabsState = function(e, data) {
        var tabs = data.tabs,
            forceActive = data.forceActive,
            tabsStorageObj = {},
            keyVar,
            chain,
            ok,
            ind, tab;
        tabsStorageObj.tabs = [];
        //console.log("tabhandler");
        for (keyVar in tabs) {
          if (tabs[keyVar].hType === 'parent' && keyVar !== 'tab0' && tabs[keyVar].pin !== true) {
            chain = [];
            tab = {
              sIndex: tabs[keyVar].sIndex,
              status: tabs[keyVar].status,
              title: tabs[keyVar].title,
              params: tabs[keyVar].paramObjAll,
              menuFunc: tabs[keyVar].menuFunc,
              help: tabs[keyVar].help
            };
            if (forceActive && tabs[keyVar].beforeRequest) {
              tab.beforeRequest = tabs[keyVar].beforeRequest;
            }
            chain.push(tab);
            ok = true;
            ind = keyVar;
            while (ok) {
              if (tabs[ind].child && tabs[ind] !== undefined) {
                ind = tabs[ind].child;
                tab = {
                  status: forceActive ? tabs[ind].forceActive ? 1 : 0 : tabs[ind].status,
                  title: tabs[ind].title,
                  params: tabs[ind].paramObjAll,
                  help: tabs[ind].help
                };
                if (forceActive && tabs[ind].beforeRequest) {
                  tab.beforeRequest = tabs[ind].beforeRequest;
                }
                chain.push(tab);
              } else {
                ok = false;
              }
            }
            tabsStorageObj.tabs.push(chain);
          }
        }
        chain = null;
        tabsStorageObj.tabs.sort(sortByIndex);
        var tabsStorageString = JSON.stringify(tabsStorageObj);
        if (typeof localStorage !== 'undefined') {
          localStorage.setItem(productId, tabsStorageString);
          localStorage.setItem(productId + '_time', new Date().getTime());
        }
        tabsStorageString = null;
        tabsStorageObj = null;
        data = null;
      },
      /**
       * read local storage data when startup
       *
       *
       */
      readTabsState = function() {
        var tabsStorage,
            now, timeSave,
            //parse for a lot of params in startform/startpage
            startFormParam = App.u.parseParams('func=' + pageInfo.startform),
            startPageParam = App.u.parseParams('func=' + pageInfo.startpage);
        //startpage/startform handler
        if (pageInfo.startpage !== 'dashboard') {
          if (pageInfo.startform) {
            tabsStorage = '{"tabs": [[{"status": 1,' +
                ' "title": "",' +
                ' "params": ' + JSON.stringify(startPageParam) + '},' +
                ' {"status": 1,' +
                ' "title": "",' +
                ' "params": ' + JSON.stringify(startFormParam) + '}]]}';
            EventMgr.trigger('readStorage', { tabs: tabsStorage });
            return;
          } else {
            tabsStorage = '{ "tabs": [[{"status": 1, "title": "", "params":' +
                ' ' + JSON.stringify(startPageParam) + '}]]}';
            EventMgr.trigger('readStorage', { tabs: tabsStorage });
            return;
          }
        } else if (pageInfo.startform) {
          tabsStorage = '{"tabs": [[{"status": 1, "title": "", "params":' +
              ' ' + JSON.stringify(startFormParam) + '}]]}';
          EventMgr.trigger('readStorage', { tabs: tabsStorage });
          return;
        }
        now = new Date().getTime();
        if (localStorage.getItem(productId)) {
          //check for week expiries
          timeSave = localStorage.getItem(productId + '_time');
          if (((now - timeSave) > (604800 * 1000)) || pageInfo.forgetTabs) {
            localStorage.removeItem(productId);
            localStorage.removeItem(productId + '_time');
          } else {
            tabsStorage = localStorage.getItem(productId);
            EventMgr.trigger('readStorage', { tabs: tabsStorage });
          }
        }
      },

      readGlobalSettings = function() {
        var settings = localStorage.getItem(productId + '_gs'),
            settingsObj = JSON.parse(settings);
        if (settingsObj) {
          /* jslint forin:true */
          for (var key in settingsObj) {
            pageInfo[key] = settingsObj[key];
          }
        }
      },
      setGlobalSetting = function(e, data) {
        var settings = localStorage.getItem(productId + '_gs'),
            settingsObj = JSON.parse(settings) || {},
            key = data.key,
            value = data.value;
        settingsObj[key] = value;
        pageInfo[key] = value;
        localStorage.setItem(productId + '_gs', JSON.stringify(settingsObj));
      };
  return {
    init: init
  };
}(window, $, EventMgr);