diff --git a/src/index.ts b/src/index.ts
index b7698b1..6cef548 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,6 +1,6 @@
///
-import { DataService } from './services/data.service';
+import { BackendService } from './services/backend.service';
import { SelectedWordService } from './services/selectedWord.service';
import { MenuCtrl } from './menu/menu.controller';
@@ -8,7 +8,7 @@ export function init (callback: () => void) {
var $ = jQuery;
angular.module('tagit', [])
- .service('DataService', DataService)
+ .service('BackendService', BackendService)
.service('SelectedWordService', SelectedWordService)
.controller('MenuCtrl', MenuCtrl);
diff --git a/src/menu/menu.controller.ts b/src/menu/menu.controller.ts
index d1351ea..521c348 100644
--- a/src/menu/menu.controller.ts
+++ b/src/menu/menu.controller.ts
@@ -1,6 +1,6 @@
'use strict';
-import { DataService } from '../services/data.service';
+import { BackendService } from '../services/backend.service';
import { SelectedWordService } from '../services/selectedWord.service';
import { ISense, IVMScope, ISynset } from '../index.interfaces';
@@ -8,19 +8,19 @@ export class MenuCtrl {
selectedWord = "";
senses : Object[];
- dataService : DataService;
+ backendService : BackendService;
selectedWordService : SelectedWordService;
$log : ng.ILogService;
$scope: ng.IScope;
/* @ngInject */
constructor ($scope: IVMScope, $log: angular.ILogService,
- DataService: DataService,
+ BackendService: BackendService,
SelectedWordService: SelectedWordService) {
$scope.vm = this;
this.$log = $log;
this.$scope = $scope;
- this.dataService = DataService;
+ this.backendService = BackendService;
this.selectedWordService = SelectedWordService;
// Wire up clicklistener
@@ -30,15 +30,16 @@ export class MenuCtrl {
onTagSelect (sense: ISense) {
this.selectedWordService.addTagToPage(sense);
- this.dataService.storeTaggingInformation({});
+ this.backendService.storeTaggingInformation(
+ sense, this.selectedWordService.getClonedSelectionRange());
}
onWordSelected = (newWord : string) => {
this.selectedWord = newWord;
- this.dataService.callServer(newWord)
+ this.backendService.callServer(newWord)
.then((synsets : Object) => {
this.$log.debug(synsets);
- this.senses = this.dataService.processSynsets( synsets);
+ this.senses = this.backendService.processSynsets( synsets);
});
}
@@ -49,14 +50,6 @@ export class MenuCtrl {
this.$scope.$apply();
}
- selectWord (sense : ISense) {
- this.dataService.storeTaggingInformation({
- mail: "mail@nilsnh.no",
- sentence: "whole sentence",
- senseid: sense.senseid,
- });
- }
-
removeMenu() {
$('.tagit-body').children().unwrap();
$('.tagit-menu').remove();
diff --git a/src/plugin-specific/popup.html b/src/plugin-specific/popup.html
index 659fbf1..6c67329 100644
--- a/src/plugin-specific/popup.html
+++ b/src/plugin-specific/popup.html
@@ -4,6 +4,7 @@
Popup menu for TagIt plugin
+
diff --git a/src/services/backend.service.ts b/src/services/backend.service.ts
new file mode 100644
index 0000000..5d87cc6
--- /dev/null
+++ b/src/services/backend.service.ts
@@ -0,0 +1,46 @@
+'use strict';
+
+import { ISynset, ISense } from '../index.interfaces';
+
+export class BackendService {
+
+ $http : ng.IHttpService;
+ $log : ng.ILogService;
+ private serverUrl = 'http://lexitags.dyndns.org/server/lexitags2/Semtags?data=';
+
+ /* @ngInject */
+ constructor($http: ng.IHttpService, $log: ng.ILogService) {
+ this.$http = $http;
+ this.$log = $log;
+ }
+
+ callServer (word: string) {
+ if (!word) {
+ return;
+ };
+ return this.$http.get(this.serverUrl + this.createQuery(word));
+ }
+
+ processSynsets (synsets: ISynset) : string[] {
+ return synsets.data.senses;
+ }
+
+ // save tagging information
+ storeTaggingInformation (sense: ISense, range: Range ) {
+ this.$log.debug('storeTaggingInformation() was called');
+ return this.buildTagResponse(sense, range);
+ }
+
+ buildTagResponse (sense: ISense, range: Range) {
+ debugger;
+ return {
+ "sense": sense,
+ "selectionRange": range
+ }
+ }
+
+ private createQuery (word: string) {
+ return '{"word":"QUERYTOREPLACE"}'
+ .replace(/QUERYTOREPLACE/, word);
+ }
+}
diff --git a/src/services/data.service.ts b/src/services/data.service.ts
deleted file mode 100644
index 3edeee3..0000000
--- a/src/services/data.service.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-'use strict';
-
-import { ISynset } from '../index.interfaces';
-
-export class DataService {
-
- $http : ng.IHttpService;
- $log : ng.ILogService;
- private serverUrl = 'http://lexitags.dyndns.org/server/lexitags2/Semtags?data=';
-
- /* @ngInject */
- constructor($http: ng.IHttpService, $log: ng.ILogService) {
- this.$http = $http;
- this.$log = $log;
- }
-
- callServer (word: string) {
- if (!word) {
- return;
- };
- return this.$http.get(this.serverUrl + this.createQuery(word));
- }
-
- processSynsets (synsets: ISynset) : string[] {
- return synsets.data.senses;
- }
-
- // save tagging information
- // Params: email, tagging, sentence
- storeTaggingInformation (tag : Object) {
- this.$log.debug('storeTaggingInformation() was called');
- this.$log.debug(tag);
- }
-
- private createQuery (word: string) {
- return '{"word":"QUERYTOREPLACE"}'
- .replace(/QUERYTOREPLACE/, word);
- }
- }
diff --git a/src/services/selectedWord.service.ts b/src/services/selectedWord.service.ts
index ac35ad1..95054a6 100644
--- a/src/services/selectedWord.service.ts
+++ b/src/services/selectedWord.service.ts
@@ -24,17 +24,16 @@ export class SelectedWordService {
if (!document.hasFocus()) {
return true;
}
- var selection = that.findSelection();
- if(selection) {
- this.currentSelectionRange = selection.getRangeAt(0).cloneRange();
- callbackOnSelectFunc(joinLongWords(selection.toString()));
- } else {
- callbackOnDeSelectFunc();
- }
- // clicks should propagate upwards to other things
- // evt.stopPropagation();
- // evt.preventDefault();
- }, false);
+ if(this.getSelection()) {
+ this.currentSelectionRange = this.getClonedSelectionRange();
+ callbackOnSelectFunc(joinLongWords(this.getSelection().toString()));
+ } else {
+ callbackOnDeSelectFunc();
+ }
+ // clicks should propagate upwards to other things
+ // evt.stopPropagation();
+ // evt.preventDefault();
+ }, false);
function joinLongWords (possiblyLongWord: string) {
return possiblyLongWord.replace(" ","_");
}
@@ -42,18 +41,30 @@ export class SelectedWordService {
// place spans around a tagged word.
addTagToPage (sense : ISense) {
+ function createSpan () {
+ var span : HTMLSpanElement = document.createElement('span');
+ span.id = sense.senseid;
+ span.title = sense.explanation;
+ span.className = 'tagit-tag';
+ return span;
+ }
+
var windowSelection = window.getSelection();
- var range = this.currentSelectionRange;
- var span : HTMLSpanElement = document.createElement('span');
- span.id = sense.senseid;
- span.title = sense.explanation;
- span.className = 'tagit-tag';
- range.surroundContents(span);
- windowSelection.removeAllRanges();
- // windowSelection.addRange(range);
+ var originalRange = this.getClonedSelectionRange();
+ var rangeToChange = this.getClonedSelectionRange();
+ rangeToChange.surroundContents(createSpan());
+ windowSelection.removeAllRanges(); // unselect from page
this.$log.debug('addTagToPage');
}
+ public getSelection () {
+ return this.findSelection();
+ }
+
+ public getClonedSelectionRange () {
+ return this.findSelection().getRangeAt(0).cloneRange();
+ }
+
private findSelection () {
var focused : any = document.activeElement;
var selectedText : string;