diff --git a/Gulpfile.js b/Gulpfile.js index e50a9e4..fb1a75c 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -13,11 +13,12 @@ var tsProject = $.typescript.createProject('tsconfig.json', { }); gulp.task('scripts', function() { - var tsResult = gulp.src('src/**/*.ts') + var tsResult = gulp.src('src/*.ts') .pipe($.sourcemaps.init()) .pipe($.typescript(tsProject)); return tsResult.js + .pipe($.concat('bundle.js')) .pipe($.ngAnnotate()) .pipe($.sourcemaps.write()) // Now the sourcemaps are added to the .js file .pipe(gulp.dest('tmp')); @@ -65,8 +66,7 @@ gulp.task('dist-node-modules', function () { 'node_modules/bootstrap/**/*', 'node_modules/angular/**/*', 'node_modules/jquery/**/*', - 'node_modules/lodash/**/*', - 'node_modules/requirejs/**/*' + 'node_modules/lodash/**/*' ], {base: 'node_modules'}) .pipe(gulp.dest('tmp/vendor')); }); @@ -89,20 +89,11 @@ gulp.task('serve', ['tmp'], function () { // add browserSync.reload to the tasks array to make // all browsers reload after tasks are complete. - gulp.watch("src/**/*.ts", ['serve-reload-scripts']); + gulp.watch("src/**/*.ts", ['scripts']); gulp.watch([ "src/**/*.html", "src/**/*.css", "src/**/*.js" - ], ['serve-reload-other']); -}); - -gulp.task('serve-reload-scripts', ['scripts'], function (done) { - browserSync.reload; - done(); -}); - -gulp.task('serve-reload-other', ['tmp'], function (done) { - browserSync.reload; - done(); + ], ['tmp']); + gulp.watch("tmp/**/*").on("change", browserSync.reload); }); \ No newline at end of file diff --git a/package.json b/package.json index 4db473c..e3522f1 100644 --- a/package.json +++ b/package.json @@ -23,21 +23,20 @@ }, "homepage": "https://github.com/nilsnh/tag-youre-it", "dependencies": { + "browser-sync": "^2.9.6", + "gulp": "^3.9.0", + "gulp-sourcemaps": "^1.6.0", "angular": "^1.4.7", "bootstrap": "^3.3.5", - "browser-sync": "^2.9.6", "del": "^2.0.2", - "gulp": "^3.9.0", "gulp-concat": "^2.6.0", "gulp-file-include": "^0.13.7", "gulp-flatten": "^0.2.0", "gulp-load-plugins": "^1.0.0", "gulp-ng-annotate": "^1.1.0", - "gulp-sourcemaps": "^1.6.0", "gulp-typescript": "^2.9.2", "jquery": "^2.1.4", "lodash": "^3.10.1", - "merge2": "^0.3.6", - "requirejs": "^2.1.20" + "merge2": "^0.3.6" } } diff --git a/src/content_script_include.js b/src/content_script_include.js index 3a6418b..f993eee 100644 --- a/src/content_script_include.js +++ b/src/content_script_include.js @@ -1,6 +1,6 @@ // Code used by both the local web prototype as well as the plugin. -function injectScripts (tagIt) { +function injectScripts () { // Save a copy of existing angular js and jquery // Source: http://www.mattburkedev.com/multiple-angular-versions-on-the-same-page/ @@ -14,13 +14,14 @@ function injectScripts (tagIt) { function loadAngular () { console.log('loading angular'); - window.name = 'NG_DEFER_BOOTSTRAP!'; loadScript('vendor/angular/angular.js', loadPluginCode); } function loadPluginCode () { console.log('loading tagit'); - tagIt.init(restoreOldAngularAndJquery); + loadScript('bundle.js', function () { + tagIt.init(restoreOldAngularAndJquery); + }); } function restoreOldAngularAndJquery () { diff --git a/src/content_script_web.js b/src/content_script_web.js index cb5f7b2..f56f70d 100644 --- a/src/content_script_web.js +++ b/src/content_script_web.js @@ -2,6 +2,11 @@ @@include('content_script_include.js') -requirejs(['index'], function (tagIt) { - injectScripts(tagIt); //found in the included file -}); \ No newline at end of file +injectScripts(); //found in the included file + +document.addEventListener("DOMContentLoaded", function(event) { + document.getElementById('js-show-menu') + .addEventListener('click', function () { + if (!document.getElementById('tagit-menu')) injectScripts(); + }); +}); diff --git a/src/index.html b/src/index.html index 22f8094..d9b4781 100644 --- a/src/index.html +++ b/src/index.html @@ -5,7 +5,6 @@ - diff --git a/src/index.interfaces.ts b/src/index.interfaces.ts index 0896b3b..c97a561 100644 --- a/src/index.interfaces.ts +++ b/src/index.interfaces.ts @@ -1,33 +1,36 @@ /// -export interface ISynset { - config: Object, - data: { - senses: string[] +module tagIt { + + export interface ISynset { + config: Object, + data: { + senses: string[] + } + } + + export interface IVMScope extends angular.IScope { + vm : Object; + } + + export interface ISense { + explanation: string, + rank: number, + related: string, + senseid: string, + source: string, + word: string + } + + /* + sentence: represents everything contained by punctuations. + context: represents ten chars "in both directions" from the word. + */ + export interface ISenseTag { + userEmail: string, + senseid: string, + sentence: string, + context: string } } -export interface IVMScope extends angular.IScope { - vm : Object; -} - -export interface ISense { - explanation: string, - rank: number, - related: string, - senseid: string, - source: string, - word: string -} - -/* -sentence: represents everything contained by punctuations. -context: represents ten chars "in both directions" from the word. - */ -export interface ISenseTag { - userEmail: string, - senseid: string, - sentence: string, - context: string -} - diff --git a/src/index.ts b/src/index.ts index b7698b1..67cc5c4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,36 +1,34 @@ /// -import { DataService } from './services/data.service'; -import { SelectedWordService } from './services/selectedWord.service'; -import { MenuCtrl } from './menu/menu.controller'; +/// +/// +/// -export function init (callback: () => void) { - var $ = jQuery; +module tagIt { angular.module('tagit', []) .service('DataService', DataService) .service('SelectedWordService', SelectedWordService) .controller('MenuCtrl', MenuCtrl); - $.get('menu.tpl.html', function (htmlData) { - $('body').children().wrapAll('
'); - $('.tagit-body').before(htmlData); - window.name = ''; - - angular.element(document).ready(function () { + export function init (callback: () => void) { + var $ = jQuery; + $.get(chromeUrlTranslator('menu.tpl.html'), function (htmlData) { + $('body').children().wrapAll('
'); + $('.tagit-body').before(htmlData); + window.name = ''; angular.bootstrap(document.getElementById("tagit-menu"), ['tagit']); console.log('TagIt menu loaded'); + if(callback) callback(); }); - if(callback) callback(); - }); - - // function chromeUrlTranslator(relativeUrl : string) { - // if(chrome && chrome.extension) { - // return chrome.extension.getURL(relativeUrl); - // } else { - // relativeUrl; - // } - // } + function chromeUrlTranslator(relativeUrl : string) { + if(chrome && chrome.extension) { + return chrome.extension.getURL(relativeUrl); + } else { + relativeUrl; + } + } + } } diff --git a/src/menu/menu.controller.ts b/src/menu/menu.controller.ts index d1351ea..8d3ae90 100644 --- a/src/menu/menu.controller.ts +++ b/src/menu/menu.controller.ts @@ -1,65 +1,65 @@ -'use strict'; +/// -import { DataService } from '../services/data.service'; -import { SelectedWordService } from '../services/selectedWord.service'; -import { ISense, IVMScope, ISynset } from '../index.interfaces'; +module tagIt { + 'use strict'; -export class MenuCtrl { + export class MenuCtrl { - selectedWord = ""; - senses : Object[]; - dataService : DataService; - selectedWordService : SelectedWordService; - $log : ng.ILogService; - $scope: ng.IScope; + selectedWord = ""; + senses : Object[]; + dataService : DataService; + selectedWordService : SelectedWordService; + $log : ng.ILogService; + $scope: ng.IScope; - /* @ngInject */ - constructor ($scope: IVMScope, $log: angular.ILogService, - DataService: DataService, - SelectedWordService: SelectedWordService) { - $scope.vm = this; - this.$log = $log; - this.$scope = $scope; - this.dataService = DataService; - this.selectedWordService = SelectedWordService; + /* @ngInject */ + constructor ($scope: IVMScope, $log: angular.ILogService, + DataService: DataService, + SelectedWordService: SelectedWordService) { + $scope.vm = this; + this.$log = $log; + this.$scope = $scope; + this.dataService = DataService; + this.selectedWordService = SelectedWordService; - // Wire up clicklistener - this.selectedWordService.wireUpListener(this.onWordSelected, - this.onWordDeSelected); - } + // Wire up clicklistener + this.selectedWordService.wireUpListener(this.onWordSelected, + this.onWordDeSelected); + } - onTagSelect (sense: ISense) { - this.selectedWordService.addTagToPage(sense); - this.dataService.storeTaggingInformation({}); - } + onTagSelect (sense: ISense) { + this.selectedWordService.addTagToPage(sense); + this.dataService.storeTaggingInformation({}); + } - onWordSelected = (newWord : string) => { - this.selectedWord = newWord; - this.dataService.callServer(newWord) - .then((synsets : Object) => { - this.$log.debug(synsets); - this.senses = this.dataService.processSynsets( synsets); + onWordSelected = (newWord : string) => { + this.selectedWord = newWord; + this.dataService.callServer(newWord) + .then((synsets : Object) => { + this.$log.debug(synsets); + this.senses = this.dataService.processSynsets( synsets); + }); + } + + onWordDeSelected = () => { + this.$log.debug("onWordDeSelected"); + this.selectedWord = ""; + this.senses = []; + this.$scope.$apply(); + } + + selectWord (sense : ISense) { + this.dataService.storeTaggingInformation({ + mail: "mail@nilsnh.no", + sentence: "whole sentence", + senseid: sense.senseid, }); - } + } - onWordDeSelected = () => { - this.$log.debug("onWordDeSelected"); - this.selectedWord = ""; - this.senses = []; - this.$scope.$apply(); - } + removeMenu() { + $('.tagit-body').children().unwrap(); + $('.tagit-menu').remove(); + } - 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/services/data.service.ts b/src/services/data.service.ts index 3edeee3..91accfe 100644 --- a/src/services/data.service.ts +++ b/src/services/data.service.ts @@ -1,29 +1,31 @@ +/// + 'use strict'; -import { ISynset } from '../index.interfaces'; +module tagIt { -export class DataService { + export class DataService { - $http : ng.IHttpService; - $log : ng.ILogService; - private serverUrl = 'http://lexitags.dyndns.org/server/lexitags2/Semtags?data='; + $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; - } + /* @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)); - } + callServer (word: string) { + if (!word) { + return; + }; + return this.$http.get(this.serverUrl + this.createQuery(word)); + } - processSynsets (synsets: ISynset) : string[] { - return synsets.data.senses; - } + processSynsets (synsets: ISynset) : string[] { + return synsets.data.senses; + } // save tagging information // Params: email, tagging, sentence @@ -34,6 +36,7 @@ export class DataService { private createQuery (word: string) { return '{"word":"QUERYTOREPLACE"}' - .replace(/QUERYTOREPLACE/, word); + .replace(/QUERYTOREPLACE/, word); } } +} \ No newline at end of file diff --git a/src/services/selectedWord.service.ts b/src/services/selectedWord.service.ts index 9258d5c..30b3d84 100644 --- a/src/services/selectedWord.service.ts +++ b/src/services/selectedWord.service.ts @@ -1,44 +1,43 @@ -import { ISense } from '../index.interfaces'; - 'use strict'; -/** - * Takes care of figuring out what word - * is selected. - */ -export class SelectedWordService { +module tagIt { + /** + * Takes care of figuring out what word + * is selected. + */ + export class SelectedWordService { - $log : ng.ILogService; - currentSelectionRange : any; + $log : ng.ILogService; + currentSelectionRange : any; - /* @ngInject */ - constructor($log: ng.ILogService) { - this.$log = $log; - } + /* @ngInject */ + constructor($log: ng.ILogService) { + this.$log = $log; + } - wireUpListener (callbackOnSelectFunc : (result : Object) => void, - callbackOnDeSelectFunc : () => void) { - var that = this; - document.getElementById('tagit-body') - .addEventListener('click', (evt : any) => { - if (!document.hasFocus()) { - return true; - } - var selection = that.findSelection(); - if(selection) { - this.currentSelectionRange = selection.getRangeAt(0).cloneRange(); - callbackOnSelectFunc(joinLongWords(selection.toString())); + wireUpListener (callbackOnSelectFunc : (result : Object) => void, + callbackOnDeSelectFunc : () => void) { + var that = this; + document.getElementById('tagit-body') + .addEventListener('click', (evt : any) => { + 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); - function joinLongWords (possiblyLongWord: string) { - return possiblyLongWord.replace(" ","_"); + }, false); + function joinLongWords (possiblyLongWord: string) { + return possiblyLongWord.replace(" ","_"); + } } - } // place spans around a tagged word. addTagToPage (sense : ISense) { @@ -74,8 +73,9 @@ export class SelectedWordService { if (selectedText) { this.$log.debug('text that was selected: ' + selectedText); return currentSelection; - } else { - return; - } + } else { + return; } + } + } } diff --git a/tsconfig.json b/tsconfig.json index 91ddfdb..3f312f9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,7 @@ { "compilerOptions": { - "module": "amd", "noImplicitAny": true, - "target": "es5" + "out": "output.js" }, "files": [ "src/index.ts"