Gesichterparty – GM – Save Textarea Fields
Zwischenspeichern des Inhaltes von Text-Feldern bis zum Senden des Formulars.
Sämtliche Eingaben in Textarea Felder, wie z.Bsp. das Eingabefeld für einen Gästebuch-Eintrag oder beim Schreiben von persönlichen Nachrichten, werden mit diesem Script bis zum Ausführen des Submit-Befehls zwischengespeichert werden. Sollte durch ein versehentliches Klicken auf einen anderen Link, oder durch ein beabsichtigtes Wechseln zu einer anderen Seite das Formular noch nicht versendet worden sein, geht man einfach auf die Seite mit der Textarea zurück. Der gespeicherte Text wird automatisch wieder eingefügt.
// ==UserScript==
// @name Gesichterparty Textarea Backup
// @namespace http://ngeorg.com/
// @author Norman Georg
// @version 1.0
// @description Retains text entered into Gesichterparty textareas.
// @include http://gesichterparty.de/*
// @include http://*.gesichterparty.de/*
// ==/UserScript==
function SaveTextArea(txta) {
this.ta = typeof txta == 'string'
? document.getElementById(txta)
: txta;
this.initial_txt = this.ta.textContent;
this.committed = '';
this.listen();
this.restore();
}
SaveTextArea.prototype = {
listen: function() {
var self = this;
this.ta.addEventListener('keypress', function(e) {
self.commit(self.ta.value);
}, true);
this.ta.addEventListener('blur', function(e) {
self.commit();
}, true);
this._stay_tuned();
var onsubmit = function(e) {
self.committed = '';
GM_setValue( self.key(), self.committed )
};
var theform = this.ta.form;
theform.addEventListener('submit', onsubmit, true);
theform.the_actual_submit_method = theform.submit;
theform.submit = function() {
onsubmit();
self.ta.form.the_actual_submit_method();
};
},
_stay_tuned: function() {
var self = this;
setTimeout(function() {
self.commit();
self._stay_tuned();
}, 1000);
},
restore: function() {
if(!this.is_significant( GM_getValue(this.key()) ))
return;
var buff = GM_getValue(this.key(), this.ta.textContent);
if(!this.is_significant(buff))
return;
if(buff != this.ta.textContent && this.is_significant(this.ta.textContent))
this._confirm_restore(buff);
else
this.ta.value = buff;
this.previous_backup = this.ta.value;
var self = this;
GM_registerMenuCommand(
'Wiederherstellung der letzten Sicherung '+this.ref(),
function() { self.ta.value = self.previous_backup }
);
},
_confirm_restore: function(buff) {
var to_restore = GM_getValue(this.key());
this.old_border = this.ta.style.border;
var msg = "Text existiert bereits in '" + this.ref()
+ "', mit dieser Sicherung ueberschreiben?nn";
msg += to_restore.length > 750
? to_restore.substring(0, 500) + "n..."
: to_restore;
this.confirming = true;
this.ta.scrollIntoView();
this._highlight_textarea(this.old_border);
this.ta.value = this.ta.textContent;
if(window.confirm(msg))
this.ta.value = buff;
this.confirming = false;
this.ta.style.border = this.old_border;
},
_highlight_textarea: function(border, toggle) {
var self = this;
setTimeout(function(ta_border, toggle) {
if(self.confirming) {
self.ta.style.border = ( toggle ? '3px red solid' : ta_border );
self._highlight_textarea(ta_border, toggle);
} else
self.ta.style.border = this.old_border;
}, 1000, border, !toggle);
return this.ta.style.border;
},
commit: function() {
this.committed = this.ta.value;
if(this.is_significant(this.committed)
&& this.initial_txt != this.committed)
GM_setValue( this.key(), this.committed );
},
is_significant: function(str) {
return typeof str == 'string'
&& str.replace(/s+/g, '').length > 0;
},
key: function() {
return this.ta.baseURI + ';' + this.ref();
},
ref: function() {
return this.ta.id || this.ta.name || '';
}
};
var textareas = document.getElementsByTagName('textarea');
for(var i = 0; i < textareas.length; i++)
new SaveTextArea(textareas[i]);
Download-Link: Greasemonkey Gesichterparty Save Textarea v.1.0
About this entry
You’re currently reading “Gesichterparty – GM – Save Textarea Fields,” an entry on abuse
- Veröffentlicht:
- 24 Oktober 2007 / 15:08
- Kategorie:
- Allgemeines
- Schlagworte:
- gesichterparty, projekte
2 Kommentare
Jump to comment form | comment rss [?] | trackback uri [?]