From b036d309c27132e4f10df952e9335afdb3edfeb5 Mon Sep 17 00:00:00 2001 From: HK2FB Date: Sun, 15 May 2022 13:16:56 +0200 Subject: Vue Rewrite Signed-off-by: Sean Molenaar --- js-old/service/Resource.js | 90 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 js-old/service/Resource.js (limited to 'js-old/service/Resource.js') diff --git a/js-old/service/Resource.js b/js-old/service/Resource.js new file mode 100644 index 000000000..b5be87cb7 --- /dev/null +++ b/js-old/service/Resource.js @@ -0,0 +1,90 @@ +/** + * Nextcloud - News + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Bernhard Posselt + * @copyright Bernhard Posselt 2014 + */ +app.factory('Resource', function () { + 'use strict'; + + var Resource = function (http, BASE_URL, id) { + this.id = id || 'id'; + this.values = []; + this.hashMap = {}; + this.http = http; + this.BASE_URL = BASE_URL; + }; + + + Resource.prototype.receive = function (objs) { + var self = this; + objs.forEach(function (obj) { + self.add(obj); + }); + }; + + + Resource.prototype.add = function (obj) { + var existing = this.hashMap[obj[this.id]]; + + if (existing === undefined) { + this.values.push(obj); + this.hashMap[obj[this.id]] = obj; + } else { + // copy values from new to old object if it exists already + Object.keys(obj).forEach(function (key) { + existing[key] = obj[key]; + }); + } + }; + + + Resource.prototype.size = function () { + return this.values.length; + }; + + + Resource.prototype.get = function (id) { + return this.hashMap[id]; + }; + + + Resource.prototype.delete = function (id) { + // find index of object that should be deleted + var self = this; + var deleteAtIndex = this.values.findIndex(function (element) { + return element[self.id] === id; + }); + + if (deleteAtIndex !== undefined) { + this.values.splice(deleteAtIndex, 1); + } + + if (this.hashMap[id] !== undefined) { + delete this.hashMap[id]; + } + }; + + + Resource.prototype.clear = function () { + this.hashMap = {}; + + // http://stackoverflow.com/questions/1232040 + // this is the fastes way to empty an array when you want to keep + // the reference around + while (this.values.length > 0) { + this.values.pop(); + } + }; + + + Resource.prototype.getAll = function () { + return this.values; + }; + + + return Resource; +}); \ No newline at end of file -- cgit v1.2.3