diff --git a/sapl/settings.py b/sapl/settings.py index b74cd643e..0bf9e231c 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -178,12 +178,11 @@ CRISPY_FAIL_SILENTLY = not DEBUG BOWER_COMPONENTS_ROOT = PROJECT_DIR.child("bower") BOWER_INSTALLED_APPS = ( - 'jquery#3.1.0', + 'jquery#3.1.1', 'bootstrap-sass#3.3.7', 'components-font-awesome#4.5.0', 'tinymce#4.3.8', 'jquery-ui#1.12.1', - 'jquery-runner#2.3.3', 'jQuery-Mask-Plugin#1.14.0', 'jsdiff#2.2.2', 'https://github.com/hoarrd/drunken-parrot-flat-ui.git', diff --git a/sapl/static/js/jquery.runner.js b/sapl/static/js/jquery.runner.js new file mode 100644 index 000000000..b85a6dacc --- /dev/null +++ b/sapl/static/js/jquery.runner.js @@ -0,0 +1,296 @@ +/*! + * jQuery-runner - v2.3.3 - 2014-08-06 + * https://github.com/jylauril/jquery-runner/ + * Copyright (c) 2014 Jyrki Laurila + */ +(function() { + var Runner, formatTime, meta, pad, runners, uid, _$, _requestAnimationFrame, _uid; + + meta = { + version: "2.3.3", + name: "jQuery-runner" + }; + + _$ = this.jQuery || this.Zepto || this.$; + + if (!(_$ && _$.fn)) { + throw new Error('[' + meta.name + '] jQuery or jQuery-like library is required for this plugin to work'); + } + + runners = {}; + + pad = function(num) { + return (num < 10 ? '0' : '') + num; + }; + + _uid = 1; + + uid = function() { + return 'runner' + _uid++; + }; + + _requestAnimationFrame = (function(win, raf) { + return win['r' + raf] || win['webkitR' + raf] || win['mozR' + raf] || win['msR' + raf] || function(fn) { + return setTimeout(fn, 30); + }; + })(this, 'equestAnimationFrame'); + + formatTime = function(time, settings) { + var i, len, ms, output, prefix, separator, step, steps, value, _i, _len; + settings = settings || {}; + steps = [3600000, 60000, 1000, 10]; + separator = ['', ':', ':', '.']; + prefix = ''; + output = ''; + ms = settings.milliseconds; + len = steps.length; + value = 0; + if (time < 0) { + time = Math.abs(time); + prefix = '-'; + } + for (i = _i = 0, _len = steps.length; _i < _len; i = ++_i) { + step = steps[i]; + value = 0; + if (time >= step) { + value = Math.floor(time / step); + time -= value * step; + } + if ((value || i > 1 || output) && (i !== len - 1 || ms)) { + output += (output ? separator[i] : '') + pad(value); + } + } + return prefix + output; + }; + + Runner = (function() { + function Runner(items, options, start) { + var id; + if (!(this instanceof Runner)) { + return new Runner(items, options, start); + } + this.items = items; + id = this.id = uid(); + this.settings = _$.extend({}, this.settings, options); + runners[id] = this; + items.each(function(index, element) { + _$(element).data('runner', id); + }); + this.value(this.settings.startAt); + if (start || this.settings.autostart) { + this.start(); + } + } + + Runner.prototype.running = false; + + Runner.prototype.updating = false; + + Runner.prototype.finished = false; + + Runner.prototype.interval = null; + + Runner.prototype.total = 0; + + Runner.prototype.lastTime = 0; + + Runner.prototype.startTime = 0; + + Runner.prototype.lastLap = 0; + + Runner.prototype.lapTime = 0; + + Runner.prototype.settings = { + autostart: false, + countdown: false, + stopAt: null, + startAt: 0, + milliseconds: true, + format: null + }; + + Runner.prototype.value = function(value) { + this.items.each((function(_this) { + return function(item, element) { + var action; + item = _$(element); + action = item.is('input') ? 'val' : 'text'; + item[action](_this.format(value)); + }; + })(this)); + }; + + Runner.prototype.format = function(value) { + var format; + format = this.settings.format; + format = _$.isFunction(format) ? format : formatTime; + return format(value, this.settings); + }; + + Runner.prototype.update = function() { + var countdown, delta, settings, stopAt, time; + if (!this.updating) { + this.updating = true; + settings = this.settings; + time = _$.now(); + stopAt = settings.stopAt; + countdown = settings.countdown; + delta = time - this.lastTime; + this.lastTime = time; + if (countdown) { + this.total -= delta; + } else { + this.total += delta; + } + if (stopAt !== null && ((countdown && this.total <= stopAt) || (!countdown && this.total >= stopAt))) { + this.total = stopAt; + this.finished = true; + this.stop(); + this.fire('runnerFinish'); + } + this.value(this.total); + this.updating = false; + } + }; + + Runner.prototype.fire = function(event) { + this.items.trigger(event, this.info()); + }; + + Runner.prototype.start = function() { + var step; + if (!this.running) { + this.running = true; + if (!this.startTime || this.finished) { + this.reset(); + } + this.lastTime = _$.now(); + step = (function(_this) { + return function() { + if (_this.running) { + _this.update(); + _requestAnimationFrame(step); + } + }; + })(this); + _requestAnimationFrame(step); + this.fire('runnerStart'); + } + }; + + Runner.prototype.stop = function() { + if (this.running) { + this.running = false; + this.update(); + this.fire('runnerStop'); + } + }; + + Runner.prototype.toggle = function() { + if (this.running) { + this.stop(); + } else { + this.start(); + } + }; + + Runner.prototype.lap = function() { + var lap, last; + last = this.lastTime; + lap = last - this.lapTime; + if (this.settings.countdown) { + lap = -lap; + } + if (this.running || lap) { + this.lastLap = lap; + this.lapTime = last; + } + last = this.format(this.lastLap); + this.fire('runnerLap'); + return last; + }; + + Runner.prototype.reset = function(stop) { + var nowTime; + if (stop) { + this.stop(); + } + nowTime = _$.now(); + if (typeof this.settings.startAt === 'number' && !this.settings.countdown) { + nowTime -= this.settings.startAt; + } + this.startTime = this.lapTime = this.lastTime = nowTime; + this.total = this.settings.startAt; + this.value(this.total); + this.finished = false; + this.fire('runnerReset'); + }; + + Runner.prototype.info = function() { + var lap; + lap = this.lastLap || 0; + return { + running: this.running, + finished: this.finished, + time: this.total, + formattedTime: this.format(this.total), + startTime: this.startTime, + lapTime: lap, + formattedLapTime: this.format(lap), + settings: this.settings + }; + }; + + return Runner; + + })(); + + _$.fn.runner = function(method, options, start) { + var id, runner; + if (!method) { + method = 'init'; + } + if (typeof method === 'object') { + start = options; + options = method; + method = 'init'; + } + id = this.data('runner'); + runner = id ? runners[id] : false; + switch (method) { + case 'init': + new Runner(this, options, start); + break; + case 'info': + if (runner) { + return runner.info(); + } + break; + case 'reset': + if (runner) { + runner.reset(options); + } + break; + case 'lap': + if (runner) { + return runner.lap(); + } + break; + case 'start': + case 'stop': + case 'toggle': + if (runner) { + return runner[method](); + } + break; + case 'version': + return meta.version; + default: + _$.error('[' + meta.name + '] Method ' + method + ' does not exist'); + } + return this; + }; + + _$.fn.runner.format = formatTime; + +}).call(this); diff --git a/sapl/templates/base.html b/sapl/templates/base.html index 7edeeed70..24c3af670 100644 --- a/sapl/templates/base.html +++ b/sapl/templates/base.html @@ -76,7 +76,7 @@ {% endif %}