| angular.module('ui.bootstrap.stackedMap', []) |
| /** |
| * A helper, internal data structure that acts as a map but also allows getting / removing |
| * elements in the LIFO order |
| */ |
| .factory('$$stackedMap', function() { |
| return { |
| createNew: function() { |
| var stack = []; |
| |
| return { |
| add: function(key, value) { |
| stack.push({ |
| key: key, |
| value: value |
| }); |
| }, |
| get: function(key) { |
| for (var i = 0; i < stack.length; i++) { |
| if (key == stack[i].key) { |
| return stack[i]; |
| } |
| } |
| }, |
| keys: function() { |
| var keys = []; |
| for (var i = 0; i < stack.length; i++) { |
| keys.push(stack[i].key); |
| } |
| return keys; |
| }, |
| top: function() { |
| return stack[stack.length - 1]; |
| }, |
| remove: function(key) { |
| var idx = -1; |
| for (var i = 0; i < stack.length; i++) { |
| if (key == stack[i].key) { |
| idx = i; |
| break; |
| } |
| } |
| return stack.splice(idx, 1)[0]; |
| }, |
| removeTop: function() { |
| return stack.splice(stack.length - 1, 1)[0]; |
| }, |
| length: function() { |
| return stack.length; |
| } |
| }; |
| } |
| }; |
| }); |