From 8f5de4086a5456b580c4fd4de972da986d3cbb63 Mon Sep 17 00:00:00 2001 From: Lukasz Anwajler Date: Mon, 16 Aug 2010 05:41:21 -0500 Subject: [PATCH] Insert special characters - feature for WYSIWYG editor. --- .../templates/wiki/tabs/wysiwyg_editor.html | 3 + redakcja/static/css/master.css | 21 +++++ .../static/js/wiki/view_editor_wysiwyg.js | 89 +++++++++++++++++++ 3 files changed, 113 insertions(+) diff --git a/apps/wiki/templates/wiki/tabs/wysiwyg_editor.html b/apps/wiki/templates/wiki/tabs/wysiwyg_editor.html index 5e3c46f9..9f6232c2 100644 --- a/apps/wiki/templates/wiki/tabs/wysiwyg_editor.html +++ b/apps/wiki/templates/wiki/tabs/wysiwyg_editor.html @@ -10,6 +10,9 @@ + {% endif %}
diff --git a/redakcja/static/css/master.css b/redakcja/static/css/master.css index cbfe66ab..11f48dcf 100644 --- a/redakcja/static/css/master.css +++ b/redakcja/static/css/master.css @@ -288,3 +288,24 @@ img.tabclose { .wers_akap { padding-left: 1em; } + +/* specialChars */ +#specialCharsContainer { + text-align: center; + width: 600px; + padding:20px; + background-color: gray; + position: absolute; + top: 20px; + left: 20px; + z-index:1000; +} +#specialCharsContainer a { + color: white; + font-weight: bold; +} +#tableSpecialChars td input { + background-color: transparent; + border:0; + color: white; +} diff --git a/redakcja/static/js/wiki/view_editor_wysiwyg.js b/redakcja/static/js/wiki/view_editor_wysiwyg.js index 34618c4f..257ec252 100644 --- a/redakcja/static/js/wiki/view_editor_wysiwyg.js +++ b/redakcja/static/js/wiki/view_editor_wysiwyg.js @@ -194,6 +194,90 @@ }); } + function addSymbol() { + if($('div.html-editarea textarea')[0]) { + var specialCharsContainer = $(""); + var specialChars = ['Ą','ą','Ć','ć','Ę','ę','Ł','ł','Ń','ń','Ó','ó','Ś','ś','Ż','ż','Ź','ź','Á','á','À','à', + 'Â','â','Ä','ä','Å','å','Ā','ā','Ă','ă','Ã','ã', + 'Æ','æ','Ç','ç','Č','č','Ċ','ċ','Ď','ď','É','é','È','è', + 'Ê','ê','Ë','ë','Ē','ē','Ě','ě','Ġ','ġ','Ħ','ħ','Í','í','Î','î', + 'Ī','ī','Ĭ','ĭ','Ľ','ľ','Ñ','ñ','Ň','ň','Ó','ó','Ö','ö', + 'Ô','ô','Ō','ō','Ǒ','ǒ','Œ','œ','Ø','ø','Ř','ř','Š', + 'š','Ş','ş','Ť','ť','Ţ','ţ','Ű','ű','Ú','ú', + 'Ü','ü','Ů','ů','Ū','ū','Û','û','Ŭ','ŭ', + 'Ý','ý','Ž','ž','ß','Ð','ð','Þ','þ','А','а','Б', + 'б','В','в','Г','г','Д','д','Е','е','Ё','ё','Ж', + 'ж','З','з','И','и','Й','й','К','к','Л','л','М', + 'м','Н','н','О','о','П','п','Р','р','С','с', + 'Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ч', + 'ч','Ш','ш','Щ','щ','Ъ','ъ','Ы','ы','Ь','ь','Э', + 'э','Ю','ю','Я','я','ѓ','є','і','ї','ј','љ','њ', + 'Ґ','ґ','Α','α','Β','β','Γ','γ','Δ','δ','Ε','ε', + 'Ζ','ζ','Η','η','Θ','θ','Ι','ι','Κ','κ','Λ','λ','Μ', + 'μ','Ν','ν','Ξ','ξ','Ο','ο','Π','π','Ρ','ρ','Σ','ς','σ', + 'Τ','τ','Υ','υ','Φ','φ','Χ','χ','Ψ','ψ','Ω','ω','–', + '—','¡','¿','$','¢','£','€','©','®','°','¹','²','³', + '¼','½','¾','†','§','‰','•','←','↑','→','↓', + '„”','«»','’','[',']','[','~','|','−','·', + '×','÷','≈','≠','±','≤','≥','∈']; + var tableContent = ""; + + for(var i in specialChars) { + if(i % 14 == 0 && i > 0) { + tableContent += ""; + } + tableContent += ""; + } + + tableContent += ""; + $("#content").append(specialCharsContainer); + $("#tableSpecialChars").append(tableContent); + + /* events */ + + $('.specialBtn').click(function(){ + insertAtCaret($('div.html-editarea textarea')[0], $(this).val()); + $(specialCharsContainer).remove(); + }); + $('#specialCharsClose').click(function(){ + $(specialCharsContainer).remove(); + }); + + } else { + window.alert('Najedź na fragment tekstu, wybierz "Edytuj" i ustaw kursor na miejscu gdzie chcesz wstawić symbol.'); + } + } + + function insertAtCaret(txtarea,text) { + /* http://www.scottklarr.com/topic/425/how-to-insert-text-into-a-textarea-where-the-cursor-is/ */ + var scrollPos = txtarea.scrollTop; + var strPos = 0; + var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ? "ff" : (document.selection ? "ie" : false ) ); + if (br == "ie") { + txtarea.focus(); + var range = document.selection.createRange(); + range.moveStart ('character', -txtarea.value.length); + strPos = range.text.length; + } else if (br == "ff") strPos = txtarea.selectionStart; + var front = (txtarea.value).substring(0,strPos); + var back = (txtarea.value).substring(strPos,txtarea.value.length); + txtarea.value=front+text+back; + strPos = strPos + text.length; + if (br == "ie") { + txtarea.focus(); + var range = document.selection.createRange(); + range.moveStart ('character', -txtarea.value.length); + range.moveStart ('character', strPos); + range.moveEnd ('character', 0); + range.select(); + } else if (br == "ff") { + txtarea.selectionStart = strPos; + txtarea.selectionEnd = strPos; + txtarea.focus(); + } + txtarea.scrollTop = scrollPos; + } + /* open edition window for selected fragment */ function openForEdit($origin){ var $box = null @@ -349,6 +433,11 @@ addTheme(); return false; }); + + $('#insert-symbol-button').click(function(){ + addSymbol(); + return false; + }); $('.edit-button').live('click', function(event){ event.preventDefault(); -- 2.20.1