First commit waiting for Budget Alert
This commit is contained in:
115
sophal/js/form/form.input.progress.js
Normal file
115
sophal/js/form/form.input.progress.js
Normal file
@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2005-2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
(function() {
|
||||
|
||||
"use strict";
|
||||
|
||||
var ui = angular.module('axelor.ui');
|
||||
|
||||
ui.ProgressMixin = {
|
||||
|
||||
css: 'progress-item',
|
||||
cellCss: 'form-item progress-item',
|
||||
metaWidget: true,
|
||||
|
||||
link_readonly: function(scope, element, attrs, model) {
|
||||
|
||||
var field = scope.field || {},
|
||||
that = this;
|
||||
|
||||
scope.$watch("getValue()", function progressValueWatch(value, old) {
|
||||
var props = that.compute(field, value);
|
||||
scope.cssClasses = 'progress ' + props.css;
|
||||
scope.styles = {
|
||||
width: props.width + '%'
|
||||
};
|
||||
scope.css = props.css;
|
||||
scope.width = props.width;
|
||||
});
|
||||
},
|
||||
|
||||
compute: function(field, value) {
|
||||
|
||||
var max = +(field.max) || 100,
|
||||
min = +(field.min) || 0;
|
||||
|
||||
var colors = [
|
||||
["r", 24], // 00 - 24 (red)
|
||||
["y", 49], // 25 - 49 (yellow)
|
||||
["b", 74], // 50 - 74 (blue)
|
||||
["g", 100] // 75 - 100 (green)
|
||||
];
|
||||
|
||||
if (field.colors) {
|
||||
colors = _.chain(field.colors.split(/,/)).invoke('split', /:/).value() || [];
|
||||
}
|
||||
|
||||
colors.reverse();
|
||||
|
||||
var styles = {
|
||||
"r": "progress-danger",
|
||||
"y": "progress-warning",
|
||||
"b": "progress-primary",
|
||||
"g": "progress-success"
|
||||
};
|
||||
|
||||
var width = +(value) || 0;
|
||||
var css = "progress-striped";
|
||||
|
||||
width = (width * 100) / (max - min);
|
||||
width = Math.min(Math.round(width), 100);
|
||||
|
||||
var color = "";
|
||||
for(var i = 0 ; i < colors.length; i++) {
|
||||
var c = colors[i][0];
|
||||
var v = +colors[i][1];
|
||||
if (width <= v) {
|
||||
color = styles[c] || "";
|
||||
}
|
||||
}
|
||||
|
||||
css += " " + color;
|
||||
if (width < 100) {
|
||||
css += " " + "active";
|
||||
}
|
||||
|
||||
return {
|
||||
css: css,
|
||||
width: width
|
||||
};
|
||||
},
|
||||
|
||||
template_readonly:
|
||||
'<div ng-class="cssClasses">'+
|
||||
'<div class="bar" ng-style="styles"></div>'+
|
||||
'</div>'
|
||||
};
|
||||
|
||||
/**
|
||||
* The Progress widget with integer/decimal input.
|
||||
*
|
||||
*/
|
||||
ui.formInput('Progress', 'Integer', _.extend({}, ui.ProgressMixin));
|
||||
|
||||
/**
|
||||
* The Progress widget with selection input.
|
||||
*
|
||||
*/
|
||||
ui.formInput('SelectProgress', 'Select', _.extend({}, ui.ProgressMixin));
|
||||
|
||||
})();
|
||||
Reference in New Issue
Block a user