Yangman - strings to constants
[dlux.git] / modules / yangman-resources / src / main / resources / yangman / models / baselist.model.js
1 define([], function (){
2     'use strict';
3
4
5     /**
6      * Base list object for extending history and collection object
7      * @constructor
8      * @param ParsingJsonService
9      */
10     function BaseListModel($filter, ParsingJsonService) {
11
12         var self = this;
13
14         /**
15          * General list of all objects to simply treat them
16          * @type {Array}
17          */
18         self.list = [];
19         /**
20          * Simple list of selected items from self.list
21          * @type {Array}
22          */
23         self.selectedItems = [];
24
25         self.addFromJSON = addFromJSON;
26         self.addItemToList = addItemToList;
27         self.createItem = createItem;
28         self.loadListFromStorage = loadListFromStorage;
29         self.saveToStorage = saveToStorage;
30         self.setName = setName;
31         self.selectAllFilteredItems = selectAllFilteredItems;
32         self.deselectAllFilteredItems = deselectAllFilteredItems;
33         self.getSelectedItems = getSelectedItems;
34         self.deselectAllItems = deselectAllItems;
35
36         function deselectAllItems() {
37             self.list.forEach(function (item) {
38                 item.selected = false;
39             });
40             self.selectedItems = [];
41         }
42
43         /**
44          * @returns {Array}
45          */
46         function getSelectedItems(filterFunc) {
47             if (filterFunc) {
48                 return $filter('filter')(self.selectedItems, filterFunc);
49             }
50             else {
51                 return self.selectedItems;
52             }
53         }
54
55         /**
56          * Mark all items matching filter as selected
57          * Toggle only items matching filter, other items let be as they are
58          * @param filterFunc function returning boolean
59          */
60         function selectAllFilteredItems(filterFunc) {
61             $filter('filter')(self.list, filterFunc).forEach(function (item) {
62                 item.selected = true;
63                 if (self.selectedItems.indexOf(item) === -1){
64                     self.selectedItems.push(item);
65                 }
66             });
67         }
68
69         /**
70          * Mark all requests matching filter as deselected
71          * Toggle only requests matching filter, other requests let be as they are
72          * @param filterFunc
73          */
74         function deselectAllFilteredItems(filterFunc) {
75             $filter('filter')(self.list, filterFunc).forEach(function (item) {
76                 item.selected = false;
77                 self.selectedItems.splice(self.selectedItems.indexOf(item), 1);
78             });
79         }
80
81         function setName(name) {
82             self.name = name;
83         }
84
85         function createItem(elem) {
86             return elem;
87         }
88
89         function addItemToList(){}
90
91         /**
92          * Loading from localStorage
93          */
94         function loadListFromStorage(){
95             var storageList = localStorage.getItem(self.name);
96
97             if (storageList){
98                 self.clear();
99                 ParsingJsonService.parseJson(storageList).map(function (elem) {
100                     return self.createItem(elem);
101                 }).forEach(function (elem) {
102                     self.addItemToList(elem);
103                 });
104             }
105         }
106
107         /**
108          * Saving to local storage
109          */
110         function saveToStorage(){
111             try {
112                 localStorage.setItem(self.name, JSON.stringify(self.toJSON()));
113             } catch (e) {
114             }
115         }
116
117         /**
118          * Add each request from json
119          * @param json
120          */
121         function addFromJSON(json) {
122             json.forEach(function (elem) {
123                 var item = self.createItem(elem);
124                 self.addItemToList(item);
125             });
126         }
127     }
128
129     return BaseListModel;
130 });