From: Mike Rylander Date: Mon, 16 Feb 2015 21:12:24 +0000 (-0500) Subject: LP#1402797 handle up/down arrow (navigate) and ctrl + up/down (duplicate field) X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=591d4092dfd1bb8c343413af5f9ed9a3aed43f07;p=evergreen%2Fmasslnc.git LP#1402797 handle up/down arrow (navigate) and ctrl + up/down (duplicate field) Signed-off-by: Mike Rylander Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/web/js/ui/default/staff/cat/services/marcedit.js b/Open-ILS/web/js/ui/default/staff/cat/services/marcedit.js index a127aa656f..f6eab1566d 100644 --- a/Open-ILS/web/js/ui/default/staff/cat/services/marcedit.js +++ b/Open-ILS/web/js/ui/default/staff/cat/services/marcedit.js @@ -501,6 +501,111 @@ angular.module('egMarcMod', ['egCoreMod', 'ui.bootstrap']) event_return = false; + } else if (event.keyCode == 38) { + if (event.ctrlKey) { // copy the field up + var index_field = event.data.scope.field.position; + + var field_obj; + if (event.data.scope.field.isControlfield()) { + field_obj = new MARC.Field({ + tag : event.data.scope.field.tag, + data : event.data.scope.field.data + }); + } else { + var sf_clone = []; + for (var i in event.data.scope.field.subfields) { + sf_clone.push(event.data.scope.field.subfields[i].slice()); + } + field_obj = new MARC.Field({ + tag : event.data.scope.field.tag, + ind1 : event.data.scope.field.ind1, + ind2 : event.data.scope.field.ind2, + subfields : sf_clone + }); + } + + + event.data.scope.field.record.insertFieldsBefore( + event.data.scope.field, + field_obj + ); + + $scope.current_event_target = 'r' + $scope.recordId + + 'f' + index_field + 'tag'; + + $scope.current_event_target_cursor_pos = 0; + $scope.current_event_target_cursor_pos_end = 3; + $scope.force_render = true; + + $timeout(function(){$scope.$digest()}).then(setCaret); + + } else { // jump to prev field + if (event.data.scope.field.position > 0) { + $timeout(function(){ + $scope.current_event_target_cursor_pos = 0; + $scope.current_event_target_cursor_pos_end = 0; + $scope.current_event_target = 'r' + $scope.recordId + + 'f' + (event.data.scope.field.position - 1) + + 'tag'; + }).then(setCaret); + } + } + + event_return = false; + + } else if (event.keyCode == 40) { // down arrow... + if (event.ctrlKey) { // copy the field down + + var index_field = event.data.scope.field.position; + var new_field = index_field + 1; + + var field_obj; + if (event.data.scope.field.isControlfield()) { + field_obj = new MARC.Field({ + tag : event.data.scope.field.tag, + data : event.data.scope.field.data + }); + } else { + var sf_clone = []; + for (var i in event.data.scope.field.subfields) { + sf_clone.push(event.data.scope.field.subfields[i].slice()); + } + field_obj = new MARC.Field({ + tag : event.data.scope.field.tag, + ind1 : event.data.scope.field.ind1, + ind2 : event.data.scope.field.ind2, + subfields : sf_clone + }); + } + + event.data.scope.field.record.insertFieldsAfter( + event.data.scope.field, + field_obj + ); + + $scope.current_event_target = 'r' + $scope.recordId + + 'f' + new_field + 'tag'; + + $scope.current_event_target_cursor_pos = 0; + $scope.current_event_target_cursor_pos_end = 3; + $scope.force_render = true; + + $timeout(function(){$scope.$digest()}).then(setCaret); + + } else { // jump to next field + if (event.data.scope.field.record.fields[event.data.scope.field.position + 1]) { + $timeout(function(){ + $scope.current_event_target_cursor_pos = 0; + $scope.current_event_target_cursor_pos_end = 0; + $scope.current_event_target = 'r' + $scope.recordId + + 'f' + (event.data.scope.field.position + 1) + + 'tag'; + }).then(setCaret); + } + } + + event_return = false; + } else { // Assumes only marc editor elements have IDs that can trigger this event handler. $scope.current_event_target = $(event.target).attr('id'); if ($scope.current_event_target) { @@ -516,16 +621,20 @@ angular.module('egMarcMod', ['egCoreMod', 'ui.bootstrap']) function setCaret() { if ($scope.current_event_target) { + console.log("Putting caret in " + $scope.current_event_target); if (!$scope.current_event_target_cursor_pos_end) $scope.current_event_target_cursor_pos_end = $scope.current_event_target_cursor_pos var element = $('#'+$scope.current_event_target).get(0); if (element) { element.focus(); - element.setSelectionRange( - $scope.current_event_target_cursor_pos, - $scope.current_event_target_cursor_pos_end - ); + if (element.setSelectionRange) { + element.setSelectionRange( + $scope.current_event_target_cursor_pos, + $scope.current_event_target_cursor_pos_end + ); + } + $scope.current_event_cursor_pos_end = null; $scope.current_event_target = null; } }