Adding new buttons onto Wordpress text editor

Discussion in 'JavaScript' started by fadetoblack22, Sep 20, 2008.

  1. #1
    Hello, I have been adding some new icons onto my wordpress text editor using this simple tutorial:

    http://www.projectwebdesign.com/custom-buttons-to-wordpress-post-editor

    I was wondering if someone could help me extened the functionality slightly.

    I have no room for anymore buttons so I want to add a list with the rest in. could someone show me how to add a listbox with the rest in?

    thanks :)
     
    fadetoblack22, Sep 20, 2008 IP
  2. fadetoblack22

    fadetoblack22 Well-Known Member

    Messages:
    2,399
    Likes Received:
    62
    Best Answers:
    0
    Trophy Points:
    160
    #2
    To make it a bit easier to help, this is the file:

    // new edit toolbar used with permission
    // by Alex King
    // http://www.alexking.org/
    
    var edButtons = new Array();
    var edLinks = new Array();
    var edOpenTags = new Array();
    
    function edButton(id, display, tagStart, tagEnd, access, open) {
    	this.id = id;				// used to name the toolbar button
    	this.display = display;		// label on button
    	this.tagStart = tagStart; 	// open tag
    	this.tagEnd = tagEnd;		// close tag
    	this.access = access;		// access key
    	this.open = open;			// set to -1 if tag does not need to be closed
    }
    
    function zeroise(number, threshold) {
    	// FIXME: or we could use an implementation of printf in js here
    	var str = number.toString();
    	if (number < 0) { str = str.substr(1, str.length) }
    	while (str.length < threshold) { str = "0" + str }
    	if (number < 0) { str = '-' + str }
    	return str;
    }
    
    var now = new Date();
    var datetime = now.getUTCFullYear() + '-' +
    zeroise(now.getUTCMonth() + 1, 2) + '-' +
    zeroise(now.getUTCDate(), 2) + 'T' +
    zeroise(now.getUTCHours(), 2) + ':' +
    zeroise(now.getUTCMinutes(), 2) + ':' +
    zeroise(now.getUTCSeconds() ,2) +
    '+00:00';
    
    edButtons[edButtons.length] =
    new edButton('ed_strong'
    ,'b'
    ,'<strong>'
    ,'</strong>'
    ,'b'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_u'
    ,'u'
    ,'<u>'
    ,'</u>'
    ,'u'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_em'
    ,'i'
    ,'<em>'
    ,'</em>'
    ,'i'
    );
    
    
    edButtons[edButtons.length] =
    new edButton('ed_break'
    ,'break'
    ,'------------------------------------------------------------------------------------------------------------------------------------------'
    ,''
    ,'break'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_h3'
    ,'h3'
    ,'<h3>'
    ,'</h3>'
    ,'h3'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_link'
    ,'link'
    ,''
    ,'</a>'
    ,'a'
    ); // special case
    
    edButtons[edButtons.length] =
    new edButton('ed_block'
    ,'b-quote'
    ,'\n\n<blockquote>'
    ,'</blockquote>\n\n'
    ,'q'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_del'
    ,'del'
    ,'<del datetime="' + datetime + '">'
    ,'</del>'
    ,'d'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_ins'
    ,'ins'
    ,'<ins datetime="' + datetime + '">'
    ,'</ins>'
    ,'s'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_img'
    ,'img'
    ,''
    ,''
    ,'m'
    ,-1
    ); // special case
    
    edButtons[edButtons.length] =
    new edButton('ed_ul'
    ,'ul'
    ,'<ul>\n'
    ,'</ul>\n\n'
    ,'u'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_ol'
    ,'ol'
    ,'<ol>\n'
    ,'</ol>\n\n'
    ,'o'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_li'
    ,'li'
    ,'\t<li>'
    ,'</li>\n'
    ,'l'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_code'
    ,'code'
    ,'<code>'
    ,'</code>'
    ,'c'
    );
    
    edButtons[edButtons.length] =
    new edButton('ed_more'
    ,'more'
    ,'<!--more-->'
    ,''
    ,'t'
    ,-1
    );
    /*
    edButtons[edButtons.length] =
    new edButton('ed_next'
    ,'page'
    ,'<!--nextpage-->'
    ,''
    ,'p'
    ,-1
    );
    */
    function edLink() {
    	this.display = '';
    	this.URL = '';
    	this.newWin = 0;
    }
    
    edLinks[edLinks.length] = new edLink('WordPress'
                                        ,'http://wordpress.org/'
                                        );
    
    edLinks[edLinks.length] = new edLink('alexking.org'
                                        ,'http://www.alexking.org/'
                                        );
    
    function edShowButton(button, i) {
    	if (button.id == 'ed_img') {
    		document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertImage(edCanvas);" value="' + button.display + '" />');
    	}
    	else if (button.id == 'ed_link') {
    		document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertLink(edCanvas, ' + i + ');" value="' + button.display + '" />');
    	}
    	else {
    		document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertTag(edCanvas, ' + i + ');" value="' + button.display + '"  />');
    	}
    }
    
    function edShowLinks() {
    	var tempStr = '<select onchange="edQuickLink(this.options[this.selectedIndex].value, this);"><option value="-1" selected>' + quicktagsL10n.quickLinks + '</option>';
    	for (i = 0; i < edLinks.length; i++) {
    		tempStr += '<option value="' + i + '">' + edLinks[i].display + '</option>';
    	}
    	tempStr += '</select>';
    	document.write(tempStr);
    }
    
    function edAddTag(button) {
    	if (edButtons[button].tagEnd != '') {
    		edOpenTags[edOpenTags.length] = button;
    		document.getElementById(edButtons[button].id).value = '/' + document.getElementById(edButtons[button].id).value;
    	}
    }
    
    function edRemoveTag(button) {
    	for (i = 0; i < edOpenTags.length; i++) {
    		if (edOpenTags[i] == button) {
    			edOpenTags.splice(i, 1);
    			document.getElementById(edButtons[button].id).value = 		document.getElementById(edButtons[button].id).value.replace('/', '');
    		}
    	}
    }
    
    function edCheckOpenTags(button) {
    	var tag = 0;
    	for (i = 0; i < edOpenTags.length; i++) {
    		if (edOpenTags[i] == button) {
    			tag++;
    		}
    	}
    	if (tag > 0) {
    		return true; // tag found
    	}
    	else {
    		return false; // tag not found
    	}
    }
    
    function edCloseAllTags() {
    	var count = edOpenTags.length;
    	for (o = 0; o < count; o++) {
    		edInsertTag(edCanvas, edOpenTags[edOpenTags.length - 1]);
    	}
    }
    
    function edQuickLink(i, thisSelect) {
    	if (i > -1) {
    		var newWin = '';
    		if (edLinks[i].newWin == 1) {
    			newWin = ' target="_blank"';
    		}
    		var tempStr = '<a href="' + edLinks[i].URL + '"' + newWin + '>'
    		            + edLinks[i].display
    		            + '</a>';
    		thisSelect.selectedIndex = 0;
    		edInsertContent(edCanvas, tempStr);
    	}
    	else {
    		thisSelect.selectedIndex = 0;
    	}
    }
    
    function edSpell(myField) {
    	var word = '';
    	if (document.selection) {
    		myField.focus();
    	    var sel = document.selection.createRange();
    		if (sel.text.length > 0) {
    			word = sel.text;
    		}
    	}
    	else if (myField.selectionStart || myField.selectionStart == '0') {
    		var startPos = myField.selectionStart;
    		var endPos = myField.selectionEnd;
    		if (startPos != endPos) {
    			word = myField.value.substring(startPos, endPos);
    		}
    	}
    	if (word == '') {
    		word = prompt(quicktagsL10n.wordLookup, '');
    	}
    	if (word !== null && /^\w[\w ]*$/.test(word)) {
    		window.open('http://www.answers.com/' + escape(word));
    	}
    }
    
    function edToolbar() {
    	document.write('<div id="ed_toolbar">');
    	for (i = 0; i < edButtons.length; i++) {
    		edShowButton(edButtons[i], i);
    	}
    	document.write('<input type="button" id="ed_spell" class="ed_button" onclick="edSpell(edCanvas);" title="' + quicktagsL10n.dictionaryLookup + '" value="' + quicktagsL10n.lookup + '" />');
    	document.write('<input type="button" id="ed_close" class="ed_button" onclick="edCloseAllTags();" title="' + quicktagsL10n.closeAllOpenTags + '" value="' + quicktagsL10n.closeTags + '" />');
    //	edShowLinks(); // disabled by default
    	document.write('</div>');
    }
    
    // insertion code
    
    function edInsertTag(myField, i) {
    	//IE support
    	if (document.selection) {
    		myField.focus();
    	    sel = document.selection.createRange();
    		if (sel.text.length > 0) {
    			sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd;
    		}
    		else {
    			if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
    				sel.text = edButtons[i].tagStart;
    				edAddTag(i);
    			}
    			else {
    				sel.text = edButtons[i].tagEnd;
    				edRemoveTag(i);
    			}
    		}
    		myField.focus();
    	}
    	//MOZILLA/NETSCAPE support
    	else if (myField.selectionStart || myField.selectionStart == '0') {
    		var startPos = myField.selectionStart;
    		var endPos = myField.selectionEnd;
    		var cursorPos = endPos;
    		var scrollTop = myField.scrollTop;
    
    		if (startPos != endPos) {
    			myField.value = myField.value.substring(0, startPos)
    			              + edButtons[i].tagStart
    			              + myField.value.substring(startPos, endPos)
    			              + edButtons[i].tagEnd
    			              + myField.value.substring(endPos, myField.value.length);
    			cursorPos += edButtons[i].tagStart.length + edButtons[i].tagEnd.length;
    		}
    		else {
    			if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
    				myField.value = myField.value.substring(0, startPos)
    				              + edButtons[i].tagStart
    				              + myField.value.substring(endPos, myField.value.length);
    				edAddTag(i);
    				cursorPos = startPos + edButtons[i].tagStart.length;
    			}
    			else {
    				myField.value = myField.value.substring(0, startPos)
    				              + edButtons[i].tagEnd
    				              + myField.value.substring(endPos, myField.value.length);
    				edRemoveTag(i);
    				cursorPos = startPos + edButtons[i].tagEnd.length;
    			}
    		}
    		myField.focus();
    		myField.selectionStart = cursorPos;
    		myField.selectionEnd = cursorPos;
    		myField.scrollTop = scrollTop;
    	}
    	else {
    		if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
    			myField.value += edButtons[i].tagStart;
    			edAddTag(i);
    		}
    		else {
    			myField.value += edButtons[i].tagEnd;
    			edRemoveTag(i);
    		}
    		myField.focus();
    	}
    }
    
    function edInsertContent(myField, myValue) {
    	//IE support
    	if (document.selection) {
    		myField.focus();
    		sel = document.selection.createRange();
    		sel.text = myValue;
    		myField.focus();
    	}
    	//MOZILLA/NETSCAPE support
    	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);
    		myField.focus();
    		myField.selectionStart = startPos + myValue.length;
    		myField.selectionEnd = startPos + myValue.length;
    	} else {
    		myField.value += myValue;
    		myField.focus();
    	}
    }
    
    function edInsertLink(myField, i, defaultValue) {
    	if (!defaultValue) {
    		defaultValue = 'http://';
    	}
    	if (!edCheckOpenTags(i)) {
    		var URL = prompt(quicktagsL10n.enterURL, defaultValue);
    		if (URL) {
    			edButtons[i].tagStart = '<a href="' + URL + '">';
    			edInsertTag(myField, i);
    		}
    	}
    	else {
    		edInsertTag(myField, i);
    	}
    }
    
    function edInsertImage(myField) {
    	var myValue = prompt(quicktagsL10n.enterImageURL, 'http://');
    	if (myValue) {
    		myValue = '<img src="'
    				+ myValue
    				+ '" alt="' + prompt(quicktagsL10n.enterImageDescription, '')
    				+ '" />';
    		edInsertContent(myField, myValue);
    	}
    }
    
    Code (markup):
     
    fadetoblack22, Sep 21, 2008 IP
  3. fadetoblack22

    fadetoblack22 Well-Known Member

    Messages:
    2,399
    Likes Received:
    62
    Best Answers:
    0
    Trophy Points:
    160
    #3
    can no one help with this?
     
    fadetoblack22, Sep 22, 2008 IP