blob: 39dc1bdf397274258648f558190e55d5f9d9e366 [file] [log] [blame]
// Copyright (c) 2000-2017 Ericsson Telecom AB //
// All rights reserved. This program and the accompanying materials are made available under the //
// terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function CViewModel_Paging(p_viewmodel, p_options) {
"use strict";
/** constructor */
var v_viewmodel = p_viewmodel;
var v_options = p_options;
var v_binder;
var v_dataPaths = [];
var v_selections = [];
/** public functions - interface for parent */
this.setSelectionToControl = function(p_selection) {
v_selections.push(p_selection);
};
this.setReponseDataPath = function(p_index, p_path) {
v_dataPaths[p_index] = p_path;
};
this.setBinder = function(p_binder) {
v_binder = p_binder;
};
/** public functions - interface for views */
this.getSize = function() {
var response = v_viewmodel.getResponseElement(v_dataPaths[0]);
if (response != undefined && response.node != undefined) {
return response.node.val;
} else {
return 0;
}
};
this.getRangeFilter = function() {
var size = this.getSize();
var filter = v_viewmodel.getRequestFromPath(v_dataPaths[1]).getData.rangeFilter;
if (filter == undefined) {
return {
"offset": 0,
"count": size
};
} else {
var offset = 0;
if (filter.offset != undefined) {
offset = filter.offset;
}
if (offset >= size) {
offset = Math.max(0, size - 1);
}
var count;
if (filter.count != undefined) {
count = filter.count;
} else {
count = size - offset;
}
return {
"offset": offset,
"count": count
}
}
};
this.changeFilter = function(obj) {
var getData = v_viewmodel.getRequestFromPath(v_dataPaths[1]).getData;
var filter = getData.rangeFilter;;
var size = this.getSize();
if (obj == undefined) {
getData.rangeFilter = undefined;
return;
} else if (filter == undefined) {
filter = {};
getData.rangeFilter = filter;
}
if (obj.offset != undefined) {
if (obj.offset.to != undefined) {
filter.offset = obj.offset.to;
} else if (obj.offset.by != undefined) {
if (filter.offset != undefined) {
filter.offset += obj.offset.by;
} else {
filter.offset = obj.offset.by;
}
}
if (filter.offset < 0) {
filter.offset = 0;
} else if (filter.count != undefined && v_options.allowScrollBelow == false && filter.offset > size - filter.count) {
filter.offset = Math.max(size - filter.count, 0);
} else if (filter.offset > size - 1) {
filter.offset = Math.max(size - 1, 0);
}
}
if (obj.count != undefined) {
if (obj.count.to != undefined) {
filter.count = obj.count.to;
} else if (obj.count.by != undefined && filter.count != undefined) {
filter.count += obj.count.by;
}
if (filter.count < 1) {
filter.count = 1;
}
}
};
this.hasFilter = function() {
return v_viewmodel.getRequestFromPath(v_dataPaths[1]).getData.rangeFilter != undefined;
}
}
CViewModel_Paging.getHelp = function() {
return "A viewmodel that can manipulate the rangeFilter of a request.";
}
CViewModel_Paging.providesInterface = function() {
return ["getSize", "getRangeFilter", "changeFilter"];
};
CViewModel_Paging.getCustomDataSchema = function() {
return {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Custom data for CViewModel_Paging",
"type": "object",
"properties": {
"allowScrollBelow": {
"description": "Whether we want to allow paging to the very bottom (so that only one element remains unfiltered). Set it to false if the connected view can show every element.",
"type": "boolean",
"format": "checkbox",
"default": false
}
},
"additionalProperties": false
};
};
CViewModel_Paging.expectsConnection = function() {
var dataConnections = [
{
"source": "DataSource",
"element": "sizeOf"
},
{
"valueType": ["charstringlistType", "integerlistType", "floatlistType"]
}
];
return {
"dataConnections": dataConnections,
"selectionConnections": []
};
};
//# sourceURL=CustomizableApp\ViewModels\ViewModel_Paging.js