Fixed build dependency issues by moving hal core into hal-core folder/subproject

This commit is contained in:
Ziver Koc 2020-11-10 18:36:02 +01:00
parent f1da2c5a4d
commit ded778fd11
138 changed files with 195 additions and 183 deletions

View file

@ -0,0 +1,744 @@
/* ========================================================================
* bootstrap-switch - v3.3.2
* http://www.bootstrap-switch.org
* ========================================================================
* Copyright 2012-2013 Mattia Larentis
*
* ========================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================================
*/
(function() {
var slice = [].slice;
(function($, window) {
"use strict";
var BootstrapSwitch;
BootstrapSwitch = (function() {
function BootstrapSwitch(element, options) {
if (options == null) {
options = {};
}
this.$element = $(element);
this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, {
state: this.$element.is(":checked"),
size: this.$element.data("size"),
animate: this.$element.data("animate"),
disabled: this.$element.is(":disabled"),
readonly: this.$element.is("[readonly]"),
indeterminate: this.$element.data("indeterminate"),
inverse: this.$element.data("inverse"),
radioAllOff: this.$element.data("radio-all-off"),
onColor: this.$element.data("on-color"),
offColor: this.$element.data("off-color"),
onText: this.$element.data("on-text"),
offText: this.$element.data("off-text"),
labelText: this.$element.data("label-text"),
handleWidth: this.$element.data("handle-width"),
labelWidth: this.$element.data("label-width"),
baseClass: this.$element.data("base-class"),
wrapperClass: this.$element.data("wrapper-class")
}, options);
this.prevOptions = {};
this.$wrapper = $("<div>", {
"class": (function(_this) {
return function() {
var classes;
classes = ["" + _this.options.baseClass].concat(_this._getClasses(_this.options.wrapperClass));
classes.push(_this.options.state ? _this.options.baseClass + "-on" : _this.options.baseClass + "-off");
if (_this.options.size != null) {
classes.push(_this.options.baseClass + "-" + _this.options.size);
}
if (_this.options.disabled) {
classes.push(_this.options.baseClass + "-disabled");
}
if (_this.options.readonly) {
classes.push(_this.options.baseClass + "-readonly");
}
if (_this.options.indeterminate) {
classes.push(_this.options.baseClass + "-indeterminate");
}
if (_this.options.inverse) {
classes.push(_this.options.baseClass + "-inverse");
}
if (_this.$element.attr("id")) {
classes.push(_this.options.baseClass + "-id-" + (_this.$element.attr("id")));
}
return classes.join(" ");
};
})(this)()
});
this.$container = $("<div>", {
"class": this.options.baseClass + "-container"
});
this.$on = $("<span>", {
html: this.options.onText,
"class": this.options.baseClass + "-handle-on " + this.options.baseClass + "-" + this.options.onColor
});
this.$off = $("<span>", {
html: this.options.offText,
"class": this.options.baseClass + "-handle-off " + this.options.baseClass + "-" + this.options.offColor
});
this.$label = $("<span>", {
html: this.options.labelText,
"class": this.options.baseClass + "-label"
});
this.$element.on("init.bootstrapSwitch", (function(_this) {
return function() {
return _this.options.onInit.apply(element, arguments);
};
})(this));
this.$element.on("switchChange.bootstrapSwitch", (function(_this) {
return function(e) {
if (false === _this.options.onSwitchChange.apply(element, arguments)) {
if (_this.$element.is(":radio")) {
return $("[name='" + (_this.$element.attr('name')) + "']").trigger("previousState.bootstrapSwitch", true);
} else {
return _this.$element.trigger("previousState.bootstrapSwitch", true);
}
}
};
})(this));
this.$container = this.$element.wrap(this.$container).parent();
this.$wrapper = this.$container.wrap(this.$wrapper).parent();
this.$element.before(this.options.inverse ? this.$off : this.$on).before(this.$label).before(this.options.inverse ? this.$on : this.$off);
if (this.options.indeterminate) {
this.$element.prop("indeterminate", true);
}
this._init();
this._elementHandlers();
this._handleHandlers();
this._labelHandlers();
this._formHandler();
this._externalLabelHandler();
this.$element.trigger("init.bootstrapSwitch", this.options.state);
}
BootstrapSwitch.prototype._constructor = BootstrapSwitch;
BootstrapSwitch.prototype.setPrevOptions = function() {
return this.prevOptions = $.extend(true, {}, this.options);
};
BootstrapSwitch.prototype.state = function(value, skip) {
if (typeof value === "undefined") {
return this.options.state;
}
if (this.options.disabled || this.options.readonly) {
return this.$element;
}
if (this.options.state && !this.options.radioAllOff && this.$element.is(":radio")) {
return this.$element;
}
if (this.$element.is(":radio")) {
$("[name='" + (this.$element.attr('name')) + "']").trigger("setPreviousOptions.bootstrapSwitch");
} else {
this.$element.trigger("setPreviousOptions.bootstrapSwitch");
}
if (this.options.indeterminate) {
this.indeterminate(false);
}
value = !!value;
this.$element.prop("checked", value).trigger("change.bootstrapSwitch", skip);
return this.$element;
};
BootstrapSwitch.prototype.toggleState = function(skip) {
if (this.options.disabled || this.options.readonly) {
return this.$element;
}
if (this.options.indeterminate) {
this.indeterminate(false);
return this.state(true);
} else {
return this.$element.prop("checked", !this.options.state).trigger("change.bootstrapSwitch", skip);
}
};
BootstrapSwitch.prototype.size = function(value) {
if (typeof value === "undefined") {
return this.options.size;
}
if (this.options.size != null) {
this.$wrapper.removeClass(this.options.baseClass + "-" + this.options.size);
}
if (value) {
this.$wrapper.addClass(this.options.baseClass + "-" + value);
}
this._width();
this._containerPosition();
this.options.size = value;
return this.$element;
};
BootstrapSwitch.prototype.animate = function(value) {
if (typeof value === "undefined") {
return this.options.animate;
}
value = !!value;
if (value === this.options.animate) {
return this.$element;
}
return this.toggleAnimate();
};
BootstrapSwitch.prototype.toggleAnimate = function() {
this.options.animate = !this.options.animate;
this.$wrapper.toggleClass(this.options.baseClass + "-animate");
return this.$element;
};
BootstrapSwitch.prototype.disabled = function(value) {
if (typeof value === "undefined") {
return this.options.disabled;
}
value = !!value;
if (value === this.options.disabled) {
return this.$element;
}
return this.toggleDisabled();
};
BootstrapSwitch.prototype.toggleDisabled = function() {
this.options.disabled = !this.options.disabled;
this.$element.prop("disabled", this.options.disabled);
this.$wrapper.toggleClass(this.options.baseClass + "-disabled");
return this.$element;
};
BootstrapSwitch.prototype.readonly = function(value) {
if (typeof value === "undefined") {
return this.options.readonly;
}
value = !!value;
if (value === this.options.readonly) {
return this.$element;
}
return this.toggleReadonly();
};
BootstrapSwitch.prototype.toggleReadonly = function() {
this.options.readonly = !this.options.readonly;
this.$element.prop("readonly", this.options.readonly);
this.$wrapper.toggleClass(this.options.baseClass + "-readonly");
return this.$element;
};
BootstrapSwitch.prototype.indeterminate = function(value) {
if (typeof value === "undefined") {
return this.options.indeterminate;
}
value = !!value;
if (value === this.options.indeterminate) {
return this.$element;
}
return this.toggleIndeterminate();
};
BootstrapSwitch.prototype.toggleIndeterminate = function() {
this.options.indeterminate = !this.options.indeterminate;
this.$element.prop("indeterminate", this.options.indeterminate);
this.$wrapper.toggleClass(this.options.baseClass + "-indeterminate");
this._containerPosition();
return this.$element;
};
BootstrapSwitch.prototype.inverse = function(value) {
if (typeof value === "undefined") {
return this.options.inverse;
}
value = !!value;
if (value === this.options.inverse) {
return this.$element;
}
return this.toggleInverse();
};
BootstrapSwitch.prototype.toggleInverse = function() {
var $off, $on;
this.$wrapper.toggleClass(this.options.baseClass + "-inverse");
$on = this.$on.clone(true);
$off = this.$off.clone(true);
this.$on.replaceWith($off);
this.$off.replaceWith($on);
this.$on = $off;
this.$off = $on;
this.options.inverse = !this.options.inverse;
return this.$element;
};
BootstrapSwitch.prototype.onColor = function(value) {
var color;
color = this.options.onColor;
if (typeof value === "undefined") {
return color;
}
if (color != null) {
this.$on.removeClass(this.options.baseClass + "-" + color);
}
this.$on.addClass(this.options.baseClass + "-" + value);
this.options.onColor = value;
return this.$element;
};
BootstrapSwitch.prototype.offColor = function(value) {
var color;
color = this.options.offColor;
if (typeof value === "undefined") {
return color;
}
if (color != null) {
this.$off.removeClass(this.options.baseClass + "-" + color);
}
this.$off.addClass(this.options.baseClass + "-" + value);
this.options.offColor = value;
return this.$element;
};
BootstrapSwitch.prototype.onText = function(value) {
if (typeof value === "undefined") {
return this.options.onText;
}
this.$on.html(value);
this._width();
this._containerPosition();
this.options.onText = value;
return this.$element;
};
BootstrapSwitch.prototype.offText = function(value) {
if (typeof value === "undefined") {
return this.options.offText;
}
this.$off.html(value);
this._width();
this._containerPosition();
this.options.offText = value;
return this.$element;
};
BootstrapSwitch.prototype.labelText = function(value) {
if (typeof value === "undefined") {
return this.options.labelText;
}
this.$label.html(value);
this._width();
this.options.labelText = value;
return this.$element;
};
BootstrapSwitch.prototype.handleWidth = function(value) {
if (typeof value === "undefined") {
return this.options.handleWidth;
}
this.options.handleWidth = value;
this._width();
this._containerPosition();
return this.$element;
};
BootstrapSwitch.prototype.labelWidth = function(value) {
if (typeof value === "undefined") {
return this.options.labelWidth;
}
this.options.labelWidth = value;
this._width();
this._containerPosition();
return this.$element;
};
BootstrapSwitch.prototype.baseClass = function(value) {
return this.options.baseClass;
};
BootstrapSwitch.prototype.wrapperClass = function(value) {
if (typeof value === "undefined") {
return this.options.wrapperClass;
}
if (!value) {
value = $.fn.bootstrapSwitch.defaults.wrapperClass;
}
this.$wrapper.removeClass(this._getClasses(this.options.wrapperClass).join(" "));
this.$wrapper.addClass(this._getClasses(value).join(" "));
this.options.wrapperClass = value;
return this.$element;
};
BootstrapSwitch.prototype.radioAllOff = function(value) {
if (typeof value === "undefined") {
return this.options.radioAllOff;
}
value = !!value;
if (value === this.options.radioAllOff) {
return this.$element;
}
this.options.radioAllOff = value;
return this.$element;
};
BootstrapSwitch.prototype.onInit = function(value) {
if (typeof value === "undefined") {
return this.options.onInit;
}
if (!value) {
value = $.fn.bootstrapSwitch.defaults.onInit;
}
this.options.onInit = value;
return this.$element;
};
BootstrapSwitch.prototype.onSwitchChange = function(value) {
if (typeof value === "undefined") {
return this.options.onSwitchChange;
}
if (!value) {
value = $.fn.bootstrapSwitch.defaults.onSwitchChange;
}
this.options.onSwitchChange = value;
return this.$element;
};
BootstrapSwitch.prototype.destroy = function() {
var $form;
$form = this.$element.closest("form");
if ($form.length) {
$form.off("reset.bootstrapSwitch").removeData("bootstrap-switch");
}
this.$container.children().not(this.$element).remove();
this.$element.unwrap().unwrap().off(".bootstrapSwitch").removeData("bootstrap-switch");
return this.$element;
};
BootstrapSwitch.prototype._width = function() {
var $handles, handleWidth;
$handles = this.$on.add(this.$off);
$handles.add(this.$label).css("width", "");
handleWidth = this.options.handleWidth === "auto" ? Math.max(this.$on.width(), this.$off.width()) : this.options.handleWidth;
$handles.width(handleWidth);
this.$label.width((function(_this) {
return function(index, width) {
if (_this.options.labelWidth !== "auto") {
return _this.options.labelWidth;
}
if (width < handleWidth) {
return handleWidth;
} else {
return width;
}
};
})(this));
this._handleWidth = this.$on.outerWidth();
this._labelWidth = this.$label.outerWidth();
this.$container.width((this._handleWidth * 2) + this._labelWidth);
return this.$wrapper.width(this._handleWidth + this._labelWidth);
};
BootstrapSwitch.prototype._containerPosition = function(state, callback) {
if (state == null) {
state = this.options.state;
}
this.$container.css("margin-left", (function(_this) {
return function() {
var values;
values = [0, "-" + _this._handleWidth + "px"];
if (_this.options.indeterminate) {
return "-" + (_this._handleWidth / 2) + "px";
}
if (state) {
if (_this.options.inverse) {
return values[1];
} else {
return values[0];
}
} else {
if (_this.options.inverse) {
return values[0];
} else {
return values[1];
}
}
};
})(this));
if (!callback) {
return;
}
return setTimeout(function() {
return callback();
}, 50);
};
BootstrapSwitch.prototype._init = function() {
var init, initInterval;
init = (function(_this) {
return function() {
_this.setPrevOptions();
_this._width();
return _this._containerPosition(null, function() {
if (_this.options.animate) {
return _this.$wrapper.addClass(_this.options.baseClass + "-animate");
}
});
};
})(this);
if (this.$wrapper.is(":visible")) {
return init();
}
return initInterval = window.setInterval((function(_this) {
return function() {
if (_this.$wrapper.is(":visible")) {
init();
return window.clearInterval(initInterval);
}
};
})(this), 50);
};
BootstrapSwitch.prototype._elementHandlers = function() {
return this.$element.on({
"setPreviousOptions.bootstrapSwitch": (function(_this) {
return function(e) {
return _this.setPrevOptions();
};
})(this),
"previousState.bootstrapSwitch": (function(_this) {
return function(e) {
_this.options = _this.prevOptions;
if (_this.options.indeterminate) {
_this.$wrapper.addClass(_this.options.baseClass + "-indeterminate");
}
return _this.$element.prop("checked", _this.options.state).trigger("change.bootstrapSwitch", true);
};
})(this),
"change.bootstrapSwitch": (function(_this) {
return function(e, skip) {
var state;
e.preventDefault();
e.stopImmediatePropagation();
state = _this.$element.is(":checked");
_this._containerPosition(state);
if (state === _this.options.state) {
return;
}
_this.options.state = state;
_this.$wrapper.toggleClass(_this.options.baseClass + "-off").toggleClass(_this.options.baseClass + "-on");
if (!skip) {
if (_this.$element.is(":radio")) {
$("[name='" + (_this.$element.attr('name')) + "']").not(_this.$element).prop("checked", false).trigger("change.bootstrapSwitch", true);
}
return _this.$element.trigger("switchChange.bootstrapSwitch", [state]);
}
};
})(this),
"focus.bootstrapSwitch": (function(_this) {
return function(e) {
e.preventDefault();
return _this.$wrapper.addClass(_this.options.baseClass + "-focused");
};
})(this),
"blur.bootstrapSwitch": (function(_this) {
return function(e) {
e.preventDefault();
return _this.$wrapper.removeClass(_this.options.baseClass + "-focused");
};
})(this),
"keydown.bootstrapSwitch": (function(_this) {
return function(e) {
if (!e.which || _this.options.disabled || _this.options.readonly) {
return;
}
switch (e.which) {
case 37:
e.preventDefault();
e.stopImmediatePropagation();
return _this.state(false);
case 39:
e.preventDefault();
e.stopImmediatePropagation();
return _this.state(true);
}
};
})(this)
});
};
BootstrapSwitch.prototype._handleHandlers = function() {
this.$on.on("click.bootstrapSwitch", (function(_this) {
return function(event) {
event.preventDefault();
event.stopPropagation();
_this.state(false);
return _this.$element.trigger("focus.bootstrapSwitch");
};
})(this));
return this.$off.on("click.bootstrapSwitch", (function(_this) {
return function(event) {
event.preventDefault();
event.stopPropagation();
_this.state(true);
return _this.$element.trigger("focus.bootstrapSwitch");
};
})(this));
};
BootstrapSwitch.prototype._labelHandlers = function() {
return this.$label.on({
"click": function(e) {
return e.stopPropagation();
},
"mousedown.bootstrapSwitch touchstart.bootstrapSwitch": (function(_this) {
return function(e) {
if (_this._dragStart || _this.options.disabled || _this.options.readonly) {
return;
}
e.preventDefault();
e.stopPropagation();
_this._dragStart = (e.pageX || e.originalEvent.touches[0].pageX) - parseInt(_this.$container.css("margin-left"), 10);
if (_this.options.animate) {
_this.$wrapper.removeClass(_this.options.baseClass + "-animate");
}
return _this.$element.trigger("focus.bootstrapSwitch");
};
})(this),
"mousemove.bootstrapSwitch touchmove.bootstrapSwitch": (function(_this) {
return function(e) {
var difference;
if (_this._dragStart == null) {
return;
}
e.preventDefault();
difference = (e.pageX || e.originalEvent.touches[0].pageX) - _this._dragStart;
if (difference < -_this._handleWidth || difference > 0) {
return;
}
_this._dragEnd = difference;
return _this.$container.css("margin-left", _this._dragEnd + "px");
};
})(this),
"mouseup.bootstrapSwitch touchend.bootstrapSwitch": (function(_this) {
return function(e) {
var state;
if (!_this._dragStart) {
return;
}
e.preventDefault();
if (_this.options.animate) {
_this.$wrapper.addClass(_this.options.baseClass + "-animate");
}
if (_this._dragEnd) {
state = _this._dragEnd > -(_this._handleWidth / 2);
_this._dragEnd = false;
_this.state(_this.options.inverse ? !state : state);
} else {
_this.state(!_this.options.state);
}
return _this._dragStart = false;
};
})(this),
"mouseleave.bootstrapSwitch": (function(_this) {
return function(e) {
return _this.$label.trigger("mouseup.bootstrapSwitch");
};
})(this)
});
};
BootstrapSwitch.prototype._externalLabelHandler = function() {
var $externalLabel;
$externalLabel = this.$element.closest("label");
return $externalLabel.on("click", (function(_this) {
return function(event) {
event.preventDefault();
event.stopImmediatePropagation();
if (event.target === $externalLabel[0]) {
return _this.toggleState();
}
};
})(this));
};
BootstrapSwitch.prototype._formHandler = function() {
var $form;
$form = this.$element.closest("form");
if ($form.data("bootstrap-switch")) {
return;
}
return $form.on("reset.bootstrapSwitch", function() {
return window.setTimeout(function() {
return $form.find("input").filter(function() {
return $(this).data("bootstrap-switch");
}).each(function() {
return $(this).bootstrapSwitch("state", this.checked);
});
}, 1);
}).data("bootstrap-switch", true);
};
BootstrapSwitch.prototype._getClasses = function(classes) {
var c, cls, i, len;
if (!$.isArray(classes)) {
return [this.options.baseClass + "-" + classes];
}
cls = [];
for (i = 0, len = classes.length; i < len; i++) {
c = classes[i];
cls.push(this.options.baseClass + "-" + c);
}
return cls;
};
return BootstrapSwitch;
})();
$.fn.bootstrapSwitch = function() {
var args, option, ret;
option = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
ret = this;
this.each(function() {
var $this, data;
$this = $(this);
data = $this.data("bootstrap-switch");
if (!data) {
$this.data("bootstrap-switch", data = new BootstrapSwitch(this, option));
}
if (typeof option === "string") {
return ret = data[option].apply(data, args);
}
});
return ret;
};
$.fn.bootstrapSwitch.Constructor = BootstrapSwitch;
return $.fn.bootstrapSwitch.defaults = {
state: true,
size: null,
animate: true,
disabled: false,
readonly: false,
indeterminate: false,
inverse: false,
radioAllOff: false,
onColor: "primary",
offColor: "default",
onText: "ON",
offText: "OFF",
labelText: "&nbsp;",
handleWidth: "auto",
labelWidth: "auto",
baseClass: "bootstrap-switch",
wrapperClass: "wrapper",
onInit: function() {},
onSwitchChange: function() {}
};
})(window.jQuery, window);
}).call(this);

File diff suppressed because one or more lines are too long

2363
hal-core/resource/web/js/bootstrap.js vendored Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2013 Masayuki Tanaka
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

File diff suppressed because it is too large Load diff

6
hal-core/resource/web/js/c3.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,26 @@
Copyright (c) 2010-2016, Michael Bostock
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* The name Michael Bostock may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

9554
hal-core/resource/web/js/d3.js vendored Normal file

File diff suppressed because it is too large Load diff

5
hal-core/resource/web/js/d3.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,179 @@
///////////////////////////////// Autostart
$(function(){
$(".toggle-switch").bootstrapSwitch();
$(".timestamp").relTimestamp();
});
////////////////////////////////////// JQuery helper functions
// $.attr() # returns all attributes of an element
(function(old) {
$.fn.attr = function() {
if(arguments.length === 0) {
if(this.length === 0) {
return null;
}
var obj = {};
$.each(this[0].attributes, function() {
if(this.specified) {
obj[this.name] = this.value;
}
});
return obj;
}
return old.apply(this, arguments);
};
})($.fn.attr);
// converts all timestamps to human readable time and date
$.fn.relTimestamp = function() {
return this.each(function() {
var timestamp = parseInt($(this).text());
var timestampNow = Date.now();
var timeDiff = timestampNow - timestamp;
if(timeDiff < 10 * 60 * 1000) // less than 10 min
$(this).text(moment(timestamp).fromNow());
else if(timeDiff < 24 * 60 * 60 * 1000) // less than 24 hours
$(this).text(moment(timestamp).fromNow() + " ("+moment(timestamp).format("HH:mm")+")");
else
$(this).text(moment(timestamp).format("YYYY-MM-DD HH:mm"));
return this;
});
};
////////////////////////////////////// Hal functions
////////////// Chart functions
function createChart(elementId, url, updateTime=-1){
var tickConf = {count: 20};
if (updateTime < 60*60*1000)
tickConf['format'] = '%H:%M';
else if (updateTime < 24*60*60*1000)
tickConf['format'] = '%Y-%m-%d %H:%M';
else
tickConf['format'] = '%Y-%m-%d';
var chart = c3.generate({
bindto: elementId,
data: {json: []}, // set empty data, data will be loaded later
axis : {
x : {
type : 'timeseries',
label: 'Timestamp',
tick: tickConf,
},
y: {
label: 'Power (kWh)',
min: 0,
},
y2: {
show: true,
label: 'Temperature (C)',
min: 0,
}
},
grid: {
y: {show: true}
},
point: {
show: false
}
});
updateChart(chart, url, updateTime);
$(window).focus(function(e) {
updateChart(chart, url);
});
}
function updateChart(chart, url, updateTime=-1){
console.log('Updating chart: '+chart.element.id);
$.getJSON(url, function(json){
chart.load(getChartData(json));
});
if (updateTime > 0)
setTimeout(function(){ updateChart(chart, url, updateTime); }, updateTime);
}
function getChartData(json){
var dataXaxis = {};
var dataYaxis = {};
var data = [];
var labels = [];
json.forEach(function(sensor, i) {
var index = 'data'+i;
labels[index] = sensor.user +": "+ sensor.name;
dataXaxis[index] = 'data'+i+'x';
data.push([index+'x'].concat(sensor.timestamps));
data.push([index].concat(sensor.data));
if (sensor.type == "PowerConsumptionSensorData")
dataYaxis[index] = 'y';
else //if (sensor.type == "TemperatureSensorData")
dataYaxis[index] = 'y2';
});
return {
xs: dataXaxis,
columns: data,
names: labels,
type: 'spline',
axes: dataYaxis,
unload: true,
};
}
////////////// Dynamic forms
var dynamicConf = {};
function initDynamicModalForm(modalId, formTemplateId = null, templateID = null){
// read in all configurations into global variable (to skip naming issues)
if (formTemplateId != null) {
dynamicConf[formTemplateId] = [];
$("#"+templateID+" div").each(function(){
dynamicConf[formTemplateId][$(this).attr("id")] = $(this).html();
});
// Update dynamic inputs
$("#"+modalId+" select[name=type]").change(function(){
$("#"+modalId+" #"+formTemplateId).html(dynamicConf[formTemplateId][$(this).val()]);
});
}
// click event
$("#"+modalId).on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
var modal = $(this);
// Reset all inputs
if (formTemplateId != null)
modal.find("#"+formTemplateId).empty(); // clear form div
// select dynamic form
var selector = modal.find("select[name=type]");
selector.val(button.data("type"));
selector.change(); // Update dynamic inputs
// set dynamic form data
$.each(button.attr(), function(fieldName, value) {
if(fieldName.startsWith("data-")) {
fieldName = fieldName.substring(5);
// case insensitive search
input = modal.find("input").filter(function() {
return this.name.toLowerCase() == fieldName;
});
if (input.attr("type") == "checkbox") { // special handling for checkboxes
input.attr("value", "true");
if (value=="true") input.attr("checked", "true");
else input.removeAttr("checked");
// Add default false value as a unchecked checkbox is not included in the post
input.parent().prepend("<input type='hidden' name='"+input.attr("name")+"' value='false' />");
} else {
input.val(value);
}
}
});
});
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,991 @@
/*!
* jQuery.filer
* Copyright (c) 2015 CreativeDream
* Website: https://github.com/CreativeDream/jquery.filer
* Version: 1.0.5 (19-Nov-2015)
* Requires: jQuery v1.7.1 or later
*/
(function($) {
"use strict";
$.fn.filer = function(q) {
return this.each(function(t, r) {
var s = $(r),
b = '.jFiler',
p = $(),
o = $(),
l = $(),
sl = [],
n_f = $.isFunction(q) ? q(s, $.fn.filer.defaults) : q,
n = n_f && $.isPlainObject(n_f) ? $.extend(true, {}, $.fn.filer.defaults, n_f) : $.fn.filer.defaults,
f = {
init: function() {
s.wrap('<div class="jFiler"></div>');
f._set('props');
s.prop("jFiler").boxEl = p = s.closest(b);
f._changeInput();
},
_bindInput: function() {
if(n.changeInput && o.size() > 0) {
o.bind("click", f._clickHandler);
}
s.on({
"focus": function() {
o.addClass('focused');
},
"blur": function() {
o.removeClass('focused');
},
"change": function() {
f._onChange();
}
});
if(n.dragDrop) {
(o.length > 0 ? o : s)
.bind("drop", f._dragDrop.drop)
.bind("dragover", f._dragDrop.dragEnter)
.bind("dragleave", f._dragDrop.dragLeave);
}
if(n.uploadFile && n.clipBoardPaste) {
$(window)
.on("paste", f._clipboardPaste);
}
},
_unbindInput: function() {
if(n.changeInput && o.size() > 0) {
o.unbind("click", f._clickHandler);
}
},
_clickHandler: function() {
s.click()
},
_applyAttrSettings: function() {
var d = ["name", "limit", "maxSize", "extensions", "changeInput", "showThumbs", "appendTo", "theme", "addMore", "excludeName", "files", "uploadUrl", "uploadData", "options"];
for(var k in d) {
var j = "data-jfiler-" + d[k];
if(f._assets.hasAttr(j)) {
switch(d[k]) {
case "changeInput":
case "showThumbs":
case "addMore":
n[d[k]] = (["true", "false"].indexOf(s.attr(j)) > -1 ? s.attr(j) == "true" : s.attr(j));
break;
case "extensions":
n[d[k]] = s.attr(j)
.replace(/ /g, '')
.split(",");
break;
case "uploadUrl":
if(n.uploadFile) n.uploadFile.url = s.attr(j);
break;
case "uploadData":
if(n.uploadFile) n.uploadFile.data = JSON.parse(s.attr(j));
break;
case "files":
case "options":
n[d[k]] = JSON.parse(s.attr(j));
break;
default:
n[d[k]] = s.attr(j);
}
s.removeAttr(j);
}
}
},
_changeInput: function() {
f._applyAttrSettings();
n.beforeRender != null && typeof n.beforeRender == "function" ? n.beforeRender(p, s) : null;
if(n.theme) {
p.addClass('jFiler-theme-' + n.theme);
}
if(s.get(0)
.tagName.toLowerCase() != "input" && s.get(0)
.type != "file") {
o = s;
s = $("<input type=\"file\" name=\"" + n.name + "\" />");
s.css({
position: "absolute",
left: "-9999px",
top: "-9999px",
"z-index": "-9999"
});
p.prepend(s);
f._isGn = s;
} else {
if(n.changeInput) {
switch(typeof n.changeInput) {
case "boolean":
o = $('<div class="jFiler-input"><div class="jFiler-input-caption"><span>' + n.captions.feedback + '</span></div><div class="jFiler-input-button">' + n.captions.button + '</div></div>"');
break;
case "string":
case "object":
o = $(n.changeInput);
break;
case "function":
o = $(n.changeInput(p, s, n));
break;
}
s.after(o);
s.css({
position: "absolute",
left: "-9999px",
top: "-9999px",
"z-index": "-9999"
});
}
}
s.prop("jFiler").newInputEl = o;
if(!n.limit || (n.limit && n.limit >= 2)) {
s.attr("multiple", "multiple");
s.attr("name")
.slice(-2) != "[]" ? s.attr("name", s.attr("name") + "[]") : null;
}
f._bindInput();
if(n.files) {
f._append(false, {
files: n.files
});
}
n.afterRender != null && typeof n.afterRender == "function" ? n.afterRender(l, p, o, s) : null;
},
_clear: function() {
f.files = null;
s.prop("jFiler")
.files = null;
if(!n.uploadFile && !n.addMore) {
f._reset();
}
f._set('feedback', (f._itFl && f._itFl.length > 0 ? f._itFl.length + ' ' + n.captions.feedback2 : n.captions.feedback));
n.onEmpty != null && typeof n.onEmpty == "function" ? n.onEmpty(p, o, s) : null
},
_reset: function(a) {
if(!a) {
if(!n.uploadFile && n.addMore) {
for(var i = 0; i < sl.length; i++) {
sl[i].remove();
}
sl = [];
f._unbindInput();
if(f._isGn) {
s = f._isGn;
} else {
s = $(r);
}
f._bindInput();
}
f._set('input', '');
}
f._itFl = [];
f._itFc = null;
f._ajFc = 0;
f._set('props');
s.prop("jFiler")
.files_list = f._itFl;
s.prop("jFiler")
.current_file = f._itFc;
if(!f._prEr) {
f._itFr = [];
p.find("input[name^='jfiler-items-exclude-']:hidden")
.remove();
}
l.fadeOut("fast", function() {
$(this)
.remove();
});
s.prop("jFiler").listEl = l = $();
},
_set: function(element, value) {
switch(element) {
case 'input':
s.val("");
break;
case 'feedback':
if(o.length > 0) {
o.find('.jFiler-input-caption span')
.html(value);
}
break;
case 'props':
if(!s.prop("jFiler")){
s.prop("jFiler", {
options: n,
listEl: l,
boxEl: p,
newInputEl: o,
inputEl: s,
files: f.files,
files_list: f._itFl,
current_file: f._itFc,
append: function(data) {
return f._append(false, {
files: [data]
});
},
remove: function(id) {
f._remove(null, {
binded: true,
data: {
id: id
}
});
return true;
},
reset: function() {
f._reset();
f._clear();
return true;
},
retry: function(data) {
return f._retryUpload(data);
}
})
}
}
},
_filesCheck: function() {
var s = 0;
if(n.limit && f.files.length + f._itFl.length > n.limit) {
alert(f._assets.textParse(n.captions.errors.filesLimit));
return false
}
for(var t = 0; t < f.files.length; t++) {
var x = f.files[t].name.split(".")
.pop()
.toLowerCase(),
file = f.files[t],
m = {
name: file.name,
size: file.size,
size2: f._assets.bytesToSize(file.size),
type: file.type,
ext: x
};
if(n.extensions != null && $.inArray(x, n.extensions) == -1) {
alert(f._assets.textParse(n.captions.errors.filesType, m));
return false;
break
}
if(n.maxSize != null && f.files[t].size > n.maxSize * 1048576) {
alert(f._assets.textParse(n.captions.errors.filesSize, m));
return false;
break
}
if(file.size == 4096 && file.type.length == 0) {
return false;
break
}
s += f.files[t].size
}
if(n.maxSize != null && s >= Math.round(n.maxSize * 1048576)) {
alert(f._assets.textParse(n.captions.errors.filesSizeAll));
return false
}
if((n.addMore || n.uploadFile)) {
var m = f._itFl.filter(function(a, b) {
if(a.file.name == file.name && a.file.size == file.size && a.file.type == file.type && (file.lastModified ? a.file.lastModified == file.lastModified : true)) {
return true;
}
});
if(m.length > 0) {
return false
}
}
return true;
},
_thumbCreator: {
create: function(i) {
var file = f.files[i],
id = (f._itFc ? f._itFc.id : i),
name = file.name,
size = file.size,
type = file.type.split("/", 1)
.toString()
.toLowerCase(),
ext = name.indexOf(".") != -1 ? name.split(".")
.pop()
.toLowerCase() : "",
progressBar = n.uploadFile ? '<div class="jFiler-jProgressBar">' + n.templates.progressBar + '</div>' : '',
opts = {
id: id,
name: name,
size: size,
size2: f._assets.bytesToSize(size),
type: type,
extension: ext,
icon: f._assets.getIcon(ext, type),
icon2: f._thumbCreator.generateIcon({
type: type,
extension: ext
}),
image: '<div class="jFiler-item-thumb-image fi-loading"></div>',
progressBar: progressBar,
_appended: file._appended
},
html = "";
if(file.opts) {
opts = $.extend({}, file.opts, opts);
}
html = $(f._thumbCreator.renderContent(opts))
.attr("data-jfiler-index", id);
html.get(0)
.jfiler_id = id;
f._thumbCreator.renderFile(file, html, opts);
if(file.forList) {
return html;
}
f._itFc.html = html;
html.hide()[n.templates.itemAppendToEnd ? "appendTo" : "prependTo"](l.find(n.templates._selectors.list))
.show();
if(!file._appended) {
f._onSelect(i);
}
},
renderContent: function(opts) {
return f._assets.textParse((opts._appended ? n.templates.itemAppend : n.templates.item), opts);
},
renderFile: function(file, html, opts) {
if(html.find('.jFiler-item-thumb-image')
.size() == 0) {
return false;
}
if(file.file && opts.type == "image") {
var g = '<img src="' + file.file + '" draggable="false" />',
m = html.find('.jFiler-item-thumb-image.fi-loading');
$(g)
.error(function() {
g = f._thumbCreator.generateIcon(opts);
html.addClass('jFiler-no-thumbnail');
m.removeClass('fi-loading')
.html(g);
})
.load(function() {
m.removeClass('fi-loading')
.html(g);
});
return true;
}
if(window.File && window.FileList && window.FileReader && opts.type == "image" && opts.size < 6e+6) {
var y = new FileReader;
y.onload = function(e) {
var g = '<img src="' + e.target.result + '" draggable="false" />',
m = html.find('.jFiler-item-thumb-image.fi-loading');
$(g)
.error(function() {
g = f._thumbCreator.generateIcon(opts);
html.addClass('jFiler-no-thumbnail');
m.removeClass('fi-loading')
.html(g);
})
.load(function() {
m.removeClass('fi-loading')
.html(g);
});
};
y.readAsDataURL(file);
} else {
var g = f._thumbCreator.generateIcon(opts),
m = html.find('.jFiler-item-thumb-image.fi-loading');
html.addClass('jFiler-no-thumbnail');
m.removeClass('fi-loading')
.html(g);
}
},
generateIcon: function(obj) {
var m = new Array(3);
if(obj && obj.type && obj.extension) {
switch(obj.type) {
case "image":
m[0] = "f-image";
m[1] = "<i class=\"icon-jfi-file-image\"></i>"
break;
case "video":
m[0] = "f-video";
m[1] = "<i class=\"icon-jfi-file-video\"></i>"
break;
case "audio":
m[0] = "f-audio";
m[1] = "<i class=\"icon-jfi-file-audio\"></i>"
break;
default:
m[0] = "f-file f-file-ext-" + obj.extension;
m[1] = (obj.extension.length > 0 ? "." + obj.extension : "");
m[2] = 1
}
} else {
m[0] = "f-file";
m[1] = (obj.extension && obj.extension.length > 0 ? "." + obj.extension : "");
m[2] = 1
}
var el = '<span class="jFiler-icon-file ' + m[0] + '">' + m[1] + '</span>';
if(m[2] == 1) {
var c = f._assets.text2Color(obj.extension);
if(c) {
var j = $(el)
.appendTo("body"),
h = j.css("box-shadow");
h = c + h.substring(h.replace(/^.*(rgba?\([^)]+\)).*$/, '$1')
.length, h.length);
j.css({
'-webkit-box-shadow': h,
'-moz-box-shadow': h,
'box-shadow': h
})
.attr('style', '-webkit-box-shadow: ' + h + '; -moz-box-shadow: ' + h + '; box-shadow: ' + h + ';');
el = j.prop('outerHTML');
j.remove();
}
}
return el;
},
_box: function(params) {
if(n.beforeShow != null && typeof n.beforeShow == "function" ? !n.beforeShow(f.files, l, p, o, s) : false) {
return false
}
if(l.length < 1) {
if(n.appendTo) {
var appendTo = $(n.appendTo);
} else {
var appendTo = p;
}
appendTo.find('.jFiler-items')
.remove();
l = $('<div class="jFiler-items jFiler-row"></div>');
s.prop("jFiler").listEl = l;
l.append(f._assets.textParse(n.templates.box))
.appendTo(appendTo);
l.on('click', n.templates._selectors.remove, function(e) {
e.preventDefault();
var cf = n.templates.removeConfirmation ? confirm(n.captions.removeConfirmation) : true;
if(cf) {
f._remove(params ? params.remove.event : e, params ? params.remove.el : $(this)
.closest(n.templates._selectors.item));
}
});
}
for(var i = 0; i < f.files.length; i++) {
if(!f.files[i]._appended) f.files[i]._choosed = true;
f._addToMemory(i);
f._thumbCreator.create(i);
}
}
},
_upload: function(i) {
var el = f._itFc.html,
formData = new FormData();
formData.append(s.attr('name'), f._itFc.file, (f._itFc.file.name ? f._itFc.file.name : false));
if(n.uploadFile.data != null && $.isPlainObject(n.uploadFile.data)) {
for(var k in n.uploadFile.data) {
formData.append(k, n.uploadFile.data[k])
}
}
f._ajax.send(el, formData, f._itFc);
},
_ajax: {
send: function(el, formData, c) {
c.ajax = $.ajax({
url: n.uploadFile.url,
data: formData,
type: n.uploadFile.type,
enctype: n.uploadFile.enctype,
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if(myXhr.upload) {
myXhr.upload.addEventListener("progress", function(e) {
f._ajax.progressHandling(e, el)
}, false)
}
return myXhr
},
complete: function(jqXHR, textStatus) {
c.ajax = false;
f._ajFc++;
if(f._ajFc >= f.files.length) {
f._ajFc = 0;
n.uploadFile.onComplete != null && typeof n.uploadFile.onComplete == "function" ? n.uploadFile.onComplete(l, p, o, s, jqXHR, textStatus) : null;
}
},
beforeSend: function(jqXHR, settings) {
return n.uploadFile.beforeSend != null && typeof n.uploadFile.beforeSend == "function" ? n.uploadFile.beforeSend(el, l, p, o, s, c.id, jqXHR, settings) : true;
},
success: function(data, textStatus, jqXHR) {
c.uploaded = true;
n.uploadFile.success != null && typeof n.uploadFile.success == "function" ? n.uploadFile.success(data, el, l, p, o, s, c.id, textStatus, jqXHR) : null
},
error: function(jqXHR, textStatus, errorThrown) {
c.uploaded = false;
n.uploadFile.error != null && typeof n.uploadFile.error == "function" ? n.uploadFile.error(el, l, p, o, s, c.id, jqXHR, textStatus, errorThrown) : null
},
statusCode: n.uploadFile.statusCode,
cache: false,
contentType: false,
processData: false
});
return c.ajax;
},
progressHandling: function(e, el) {
if(e.lengthComputable) {
var t = Math.round(e.loaded * 100 / e.total)
.toString();
n.uploadFile.onProgress != null && typeof n.uploadFile.onProgress == "function" ? n.uploadFile.onProgress(t, el, l, p, o, s) : null;
el.find('.jFiler-jProgressBar')
.find(n.templates._selectors.progressBar)
.css("width", t + "%")
}
}
},
_dragDrop: {
dragEnter: function(e) {
e.preventDefault();
e.stopPropagation();
p.addClass('dragged');
f._set('feedback', n.captions.drop);
n.dragDrop.dragEnter != null && typeof n.dragDrop.dragEnter == "function" ? n.dragDrop.dragEnter(e, o, s, p) : null;
},
dragLeave: function(e) {
e.preventDefault();
e.stopPropagation();
if(!f._dragDrop._dragLeaveCheck(e)) {
return false
}
p.removeClass('dragged');
f._set('feedback', n.captions.feedback);
n.dragDrop.dragLeave != null && typeof n.dragDrop.dragLeave == "function" ? n.dragDrop.dragLeave(e, o, s, p) : null;
},
drop: function(e) {
e.preventDefault();
p.removeClass('dragged');
f._set('feedback', n.captions.feedback);
if(e && e.originalEvent && e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.files && e.originalEvent.dataTransfer.files.length > 0) {
f._onChange(e, e.originalEvent.dataTransfer.files);
}
n.dragDrop.drop != null && typeof n.dragDrop.drop == "function" ? n.dragDrop.drop(e.originalEvent.dataTransfer.files, e, o, s, p) : null;
},
_dragLeaveCheck: function(e) {
var related = e.relatedTarget,
inside = false;
if(related !== o) {
if(related) {
inside = $.contains(o, related);
}
if(inside) {
return false;
}
}
return true;
}
},
_clipboardPaste: function(e, fromDrop) {
if(!fromDrop && (!e.originalEvent.clipboardData && !e.originalEvent.clipboardData.items)) {
return
}
if(fromDrop && (!e.originalEvent.dataTransfer && !e.originalEvent.dataTransfer.items)) {
return
}
if(f._clPsePre) {
return
}
var items = (fromDrop ? e.originalEvent.dataTransfer.items : e.originalEvent.clipboardData.items),
b64toBlob = function(b64Data, contentType, sliceSize) {
contentType = contentType || '';
sliceSize = sliceSize || 512;
var byteCharacters = atob(b64Data);
var byteArrays = [];
for(var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers = new Array(slice.length);
for(var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob = new Blob(byteArrays, {
type: contentType
});
return blob;
};
if(items) {
for(var i = 0; i < items.length; i++) {
if(items[i].type.indexOf("image") !== -1 || items[i].type.indexOf("text/uri-list") !== -1) {
if(fromDrop) {
try {
window.atob(e.originalEvent.dataTransfer.getData("text/uri-list")
.toString()
.split(',')[1]);
} catch(e) {
return;
}
}
var blob = (fromDrop ? b64toBlob(e.originalEvent.dataTransfer.getData("text/uri-list")
.toString()
.split(',')[1], "image/png") : items[i].getAsFile());
blob.name = Math.random()
.toString(36)
.substring(5);
blob.name += blob.type.indexOf("/") != -1 ? "." + blob.type.split("/")[1].toString()
.toLowerCase() : ".png";
f._onChange(e, [blob]);
f._clPsePre = setTimeout(function() {
delete f._clPsePre
}, 1000);
}
}
}
},
_onSelect: function(i) {
if(n.uploadFile && !$.isEmptyObject(n.uploadFile)) {
f._upload(i)
}
n.onSelect != null && typeof n.onSelect == "function" ? n.onSelect(f.files[i], f._itFc.html, l, p, o, s) : null;
if(i + 1 >= f.files.length) {
n.afterShow != null && typeof n.afterShow == "function" ? n.afterShow(l, p, o, s) : null
}
},
_onChange: function(e, d) {
if(!d) {
if(!s.get(0)
.files || typeof s.get(0)
.files == "undefined" || s.get(0)
.files.length == 0) {
if(!n.uploadFile && !n.addMore) {
f._set('input', '');
f._clear();
}
return false
}
f.files = s.get(0)
.files;
} else {
if(!d || d.length == 0) {
f._set('input', '');
f._clear();
return false
}
f.files = d;
}
if(!n.uploadFile && !n.addMore) {
f._reset(true);
}
s.prop("jFiler")
.files = f.files;
if(!f._filesCheck() || (n.beforeSelect != null && typeof n.beforeSelect == "function" ? !n.beforeSelect(f.files, l, p, o, s) : false)) {
f._set('input', '');
f._clear();
return false
}
f._set('feedback', f.files.length + f._itFl.length + ' ' + n.captions.feedback2);
if(n.showThumbs) {
f._thumbCreator._box();
} else {
for(var i = 0; i < f.files.length; i++) {
f.files[i]._choosed = true;
f._addToMemory(i);
f._onSelect(i);
}
}
if(!n.uploadFile && n.addMore) {
var elem = $('<input type="file" />');
var attributes = s.prop("attributes");
$.each(attributes, function() {
elem.attr(this.name, this.value);
});
s.after(elem);
f._unbindInput();
sl.push(elem);
s = elem;
f._bindInput();
f._set('props');
}
},
_append: function(e, data) {
var files = (!data ? false : data.files);
if(!files || files.length <= 0) {
return;
}
f.files = files;
s.prop("jFiler")
.files = f.files;
if(n.showThumbs) {
for(var i = 0; i < f.files.length; i++) {
f.files[i]._appended = true;
}
f._thumbCreator._box();
}
},
_getList: function(e, data) {
var files = (!data ? false : data.files);
if(!files || files.length <= 0) {
return;
}
f.files = files;
s.prop("jFiler")
.files = f.files;
if(n.showThumbs) {
var returnData = [];
for(var i = 0; i < f.files.length; i++) {
f.files[i].forList = true;
returnData.push(f._thumbCreator.create(i));
}
if(data.callback) {
data.callback(returnData, l, p, o, s);
}
}
},
_retryUpload: function(e, data) {
var id = parseInt(typeof data == "object" ? data.attr("data-jfiler-index") : data),
obj = f._itFl.filter(function(value, key) {
return value.id == id;
});
if(obj.length > 0) {
if(n.uploadFile && !$.isEmptyObject(n.uploadFile) && !obj[0].uploaded) {
f._itFc = obj[0];
s.prop("jFiler")
.current_file = f._itFc;
f._upload(id);
return true;
}
} else {
return false;
}
},
_remove: function(e, el) {
if(el.binded) {
if(typeof(el.data.id) != "undefined") {
el = l.find(n.templates._selectors.item + "[data-jfiler-index='" + el.data.id + "']");
if(el.size() == 0) {
return false
}
}
if(el.data.el) {
el = el.data.el;
}
}
var attrId = el.get(0)
.jfiler_id || el.attr('data-jfiler-index'),
id = null,
excl_input = function(id) {
var input = p.find("input[name^='jfiler-items-exclude-']:hidden")
.first(),
item = f._itFl[id],
val = [];
if(input.size() == 0) {
input = $('<input type="hidden" name="jfiler-items-exclude-' + (n.excludeName ? n.excludeName : (s.attr("name")
.slice(-2) != "[]" ? s.attr("name") : s.attr("name")
.substring(0, s.attr("name")
.length - 2)) + "-" + t) + '">');
input.appendTo(p);
}
if(item.file._choosed || item.file._appended || item.uploaded) {
f._prEr = true;
f._itFr.push(item);
if(n.addMore) {
var current_input = item.input,
count_same_input = 0;
f._itFl.filter(function(val, index) {
if(val.file._choosed && val.input.get(0) == current_input.get(0)) count_same_input++;
});
if(count_same_input == 1) {
f._itFr = f._itFr.filter(function(val, index) {
return val.file._choosed ? val.input.get(0) != current_input.get(0) : true;
});
current_input.val("");
f._prEr = false;
}
}
for(var i = 0; i < f._itFr.length; i++) {
val.push(f._itFr[i].file.name);
}
val = JSON.stringify(val);
input.val(val);
}
},
callback = function(el, id) {
excl_input(id);
f._itFl.splice(id, 1);
if(f._itFl.length < 1) {
f._reset();
f._clear();
} else {
f._set('feedback', f._itFl.length + ' ' + n.captions.feedback2);
}
el.fadeOut("fast", function() {
$(this)
.remove();
});
};
for(var key in f._itFl) {
if(key === 'length' || !f._itFl.hasOwnProperty(key)) continue;
if(f._itFl[key].id == attrId) {
id = key;
}
}
if(!f._itFl.hasOwnProperty(id)) {
return false
}
if(f._itFl[id].ajax) {
f._itFl[id].ajax.abort();
callback(el, id);
return;
}
n.onRemove != null && typeof n.onRemove == "function" ? n.onRemove(el, f._itFl[id].file, id, l, p, o, s) : null;
callback(el, id);
},
_addToMemory: function(i) {
f._itFl.push({
id: f._itFl.length,
file: f.files[i],
html: $(),
ajax: false,
uploaded: false,
});
if(n.addMore && !f.files[i]._appended) f._itFl[f._itFl.length - 1].input = s;
f._itFc = f._itFl[f._itFl.length - 1];
s.prop("jFiler")
.files_list = f._itFl;
s.prop("jFiler")
.current_file = f._itFc;
},
_assets: {
bytesToSize: function(bytes) {
if(bytes == 0) return '0 Byte';
var k = 1000;
var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
var i = Math.floor(Math.log(bytes) / Math.log(k));
return(bytes / Math.pow(k, i))
.toPrecision(3) + ' ' + sizes[i];
},
hasAttr: function(attr, el) {
var el = (!el ? s : el),
a = el.attr(attr);
if(!a || typeof a == "undefined") {
return false;
} else {
return true;
}
},
getIcon: function(ext, type) {
var types = ["audio", "image", "text", "video"];
if($.inArray(type, types) > -1) {
return '<i class="icon-jfi-file-' + type + ' jfi-file-ext-' + ext + '"></i>';
}
return '<i class="icon-jfi-file-o jfi-file-type-' + type + ' jfi-file-ext-' + ext + '"></i>';
},
textParse: function(text, opts) {
opts = $.extend({}, {
limit: n.limit,
maxSize: n.maxSize,
extensions: n.extensions ? n.extensions.join(',') : null,
}, (opts && $.isPlainObject(opts) ? opts : {}), n.options);
switch(typeof(text)) {
case "string":
return text.replace(/\{\{fi-(.*?)\}\}/g, function(match, a) {
a = a.replace(/ /g, '');
if(a.match(/(.*?)\|limitTo\:(\d+)/)) {
return a.replace(/(.*?)\|limitTo\:(\d+)/, function(match, a, b) {
var a = (opts[a] ? opts[a] : ""),
str = a.substring(0, b);
str = (a.length > str.length ? str.substring(0, str.length - 3) + "..." : str);
return str;
});
} else {
return(opts[a] ? opts[a] : "");
}
});
break;
case "function":
return text(opts);
break;
default:
return text;
}
},
text2Color: function(str) {
if(!str || str.length == 0) {
return false
}
for(var i = 0, hash = 0; i < str.length; hash = str.charCodeAt(i++) + ((hash << 5) - hash));
for(var i = 0, colour = "#"; i < 3; colour += ("00" + ((hash >> i++ * 2) & 0xFF)
.toString(16))
.slice(-2));
return colour;
}
},
files: null,
_itFl: [],
_itFc: null,
_itFr: [],
_ajFc: 0,
_prEr: false
}
s.on("filer.append", function(e, data) {
f._append(e, data)
}).on("filer.remove", function(e, data) {
data.binded = true;
f._remove(e, data);
}).on("filer.reset", function(e) {
f._reset();
f._clear();
return true;
}).on("filer.generateList", function(e, data) {
return f._getList(e, data)
}).on("filer.retry", function(e, data) {
return f._retryUpload(e, data)
});
f.init();
return this;
});
};
$.fn.filer.defaults = {
limit: null,
maxSize: null,
extensions: null,
changeInput: true,
showThumbs: false,
appendTo: null,
theme: 'default',
templates: {
box: '<ul class="jFiler-items-list jFiler-items-default"></ul>',
item: '<li class="jFiler-item"><div class="jFiler-item-container"><div class="jFiler-item-inner"><div class="jFiler-item-icon pull-left">{{fi-icon}}</div><div class="jFiler-item-info pull-left"><div class="jFiler-item-title" title="{{fi-name}}">{{fi-name | limitTo:30}}</div><div class="jFiler-item-others"><span>size: {{fi-size2}}</span><span>type: {{fi-extension}}</span><span class="jFiler-item-status">{{fi-progressBar}}</span></div><div class="jFiler-item-assets"><ul class="list-inline"><li><a class="icon-jfi-trash jFiler-item-trash-action"></a></li></ul></div></div></div></div></li>',
itemAppend: '<li class="jFiler-item"><div class="jFiler-item-container"><div class="jFiler-item-inner"><div class="jFiler-item-icon pull-left">{{fi-icon}}</div><div class="jFiler-item-info pull-left"><div class="jFiler-item-title">{{fi-name | limitTo:35}}</div><div class="jFiler-item-others"><span>size: {{fi-size2}}</span><span>type: {{fi-extension}}</span><span class="jFiler-item-status"></span></div><div class="jFiler-item-assets"><ul class="list-inline"><li><a class="icon-jfi-trash jFiler-item-trash-action"></a></li></ul></div></div></div></div></li>',
progressBar: '<div class="bar"></div>',
itemAppendToEnd: false,
removeConfirmation: true,
_selectors: {
list: '.jFiler-items-list',
item: '.jFiler-item',
progressBar: '.bar',
remove: '.jFiler-item-trash-action'
}
},
files: null,
uploadFile: null,
dragDrop: null,
addMore: false,
clipBoardPaste: true,
excludeName: null,
beforeRender: null,
afterRender: null,
beforeShow: null,
beforeSelect: null,
onSelect: null,
afterShow: null,
onRemove: null,
onEmpty: null,
options: null,
captions: {
button: "Choose Files",
feedback: "Choose files To Upload",
feedback2: "files were chosen",
drop: "Drop file here to Upload",
removeConfirmation: "Are you sure you want to remove this file?",
errors: {
filesLimit: "Only {{fi-limit}} files are allowed to be uploaded.",
filesType: "Only Images are allowed to be uploaded.",
filesSize: "{{fi-name}} is too large! Please upload file up to {{fi-maxSize}} MB.",
filesSizeAll: "Files you've choosed are too large! Please upload files up to {{fi-maxSize}} MB."
}
}
}
})(jQuery);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,221 @@
/*! svg.draggable.js - v2.2.0 - 2016-05-21
* https://github.com/wout/svg.draggable.js
* Copyright (c) 2016 Wout Fierens; Licensed MIT */
;(function() {
// creates handler, saves it
function DragHandler(el){
el.remember('_draggable', this)
this.el = el
}
// Sets new parameter, starts dragging
DragHandler.prototype.init = function(constraint, val){
var _this = this
this.constraint = constraint
this.value = val
this.el.on('mousedown.drag', function(e){ _this.start(e) })
this.el.on('touchstart.drag', function(e){ _this.start(e) })
}
// transforms one point from screen to user coords
DragHandler.prototype.transformPoint = function(event, offset){
event = event || window.event
var touches = event.changedTouches && event.changedTouches[0] || event
this.p.x = touches.pageX - (offset || 0)
this.p.y = touches.pageY
return this.p.matrixTransform(this.m)
}
// gets elements bounding box with special handling of groups, nested and use
DragHandler.prototype.getBBox = function(){
var box = this.el.bbox()
if(this.el instanceof SVG.Nested) box = this.el.rbox()
if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) {
box.x = this.el.x()
box.y = this.el.y()
}
return box
}
// start dragging
DragHandler.prototype.start = function(e){
// check for left button
if(e.type == 'click'|| e.type == 'mousedown' || e.type == 'mousemove'){
if((e.which || e.buttons) != 1){
return
}
}
var _this = this
// fire beforedrag event
this.el.fire('beforedrag', { event: e, handler: this })
// search for parent on the fly to make sure we can call
// draggable() even when element is not in the dom currently
this.parent = this.parent || this.el.parent(SVG.Nested) || this.el.parent(SVG.Doc)
this.p = this.parent.node.createSVGPoint()
// save current transformation matrix
this.m = this.el.node.getScreenCTM().inverse()
var box = this.getBBox()
var anchorOffset;
// fix text-anchor in text-element (#37)
if(this.el instanceof SVG.Text){
anchorOffset = this.el.node.getComputedTextLength();
switch(this.el.attr('text-anchor')){
case 'middle':
anchorOffset /= 2;
break
case 'start':
anchorOffset = 0;
break;
}
}
this.startPoints = {
// We take absolute coordinates since we are just using a delta here
point: this.transformPoint(e, anchorOffset),
box: box
}
// add drag and end events to window
SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e) })
SVG.on(window, 'touchmove.drag', function(e){ _this.drag(e) })
SVG.on(window, 'mouseup.drag', function(e){ _this.end(e) })
SVG.on(window, 'touchend.drag', function(e){ _this.end(e) })
// fire dragstart event
this.el.fire('dragstart', {event: e, p: this.startPoints.point, m: this.m, handler: this})
// prevent browser drag behavior
e.preventDefault()
// prevent propagation to a parent that might also have dragging enabled
e.stopPropagation();
}
// while dragging
DragHandler.prototype.drag = function(e){
var box = this.getBBox()
, p = this.transformPoint(e)
, x = this.startPoints.box.x + p.x - this.startPoints.point.x
, y = this.startPoints.box.y + p.y - this.startPoints.point.y
, c = this.constraint
var event = new CustomEvent('dragmove', {
detail: {
event: e
, p: p
, m: this.m
, handler: this
}
, cancelable: true
})
this.el.fire(event)
if(event.defaultPrevented) return p
// move the element to its new position, if possible by constraint
if (typeof c == 'function') {
var coord = c.call(this.el, x, y, this.m)
// bool, just show us if movement is allowed or not
if (typeof coord == 'boolean') {
coord = {
x: coord,
y: coord
}
}
// if true, we just move. If !false its a number and we move it there
if (coord.x === true) {
this.el.x(x)
} else if (coord.x !== false) {
this.el.x(coord.x)
}
if (coord.y === true) {
this.el.y(y)
} else if (coord.y !== false) {
this.el.y(coord.y)
}
} else if (typeof c == 'object') {
// keep element within constrained box
if (c.minX != null && x < c.minX)
x = c.minX
else if (c.maxX != null && x > c.maxX - box.width){
x = c.maxX - box.width
}if (c.minY != null && y < c.minY)
y = c.minY
else if (c.maxY != null && y > c.maxY - box.height)
y = c.maxY - box.height
this.el.move(x, y)
}
// so we can use it in the end-method, too
return p
}
DragHandler.prototype.end = function(e){
// final drag
var p = this.drag(e);
// fire dragend event
this.el.fire('dragend', { event: e, p: p, m: this.m, handler: this })
// unbind events
SVG.off(window, 'mousemove.drag')
SVG.off(window, 'touchmove.drag')
SVG.off(window, 'mouseup.drag')
SVG.off(window, 'touchend.drag')
}
SVG.extend(SVG.Element, {
// Make element draggable
// Constraint might be an object (as described in readme.md) or a function in the form "function (x, y)" that gets called before every move.
// The function can return a boolean or an object of the form {x, y}, to which the element will be moved. "False" skips moving, true moves to raw x, y.
draggable: function(value, constraint) {
// Check the parameters and reassign if needed
if (typeof value == 'function' || typeof value == 'object') {
constraint = value
value = true
}
var dragHandler = this.remember('_draggable') || new DragHandler(this)
// When no parameter is given, value is true
value = typeof value === 'undefined' ? true : value
if(value) dragHandler.init(constraint || {}, value)
else {
this.off('mousedown.drag')
this.off('touchstart.drag')
}
return this
}
})
}).call(this);

View file

@ -0,0 +1,4 @@
/*! svg.draggable.js - v2.2.0 - 2016-05-21
* https://github.com/wout/svg.draggable.js
* Copyright (c) 2016 Wout Fierens; Licensed MIT */
(function(){function a(a){a.remember("_draggable",this),this.el=a}a.prototype.init=function(a,b){var c=this;this.constraint=a,this.value=b,this.el.on("mousedown.drag",function(a){c.start(a)}),this.el.on("touchstart.drag",function(a){c.start(a)})},a.prototype.transformPoint=function(a,b){a=a||window.event;var c=a.changedTouches&&a.changedTouches[0]||a;return this.p.x=c.pageX-(b||0),this.p.y=c.pageY,this.p.matrixTransform(this.m)},a.prototype.getBBox=function(){var a=this.el.bbox();return this.el instanceof SVG.Nested&&(a=this.el.rbox()),(this.el instanceof SVG.G||this.el instanceof SVG.Use||this.el instanceof SVG.Nested)&&(a.x=this.el.x(),a.y=this.el.y()),a},a.prototype.start=function(a){if("click"!=a.type&&"mousedown"!=a.type&&"mousemove"!=a.type||1==(a.which||a.buttons)){var b=this;this.el.fire("beforedrag",{event:a,handler:this}),this.parent=this.parent||this.el.parent(SVG.Nested)||this.el.parent(SVG.Doc),this.p=this.parent.node.createSVGPoint(),this.m=this.el.node.getScreenCTM().inverse();var c,d=this.getBBox();if(this.el instanceof SVG.Text)switch(c=this.el.node.getComputedTextLength(),this.el.attr("text-anchor")){case"middle":c/=2;break;case"start":c=0}this.startPoints={point:this.transformPoint(a,c),box:d},SVG.on(window,"mousemove.drag",function(a){b.drag(a)}),SVG.on(window,"touchmove.drag",function(a){b.drag(a)}),SVG.on(window,"mouseup.drag",function(a){b.end(a)}),SVG.on(window,"touchend.drag",function(a){b.end(a)}),this.el.fire("dragstart",{event:a,p:this.startPoints.point,m:this.m,handler:this}),a.preventDefault(),a.stopPropagation()}},a.prototype.drag=function(a){var b=this.getBBox(),c=this.transformPoint(a),d=this.startPoints.box.x+c.x-this.startPoints.point.x,e=this.startPoints.box.y+c.y-this.startPoints.point.y,f=this.constraint,g=new CustomEvent("dragmove",{detail:{event:a,p:c,m:this.m,handler:this},cancelable:!0});if(this.el.fire(g),g.defaultPrevented)return c;if("function"==typeof f){var h=f.call(this.el,d,e,this.m);"boolean"==typeof h&&(h={x:h,y:h}),h.x===!0?this.el.x(d):h.x!==!1&&this.el.x(h.x),h.y===!0?this.el.y(e):h.y!==!1&&this.el.y(h.y)}else"object"==typeof f&&(null!=f.minX&&d<f.minX?d=f.minX:null!=f.maxX&&d>f.maxX-b.width&&(d=f.maxX-b.width),null!=f.minY&&e<f.minY?e=f.minY:null!=f.maxY&&e>f.maxY-b.height&&(e=f.maxY-b.height),this.el.move(d,e));return c},a.prototype.end=function(a){var b=this.drag(a);this.el.fire("dragend",{event:a,p:b,m:this.m,handler:this}),SVG.off(window,"mousemove.drag"),SVG.off(window,"touchmove.drag"),SVG.off(window,"mouseup.drag"),SVG.off(window,"touchend.drag")},SVG.extend(SVG.Element,{draggable:function(b,c){("function"==typeof b||"object"==typeof b)&&(c=b,b=!0);var d=this.remember("_draggable")||new a(this);return b="undefined"==typeof b?!0:b,b?d.init(c||{},b):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}).call(this);

File diff suppressed because it is too large Load diff

2
hal-core/resource/web/js/svg.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,26 @@
// Title Plugin
// Source: https://github.com/wout/svg.js/issues/147
//
// // example usage
// var draw = SVG('drawing')
// var group = draw.group()
// group.title('This is a pink square.')
// group.rect(100,100).fill('#f06')
SVG.Title = SVG.invent({
create: 'title',
inherit: SVG.Element,
extend: {
text: function(text) {
while (this.node.firstChild)
this.node.removeChild(this.node.firstChild)
this.node.appendChild(document.createTextNode(text))
return this
}
},
construct: {
title: function(text) {
return this.put(new SVG.Title).text(text)
}
}
})