GN_PersistentStorage

GN_PersistentStorageD

À partir de 2015-11-20. Voir la dernière version.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==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

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