aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etherpad/src/plugins/twitterStyleTags/hooks.js47
-rw-r--r--etherpad/src/plugins/twitterStyleTags/main.js3
2 files changed, 43 insertions, 7 deletions
diff --git a/etherpad/src/plugins/twitterStyleTags/hooks.js b/etherpad/src/plugins/twitterStyleTags/hooks.js
index 65aef83..e3a3e0b 100644
--- a/etherpad/src/plugins/twitterStyleTags/hooks.js
+++ b/etherpad/src/plugins/twitterStyleTags/hooks.js
@@ -1,12 +1,47 @@
import("etherpad.log");
import("dispatch.{Dispatcher,PrefixMatcher,forward}");
import("plugins.twitterStyleTags.controllers.tagBrowser");
-
-function aceGetFilterStack() {
- log.info("aceGetFilterStack");
- return [];
-}
+import("sqlbase.sqlobj");
function handlePath() {
- return [[PrefixMatcher('/ep/tags/'), forward(tagBrowser)]];
+ return [[PrefixMatcher('/ep/tags/'), forward(tagBrowser)]];
}
+
+function padModelWriteToDB(args) {
+ /* Update tags for the pad */
+
+ var new_tags = args.pad.text().match(new RegExp("#[^,#!\\s][^,#!\\s]*", "g"));
+ if (new_tags == null) new_tags = new Array();
+ for (i = 0; i < new_tags.length; i++)
+ new_tags[i] = new_tags[i].substring(1);
+ var new_tags_str = new_tags.join('#')
+
+ var old_tags_row = sqlobj.selectSingle("PAD_TAG_CACHE", { id: args.padId });
+ var old_tags_str;
+ if (old_tags_row !== null)
+ old_tags_str = old_tags_row['TAGS'];
+ else
+ old_tags_str = '';
+
+ var old_tags = old_tags_str != '' ? old_tags_str.split('#') : new Array();
+
+ if (new_tags_str != old_tags_str) {
+ log.info({message: 'Updating tags', new_tags:new_tags, old_tags:old_tags});
+
+ if (old_tags_row)
+ sqlobj.update("PAD_TAG_CACHE", { id: args.padId }, {tags: new_tags.join('#')});
+ else
+ sqlobj.insert("PAD_TAG_CACHE", {id: args.padId, tags: new_tags.join('#')});
+
+ sqlobj.deleteRows("PAD_TAG", {pad_id: args.padId});
+
+ for (i = 0; i < new_tags.length; i++) {
+ var tag_row = sqlobj.selectSingle("TAG", { name: new_tags[i] });
+ if (tag_row === null) {
+ sqlobj.insert("TAG", {name: new_tags[i]});
+ tag_row = sqlobj.selectSingle("TAG", { name: new_tags[i] });
+ }
+ sqlobj.insert("PAD_TAG", {pad_id: args.padId, tag_id: tag_row['ID']});
+ }
+ }
+} \ No newline at end of file
diff --git a/etherpad/src/plugins/twitterStyleTags/main.js b/etherpad/src/plugins/twitterStyleTags/main.js
index f6dd3bf..0154121 100644
--- a/etherpad/src/plugins/twitterStyleTags/main.js
+++ b/etherpad/src/plugins/twitterStyleTags/main.js
@@ -3,12 +3,13 @@ import("plugins.twitterStyleTags.hooks");
import("plugins.twitterStyleTags.static.js.main");
function init() {
- this.hooks = ['handlePath', 'aceGetFilterStack', 'aceCreateDomLine'];
+ this.hooks = ['handlePath', 'aceGetFilterStack', 'aceCreateDomLine', 'padModelWriteToDB'];
this.client = new main.init();
this.description = 'Twitter-style tags';
this.handlePath = hooks.handlePath;
this.aceGetFilterStack = main.aceGetFilterStack;
this.aceCreateDomLine = main.aceCreateDomLine;
+ this.padModelWriteToDB = hooks.padModelWriteToDB;
this.install = install;
this.uninstall = uninstall;