X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/3957e054be29921a1ace348bdebdcb805a1f89ff..14f2c24a604e36cad62ba9f6f8d71bf500f8e35a:/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 bd67db6c..decc7339 100644
--- a/src/redakcja/static/js/wiki/view_editor_wysiwyg.js
+++ b/src/redakcja/static/js/wiki/view_editor_wysiwyg.js
@@ -121,9 +121,6 @@
-
-
-
/* Insert theme using current selection */
function addTheme(){
@@ -141,11 +138,9 @@
return false;
}
-
// remember the selected range
var range = selection.getRangeAt(0);
-
if ($(range.startContainer).is('.html-editarea') ||
$(range.endContainer).is('.html-editarea')) {
window.alert("Motywy można oznaczaÄ tylko na tekÅcie nie otwartym do edycji. \n Zamknij edytowany fragment i spróbuj ponownie.");
@@ -294,20 +289,20 @@
if (insertVal.length == 2) {
var startTag = insertVal[0];
var endTag = insertVal[1];
- var textAreaOpened = editArea;
- //IE support
- if (document.selection) {
- textAreaOpened.focus();
- sel = document.selection.createRange();
- sel.text = startTag + sel.text + endTag;
- }
- //MOZILLA/NETSCAPE support
- else if (textAreaOpened.selectionStart || textAreaOpened.selectionStart == '0') {
- var startPos = textAreaOpened.selectionStart;
- var endPos = textAreaOpened.selectionEnd;
- textAreaOpened.value = textAreaOpened.value.substring(0, startPos)
- + startTag + textAreaOpened.value.substring(startPos, endPos) + endTag + textAreaOpened.value.substring(endPos, textAreaOpened.value.length);
- }
+ var textAreaOpened = editArea;
+ //IE support
+ if (document.selection) {
+ textAreaOpened.focus();
+ sel = document.selection.createRange();
+ sel.text = startTag + sel.text + endTag;
+ }
+ //MOZILLA/NETSCAPE support
+ else if (textAreaOpened.selectionStart || textAreaOpened.selectionStart == '0') {
+ var startPos = textAreaOpened.selectionStart;
+ var endPos = textAreaOpened.selectionEnd;
+ textAreaOpened.value = textAreaOpened.value.substring(0, startPos)
+ + startTag + textAreaOpened.value.substring(startPos, endPos) + endTag + textAreaOpened.value.substring(endPos, textAreaOpened.value.length);
+ }
} else {
insertAtCaret(editArea, insertVal);
}
@@ -432,7 +427,7 @@
if ($origin.is('*[x-edit-no-format]')) {
- $('.akap-edit-button').remove();
+ $('.akap-edit-button').remove();
}
if ($origin.is('[x-node="motyw"]')) {
@@ -516,7 +511,6 @@
xml = '<' + nodeName + '>' + insertedText + '' + nodeName + '>';
}
-
xml2html({
xml: xml,
success: function(element){
@@ -532,6 +526,7 @@
$origin.html($(element).html());
}
$overlay.remove();
+ $.wiki.activePerspective().flush();
},
error: function(text){
alert('BÅÄ
d! ' + text);
@@ -545,42 +540,42 @@
});
}
- $('.akap-edit-button', $overlay).click(function(){
- var textAreaOpened = $('textarea', $overlay)[0];
- var startTag = "";
- var endTag = "";
- var buttonName = this.innerHTML;
-
- if(buttonName == "sÅowo obce") {
- startTag = "
WystÄ piÅ bÅÄ d:
'+text+'
'; - if (source) - err += ''+source.replace(/&/g, '&').replace(/' - $('#html-view').html(err); - _finalize(failure); + function _finalize(callback){ + $.unblockUI(); + if (callback) + callback(); } - }); - }; - - VisualPerspective.prototype.onExit = function(success, failure){ - var self = this; - self.caret.detach(); - - $.wiki.exitTab('#PropertiesPerspective'); - - $.blockUI({ - message: 'Zapisywanie widoku...' - }); + xml2html({ + xml: this.doc.text, + base: this.doc.getBase(), + success: function(element){ + + var htmlView = $('#html-view'); + htmlView.html(element); + if ('PropertiesPerspective' in $.wiki.perspectives) + $.wiki.perspectives.PropertiesPerspective.enable(); + + _finalize(success); + }, + error: function(text, source){ + let err = 'WystÄ piÅ bÅÄ d:
'+text+'
'; + if (source) + err += ''+source.replace(/&/g, '&').replace(/' + $('#html-view').html(err); + _finalize(failure); + } + }); + } - function _finalize(callback){ - $.unblockUI(); - if (callback) - callback(); + flush() { + let self = this; + return new Promise((resolve, reject) => { + if ($('#html-view .error').length > 0) { + reject() + } else { + //return _finalize(failure); + html2text({ + element: $('#html-view').get(0), + stripOuter: true, + success: (text) => { + self.doc.setText(text); + resolve(); + }, + error: (text) => { + reject(text); + //$('#source-editor').html('WystÄ piÅ bÅÄ d:
' + text + ''); + } + }); + } + }); } - if ($('#html-view .error').length > 0) - return _finalize(failure); + onExit(success, failure) { + var self = this; - html2text({ - element: $('#html-view').get(0), - stripOuter: true, - success: function(text){ - self.doc.setText(text); - _finalize(success); - }, - error: function(text){ - $('#source-editor').html('WystÄ piÅ bÅÄ d:
' + text + ''); - _finalize(failure); - } - }); - }; + self.caret.detach(); - VisualPerspective.prototype.insertInlineTag = function(tag) { - this.caret.detach(); + if ('PropertiesPerspective' in $.wiki.perspectives) + $.wiki.perspectives.PropertiesPerspective.disable(); - let selection = window.getSelection(); - var n = selection.rangeCount; - if (n != 1 || selection.isCollapsed) { - window.alert("Nie zaznaczono obszaru"); - return false - } - let range = selection.getRangeAt(0); + self.flush().then(() => { + success && success(); + }).catch((e) => { + // TODO report + console.log('REJECTED!', e); + failure && failure(); + }); + }; - // Make sure that: - // Both ends are in the same x-node container. - // TODO: That the container is a inline-text container. - let node = range.startContainer; - if (node.nodeType == node.TEXT_NODE) { - node = node.parentNode; - } - let endNode = range.endContainer; - if (endNode.nodeType == endNode.TEXT_NODE) { - endNode = endNode.parentNode; - } - if (node != endNode) { - window.alert("ZÅy obszar."); - return false; - } + insertInlineTag(tag) { + this.caret.detach(); + let self = this; - // We will construct a HTML element with the range selected. - let div = $(""); + let selection = window.getSelection(); + var n = selection.rangeCount; + if (n != 1 || selection.isCollapsed) { + window.alert("Nie zaznaczono obszaru"); + return false + } + let range = selection.getRangeAt(0); - contents = $(node).contents(); - let startChildIndex = node == range.startContainer ? 0 : contents.index(range.startContainer); - let endChildIndex = contents.index(range.endContainer); + // Make sure that: + // Both ends are in the same x-node container. + // Both ends are set to text nodes. + // TODO: That the container is a inline-text container. + let commonNode = range.endContainer; - current = range.startContainer; - if (current.nodeType == current.TEXT_NODE) { - current = current.splitText(range.startOffset); - } - while (current != range.endContainer) { - n = current.nextSibling; - $(current).appendTo(div); - current = n; - } - if (current.nodeType == current.TEXT_NODE) { - end = current.splitText(range.endOffset); - } - $(current).appendTo(div); - - html2text({ - element: div[0], - success: function(d) { - xml2html({ - xml: d = '<' + tag + '>' + d + '' + tag + '>', - success: function(html) { - // What if no end? - node.insertBefore($(html)[0], end); - } - }); - }, - error: function(a, b) { - console.log(a, b); + if (commonNode.nodeType == Node.TEXT_NODE) { + commonNode = commonNode.parentNode; + } + let node = range.startContainer; + if (node.nodeType == Node.TEXT_NODE) { + node = node.parentNode; + } + if (node != commonNode) { + window.alert("ZÅy obszar."); + return false; } - }); - }; - VisualPerspective.prototype.insertAtRange = function(range, elem) { - let self = this; - let $end = $(range.endContainer); - if ($end.attr('id') == 'caret') { - self.caret.insert(elem); - } else { - range.insertNode(elem[0]); - } - } + let end; + if (range.endContainer.nodeType == Node.TEXT_NODE) { + end = range.endContainer.splitText(range.endOffset); + } else { + end = document.createTextNode(''); + let cont = $(range.endContainer).contents(); + if (range.endOffset < cont.length) { + range.endContainer.insertBefore(end, cont[range.endOffset]) + } else { + range.endContainer.append(end); + } + } - VisualPerspective.prototype.addReference = function() { - let self = this; - var selection = window.getSelection(); - var n = selection.rangeCount; + let current; + if (range.startContainer.nodeType == Node.TEXT_NODE) { + current = range.startContainer.splitText(range.startOffset); + } else { + current = document.createTextNode(''); + let cont = $(range.startContainer).contents(); + if (range.startOffset < cont.length) { + range.startContainer.insertBefore(current, cont[range.startOffset]) + } else { + startNode.append(current); + } + } - // TODO: if no selection, take caret position.. - if (n == 0) { - window.alert("Nie zaznaczono żadnego obszaru"); - return false; + // We will construct a HTML element with the range selected. + let div = $(""); + while (current != end) { + n = current.nextSibling; + $(current).appendTo(div); + current = n; + } + + html2text({ + element: div[0], + success: function(d) { + xml2html({ + xml: d = '<' + tag + '>' + d + '' + tag + '>', + success: function(html) { + // What if no end? + node.insertBefore($(html)[0], end); + self.flush(); + } + }); + }, + error: function(a, b) { + console.log(a, b); + } + }); } - var range = selection.getRangeAt(n - 1); - if (!verifyTagInsertPoint(range.endContainer)) { - window.alert("Nie można wstawiÄ w to miejsce referencji."); - return false; + insertAtRange(range, elem) { + let self = this; + let $end = $(range.endContainer); + if ($end.attr('id') == 'caret') { + self.caret.insert(elem); + } else { + range.insertNode(elem[0]); + } } - var tag = $(''); + addReference() { + let self = this; + var selection = window.getSelection(); + var n = selection.rangeCount; - range.collapse(false); - self.insertAtRange(range, tag); + // TODO: if no selection, take caret position.. + if (n == 0) { + window.alert("Nie zaznaczono żadnego obszaru"); + return false; + } - xml2html({ - xml: '', - success: function(text){ - var t = $(text); - tag.replaceWith(t); - openForEdit(t); - }, - error: function(){ - tag.remove(); - alert('BÅÄ d przy dodawaniu referncji:' + errors); + var range = selection.getRangeAt(n - 1); + if (!verifyTagInsertPoint(range.endContainer)) { + window.alert("Nie można wstawiÄ w to miejsce referencji."); + return false; } - }) + + var tag = $(''); + + range.collapse(false); + self.insertAtRange(range, tag); + + xml2html({ + xml: '', + success: function(text){ + var t = $(text); + tag.replaceWith(t); + openForEdit(t); + }, + error: function(){ + tag.remove(); + alert('BÅÄ d przy dodawaniu referncji:' + errors); + } + }) + } } $.wiki.VisualPerspective = VisualPerspective;