X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/b9166b62220208f49bfd3521e547d60d377ab7c1..1c013c31745b335962a07057f962e47212faf80f:/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 4554bbe7..e43905c9 100644
--- a/src/redakcja/static/js/wiki/view_editor_wysiwyg.js
+++ b/src/redakcja/static/js/wiki/view_editor_wysiwyg.js
@@ -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,76 +81,32 @@
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());
- var tag = $(' ');
- range.collapse(false);
- range.insertNode(tag[0]);
-
- xml2html({
- xml: '' + text + ' --- ',
- success: function(text){
- var t = $(text);
- tag.replaceWith(t);
- openForEdit(t);
- },
- error: function(){
- tag.remove();
- alert('BÅÄ
d przy dodawaniu przypisu:' + errors);
+ text = '';
+ for (let i = 0; i < n; ++ i) {
+ let rangeI = selection.getRangeAt(i);
+ if (verifyTagInsertPoint(rangeI.startContainer) &&
+ verifyTagInsertPoint(rangeI.endContainer)) {
+ text += html2plainText(rangeI.cloneContents());
}
- })
- }
-
-
- 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: '',
+ xml: '' + text + ' --- ',
success: function(text){
var t = $(text);
tag.replaceWith(t);
@@ -146,14 +114,13 @@
},
error: function(){
tag.remove();
- alert('BÅÄ
d przy dodawaniu referncji:' + errors);
+ alert('BÅÄ
d przy dodawaniu przypisu:' + errors);
}
})
}
-
/* Insert theme using current selection */
function addTheme(){
@@ -171,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.");
@@ -185,12 +150,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;
}
@@ -237,7 +202,7 @@
spoint.insertNode(btag[0])
btag.replaceWith(text);
selection.removeAllRanges();
- openForEdit($('.motyw[theme-class="' + id + '"]'));
+ openForEdit($('[x-node="motyw"][theme-class="' + id + '"]'));
}
});
}
@@ -258,29 +223,53 @@
if(editArea) {
var specialCharsContainer = $("
");
- var specialChars = ['â', 'Ä','Ä
','Ä','Ä','Ä','Ä','Å','Å','Å','Å','Ã','ó','Å','Å','Å»','ż','Ź','ź','Ã','á','Ã','à ',
- 'Ã','â','Ã','ä','Ã
','Ã¥','Ä','Ä','Ä','Ä','Ã','ã',
- 'Ã','æ','Ã','ç','Ä','Ä','Ä','Ä','Ä','Ä','Ã','é','Ã','è',
- 'Ã','ê','Ã','ë','Ä','Ä','Ä','Ä','Ä ','Ä¡','Ħ','ħ','Ã','Ã','Ã','î',
- 'Ī','Ä«','Ĭ','Ä','Ľ','ľ','Ã','ñ','Å','Å','Ã','ó','Ã','ö',
- 'Ã','ô','Å','Å','Ç','Ç','Å','Å','Ã','ø','Å','Å','Å ',
- 'Å¡','Å','Å','Ť','Å¥','Å¢','Å£','Å°','ű','Ã','ú','Ã','ù',
- 'Ã','ü','Å®','ů','Ū','Å«','Ã','û','Ŭ','Å',
- 'Ã','ý','Ž','ž','Ã','Ã','ð','Ã','þ','Ð','а','Ð',
- 'б','Ð','в','Ð','г','Ð','д','Ð','е','Ð','Ñ','Ð',
- 'ж','Ð','з','Ð','и','Ð','й','Ð','к','Ð','л','Ð',
- 'м','Ð','н','Ð','о','Ð','п','Ð ','Ñ','С','Ñ',
- 'Т','Ñ','У','Ñ','Ф','Ñ','Ð¥','Ñ
','Ц','Ñ','Ч',
- 'Ñ','Ш','Ñ','Щ','Ñ','Ъ','Ñ','Ы','Ñ','Ь','Ñ','Ð',
- 'Ñ','Ю','Ñ','Я','Ñ','Ñ','Ñ','Ñ','Ñ','Ñ','Ñ','Ñ',
- 'Ò','Ò','Î','α','Î','β','Î','γ','Î','δ','Î','ε',
- 'Î','ζ','Î','η','Î','θ','Î','ι','Î','κ','Î','λ','Î',
- 'μ','Î','ν','Î','ξ','Î','ο','Î ','Ï','Ρ','Ï','Σ','Ï','Ï',
- 'Τ','Ï','Î¥','Ï
','Φ','Ï','Χ','Ï','Ψ','Ï','Ω','Ï','â',
- 'â','¡','¿','$','¢','£','â¬','©','®','°','¹','²','³',
- '¼','½','¾','â ','§','â°','â¢','â','â','â','â',
- 'â','â','ââ','«','»','«»','»«','â','[',']','~','|','â','·',
- 'Ã','÷','â','â ','±','â¤','â¥','â'];
+ var specialChars = [
+ 'â', 'Ä','Ä
','Ä','Ä','Ä','Ä','Å','Å','Å','Å','Ã','ó','Å','Å','Å»','ż','Ź','ź','Ã','á','Ã','à ',
+ 'Ã','â','Ã','ä','Ã
','Ã¥','Ä','Ä','Ä','Ä','Ã','ã',
+ 'Ã','æ','Ã','ç','Ä','Ä','Ä','Ä','Ä','Ä','Ã','é','Ã','è',
+ 'Ã','ê','Ã','ë','Ä','Ä','Ä','Ä','Ä ','Ä¡','Ħ','ħ','Ã','Ã','Ã','î',
+ 'Ī','Ä«','Ĭ','Ä','Ľ','ľ','Ã','ñ','Å','Å','Ã','ó','Ã','ö',
+ 'Ã','ô','Å','Å','Ç','Ç','Å','Å','Ã','ø','Å','Å','Å ',
+ 'Å¡','Å','Å','Ť','Å¥','Å¢','Å£','Å°','ű','Ã','ú','Ã','ù',
+ 'Ã','ü','Å®','ů','Ū','Å«','Ã','û','Ŭ','Å',
+ 'Ã','ý','Ž','ž','Ã','Ã','ð','Ã','þ','Ð','а','Ð',
+ 'б','Ð','в','Ð','г','Ð','д','Ð','е','Ð','Ñ','Ð',
+ 'ж','Ð','з','Ð','и','Ð','й','Ð','к','Ð','л','Ð',
+ 'м','Ð','н','Ð','о','Ð','п','Ð ','Ñ','С','Ñ',
+ 'Т','Ñ','У','Ñ','Ф','Ñ','Ð¥','Ñ
','Ц','Ñ','Ч',
+ 'Ñ','Ш','Ñ','Щ','Ñ','Ъ','Ñ','Ы','Ñ','Ь','Ñ','Ð',
+ 'Ñ','Ю','Ñ','Я','Ñ','Ñ','Ñ','Ñ','Ñ','Ñ','Ñ','Ñ',
+ 'Ò','Ò','Î','α','Î','β','Î','γ','Î','δ','Î','ε',
+ 'Î','ζ','Î','η','Î','θ','Î','ι','Î','κ','Î','λ','Î',
+ 'μ','Î','ν','Î','ξ','Î','ο','Î ','Ï','Ρ','Ï','Σ','Ï','Ï',
+ 'Τ','Ï','Î¥','Ï
','Φ','Ï','Χ','Ï','Ψ','Ï','Ω','Ï','â',
+ 'â','¡','¿','$','¢','£','â¬','©','®','°','¹','²','³',
+ '¼','½','¾','â ','§','â°','â¢','â','â','â','â',
+ 'â','â','ââ','«','»','«»','»«','â','[',']','~','|','â','·',
+ 'Ã','÷','â','â ','±','â¤','â¥','â',
+
+ // Hebrew
+ '\u05d0', '\u05d1', '\u05d2', '\u05d3', '\u05d4', '\u05d5', '\u05d6', '\u05d7',
+ '\u05d8', '\u05d9', '\u05da', '\u05db', '\u05dc', '\u05dd', '\u05de', '\u05df',
+ '\u05e0', '\u05e1', '\u05e2', '\u05e3', '\u05e4', '\u05e5', '\u05e6', '\u05e7',
+ '\u05e8', '\u05e9', '\u05e0', '\u05ea',
+
+ '\u0591', '\u0592', '\u0593', '\u0594', '\u0595', '\u0596', '\u0597',
+ '\u0598', '\u0599', '\u059a', '\u059b', '\u059c', '\u059d', '\u059e', '\u059f',
+ '\u05a0', '\u05a1', '\u05a2', '\u05a3', '\u05a4', '\u05a5', '\u05a6', '\u05a7',
+ '\u05a8', '\u05a9', '\u05aa', '\u05ab', '\u05ac', '\u05ad', '\u05ae', '\u05af',
+ '\u05b0', '\u05b1', '\u05b2', '\u05b3', '\u05b4', '\u05b5', '\u05b6', '\u05b7',
+ '\u05b8', '\u05b9', '\u05ba', '\u05bb', '\u05bc', '\u05bd', '\u05be', '\u05bf',
+ '\u05c0', '\u05c1', '\u05c2', '\u05c3', '\u05c4', '\u05c5', '\u05c6', '\u05c7',
+
+ '\ufb1d', '\ufb1e', '\ufb1f',
+ '\ufb20', '\ufb21', '\ufb22', '\ufb23', '\ufb24', '\ufb25', '\ufb26', '\ufb27',
+ '\ufb28', '\ufb29', '\ufb2a', '\ufb2b', '\ufb2c', '\ufb2d', '\ufb2e', '\ufb2f',
+ '\ufb30', '\ufb31', '\ufb32', '\ufb33', '\ufb34', '\ufb35', '\ufb36',
+ '\ufb38', '\ufb39', '\ufb3a', '\ufb3b', '\ufb3c', '\ufb3e',
+ '\ufb40', '\ufb41', '\ufb43', '\ufb44', '\ufb46', '\ufb47',
+ '\ufb48', '\ufb49', '\ufb4a', '\ufb4b', '\ufb4c', '\ufb4d', '\ufb4e', '\ufb4f',
+ ]
var tableContent = "";
for(var i in specialChars) {
@@ -324,20 +313,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);
}
@@ -462,14 +451,14 @@
if ($origin.is('*[x-edit-no-format]')) {
- $('.akap-edit-button').remove();
+ $('.akap-edit-button').remove();
}
- if ($origin.is('.motyw')) {
+ if ($origin.is('[x-node="motyw"]')) {
$.themes.autocomplete($('textarea', $overlay));
}
- if ($origin.is('.motyw')){
+ if ($origin.is('[x-node="motyw"]')){
$('.delete-button', $overlay).click(function(){
if (window.confirm("Czy jesteÅ pewien, że chcesz usunÄ
Ä ten motyw?")) {
$('[theme-class="' + $origin.attr('theme-class') + '"]').remove();
@@ -479,9 +468,20 @@
};
});
}
- else if($box.is('*[x-annotation-box]') || $origin.is('*[x-edit-attribute]')) {
+ else if($box.is('*[x-annotation-box]') || $origin.is('*[x-edit-attribute]') || $origin.is('*[x-node="uwaga"]')) {
+ let q;
+ switch ($origin.attr('x-node')) {
+ case 'uwaga':
+ q = 'tÄ uwagÄ';
+ break;
+ case 'ref':
+ q = 'tÄ referencjÄ';
+ break
+ default:
+ q = 'ten przypis';
+ }
$('.delete-button', $overlay).click(function(){
- if (window.confirm("Czy jesteÅ pewien, że chcesz usunÄ
Ä ten przypis?")) {
+ if (window.confirm("Czy jesteÅ pewien, że chcesz usunÄ
Ä " + q + "?")) {
$origin.remove();
$overlay.remove();
$(document).unbind('click.blur-overlay');
@@ -505,7 +505,7 @@
if($box.attr("x-edit-attribute")) {
source = $(' ');
- source.text($box.attr("data-wlf-" + $box.attr("x-edit-attribute")));
+ source.text($box.attr("x-a-wl-" + $box.attr("x-edit-attribute")));
source = source[0];
} else {
source = $box[0];
@@ -525,7 +525,7 @@
var nodeName = $box.attr('x-node') || 'pe';
var insertedText = $('textarea', $overlay).val();
- if ($origin.is('.motyw')) {
+ if ($origin.is('[x-node="motyw"]')) {
insertedText = insertedText.replace(/,\s*$/, '');
}
@@ -535,7 +535,6 @@
xml = '<' + nodeName + '>' + insertedText + '' + nodeName + '>';
}
-
xml2html({
xml: xml,
success: function(element){
@@ -551,6 +550,7 @@
$origin.html($(element).html());
}
$overlay.remove();
+ $.wiki.activePerspective().flush();
},
error: function(text){
alert('BÅÄ
d! ' + text);
@@ -564,42 +564,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 = "";
- endTag = " ";
- } else if (buttonName == "wyróżnienie") {
- startTag = "";
- endTag = " ";
- } else if (buttonName == "tytuÅ dzieÅa") {
- startTag = "";
- endTag = " ";
- } else if(buttonName == "znak spec."){
- addSymbol();
- return false;
- }
-
- var myField = textAreaOpened;
-
- //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);
- }
- });
+ $('.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 = "";
+ endTag = " ";
+ } else if (buttonName == "wyróżnienie") {
+ startTag = "";
+ endTag = " ";
+ } else if (buttonName == "tytuÅ dzieÅa") {
+ startTag = "";
+ endTag = " ";
+ } else if(buttonName == "znak spec."){
+ addSymbol();
+ return false;
+ }
+
+ var myField = textAreaOpened;
+
+ //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);
+ }
+ });
$('.accept-button', $overlay).click(function(){
save();
@@ -621,228 +621,307 @@
});
}
+ function createUwagaBefore(before) {
+ xml2html({
+ xml: ' ',
+ success: function(element){
+ let $element = $(element);
+ $element.insertBefore(before);
+ openForEdit($element);
+ }
+ });
+ }
- function VisualPerspective(options){
- perspective = this;
-
- var old_callback = options.callback;
-
- options.callback = function(){
+ class VisualPerspective extends $.wiki.Perspective {
+ constructor(options) {
+ super(options);
+ let self = this;
var element = $("#html-view");
- var button = $('Edytuj ');
+ var button = $('Edytuj ');
+ var uwagaButton = $('Uwaga ');
if (!CurrentDocument.readonly) {
$('#html-view').bind('mousemove', function(event){
var editable = $(event.target).closest('*[x-editable]');
- $('.active', element).not(editable).removeClass('active').children('.edit-button').remove();
+ $('.active', element).not(editable).removeClass('active').children('.active-block-button').remove();
if (!editable.hasClass('active')) {
editable.addClass('active').append(button);
+ if (!editable.is('[x-edit-attribute]') &&
+ !editable.is('.annotation-inline-box') &&
+ !editable.is('[x-edit-no-format]')
+ ) {
+ editable.append(uwagaButton);
+ }
}
if (editable.is('.annotation-inline-box')) {
$('*[x-annotation-box]', editable).css({
-// left: event.clientX - editable.offset().left + 5,
-// top: event.clientY - editable.offset().top + 5
}).show();
}
- else {
-// $('*[x-annotation-box]').hide();
- }
});
- perspective.caret = new Caret(element);
-
+ self.caret = new Caret(element);
+
$('#insert-reference-button').click(function(){
- addReference();
+ self.flush();
+ self.addReference();
return false;
});
$('#insert-annotation-button').click(function(){
+ self.flush();
addAnnotation();
return false;
});
$('#insert-theme-button').click(function(){
+ self.flush();
addTheme();
return false;
});
-
$(".insert-inline-tag").click(function() {
- perspective.insertInlineTag($(this).attr('data-tag'));
+ self.flush();
+ self.insertInlineTag($(this).attr('data-tag'));
return false;
});
$(".insert-char").click(function() {
- console.log('perspective', perspective);
- addSymbol(caret=perspective.caret);
+ self.flush();
+ addSymbol(caret=self.caret);
return false;
});
$(document).on('click', '.edit-button', function(event){
+ self.flush();
event.preventDefault();
openForEdit($(this).parent());
});
+ $(document).on('click', '.uwaga-button', function(event){
+ self.flush();
+ event.preventDefault();
+ createUwagaBefore($(this).parent());
+ });
}
- $(document).on('click', '.motyw', function(){
+ $(document).on('click', '[x-node="motyw"]', function(){
selectTheme($(this).attr('theme-class'));
});
element.on('click', '.annotation', function(event) {
+ self.flush();
event.preventDefault();
+ event.redakcja_caret_ignore = true;
$('[x-annotation-box]', $(this).parent()).toggleClass('editing');
-
+ self.caret.detach();
});
+ }
- old_callback.call(this);
- };
-
- $.wiki.Perspective.call(this, options);
- };
+ onEnter(success, failure) {
+ super.onEnter();
- VisualPerspective.prototype = new $.wiki.Perspective();
+ $.blockUI({
+ message: 'Uaktualnianie widoku...'
+ });
- VisualPerspective.prototype.onEnter = function(success, failure){
- $.wiki.Perspective.prototype.onEnter.call(this);
+ function _finalize(callback){
+ $.unblockUI();
+ if (callback)
+ callback();
+ }
- $.blockUI({
- message: 'Uaktualnianie 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 + ' ');
+ }
+ });
+ }
+ });
}
- perspective = this;
- xml2html({
- xml: this.doc.text,
- base: this.doc.getBase(),
- success: function(element){
+ onExit(success, failure) {
+ var self = this;
- var htmlView = $('#html-view');
- htmlView.html(element);
+ self.caret.detach();
- htmlView.find('*[x-node]').dblclick(function(e) {
- if($(e.target).is('textarea'))
- return;
- var selection = window.getSelection();
- selection.collapseToStart();
- selection.modify('extend', 'forward', 'word');
- e.stopPropagation();
- });
- _finalize(success);
- },
- error: function(text, source){
- err = 'WystÄ
piÅ bÅÄ
d:
'+text+'
';
- if (source)
- err += ''+source.replace(/&/g, '&').replace(/'
- $('#html-view').html(err);
- _finalize(failure);
- }
- });
- };
+ if ('PropertiesPerspective' in $.wiki.perspectives)
+ $.wiki.perspectives.PropertiesPerspective.disable();
- VisualPerspective.prototype.onExit = function(success, failure){
- var self = this;
+ self.flush().then(() => {
+ success && success();
+ }).catch((e) => {
+ // TODO report
+ console.log('REJECTED!', e);
+ failure && failure();
+ });
+ };
- self.caret.detach();
-
- $.blockUI({
- message: 'Zapisywanie widoku...'
- });
+ insertInlineTag(tag) {
+ this.caret.detach();
+ let self = this;
- function _finalize(callback){
- $.unblockUI();
- if (callback)
- callback();
- }
+ 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);
- if ($('#html-view .error').length > 0)
- return _finalize(failure);
+ // 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;
- 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);
+ 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.insertInlineTag = function(tag) {
- this.caret.detach();
+ 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);
+ }
+ }
- let selection = window.getSelection();
- var n = selection.rangeCount;
- if (n != 1) {
- window.alert("Nie zaznaczono obszaru");
- return false
- }
- let range = selection.getRangeAt(0);
+ 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);
+ }
+ }
- // 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;
+ // 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);
+ }
+ });
}
- if (node != endNode) {
- window.alert("ZÅy obszar.");
- 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]);
+ }
}
- // We will construct a HTML element with the range selected.
- let div = $("");
+ addReference() {
+ let self = this;
+ var selection = window.getSelection();
+ var n = selection.rangeCount;
- contents = $(node).contents();
- let startChildIndex = node == range.startContainer ? 0 : contents.index(range.startContainer);
- let endChildIndex = contents.index(range.endContainer);
+ // TODO: if no selection, take caret position..
+ if (n == 0) {
+ window.alert("Nie zaznaczono żadnego obszaru");
+ return false;
+ }
- 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);
+ 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;