-
-
-
/* Insert theme using current selection */
function addTheme(){
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.");
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);
}
if ($origin.is('*[x-edit-no-format]')) {
- $('.akap-edit-button').remove();
+ $('.akap-edit-button').remove();
}
if ($origin.is('[x-node="motyw"]')) {
xml = '<' + nodeName + '>' + insertedText + '</' + nodeName + '>';
}
-
xml2html({
xml: xml,
success: function(element){
$origin.html($(element).html());
}
$overlay.remove();
+ $.wiki.activePerspective().flush();
},
error: function(text){
alert('Błąd! ' + text);
});
}
- $('.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 = "<slowo_obce>";
- endTag = "</slowo_obce>";
- } else if (buttonName == "wyróżnienie") {
- startTag = "<wyroznienie>";
- endTag = "</wyroznienie>";
- } else if (buttonName == "tytuł dzieła") {
- startTag = "<tytul_dziela>";
- endTag = "</tytul_dziela>";
- } 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 = "<slowo_obce>";
+ endTag = "</slowo_obce>";
+ } else if (buttonName == "wyróżnienie") {
+ startTag = "<wyroznienie>";
+ endTag = "</wyroznienie>";
+ } else if (buttonName == "tytuł dzieła") {
+ startTag = "<tytul_dziela>";
+ endTag = "</tytul_dziela>";
+ } 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();
});
}
- function VisualPerspective(options){
- perspective = self = 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 = $('<button class="edit-button active-block-button">Edytuj</button>');
var uwagaButton = $('<button class="uwaga-button active-block-button">Uwaga</button>');
}
});
- perspective.caret = new Caret(element);
-
+ self.caret = new Caret(element);
+
$('#insert-reference-button').click(function(){
+ 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() {
- 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());
});
});
element.on('click', '.annotation', function(event) {
+ self.flush();
event.preventDefault();
event.redakcja_caret_ignore = true;
$('[x-annotation-box]', $(this).parent()).toggleClass('editing');
- perspective.caret.detach();
+ self.caret.detach();
});
-
- old_callback.call(this);
- };
-
- $.wiki.Perspective.call(this, options);
- };
-
- VisualPerspective.prototype = new $.wiki.Perspective();
-
- VisualPerspective.prototype.onEnter = function(success, failure){
- $.wiki.Perspective.prototype.onEnter.call(this);
-
- $.blockUI({
- message: 'Uaktualnianie widoku...'
- });
-
- function _finalize(callback){
- $.unblockUI();
- if (callback)
- callback();
}
- perspective = this;
- xml2html({
- xml: this.doc.text,
- base: this.doc.getBase(),
- success: function(element){
+ onEnter(success, failure) {
+ super.onEnter();
- var htmlView = $('#html-view');
- htmlView.html(element);
+ $.blockUI({
+ message: 'Uaktualnianie widoku...'
+ });
- _finalize(success);
- },
- error: function(text, source){
- err = '<p class="error">Wystąpił błąd:</p><p>'+text+'</p>';
- if (source)
- err += '<pre>'+source.replace(/&/g, '&').replace(/</g, '<')+'</pre>'
- $('#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 = '<p class="error">Wystąpił błąd:</p><p>'+text+'</p>';
+ if (source)
+ err += '<pre>'+source.replace(/&/g, '&').replace(/</g, '<')+'</pre>'
+ $('#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('<p>Wystąpił błąd:</p><pre>' + text + '</pre>');
+ }
+ });
+ }
+ });
}
- 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('<p>Wystąpił błąd:</p><pre>' + text + '</pre>');
- _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 = $("<span x-pass-thru='true'>");
+ 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 = $("<span x-pass-thru='true'>");
+ 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 = $('<span></span>');
+ 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: '<ref href=""/>',
- 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 = $('<span></span>');
+
+ range.collapse(false);
+ self.insertAtRange(range, tag);
+
+ xml2html({
+ xml: '<ref href=""/>',
+ 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;