X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/45c29de17de732e6d10abb79f77970bb3a24324b..5913c54d19b8f6775633176032161d49f9b2f1aa:/redakcja/static/js/button_scripts.js?ds=inline diff --git a/redakcja/static/js/button_scripts.js b/redakcja/static/js/button_scripts.js deleted file mode 100644 index c97a2314..00000000 --- a/redakcja/static/js/button_scripts.js +++ /dev/null @@ -1,345 +0,0 @@ -(function() { - var slice = Array.prototype.slice; - - function update(array, args) { - var arrayLength = array.length, length = args.length; - while (length--) array[arrayLength + length] = args[length]; - return array; - }; - - function merge(array, args) { - array = slice.call(array, 0); - return update(array, args); - }; - - Function.prototype.bind = function(context) { - if (arguments.length < 2 && typeof arguments[0] === 'undefined') { - return this; - } - var __method = this; - var args = slice.call(arguments, 1); - return function() { - var a = merge(args, arguments); - return __method.apply(context, a); - } - } - -})(); - -function nblck_each(array, body, after) { - $.each(array, function(i) { - body(this, i); - }); - - after(); -}; - -function nblck_map(array, func, after) { - var acc = []; - - nblck_each(array, function(elem, index) { - acc.push(func(elem, index)); - }, function(){ - after(acc); - }); -}; - -function ScriptletCenter() -{ - this.scriptlets = {}; - - this.scriptlets['insert_tag'] = function(context, params, text, move_forward, move_up, done) - { - var padding_top = ''; - for (var i=params.padding_top; i; i--) - padding_top += '\n'; - - var start_tag = '<'+params.tag; - var cursor_inside = false; - - for (var attr in params.attrs) { - start_tag += ' '+attr+'="' + params.attrs[attr] + '"'; - } - - start_tag += '>'; - var end_tag = ''; - - var padding_bottom = ''; - for (var i=params.padding_bottom; i; i--) - padding_bottom += '\n'; - - if(text.length > 0) { - // tokenize - var output = ''; - var token = ''; - for(var index=0; index < text.length; index++) - { - if (text[index].match(/\s/)) { // whitespace - token += text[index]; - } - else { // character - output += token; - if(output == token) output += padding_top + start_tag; - token = ''; - output += text[index]; - } - } - - if( output[output.length-1] == '\\' ) { - output = output.substr(0, output.length-1) + end_tag + padding_bottom + '\\'; - } else { - output += end_tag + padding_bottom; - } - output += token; - - // keep cursor inside tag if some previous scriptlet has already moved it - cursor_inside = move_forward != 0 || move_up != 0; - } - else { - if(params.nocontent) { - output = padding_top + "<"+params.tag +" />" + padding_bottom; - } - else { - output = padding_top + start_tag + end_tag + padding_bottom; - cursor_inside = true; - } - } - - if (cursor_inside) { - move_forward -= params.tag.length + 3; - move_up += params.padding_bottom || 0; - } - - done(output, move_forward, move_up); - }.bind(this); - - this.scriptlets['lineregexp'] = function(context, params, text, move_forward, move_up, done) { - var self = this; - - var exprs = $.map(params.exprs, function(expr) { - var opts = "g"; - if(expr.length > 2) { - opts = expr[2]; - } return { - rx: new RegExp(expr[0], opts), - repl: expr[1] - }; - }); - - if(!text) done(text, move_forward, move_up); - - var changed = 0; - var lines = text.split('\n'); - - nblck_map(lines, function(line, index) { - var old_line = line; - $(exprs).each(function() { - var expr = this; - line = line.replace(expr.rx, expr.repl); - }); - - $progress.html(index); - - if(old_line != line) changed += 1; - return line; - }, function(newlines) { - if(changed > 0) { - text = newlines.join('\n'); - }; - - done(text, move_forward, move_up); - }); - }.bind(this); - - this.scriptlets['fulltextregexp'] = function(context, params, text, move_forward, move_up, done) { - var self = this; - - var exprs = $.map(params.exprs, function(expr) { - var opts = "mg"; - if(expr.length > 2) { - opts = expr[2]; - } - return { - rx: new RegExp(expr[0], opts), - repl: expr[1] - }; - }); - - if(!text) done(text, move_forward, move_up); - - nblck_each(exprs, function(expr, index) { - $progress.html(600 + index); - text = text.replace(expr.rx, expr.repl); - }, function() { - done(text, move_forward, move_up); - }); - }.bind(this); - - this.scriptlets['macro'] = function(context, params, text, move_forward, move_up, done) { - var self = this; - var i = 0; - - function next(text, move_forward, move_up) { - if (i < params.length) { - var e = params[i]; - i = i + 1; - self.scriptlets[e[0]](context, e[1], text, move_forward, move_up, next); - } - else { - done(text, move_forward, move_up); - } - }; - - next(text, move_forward, move_up); - }.bind(this); - - this.scriptlets['lowercase'] = function(context, params, text, move_forward, move_up, done) - { - if(!text) done(text, move_forward, move_up); - done(text.toLowerCase(), move_forward, move_up); - }.bind(this); - - - this.scriptlets["insert_stanza"] = function(context, params, text, move_forward, move_up, done) { - var padding_top = ''; - for (var i=params.padding_top; i; i--) - padding_top += '\n'; - - var padding_bottom = ''; - for (var i=params.padding_bottom; i; i--) - padding_bottom += '\n'; - - if(text) { - var verses = text.split('\n'); - text = ''; var buf = ''; var ebuf = ''; - var first = true; - - for(var i=0; i < verses.length; i++) { - var verse = verses[i].replace(/^\s+/, "").replace(/\s+$/, ""); - if(verse) { - text += (buf ? buf + '/\n' : '') + ebuf; - buf = (first ? '\n' : '') + verses[i]; - ebuf = ''; - first = false; - } else { - ebuf += '\n' + verses[i]; - } - } - text = padding_top + text + buf + '\n' + padding_bottom + ebuf; - } - else { - text = padding_top + "" + padding_bottom; - move_forward -= "".length; - move_up += params.padding_bottom || 0; - } - - done(text, move_forward, move_up); - }.bind(this); - - - this.scriptlets['autotag'] = function(context, params, text, move_forward, move_up, done) - { - if(!text.match(/^\n+$/)) done(text, move_forward, move_up); - - function insert_done(output, mf) { - text += output; - } - - if (!params.split) params.split = 2; - if (!params.padding) params.padding = 3; - - chunks = text.replace(/^\n+|\n+$/, '').split(new RegExp("\\n{"+params.split+",}")); - text = text.match(/^\n+/); - if (!text) - text = ''; - padding = ''; - for(; params.padding; params.padding--) { - padding += "\n"; - } - - if (params.tag == 'strofa') - tagger = this.scriptlets['insert_stanza']; - else - tagger = this.scriptlets['insert_tag']; - - for (i in chunks) { - if (chunks[i]) { - if (params.tag == 'akap' && chunks[i].match(/^---/)) - tag = 'akap_dialog'; - else tag = params.tag; - tagger(context, {tag: tag}, chunks[i], 0, 0, insert_done); - text += padding; - } - } - - done(text, move_forward, move_up); - }.bind(this); - -} - -ScriptletCenter.prototype.callInteractive = function(opts) { - $progress = $('Executing script'); - var self = this; - - /* This won't work, 'cause the JS below might be synchronous :( */ - /* var timer = setTimeout(function() { - $.blockUI({message: $progress}); - timer = null; - }, 1000); */ - - $.blockUI({message: $progress, showOverlay: false}); - - var input = self.XMLEditorSelectedText(opts.context); - self.scriptlets[opts.action](opts.context, opts.extra, input, 0, 0, function(output, move_forward, move_up){ - /*if(timer) - clearTimeout(timer); - else */ - if (input != output) { - self.XMLEditorReplaceSelectedText(opts.context, output) - } - if (move_forward || move_up) { - try { - self.XMLEditorMoveCursorForward(opts.context, move_forward, move_up) - } - catch(e) {} - } - $.unblockUI(); // done - }); -} - -ScriptletCenter.prototype.XMLEditorSelectedText = function(editor) { - - return editor.selection(); -}; - -ScriptletCenter.prototype.XMLEditorReplaceSelectedText = function(editor, replacement) -{ - $progress.html("Replacing text"); - editor.replaceSelection(replacement); -}; - -ScriptletCenter.prototype.XMLEditorMoveCursorForward = function(panel, right, up) { - var pos = panel.cursorPosition(); - if (up) { - line = pos.line; - while (up < 0) { - line = panel.nextLine(line); - ++up; - } - while (up > 0) { - line = panel.prevLine(line); - --up; - } - len = panel.lineContent(line).length; - panel.selectLines(line, len + right); - } - else { - panel.selectLines(pos.line, pos.character + right); - } -}; - -var scriptletCenter; - -$(function() { - scriptletCenter = new ScriptletCenter(); -}); \ No newline at end of file