X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/57041b345ca24bde1c6e5b24bbc888db35bd8b99..82b3920c64a77f00e2b38d8f0e1601cd74e427e4:/src/redakcja/static/js/wiki/view_editor_wysiwyg.js
diff --git a/src/redakcja/static/js/wiki/view_editor_wysiwyg.js b/src/redakcja/static/js/wiki/view_editor_wysiwyg.js
index 72e218aa..bd67db6c 100644
--- a/src/redakcja/static/js/wiki/view_editor_wysiwyg.js
+++ b/src/redakcja/static/js/wiki/view_editor_wysiwyg.js
@@ -1,4 +1,4 @@
-(function($){
+(function($) {
/* Show theme to the user */
function selectTheme(themeId){
@@ -6,8 +6,8 @@
selection.removeAllRanges();
var range = document.createRange();
- var s = $(".motyw[theme-class='" + themeId + "']")[0];
- var e = $(".end[theme-class='" + themeId + "']")[0];
+ var s = $("[x-node='motyw'][theme-class='" + themeId + "']")[0];
+ var e = $("[x-node='end'][theme-class='" + themeId + "']")[0];
if (s && e) {
range.setStartAfter(s);
@@ -18,15 +18,21 @@
/* Verify insertion port for annotation or theme */
function verifyTagInsertPoint(node){
- if (node.nodeType == 3) { // Text Node
+ if (node.nodeType == Node.TEXT_NODE) {
node = node.parentNode;
}
- if (node.nodeType != 1) {
+ if (node.nodeType != Node.ELEMENT_NODE) {
return false;
}
node = $(node);
+ if (node.attr('id') == 'caret') {
+ node = node.parent();
+ }
+ while (node.attr('x-pass-thru')) {
+ node = node.parent();
+ }
var xtype = node.attr('x-node');
if (!xtype || (xtype.search(':') >= 0) ||
@@ -36,6 +42,12 @@
return false;
}
+ return true;
+ }
+
+ function verifyThemeBoundaryPoint(node) {
+ if (!verifyTagInsertPoint(node)) return false;
+ node = $(node);
// don't allow themes inside annotations
if (node.closest('[x-node="pe"]').length > 0)
return false;
@@ -50,10 +62,10 @@
var text = "";
$(fragment.childNodes).each(function(){
- if (this.nodeType == 3) // textNode
+ if (this.nodeType == Node.TEXT_NODE)
text += this.nodeValue;
else {
- if (this.nodeType == 1 &&
+ if (this.nodeType == Node.ELEMENT_NODE &&
$.inArray($(this).attr('x-node'), ANNOT_FORBIDDEN) == -1) {
text += html2plainText(this);
}
@@ -69,28 +81,26 @@
var selection = window.getSelection();
var n = selection.rangeCount;
- if (n == 0) {
+ if (selection.isCollapsed) {
window.alert("Nie zaznaczono żadnego obszaru");
return false;
}
- // for now allow only 1 range
- if (n > 1) {
- window.alert("Zaznacz jeden obszar");
- return false;
- }
-
- // remember the selected range
- var range = selection.getRangeAt(0);
+ var range = selection.getRangeAt(n - 1);
if (!verifyTagInsertPoint(range.endContainer)) {
window.alert("Nie można wstawiÄ w to miejsce przypisu.");
return false;
}
- // BUG #273 - selected text can contain themes, which should be omitted from
- // defining term
- var text = html2plainText(range.cloneContents());
+ text = '';
+ for (let i = 0; i < n; ++ i) {
+ let rangeI = selection.getRangeAt(i);
+ if (verifyTagInsertPoint(rangeI.startContainer) &&
+ verifyTagInsertPoint(rangeI.endContainer)) {
+ text += html2plainText(rangeI.cloneContents());
+ }
+ }
var tag = $('');
range.collapse(false);
range.insertNode(tag[0]);
@@ -110,50 +120,10 @@
}
- function addReference(){
- var selection = window.getSelection();
- var n = selection.rangeCount;
-
- if (n == 0) {
- window.alert("Nie zaznaczono żadnego obszaru");
- return false;
- }
-
- // for now allow only 1 range
- if (n > 1) {
- window.alert("Zaznacz jeden obszar");
- return false;
- }
-
- // remember the selected range
- var range = selection.getRangeAt(0);
- if (!verifyTagInsertPoint(range.endContainer)) {
- window.alert("Nie można wstawiÄ w to miejsce przypisu.");
- return false;
- }
-
- var tag = $('');
- range.collapse(false);
- range.insertNode(tag[0]);
-
- xml2html({
- xml: '',
- success: function(text){
- var t = $(text);
- tag.replaceWith(t);
- openForEdit(t);
- },
- error: function(){
- tag.remove();
- alert('BÅÄ d przy dodawaniu referncji:' + errors);
- }
- })
- }
-
/* Insert theme using current selection */
function addTheme(){
@@ -185,12 +155,12 @@
// verify if the start/end points make even sense -
// they must be inside a x-node (otherwise they will be discarded)
// and the x-node must be a main text
- if (!verifyTagInsertPoint(range.startContainer)) {
+ if (!verifyThemeBoundaryPoint(range.startContainer)) {
window.alert("Motyw nie może siÄ zaczynaÄ w tym miejscu.");
return false;
}
- if (!verifyTagInsertPoint(range.endContainer)) {
+ if (!verifyThemeBoundaryPoint(range.endContainer)) {
window.alert("Motyw nie może siÄ koÅczyÄ w tym miejscu.");
return false;
}
@@ -210,10 +180,10 @@
point.setStart(container, offset);
return point;
}
-
+
var spoint = createPoint(range.startContainer, range.startOffset);
var epoint = createPoint(range.endContainer, range.endOffset);
-
+
var mtag, btag, etag, errors;
// insert theme-ref
@@ -237,7 +207,7 @@
spoint.insertNode(btag[0])
btag.replaceWith(text);
selection.removeAllRanges();
- openForEdit($('.motyw[theme-class="' + id + '"]'));
+ openForEdit($('[x-node="motyw"][theme-class="' + id + '"]'));
}
});
}
@@ -246,10 +216,18 @@
});
}
- function addSymbol() {
- if($('div.html-editarea textarea')[0]) {
+ function addSymbol(caret) {
+ let editArea;
+
+ if (caret) {
+ editArea = $("textarea", caret.element)[0];
+ } else {
+ editArea = $('div.html-editarea textarea')[0];
+ }
+
+ if(editArea) {
var specialCharsContainer = $("