diff --git a/AndorsTrailEdit/js/controllers/actorcondition.js b/AndorsTrailEdit/js/controllers/actorcondition.js index 008bb35fa..a6c726398 100644 --- a/AndorsTrailEdit/js/controllers/actorcondition.js +++ b/AndorsTrailEdit/js/controllers/actorcondition.js @@ -3,6 +3,8 @@ var ATEditor = (function(ATEditor, model) { function ActorConditionController($scope, $routeParams) { $scope.datasource = model.actorConditions; $scope.obj = $scope.datasource.findById($routeParams.id); + $scope.previous = ATEditor.navigationFunctions.editByIndexOffset($scope.datasource, $scope.obj, -1); + $scope.next = ATEditor.navigationFunctions.editByIndexOffset($scope.datasource, $scope.obj, 1); }; ATEditor.controllers = ATEditor.controllers || {}; diff --git a/AndorsTrailEdit/js/controllers/dialogue.js b/AndorsTrailEdit/js/controllers/dialogue.js index 188f5d573..1bdb3d017 100644 --- a/AndorsTrailEdit/js/controllers/dialogue.js +++ b/AndorsTrailEdit/js/controllers/dialogue.js @@ -18,7 +18,7 @@ var ATEditor = (function(ATEditor, model, defaults, importExport, _) { if (phraseId) { var nextPhrase = model.dialogue.findById(phraseId); if (nextPhrase) { - window.location = "#/" + model.dialogue.id + "/edit/" + phraseId; + ATEditor.navigationFunctions.editObjId(model.dialogue, phraseId); return; } } else { @@ -31,7 +31,7 @@ var ATEditor = (function(ATEditor, model, defaults, importExport, _) { phraseId = newPhrase.id; obj[prop] = phraseId; - window.location = "#/" + model.dialogue.id + "/edit/" + phraseId; + ATEditor.navigationFunctions.editObjId(model.dialogue, phraseId); }; $scope.selectReply = function(reply) { $scope.reply = reply; diff --git a/AndorsTrailEdit/js/controllers/item.js b/AndorsTrailEdit/js/controllers/item.js index 1d71d08fe..825c4522c 100644 --- a/AndorsTrailEdit/js/controllers/item.js +++ b/AndorsTrailEdit/js/controllers/item.js @@ -46,6 +46,9 @@ var ATEditor = (function(ATEditor, model, importExport, settings, ATModelFunctio var idx = list.indexOf(cond); list.splice(idx, 1); }; + + $scope.previous = ATEditor.navigationFunctions.editByIndexOffset(model.items, $scope.obj, -1); + $scope.next = ATEditor.navigationFunctions.editByIndexOffset(model.items, $scope.obj, 1); } function ItemTableController($scope, $routeParams) { @@ -56,7 +59,7 @@ var ATEditor = (function(ATEditor, model, importExport, settings, ATModelFunctio setCategoryToObject(item, model.itemCategories); }); $scope.edit = function(item) { - window.location = "#/" + section.id + "/edit/" + item.id; + ATEditor.navigationFunctions.editObj(section, item); }; $scope.addObj = function() { importExport.prepareObjectsForEditor(section, [ section.addNew() ]); diff --git a/AndorsTrailEdit/js/controllers/monster.js b/AndorsTrailEdit/js/controllers/monster.js index 10469e55b..3ab9dfe77 100644 --- a/AndorsTrailEdit/js/controllers/monster.js +++ b/AndorsTrailEdit/js/controllers/monster.js @@ -13,6 +13,8 @@ var ATEditor = (function(ATEditor, model, importExport, settings, ATModelFunctio var idx = list.indexOf(cond); list.splice(idx, 1); }; + $scope.previous = ATEditor.navigationFunctions.editByIndexOffset(model.monsters, $scope.obj, -1); + $scope.next = ATEditor.navigationFunctions.editByIndexOffset(model.monsters, $scope.obj, 1); } function MonsterTableController($scope, $routeParams) { @@ -20,7 +22,7 @@ var ATEditor = (function(ATEditor, model, importExport, settings, ATModelFunctio $scope.monsters = section.items; $scope.getExperience = ATModelFunctions.monsterFunctions.getMonsterExperience; $scope.edit = function(monster) { - window.location = "#/" + section.id + "/edit/" + monster.id; + ATEditor.navigationFunctions.editObj(section, monster); }; $scope.addObj = function() { importExport.prepareObjectsForEditor(section, [ section.addNew() ]); diff --git a/AndorsTrailEdit/js/controllers/navigation.js b/AndorsTrailEdit/js/controllers/navigation.js index 473ded790..d19eca656 100644 --- a/AndorsTrailEdit/js/controllers/navigation.js +++ b/AndorsTrailEdit/js/controllers/navigation.js @@ -1,5 +1,20 @@ var ATEditor = (function(ATEditor, model, importExport, exampleData) { + function editObjId(section, objId) { + window.location = "#/" + section.id + "/edit/" + objId; + } + function editObj(section, obj) { + editObjId(section, obj.id); + } + + function editByIndexOffset(section, obj, offset) { + return function() { + var nextObj = section.findByIndexOffset(obj, offset); + if (!nextObj) { return; } + editObj(section, nextObj); + }; + } + function NavigationController($scope, $routeParams, $http) { $scope.sections = model.sections; $scope.previousItems = []; @@ -12,7 +27,7 @@ var ATEditor = (function(ATEditor, model, importExport, exampleData) { if ($scope.previousItems.length > 5) { $scope.previousItems.pop(); } - window.location = "#/" + section.id + "/edit/" + obj.id; + editObj(section, obj); }; $scope.addObj = function(section) { var item = section.addNew(); @@ -51,6 +66,11 @@ var ATEditor = (function(ATEditor, model, importExport, exampleData) { ATEditor.controllers = ATEditor.controllers || {}; ATEditor.controllers.NavigationController = NavigationController; + ATEditor.navigationFunctions = { + editObj: editObj + ,editObjId: editObjId + ,editByIndexOffset: editByIndexOffset + }; return ATEditor; })(ATEditor, ATEditor.model, ATEditor.importExport, ATEditor.exampleData); diff --git a/AndorsTrailEdit/js/datastore.js b/AndorsTrailEdit/js/datastore.js index 25a234613..662e6d0e2 100644 --- a/AndorsTrailEdit/js/datastore.js +++ b/AndorsTrailEdit/js/datastore.js @@ -83,6 +83,15 @@ var ATEditor = (function(ATEditor, _) { this.ensureUniqueId = function(obj) { obj[options.idField] = this.findFirstFreeId(obj[options.idField]); }; + this.findByIndexOffset = function(obj, offset) { + if (_.isEmpty(this.items)) { return; } + + var idx = _.indexOf(this.items, obj); + idx = idx + offset; + if (idx < 0) { idx = this.items.length - 1; } + if (idx >= this.items.length) { idx = 0; } + return this.items[idx]; + }; }; return ATEditor; diff --git a/AndorsTrailEdit/partials/edit_actorcondition.html b/AndorsTrailEdit/partials/edit_actorcondition.html index f5e5e34ab..95e0379ab 100644 --- a/AndorsTrailEdit/partials/edit_actorcondition.html +++ b/AndorsTrailEdit/partials/edit_actorcondition.html @@ -1,4 +1,8 @@