From 735a3379c508a9fed2af68d41d1204d6a31061db Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Mon, 11 Jan 2016 04:26:42 +0100 Subject: First working version --- static/js/index.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) (limited to 'static/js/index.js') diff --git a/static/js/index.js b/static/js/index.js index ab18207..fd9cc06 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -1,7 +1,81 @@ +var $ = require('ep_etherpad-lite/static/js/rjquery').$; +var _ = require('ep_etherpad-lite/static/js/underscore'); + var cssFiles = ['ep_headline_buttons/static/css/headline_buttons.css']; +var tags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']; function aceEditorCSS(){ return cssFiles; }; +function postAceInit(ace, pad) { + $('.headline-button').on('click', function() { + var data = $(this).data('key'); + if (typeof data !== 'undefined') { + pad.ace.callWithAce(function (ace) { + ace.ace_doToggleHeading(data); + }, data, true); + } + }); +}; + +function aceInitialized(hook, context) { + function doToggleHeading(tag) { + var rep = this.rep; + var attrsManager = this.documentAttributeManager; + + if (!(rep.selStart && rep.selEnd)) { + return; + } + + var firstLine = rep.selStart[0]; + var lastLine = Math.max(firstLine, rep.selEnd[0] - ((rep.selEnd[1] === 0) ? 1 : 0)); + _(_.range(firstLine, lastLine + 1)).each(function(i) { + if (attrsManager.getAttributeOnLine(i, 'headline_buttons') == tag) { + attrsManager.removeAttributeOnLine(i, 'headline_buttons'); + } + else { + attrsManager.setAttributeOnLine(i, 'headline_buttons', tag); + } + }); + } + + context.editorInfo.ace_doToggleHeading = _(doToggleHeading).bind(context); +} + +function collectContentPre(hook, ctx) { + if ($.inArray(ctx.tname, tags) >= 0) { + ctx.state.lineAttributes['headline_buttons'] = ctx.tname; + } +}; + +function aceRegisterBlockElements() { + return tags; +}; + +function aceDomLineProcessLineAttributes(hook, ctx) { + if (typeof ctx.cls !== 'undefined') { + var headline_type = ctx.cls.match(/(?:^| )headline_buttons:(\S+)/); + if (headline_type) { + return [{ + processedMarker: true, + preHtml: '<' + headline_type[1] + '>', + postHtml: '' + }]; + } + } +}; + +function aceAttribsToClasses(hook, ctx) { + if (ctx.key == 'headline_buttons' && ctx.value != '') { + return ['headline_buttons:' + ctx.value]; + } +}; + exports.aceEditorCSS = aceEditorCSS; +exports.aceInitialized = aceInitialized; +exports.postAceInit = postAceInit; +exports.collectContentPre = collectContentPre; +exports.aceRegisterBlockElements = aceRegisterBlockElements; +exports.aceDomLineProcessLineAttributes = aceDomLineProcessLineAttributes; +exports.aceAttribsToClasses = aceAttribsToClasses; -- cgit v1.2.3-1-g7c22