"Direkt antworten" verbessern

An sich genial. Größe veränderbar, etc. AAABER, jetzt kommt das aber, es wäre doch praktisch, einen Button für Java, einen für horizontale Linie, einen für Inline und einen für Noparse (!!), dann hätte ich. Außerdem keine Weihnachts-Smileys?

Je nachdem, wie “aufwändig”.

Die direct-awnser-box ist bewusst schlicht gehalten. Es ist halt eine “Schnellantwort”. Bzgl. des noparse-Tags: muss man halt kennen.

Noob! Die coolen KIDS nutzen heute Keyboard-shortcutz.

AutoHotkey - für Windows

Für Linux wird sich was ähnliches finden.

Ansonsten etwas Javascript und GreaseMonkey (Firefox) oder Userscripts (Chrome).

Und schon wird aus

Windows + j = [NOPARSE]``````[/NOPARSE]

Windows + i = [NOPARSE]``[/NOPARSE]

Windows + l = [NOPARSE][HR][/HR][/NOPARSE]

Windows + n = [NOPARSE][NOPARSE][/NOPARSE][/NOPARSE]

Tendiere zur JS - Lösung, Ist doch ein schönes Projekt für die Feiertage?
Und am Forum muss man auch nichts ändern.

Nicht ganz korrekt, Sen. INLINE-Tag(s) muss man auch kennen und außerdem immer kopieren. Oder habt ihr ein Addon dafür? o.O (späte Stunde, nicht ganz nüchtern, ich weiß^^)

Der fehlende Java Tag ist tatsächlich ein großes Dorn im Auge.
Die „Welt des Programmierens“ und in der Schnellantwort kann man keine Codeschnipsel einfügen? :wink:

Das finde ich doch mal einen guten Vorschlag von CB!
Gute Beiträge sollten genauso honoriert werden. :slight_smile:

So hab mal für Chrome/Chromium mit etwas Copy-and-Paste etwas zusammengeschrieben.
Firefox-Feedback ist gerne willkommen.

Einfach als Userscript installieren, Greasemonkey oder Tampermonkey.

Getestet mit Chromium

Einfach in die Textarea an der geplanten Stelle clicken.

Alt+Shift+j für [NOPARSE]``````[/NOPARSE]
Alt+Shift+i für [NOPARSE]``[/NOPARSE]
Alt+Shift+n für [NOPARSE][NOPARSE][/NOPARSE][/NOPARSE]
Alt+Shift+h für [NOPARSE][HR][/HR][/NOPARSE]

[OT]Den Teil hinter Alt+Shift+x hab ich gerade mit diesem Shortcut für NOPARSE und x erstellt.[/OT]

Und wie immer: Program comes with no warrenties.

// ==UserScript==
// @name         Shortcutz for Tags to byte-welt.net Forum
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Add Shortcutz for Tags to byte-welt.net Forum Alt+Shift+ j for JAVA, n for NOPARSE, l for Line, i for Inline
// @author       ionutbaiu
// @match        http://forum.byte-welt.net/*
// @grant        none
// ==/UserScript==
/* jshint -W097 */



/**
 * http://www.openjs.com/scripts/events/keyboard_shortcuts/
 * Version : 2.01.B
 * By Binny V A
 * License : BSD
 */
var shortcut = {
	'all_shortcuts':{},//All the shortcuts are stored in this array
	'add': function(shortcut_combination,callback,opt) {
		//Provide a set of default options
		var default_options = {
			'type':'keydown',
			'propagate':false,
			'disable_in_input':false,
			'target':document,
			'keycode':false
		}
		if(!opt) opt = default_options;
		else {
			for(var dfo in default_options) {
				if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
			}
		}

		var ele = opt.target;
		if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
		var ths = this;
		shortcut_combination = shortcut_combination.toLowerCase();

		//The function to be called at keypress
		var func = function(e) {
			e = e || window.event;
			
			if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields
				var element;
				if(e.target) element=e.target;
				else if(e.srcElement) element=e.srcElement;
				if(element.nodeType==3) element=element.parentNode;

				if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
			}
	
			//Find Which key is pressed
			if (e.keyCode) code = e.keyCode;
			else if (e.which) code = e.which;
			var character = String.fromCharCode(code).toLowerCase();
			
			if(code == 188) character=","; //If the user presses , when the type is onkeydown
			if(code == 190) character="."; //If the user presses , when the type is onkeydown

			var keys = shortcut_combination.split("+");
			//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
			var kp = 0;
			
			//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
			var shift_nums = {
				"`":"~",
				"1":"!",
				"2":"@",
				"3":"#",
				"4":"$",
				"5":"%",
				"6":"^",
				"7":"&",
				"8":"*",
				"9":"(",
				"0":")",
				"-":"_",
				"=":"+",
				";":":",
				"'":"\"",
				",":"<",
				".":">",
				"/":"?",
				"\\":"|"
			}
			//Special Keys - and their codes
			var special_keys = {
				'esc':27,
				'escape':27,
				'tab':9,
				'space':32,
				'return':13,
				'enter':13,
				'backspace':8,
	
				'scrolllock':145,
				'scroll_lock':145,
				'scroll':145,
				'capslock':20,
				'caps_lock':20,
				'caps':20,
				'numlock':144,
				'num_lock':144,
				'num':144,
				
				'pause':19,
				'break':19,
				
				'insert':45,
				'home':36,
				'delete':46,
				'end':35,
				
				'pageup':33,
				'page_up':33,
				'pu':33,
	
				'pagedown':34,
				'page_down':34,
				'pd':34,
	
				'left':37,
				'up':38,
				'right':39,
				'down':40,
	
				'f1':112,
				'f2':113,
				'f3':114,
				'f4':115,
				'f5':116,
				'f6':117,
				'f7':118,
				'f8':119,
				'f9':120,
				'f10':121,
				'f11':122,
				'f12':123
			}
	
			var modifiers = { 
				shift: { wanted:false, pressed:false},
				ctrl : { wanted:false, pressed:false},
				alt  : { wanted:false, pressed:false},
				meta : { wanted:false, pressed:false}	//Meta is Mac specific
			};
                        
			if(e.ctrlKey)	modifiers.ctrl.pressed = true;
			if(e.shiftKey)	modifiers.shift.pressed = true;
			if(e.altKey)	modifiers.alt.pressed = true;
			if(e.metaKey)   modifiers.meta.pressed = true;
                        
			for(var i=0; k=keys**,i<keys.length; i++) {
				//Modifiers
				if(k == 'ctrl' || k == 'control') {
					kp++;
					modifiers.ctrl.wanted = true;

				} else if(k == 'shift') {
					kp++;
					modifiers.shift.wanted = true;

				} else if(k == 'alt') {
					kp++;
					modifiers.alt.wanted = true;
				} else if(k == 'meta') {
					kp++;
					modifiers.meta.wanted = true;
				} else if(k.length > 1) { //If it is a special key
					if(special_keys[k] == code) kp++;
					
				} else if(opt['keycode']) {
					if(opt['keycode'] == code) kp++;

				} else { //The special keys did not match
					if(character == k) kp++;
					else {
						if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
							character = shift_nums[character]; 
							if(character == k) kp++;
						}
					}
				}
			}
			
			if(kp == keys.length && 
						modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
						modifiers.shift.pressed == modifiers.shift.wanted &&
						modifiers.alt.pressed == modifiers.alt.wanted &&
						modifiers.meta.pressed == modifiers.meta.wanted) {
				callback(e);
	
				if(!opt['propagate']) { //Stop the event
					//e.cancelBubble is supported by IE - this will kill the bubbling process.
					e.cancelBubble = true;
					e.returnValue = false;
	
					//e.stopPropagation works in Firefox.
					if (e.stopPropagation) {
						e.stopPropagation();
						e.preventDefault();
					}
					return false;
				}
			}
		}
		this.all_shortcuts[shortcut_combination] = {
			'callback':func, 
			'target':ele, 
			'event': opt['type']
		};
		//Attach the function with the event
		if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
		else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
		else ele['on'+opt['type']] = func;
	},

	//Remove the shortcut - just specify the shortcut and I will remove the binding
	'remove':function(shortcut_combination) {
		shortcut_combination = shortcut_combination.toLowerCase();
		var binding = this.all_shortcuts[shortcut_combination];
		delete(this.all_shortcuts[shortcut_combination])
		if(!binding) return;
		var type = binding['event'];
		var ele = binding['target'];
		var callback = binding['callback'];

		if(ele.detachEvent) ele.detachEvent('on'+type, callback);
		else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
		else ele['on'+type] = false;
	}
}

var insertAtCursor = function(myField, myValue) {
 //IE support
 if (document.selection) {
 myField.focus();
 sel = document.selection.createRange();
 sel.text = myValue;
 }
 //MOZILLA and others
 else if (myField.selectionStart || myField.selectionStart == '0') {
 var startPos = myField.selectionStart;
 var endPos = myField.selectionEnd;
 myField.value = myField.value.substring(0, startPos)
 + myValue
 + myField.value.substring(endPos, myField.value.length);
     var sel = startPos+Math.floor(myValue.length/2)
     myField.setSelectionRange(sel, sel);
 } else {
 myField.value += myValue;
 }
}

var insertTag = function(tag) {
    var e = document.activeElement;
    insertAtCursor(e,"["+tag+"][/"+tag+"]");

}

shortcut.add("Alt+Shift+j",function() {
   insertTag("JAVA");	
});

shortcut.add("Alt+Shift+i",function() {
	insertTag("INLINE");
});

shortcut.add("Alt+Shift+h",function() {
	insertTag("HR");
});

shortcut.add("Alt+Shift+N",function() {
	insertTag("NOPARSE");
});

im FF 43 unter Ubuntu geht’s nicht. :o(

bye
TT

Wenn man einen Doppelklick auf den Antworten-Button am Seitenanfang oder direkt über dem Direkt-Antworten-Editor macht, bekommt man bereits den erweiterten Editor mit allen möglichen Funktionen angezeigt.

Irgendwie bin ich durcheinander, Doppelklick auf + Antworten hat bei mir denselben Effekt wie Erweitert,

und Inline ist dabei (hab ich irgendwie übersehen),

und Noparse ist >= Moderatoren vorbehalten?

Frohes Fest!

[quote=CyborgBeta]Irgendwie bin ich durcheinander, Doppelklick auf + Antworten hat bei mir denselben Effekt wie Erweitert,

und Inline ist dabei (hab ich irgendwie übersehen),

und Noparse ist >= Moderatoren vorbehalten?[/quote]
Ja.
Ja.
Nein, [noparse] ist nicht mit drin, kann ich aber einbauen.

Muss aber nicht heute sein, L-e-X … :wink:

@Timothy_Truckle habe selbst ein (L)Ubuntu und mit FF in Version 43

Greasemonkey installiert, Neues Skript anlegen, Felder eingegeben, was zu diesem schönen Header geführt hat.

// ==UserScript==
// @name        Shortcutz for Tags to byte-welt.net Forum
// @namespace   http://tampermonkey.net/
// @description Add Shortcutz for Tags to byte-welt.net Forum Alt+Shift+ j for JAVA, n for NOPARSE, l for Line, i for Inline
// @include     http://forum.byte-welt.net/*
// @version     1
// @grant       none
// ==/UserScript==

Darunter den Code per Copy und Paste übernommen.

Und funktioniert.

[NOPARSE][HR][/HR][/NOPARSE]

Was natürlich sein könnte ist, dass die verwendeten Keybindings schon in Verwendung sind. Vom OS übernommen werden, etc.
In Chrome habe ich z.B. Vimium laufen was mir nochmals zusätzliche 20 - 40 Keyboard Shortcuts liefert und Chrome wie Vim verwenden lässt.

shortcut.add("Alt+Shift+N",function() {
	insertTag("NOPARSE");
});

Ganz unten im Script sind diese definiert, sollte für dich aber kein Problem sein, was passendes nach deinem Gusto zu finden.
Ansonsten ist es schwierig Probleme auf einem Fremdsystem zu finden, wenn es auf dem eigenen läuft :wink:

Auch wenn das mit Hilfe der Installation eines weiteren Paketes und eines eigenen Skripts gehen mag, wäre es nicht einfacher, Java- und Inline-Button direkt hier zu haben? Da oben ist doch wirklich noch viel Platz.

Ich verstehe, dass es einfach sein soll. Aber beide genannten verwende ich in direkten Antworten sicher öfter als etwa Smilies, Schriftgröße und eigentlich fast alles andere, was dort so an Symbolen vorhanden ist.

Ist jetzt nicht schlimm, wenn es so bleibt, aber ich würde es bevorzugen, einfach faul klicken zu können. Normalerweise bevorzuge ich Tastaturkommandos. Aber mit der Windowstaste? Wäre eher nicht so mein Fall.

Ich sehe es auch so wie @Crian . Von den Buttons in der “Direkt antworten”-Box nutze ich nur hin und wieder mal die Größeneinstellung und sonst nichts.
Manche mögen vielleicht auch noch die Smileys nutzen, ggf. auch die Schriftfarbe (die man aber meiner Meinung nach sowieso in der Regel nicht ändern sollte) und Bilder / Videos einbetten.
Aber drei Buttons, die mit Verlinkungen zu tun haben, macht keinen Sinn.
Wenn hier mal eine Mailadresse eingebettet wird, dürfte das zu 99% Spam sein. Und einen normalen Link hinzufügen oder entfernen - das braucht man wirklich nicht, weil die Links auch im Fließtext erkannt und geparsed werden.