summaryrefslogtreecommitdiffstats
path: root/static/js/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'static/js/index.js')
-rw-r--r--static/js/index.js74
1 files changed, 74 insertions, 0 deletions
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: '</' + headline_type[1] + '>'
+ }];
+ }
+ }
+};
+
+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;