123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- use strict;
- use v5.10;
- AddModuleDescription('edit-assist.pl', 'Edit Assist Extension');
- our ($q, $HtmlHeaders, @MyInitVariables);
- push (@MyInitVariables,
- sub {
- if ($q->param('action') eq 'edit') {
- $HtmlHeaders = qq{
- <script type="text/javascript">
- function hookEvent(hookName, hookFunct) {
- if (window.addEventListener) {
- window.addEventListener(hookName, hookFunct, false);
- } else if (window.attachEvent) {
- window.attachEvent("on" + hookName, hookFunct);
- }
- }
- var mwEditButtons = [];
- var mwCustomEditButtons = []; // eg to add in MediaWiki:Common.js
- // this function generates the actual toolbar buttons with localized text
- // we use it to avoid creating the toolbar where javascript is not enabled
- function addButton(imageFile, speedTip, tagOpen, tagClose, sampleText) {
- // Don't generate buttons for browsers which don't fully
- // support it.
- mwEditButtons[mwEditButtons.length] =
- {"imageFile": imageFile,
- "speedTip": speedTip,
- "tagOpen": tagOpen,
- "tagClose": tagClose,
- "sampleText": sampleText};
- }
- // this function generates the actual toolbar buttons with localized text
- // we use it to avoid creating the toolbar where javascript is not enabled
- function mwInsertEditButton(parent, item) {
- var image = document.createElement("img");
- image.width = 23;
- image.height = 22;
- image.src = item.imageFile;
- image.border = 0;
- image.alt = item.speedTip;
- image.title = item.speedTip;
- image.style.cursor = "pointer";
- image.onclick = function() {
- insertTags(item.tagOpen, item.tagClose, item.sampleText);
- return false;
- };
- parent.appendChild(image);
- return true;
- }
- function mwSetupToolbar() {
- var toolbar;
- for (i=0;i<document.getElementsByTagName("div").length; i++) {
- if (document.getElementsByTagName("div").item(i).className == "header"){
- toolbar = document.getElementsByTagName("div").item(i);
- }
- }
- if (!toolbar) { return false; }
- var textbox = document.getElementById('text');
- if (!textbox) { return false; }
- // Don't generate buttons for browsers which don't fully
- // support it.
- if (!document.selection && textbox.selectionStart === null) {
- return false;
- }
- for (var i in mwEditButtons) {
- mwInsertEditButton(toolbar, mwEditButtons[i]);
- }
- for (i in mwCustomEditButtons) {
- mwInsertEditButton(toolbar, mwCustomEditButtons[i]);
- }
- return true;
- }
- // apply tagOpen/tagClose to selection in textarea,
- // use sampleText instead of selection if there is none
- // copied and adapted from phpBB
- function insertTags(tagOpen, tagClose, sampleText) {
- var txtarea;
- if (document.editform) {
- txtarea = document.editform.wpTextbox1;
- } else {
- // some alternate form? take the first one we can find
- var areas = document.getElementsByTagName('textarea');
- txtarea = areas[0];
- }
- // IE
- if (document.selection && !is_gecko) {
- var theSelection = document.selection.createRange().text;
- if (!theSelection) {
- theSelection=sampleText;
- }
- txtarea.focus();
- if (theSelection.charAt(theSelection.length - 1) == " ") { // exclude ending space char, if any
- theSelection = theSelection.substring(0, theSelection.length - 1);
- document.selection.createRange().text = tagOpen + theSelection + tagClose + " ";
- } else {
- document.selection.createRange().text = tagOpen + theSelection + tagClose;
- }
- // Mozilla
- } else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
- var replaced = false;
- var startPos = txtarea.selectionStart;
- var endPos = txtarea.selectionEnd;
- if (endPos-startPos) {
- replaced = true;
- }
- var scrollTop = txtarea.scrollTop;
- var myText = (txtarea.value).substring(startPos, endPos);
- if (!myText) {
- myText=sampleText;
- }
- var subst;
- if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any
- subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
- } else {
- subst = tagOpen + myText + tagClose;
- }
- txtarea.value = txtarea.value.substring(0, startPos) + subst +
- txtarea.value.substring(endPos, txtarea.value.length);
- txtarea.focus();
- //set new selection
- if (replaced) {
- var cPos = startPos+(tagOpen.length+myText.length+tagClose.length);
- txtarea.selectionStart = cPos;
- txtarea.selectionEnd = cPos;
- } else {
- txtarea.selectionStart = startPos+tagOpen.length;
- txtarea.selectionEnd = startPos+tagOpen.length+myText.length;
- }
- txtarea.scrollTop = scrollTop;
- // All other browsers get no toolbar.
- // There was previously support for a crippled "help"
- // bar, but that caused more problems than it solved.
- }
- // reposition cursor if possible
- if (txtarea.createTextRange) {
- txtarea.caretPos = document.selection.createRange().duplicate();
- }
- }
- addButton('/images/button_bold.png','Bold text','**','**','Bold text');
- addButton('/images/button_italic.png','Italic text','//','//','Italic text');
- addButton('/images/button_link.png','Internal link','[[',']]','Link title');
- addButton('/images/button_extlink.png','External link (remember http:// prefix)','[',']','http://www.example.com link title');
- addButton('/images/button_headline.png','Level 2 headline','\\n== ',' ==\\n','Headline text');
- addButton('/images/button_image.png','Embedded image','[[image:',']]','Example.jpg');
- addButton('/images/button_nowiki.png','Ignore wiki formatting','{{{','}}}','Insert non-formatted text here');
- addButton('/images/button_sig.png','Your signature with timestamp','--~~~~','','');
- addButton('/images/button_hr.png','Horizontal line','\\n----\\n','','');
- hookEvent("load", mwSetupToolbar);
- </script>
- };
- }
- });
|