summaryrefslogtreecommitdiffstats
path: root/static
diff options
context:
space:
mode:
authorAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2016-01-11 04:26:42 +0100
committerAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2016-01-11 04:26:42 +0100
commit735a3379c508a9fed2af68d41d1204d6a31061db (patch)
tree00592723f76e15dfee1e7f057ab2bcd033bc4447 /static
parent33b97da914105927bc5800224b9bab0ad1d312c6 (diff)
downloadep_headline_buttons-master.tar.gz
ep_headline_buttons-master.tar.bz2
ep_headline_buttons-master.zip
First working versionHEADmaster
Diffstat (limited to 'static')
-rw-r--r--static/css/buttons.css12
-rw-r--r--static/js/index.js74
-rw-r--r--static/js/shared.js28
3 files changed, 80 insertions, 34 deletions
diff --git a/static/css/buttons.css b/static/css/buttons.css
index e073b0f..04d55a0 100644
--- a/static/css/buttons.css
+++ b/static/css/buttons.css
@@ -8,25 +8,25 @@
}
.buttonicon-headline-h1 {
- background-position: 0px 1px;
+ background-position: -2px 0px;
}
.buttonicon-headline-h2 {
- background-position: 0px -15px;
+ background-position: -2px -16px;
}
.buttonicon-headline-h3 {
- background-position: 0px -31px;
+ background-position: -2px -32px;
}
.buttonicon-headline-h4 {
- background-position: 0px -47px;
+ background-position: -2px -48px;
}
.buttonicon-headline-h5 {
- background-position: 0px -63px;
+ background-position: -2px -64px;
}
.buttonicon-headline-h6 {
- background-position: 0px -79px;
+ background-position: -2px -80px;
}
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;
diff --git a/static/js/shared.js b/static/js/shared.js
deleted file mode 100644
index df88e6b..0000000
--- a/static/js/shared.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var _ = require('ep_etherpad-lite/static/js/underscore');
-
-var tags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
-
-var collectContentPre = function(hook, context){
- var tname = context.tname;
- var state = context.state;
- var lineAttributes = state.lineAttributes
- var tagIndex = _.indexOf(tags, tname);
-
- if (tagIndex >= 0) {
- lineAttributes['heading'] = tags[tagIndex];
- }
-};
-
-var collectContentPost = function(hook, context){
- var tname = context.tname;
- var state = context.state;
- var lineAttributes = state.lineAttributes
- var tagIndex = _.indexOf(tags, tname);
-
- if (tagIndex >= 0) {
- delete lineAttributes['heading'];
- }
-};
-
-exports.collectContentPre = collectContentPre;
-exports.collectContentPost = collectContentPost;