1 define(['app/yangman/models/baselist.model'], function (BaseListModel){
5 * Base history list object
8 * @param ParsingJsonService
9 * @param RequestsService
11 function HistoryListModel($filter, ParsingJsonService, RequestsService){
13 BaseListModel.call(this, $filter, ParsingJsonService);
15 /* jshint validthis: true */
20 * Array of groups in which are requests from self.list groupped
26 self.addItemToList = addItemToList;
28 self.createItem = createItem;
29 self.deleteRequestItem = deleteRequestItem;
30 self.deselectReqs = deselectReqs;
31 self.selectReqs = selectReqs;
32 self.toggleReqSelection = toggleReqSelection;
33 self.getNewestRequest = getNewestRequest;
34 self.setSettings = setSettings;
39 function setSettings(settingsObj) {
40 self.settings = settingsObj;
45 * Get request with max timestamp (was executed as the last)
47 function getNewestRequest() {
48 return $filter('orderBy')(self.list, '-timestamp')[0];
52 * Mark reqObj as selected
53 * @param {boolean} onlyOneSelected boolean if only this object should be marked as selected
54 * @param reqObj HistoryRequest object to be selected
56 function toggleReqSelection(onlyOneSelected, reqObj){
58 self.selectedItems.forEach(function (req){
61 self.selectedItems = [];
64 if (reqObj.selected && !onlyOneSelected){
65 self.selectedItems.splice(self.selectedItems.indexOf(reqObj), 1);
68 reqObj.selected = (reqObj.selected && onlyOneSelected) || !reqObj.selected;
70 self.selectedItems.push(reqObj);
76 * Round timestamp to day
80 function roundTimestampToDate(timeStamp){
81 timeStamp -= timeStamp % (24 * 60 * 60 * 1000);//subtract amount of time since midnight
82 timeStamp += new Date().getTimezoneOffset() * 60 * 1000;//add on the timezone offset
87 * Add element to date group
90 function addElemToListDateGroup(elem){
92 var groupName = roundTimestampToDate(elem.timestamp),
93 dateGroupArr = self.dateGroups.filter(function (group){
94 return group.name === groupName;
98 if (dateGroupArr.length){
99 dateGroup = dateGroupArr[0];
104 longName: new Date(groupName).toDateString(),
107 self.dateGroups.push(dateGroup);
109 dateGroup.requests.push(elem);
113 function shiftElemFromListDateGroup(elem){
115 var groupName = roundTimestampToDate(elem.timestamp),
116 dateGroupArr = self.dateGroups.filter(function (group){
117 return group.name === groupName;
119 dateGroup = dateGroupArr[0];
121 dateGroup.requests.shift();
129 * @returns {HistoryRequest|*}
131 function createItem(elem) {
132 return RequestsService.createHistoryRequestFromElement(elem);
139 function addItemToList(reqObj){
140 self.list.push(reqObj);
141 addElemToListDateGroup(reqObj);
143 if (self.list.length > self.settings.data.requestsCount) {
144 shiftElemFromListDateGroup(self.list.shift());
152 function deleteRequestItem(elem){
153 self.list.splice(self.list.indexOf(elem), 1);
158 self.dateGroups = [];
159 self.selectedItems = [];
166 self.toJSON = function () {
167 return self.list.map(function (elem) {
168 return elem.toJSON();
173 * Mark all history requests as deselected
175 function deselectReqs(){
176 self.selectedItems.forEach(function (request){
177 request.selected = false;
179 self.selectedItems = [];
183 * Mark all history requests as selected
185 function selectReqs(requestsList){
186 requestsList.forEach(function (reqObj){
187 reqObj.selected = true;
188 self.selectedItems.push(reqObj);
193 HistoryListModel.prototype = Object.create(BaseListModel.prototype);
195 return HistoryListModel;