GN_PersistentStorage

GN_PersistentStorageD

2015-11-20 기준 버전입니다. 최신 버전을 확인하세요.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name        GN_PersistentStorage
// @namespace   Gradient
// @description GN_PersistentStorageD
// @include     /.+(heroeswm|178\.248\.235\.15).+/
// @exclude     /.+(heroeswm|178\.248\.235\.15).*?\/(login|war|cgame|frames|chat|chatonline|ch_box|chat_line|ticker|chatpost)\.php.*/
// @exclude     /.+daily\.heroeswm\.ru.+/
// @version     1.0.2
// @grant       GM_setValue
// @grant       GM_getValue
// @grant       GM_deleteValue
// ==/UserScript==

"use strict";

//----------------------------------------------------------------------------//  

(function(){  // wrapper start
  
//----------------------------------------------------------------------------//    

//var operations = [ 'save', 'load', 'remove' ];
//var states     = [ 'complete', 'incomplete' ];
  
var div = document.createElement('div');
div.setAttribute('id',        'GN_GM_Handler');
div.setAttribute('desc',      '');
div.setAttribute('value',     '');
div.setAttribute('operation', 'unknown');
div.setAttribute('state',     'incomplete');
div.setAttribute('is_null',   'false');    
  
div.addEventListener('click', function(e){
  e.preventDefault();
  
  div.setAttribute('state', 'incomplete');
  
  var operation = div.getAttribute('operation');
  
  if(operation == 'save'){
    save_value(div.getAttribute('desc'), div.getAttribute('value'));
    div.setAttribute('value', '');
  }
  else if(operation == 'load'){
    var value = load_value(div.getAttribute('desc'));

    div.setAttribute('is_null', !value ? 'true' : 'false');
    div.setAttribute('value', value ? value : '');
  }
  else if(operation == 'remove'){
    remove_value(div.getAttribute('desc'));
    div.setAttribute('value', '');
  }
  
  div.setAttribute('desc',      '');
  div.setAttribute('operation', 'unknown');
  div.setAttribute('state',     'complete');
});

document.body.appendChild(div);
  
//----------------------------------------------------------------------------// 
  
function save_value(desc, value){
  if(check_gm_function()){
    GM_setValue(desc, value);
    return;
  }
  
  check_local_storage();
  
  try{
    localStorage.setItem(desc, value);
  }
  catch(e){
    show_error('Ошибка при сохранении значения');
  }
}
  
//----------------------------------------------------------------------------//  

function load_value(value){
  if(check_gm_function())
    return GM_getValue(value, null);

  check_local_storage();
  
  return localStorage.getItem(value);
}
  
//----------------------------------------------------------------------------//

function remove_value(value){
  if(check_gm_function()){
    GM_deleteValue(value);
    return;
  }
  
  check_local_storage();
  
  localStorage.removeItem(value);
}

//----------------------------------------------------------------------------//  

function check_local_storage(){
  if('localStorage' in window && window['localStorage'] !== null)
    return;

  show_error('Не найдено локальное хранилище');
}

//----------------------------------------------------------------------------//  

function check_gm_function(){
  return typeof GM_setValue == 'function';
}
  
//----------------------------------------------------------------------------//
  
function show_error(error_string){
  throw new Error(error_string);
}
  
//----------------------------------------------------------------------------//  
  
}()); // wrapper end

//----------------------------------------------------------------------------//