AutoSaveDiv

save and restores div.contenteditable texts

目前為 2014-12-22 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        AutoSaveDiv
// @namespace   AutoSaveDiv
// @description save and restores div.contenteditable texts
// @include     *
// @version     1.02
// @grant       GM_setValue
// @grant       GM_getValue
// @grant       GM_registerMenuCommand
// @grant       GM_listValues
// @grant       GM_deleteValue
// @author		Dediggefedde
// ==/UserScript==

var active=false;
var isCtrl=false;
var isShift=false;
var isAlt=false;
var name="";
var altstil;
var img=document.createElement("div");

GM_registerMenuCommand("Clear stored Formular Fiels", function(){
	for each (var val in GM_listValues()) {
		GM_deleteValue(val);
	}
}, "c" );

img.addEventListener("contextmenu",function(e){
	console.log(name);
	restore(img.previousSibling);
	e.preventDefault();
	return false;
},false);

img.addEventListener("click",function(e){
	e.preventDefault();
	if(e.which==1)listenView(img.previousSibling);
	// else if(e.which==3)
	return false;
},true);
		
function save(el){
	if(el.tagName=="DIV")
		GM_setValue(name,document.activeElement.innerHTML);
	else if(el.tagName=="TEXTAREA")
		GM_setValue(name,document.activeElement.value);
}
function restore(el){
	if(el.tagName=="DIV")
		el.innerHTML=GM_getValue(name);
	else if(el.tagName=="TEXTAREA")
		el.value=GM_getValue(name);
}
function listenView(el){
	
	active=!active;
	if(active){
		console.log(el);
		img.style.backgroundColor="red";
		altstil=el.style.border;
		el.style.border="1px solid red";
	}else {
		img.style.backgroundColor="blue";
		el.style.border=altstil;
	}
}

document.addEventListener("click",function(e){
	if(this==img||active)return false;
	if(document.activeElement.tagName=="DIV"&&document.activeElement.getAttribute("contenteditable")||document.activeElement.tagName=="TEXTAREA"){
		name=location.host+"::"+document.activeElement.tagName+"_"+document.activeElement.className+"_"+document.activeElement.id;
		img.setAttribute("style","width:20px;height:20px;position:relative;margin-top:-20px;opacity:0.5;border:1px solid blue;background-color:blue;border-top-right-radius:15px;");
		img.title="leftclick: de-/activate capturing text!\nrightclick: restore last text!\nstored:\n"+GM_getValue(name);
		document.activeElement.parentNode.insertBefore(img, document.activeElement.nextSibling);
	}	
},true);

document.addEventListener("keydown",function(e){
	switch(e.which){
		case 17:isCtrl=true;break;
		case 16:isShift=true;break;
		case 18:isAlt=true;break;
		default:
	};
},true);

document.addEventListener("keyup",function(e){
	switch(e.which){
		case 17:isCtrl=false;break;
		case 16:isShift=false;break;
		case 18:isAlt=false;break;
		case 68: //d
			if(isShift&&isCtrl&&isAlt){
				listenView(document.activeElement);
			}			
			break;
		case 83: //s
			if(!active&&isShift&&isCtrl&&isAlt)restore(document.activeElement);
			break;
		default:
	};
	if(active){
		save(document.activeElement);
		img.title="leftclick: de-/activate capturing text!\nrightclick: restore last text!\nstored:\n"+GM_getValue(name);
	}
},true);