From 2cc4de55a68f765c2fcc20739a74f3f4cf0ec4db Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Thu, 12 Jan 2017 21:45:21 +0100 Subject: [PATCH] add nifty short syntax --- app/index.html | 2 ++ app/scripts/_app.js | 3 ++ .../main/global-services/short-syntax-s.js | 34 +++++++++++++++++++ .../global-services/short-syntax-s.spec.js | 17 ++++++++++ app/scripts/main/global-services/tasks-s.js | 5 +-- app/scripts/routes/settings/settings-c.html | 23 ++++++------- app/scripts/task-list/task-list-d.html | 2 +- app/scripts/task-list/task-list-d.js | 6 +++- 8 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 app/scripts/main/global-services/short-syntax-s.js create mode 100644 app/scripts/main/global-services/short-syntax-s.spec.js diff --git a/app/index.html b/app/index.html index 9c9a1025d7..a008d44c57 100644 --- a/app/index.html +++ b/app/index.html @@ -129,7 +129,9 @@ TODO configure more restrictive Content-Security-Policy + + diff --git a/app/scripts/_app.js b/app/scripts/_app.js index 822ce5d402..46c37c16ca 100644 --- a/app/scripts/_app.js +++ b/app/scripts/_app.js @@ -45,6 +45,9 @@ git: { projectDir: undefined }, + config: { + isShortSyntaxEnabled: true + }, jiraSettings: { isFirstLogin: true, defaultTransitionInProgress: undefined, diff --git a/app/scripts/main/global-services/short-syntax-s.js b/app/scripts/main/global-services/short-syntax-s.js new file mode 100644 index 0000000000..c837473a63 --- /dev/null +++ b/app/scripts/main/global-services/short-syntax-s.js @@ -0,0 +1,34 @@ +/** + * @ngdoc service + * @name superProductivity.ShortSyntax + * @description + * # ShortSyntax + * Service in the superProductivity. + */ + +(function () { + 'use strict'; + + angular + .module('superProductivity') + .service('ShortSyntax', ShortSyntax); + + /* @ngInject */ + function ShortSyntax(ParseDuration) { + + const timeEstimateRegExp = / t[0-9]+(m|h|d)$/i; + + return (task) => { + if (!task.originalKey && !task.timeEstimate && !task.subTasks) { + let matches = timeEstimateRegExp.exec(task.title); + if (matches) { + task.timeEstimate = ParseDuration.fromString(matches[0].replace(' t', '')); + task.title = task.title.replace(matches[0], ''); + } + } + return task; + }; + } + +}) +(); diff --git a/app/scripts/main/global-services/short-syntax-s.spec.js b/app/scripts/main/global-services/short-syntax-s.spec.js new file mode 100644 index 0000000000..7cd959e1c9 --- /dev/null +++ b/app/scripts/main/global-services/short-syntax-s.spec.js @@ -0,0 +1,17 @@ +'use strict'; + +describe('Service: ShortSyntax', function () { + // load the service's module + beforeEach(module('superProductivity')); + + // instantiate service + var ShortSyntax; + beforeEach(inject(function (_ShortSyntax_) { + ShortSyntax = _ShortSyntax_; + })); + + it('should be defined', function () { + expect(true).toBe(true); + }); + +}); \ No newline at end of file diff --git a/app/scripts/main/global-services/tasks-s.js b/app/scripts/main/global-services/tasks-s.js index 363ff03601..76b9d7d766 100644 --- a/app/scripts/main/global-services/tasks-s.js +++ b/app/scripts/main/global-services/tasks-s.js @@ -14,7 +14,7 @@ .service('Tasks', Tasks); /* @ngInject */ - function Tasks($localStorage, Uid, $window, $rootScope, Dialogs, IS_ELECTRON, SimpleToast) { + function Tasks($localStorage, Uid, $window, $rootScope, Dialogs, IS_ELECTRON, SimpleToast, ShortSyntax) { const IPC_EVENT_IDLE = 'WAS_IDLE'; const IPC_EVENT_UPDATE_TIME_SPEND_FOR_CURRENT = 'UPDATE_TIME_SPEND'; const IPC_EVENT_CURRENT_TASK_UPDATED = 'CHANGED_CURRENT_TASK'; @@ -282,7 +282,7 @@ }; this.createTask = (task) => { - return { + let transformedTask = { title: task.title, id: Uid(), created: moment(), @@ -301,6 +301,7 @@ originalComments: task.originalComments, originalUpdated: task.originalUpdated }; + return ShortSyntax(transformedTask); }; this.updateToday = (tasks) => { diff --git a/app/scripts/routes/settings/settings-c.html b/app/scripts/routes/settings/settings-c.html index a7acdd6cbf..1831bcc9c9 100644 --- a/app/scripts/routes/settings/settings-c.html +++ b/app/scripts/routes/settings/settings-c.html @@ -200,20 +200,17 @@ Import Settings -
+ +
+

Misc

- - +
+ + Use short syntax (e.g. 'TaskTitleBla e:30m') + +
- Import settings - - - - -
+ diff --git a/app/scripts/task-list/task-list-d.html b/app/scripts/task-list/task-list-d.html index 70a0e7dca4..c6cf57b009 100644 --- a/app/scripts/task-list/task-list-d.html +++ b/app/scripts/task-list/task-list-d.html @@ -50,7 +50,7 @@ {{ task.title }} diff --git a/app/scripts/task-list/task-list-d.js b/app/scripts/task-list/task-list-d.js index e8890c852c..e43923bb3e 100644 --- a/app/scripts/task-list/task-list-d.js +++ b/app/scripts/task-list/task-list-d.js @@ -37,7 +37,7 @@ } /* @ngInject */ - function TaskListCtrl(Dialogs, $mdToast, $timeout, $window, Tasks, EDIT_ON_CLICK_TOGGLE_EV, $scope) { + function TaskListCtrl(Dialogs, $mdToast, $timeout, $window, Tasks, EDIT_ON_CLICK_TOGGLE_EV, $scope, ShortSyntax) { let vm = this; let lastFocusedTaskEl; @@ -124,6 +124,10 @@ } }; + vm.onChangeTitle = (task) => { + ShortSyntax(task); + }; + vm.handleKeyPress = ($event, task, $index) => { let taskEl = $event.currentTarget || $event.srcElement || $event.originalTarget; lastFocusedTaskEl = taskEl;