You've already forked haproxy-wi
mirror of
https://github.com/roxy-wi/roxy-wi.git
synced 2025-12-18 12:04:07 +08:00
The requirements for el9, deb, and main have been updated to specifically use version 2.27.1 of the "requests" package. In addition, the date formatting function get_time_zoned_date in common.py has been refactored. The default format for the date has been moved to the function arguments, and the function now also checks if the provided date is an instance of datetime before processing it.
384 lines
9.4 KiB
JavaScript
384 lines
9.4 KiB
JavaScript
/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
|
|
* @license MIT */
|
|
|
|
;(function(root, factory) {
|
|
|
|
if (typeof define === 'function' && define.amd) {
|
|
define(factory);
|
|
} else if (typeof exports === 'object') {
|
|
module.exports = factory();
|
|
} else {
|
|
root.NProgress = factory();
|
|
}
|
|
|
|
})(this, function() {
|
|
var NProgress = {};
|
|
|
|
NProgress.version = '0.2.0';
|
|
|
|
var Settings = NProgress.settings = {
|
|
minimum: 0.08,
|
|
easing: 'linear',
|
|
positionUsing: '',
|
|
speed: 200,
|
|
trickle: true,
|
|
trickleSpeed: 200,
|
|
showSpinner: true,
|
|
barSelector: '[role="bar"]',
|
|
spinnerSelector: '[role="spinner"]',
|
|
parent: 'body',
|
|
template: '<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'
|
|
};
|
|
|
|
NProgress.configure = function(options) {
|
|
var key, value;
|
|
for (key in options) {
|
|
value = options[key];
|
|
if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
NProgress.status = null;
|
|
|
|
NProgress.set = function(n) {
|
|
var started = NProgress.isStarted();
|
|
|
|
n = clamp(n, Settings.minimum, 1);
|
|
NProgress.status = (n === 1 ? null : n);
|
|
|
|
var progress = NProgress.render(!started),
|
|
bar = progress.querySelector(Settings.barSelector),
|
|
speed = Settings.speed,
|
|
ease = Settings.easing;
|
|
|
|
progress.offsetWidth; /* Repaint */
|
|
|
|
queue(function(next) {
|
|
// Set positionUsing if it hasn't already been set
|
|
if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();
|
|
|
|
// Add transition
|
|
css(bar, barPositionCSS(n, speed, ease));
|
|
|
|
if (n === 1) {
|
|
// Fade out
|
|
css(progress, {
|
|
transition: 'none',
|
|
opacity: 1
|
|
});
|
|
progress.offsetWidth; /* Repaint */
|
|
|
|
setTimeout(function() {
|
|
css(progress, {
|
|
transition: 'all ' + speed + 'ms linear',
|
|
opacity: 0
|
|
});
|
|
setTimeout(function() {
|
|
NProgress.remove();
|
|
next();
|
|
}, speed);
|
|
}, speed);
|
|
} else {
|
|
setTimeout(next, speed);
|
|
}
|
|
});
|
|
|
|
return this;
|
|
};
|
|
|
|
NProgress.isStarted = function() {
|
|
return typeof NProgress.status === 'number';
|
|
};
|
|
|
|
NProgress.start = function() {
|
|
if (!NProgress.status) NProgress.set(0);
|
|
|
|
var work = function() {
|
|
setTimeout(function() {
|
|
if (!NProgress.status) return;
|
|
NProgress.trickle();
|
|
work();
|
|
}, Settings.trickleSpeed);
|
|
};
|
|
|
|
if (Settings.trickle) work();
|
|
|
|
return this;
|
|
};
|
|
|
|
NProgress.done = function(force) {
|
|
if (!force && !NProgress.status) return this;
|
|
|
|
return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);
|
|
};
|
|
|
|
NProgress.inc = function(amount) {
|
|
var n = NProgress.status;
|
|
|
|
if (!n) {
|
|
return NProgress.start();
|
|
} else if(n > 1) {
|
|
return;
|
|
} else {
|
|
if (typeof amount !== 'number') {
|
|
if (n >= 0 && n < 0.2) { amount = 0.1; }
|
|
else if (n >= 0.2 && n < 0.5) { amount = 0.04; }
|
|
else if (n >= 0.5 && n < 0.8) { amount = 0.02; }
|
|
else if (n >= 0.8 && n < 0.99) { amount = 0.005; }
|
|
else { amount = 0; }
|
|
}
|
|
|
|
n = clamp(n + amount, 0, 0.994);
|
|
return NProgress.set(n);
|
|
}
|
|
};
|
|
|
|
NProgress.trickle = function() {
|
|
return NProgress.inc();
|
|
};
|
|
|
|
(function() {
|
|
var initial = 0, current = 0;
|
|
|
|
NProgress.promise = function($promise) {
|
|
if (!$promise || $promise.state() === "resolved") {
|
|
return this;
|
|
}
|
|
|
|
if (current === 0) {
|
|
NProgress.start();
|
|
}
|
|
|
|
initial++;
|
|
current++;
|
|
|
|
$promise.always(function() {
|
|
current--;
|
|
if (current === 0) {
|
|
initial = 0;
|
|
NProgress.done();
|
|
} else {
|
|
NProgress.set((initial - current) / initial);
|
|
}
|
|
});
|
|
|
|
return this;
|
|
};
|
|
|
|
})();
|
|
|
|
NProgress.render = function(fromStart) {
|
|
if (NProgress.isRendered()) return document.getElementById('nprogress');
|
|
|
|
addClass(document.documentElement, 'nprogress-busy');
|
|
|
|
var progress = document.createElement('div');
|
|
progress.id = 'nprogress';
|
|
progress.innerHTML = Settings.template;
|
|
|
|
var bar = progress.querySelector(Settings.barSelector),
|
|
perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),
|
|
parent = isDOM(Settings.parent)
|
|
? Settings.parent
|
|
: document.querySelector(Settings.parent),
|
|
spinner
|
|
|
|
css(bar, {
|
|
transition: 'all 0 linear',
|
|
transform: 'translate3d(' + perc + '%,0,0)'
|
|
});
|
|
|
|
if (!Settings.showSpinner) {
|
|
spinner = progress.querySelector(Settings.spinnerSelector);
|
|
spinner && removeElement(spinner);
|
|
}
|
|
|
|
if (parent != document.body) {
|
|
addClass(parent, 'nprogress-custom-parent');
|
|
}
|
|
|
|
parent.appendChild(progress);
|
|
return progress;
|
|
};
|
|
|
|
NProgress.remove = function() {
|
|
removeClass(document.documentElement, 'nprogress-busy');
|
|
var parent = isDOM(Settings.parent)
|
|
? Settings.parent
|
|
: document.querySelector(Settings.parent)
|
|
removeClass(parent, 'nprogress-custom-parent')
|
|
var progress = document.getElementById('nprogress');
|
|
progress && removeElement(progress);
|
|
};
|
|
|
|
NProgress.isRendered = function() {
|
|
return !!document.getElementById('nprogress');
|
|
};
|
|
|
|
NProgress.getPositioningCSS = function() {
|
|
// Sniff on document.body.style
|
|
var bodyStyle = document.body.style;
|
|
|
|
// Sniff prefixes
|
|
var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :
|
|
('MozTransform' in bodyStyle) ? 'Moz' :
|
|
('msTransform' in bodyStyle) ? 'ms' :
|
|
('OTransform' in bodyStyle) ? 'O' : '';
|
|
|
|
if (vendorPrefix + 'Perspective' in bodyStyle) {
|
|
// Modern browsers with 3D support, e.g. Webkit, IE10
|
|
return 'translate3d';
|
|
} else if (vendorPrefix + 'Transform' in bodyStyle) {
|
|
// Browsers without 3D support, e.g. IE9
|
|
return 'translate';
|
|
} else {
|
|
// Browsers without translate() support, e.g. IE7-8
|
|
return 'margin';
|
|
}
|
|
};
|
|
|
|
function isDOM (obj) {
|
|
if (typeof HTMLElement === 'object') {
|
|
return obj instanceof HTMLElement
|
|
}
|
|
return (
|
|
obj &&
|
|
typeof obj === 'object' &&
|
|
obj.nodeType === 1 &&
|
|
typeof obj.nodeName === 'string'
|
|
)
|
|
}
|
|
|
|
function clamp(n, min, max) {
|
|
if (n < min) return min;
|
|
if (n > max) return max;
|
|
return n;
|
|
}
|
|
|
|
function toBarPerc(n) {
|
|
return (-1 + n) * 100;
|
|
}
|
|
|
|
function barPositionCSS(n, speed, ease) {
|
|
var barCSS;
|
|
|
|
if (Settings.positionUsing === 'translate3d') {
|
|
barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };
|
|
} else if (Settings.positionUsing === 'translate') {
|
|
barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };
|
|
} else {
|
|
barCSS = { 'margin-left': toBarPerc(n)+'%' };
|
|
}
|
|
|
|
barCSS.transition = 'all '+speed+'ms '+ease;
|
|
|
|
return barCSS;
|
|
}
|
|
|
|
var queue = (function() {
|
|
var pending = [];
|
|
|
|
function next() {
|
|
var fn = pending.shift();
|
|
if (fn) {
|
|
fn(next);
|
|
}
|
|
}
|
|
|
|
return function(fn) {
|
|
pending.push(fn);
|
|
if (pending.length == 1) next();
|
|
};
|
|
})();
|
|
|
|
var css = (function() {
|
|
var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],
|
|
cssProps = {};
|
|
|
|
function camelCase(string) {
|
|
return string.replace(/^-ms-/, 'ms-').replace(/-([\da-z])/gi, function(match, letter) {
|
|
return letter.toUpperCase();
|
|
});
|
|
}
|
|
|
|
function getVendorProp(name) {
|
|
var style = document.body.style;
|
|
if (name in style) return name;
|
|
|
|
var i = cssPrefixes.length,
|
|
capName = name.charAt(0).toUpperCase() + name.slice(1),
|
|
vendorName;
|
|
while (i--) {
|
|
vendorName = cssPrefixes[i] + capName;
|
|
if (vendorName in style) return vendorName;
|
|
}
|
|
|
|
return name;
|
|
}
|
|
|
|
function getStyleProp(name) {
|
|
name = camelCase(name);
|
|
return cssProps[name] || (cssProps[name] = getVendorProp(name));
|
|
}
|
|
|
|
function applyCss(element, prop, value) {
|
|
prop = getStyleProp(prop);
|
|
element.style[prop] = value;
|
|
}
|
|
|
|
return function(element, properties) {
|
|
var args = arguments,
|
|
prop,
|
|
value;
|
|
|
|
if (args.length == 2) {
|
|
for (prop in properties) {
|
|
value = properties[prop];
|
|
if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);
|
|
}
|
|
} else {
|
|
applyCss(element, args[1], args[2]);
|
|
}
|
|
}
|
|
})();
|
|
|
|
function hasClass(element, name) {
|
|
var list = typeof element == 'string' ? element : classList(element);
|
|
return list.indexOf(' ' + name + ' ') >= 0;
|
|
}
|
|
|
|
function addClass(element, name) {
|
|
var oldList = classList(element),
|
|
newList = oldList + name;
|
|
|
|
if (hasClass(oldList, name)) return;
|
|
|
|
// Trim the opening space.
|
|
element.className = newList.substring(1);
|
|
}
|
|
|
|
function removeClass(element, name) {
|
|
var oldList = classList(element),
|
|
newList;
|
|
|
|
if (!hasClass(element, name)) return;
|
|
|
|
// Replace the class name.
|
|
newList = oldList.replace(' ' + name + ' ', ' ');
|
|
|
|
// Trim the opening and closing spaces.
|
|
element.className = newList.substring(1, newList.length - 1);
|
|
}
|
|
|
|
function classList(element) {
|
|
return (' ' + (element && element.className || '') + ' ').replace(/\s+/gi, ' ');
|
|
}
|
|
|
|
function removeElement(element) {
|
|
element && element.parentNode && element.parentNode.removeChild(element);
|
|
}
|
|
|
|
return NProgress;
|
|
}); |