From cf0a68915ab471b4cbf159c7e11ffca367d6824d Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Sun, 8 Apr 2018 15:17:42 +0200 Subject: [PATCH] feat: allow directly editing other task titles and inputs on click --- .../edit-on-click/_edit-on-click-d.scss | 2 +- .../scripts/edit-on-click/edit-on-click-d.js | 19 +++++++++++++------ app-src/scripts/task-list/task-list-d.html | 2 +- app-src/scripts/task-list/task-list-d.js | 16 +++++++++++++++- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/app-src/scripts/edit-on-click/_edit-on-click-d.scss b/app-src/scripts/edit-on-click/_edit-on-click-d.scss index 9858fe8ece..e71a33b81d 100644 --- a/app-src/scripts/edit-on-click/_edit-on-click-d.scss +++ b/app-src/scripts/edit-on-click/_edit-on-click-d.scss @@ -21,7 +21,7 @@ @keyframes toggle-edit-on-click-ani { 0% { - transform: scaleY(0); + transform: scaleY(0.5); } 100% { transform: scaleY(1); diff --git a/app-src/scripts/edit-on-click/edit-on-click-d.js b/app-src/scripts/edit-on-click/edit-on-click-d.js index 64d8c5d105..9ee56f3e52 100644 --- a/app-src/scripts/edit-on-click/edit-on-click-d.js +++ b/app-src/scripts/edit-on-click/edit-on-click-d.js @@ -29,11 +29,17 @@ }; } + function linkFn(scope, el, attrs, ngModel) { let lastVal; + // to do this better + setTimeout(() => { + lastVal = el.html().replace(/<\S[^><]*>/g, ''); + }); + el[0].setAttribute('contenteditable', true); - function execCb() { + function execCb(event) { // deselect all text //if (window.getSelection) { // window.getSelection().removeAllRanges(); @@ -48,7 +54,8 @@ scope.editOnClickOnEditFinished({ isChanged, newVal: curVal, - $taskEl: el[0].closest('.task') + $taskEl: el[0].closest('.task'), + event, }); } } @@ -59,6 +66,8 @@ curVal = curVal.replace(/<\S[^><]*>/g, ''); const isChanged = lastVal !== curVal; + console.log(curVal, lastVal, isChanged); + if (isChanged) { ngModel.$setViewValue(curVal); lastVal = curVal; @@ -76,15 +85,13 @@ scope.$apply(read); }); - el.bind('blur', () => { + el.bind('blur', (ev) => { scope.$apply(read); - execCb(); + execCb(ev); }); // prevent keyboard shortcuts from firing when here el[0].addEventListener('keydown', (ev) => { - console.log('keydown'); - ev.stopPropagation(); }); diff --git a/app-src/scripts/task-list/task-list-d.html b/app-src/scripts/task-list/task-list-d.html index 1c6fee2a7e..3e70d54f87 100644 --- a/app-src/scripts/task-list/task-list-d.html +++ b/app-src/scripts/task-list/task-list-d.html @@ -69,7 +69,7 @@ layout="row" layout-align="center center" tabindex="2" - edit-on-click-on-edit-finished="$ctrl.focusTaskEl($taskEl); $ctrl.onChangeTitle(task, isChanged, newVal);" + edit-on-click-on-edit-finished="$ctrl.focusTaskEl($taskEl, event); $ctrl.onChangeTitle(task, isChanged, newVal);" edit-on-click-ev-id="task.id" edit-on-click ng-model="task.title"> diff --git a/app-src/scripts/task-list/task-list-d.js b/app-src/scripts/task-list/task-list-d.js index e8c122d305..d5e4778f9c 100644 --- a/app-src/scripts/task-list/task-list-d.js +++ b/app-src/scripts/task-list/task-list-d.js @@ -14,6 +14,16 @@ const KEY_RIGHT = 39; const KEY_DOWN = 40; + function isTargetAnInput(target) { + if (target) { + const isContentEditable = !!target.getAttribute('contenteditable'); + const isInput = (target.tagName === 'INPUT') || (target.tagName === 'TEXTAREA'); + return isContentEditable || isInput; + } + + return false; + } + class TaskListCtrl { /* @ngInject */ constructor(Dialogs, $rootScope, $mdToast, $timeout, Tasks, EDIT_ON_CLICK_TOGGLE_EV, $scope, ShortSyntax, $element, Jira, CheckShortcutKeyCombo, Util) { @@ -115,7 +125,11 @@ } } - focusTaskEl(taskEl) { + focusTaskEl(taskEl, ev) { + if (ev && isTargetAnInput(ev.relatedTarget)) { + return; + } + if (taskEl) { taskEl.focus(); }