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;