/*----------------------------------------------------------------------------\ | Slider 1.02 | |-----------------------------------------------------------------------------| | Created by Erik Arvidsson | | (http://webfx.eae.net/contact.html#erik) | | For WebFX (http://webfx.eae.net/) | |-----------------------------------------------------------------------------| | A slider control that degrades to an input control for non supported | | browsers. | |-----------------------------------------------------------------------------| | Copyright (c) 2002, 2003, 2006 Erik Arvidsson | |-----------------------------------------------------------------------------| | 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. | |-----------------------------------------------------------------------------| | Dependencies: timer.js - an OO abstraction of timers | | range.js - provides the data model for the slider | | winclassic.css or any other css file describing the look | |-----------------------------------------------------------------------------| | 2002-10-14 | Original version released | | 2003-03-27 | Added a test in the constructor for missing oElement arg | | 2003-11-27 | Only use mousewheel when focused | | 2006-05-28 | Changed license to Apache Software License 2.0. | |-----------------------------------------------------------------------------| | Created 2002-10-14 | All changes are in the log above. | Updated 2006-05-28 | \----------------------------------------------------------------------------*/ Slider.isSupported = typeof document.createElement != "undefined" && typeof document.documentElement != "undefined" && typeof document.documentElement.offsetWidth == "number"; function Slider(oElement, oInput, sOrientation) { if (!oElement) return; this._orientation = sOrientation || "horizontal"; this._range = new Range(); this._range.setExtent(0); this._blockIncrement = 10; this._unitIncrement = 1; this._timer = new Timer(100); if (Slider.isSupported && oElement) { this.document = oElement.ownerDocument || oElement.document; this.element = oElement; this.element.slider = this; this.element.unselectable = "on"; // add class name tag to class name this.element.className = this._orientation + " " + this.classNameTag + " " + this.element.className; // create line this.line = this.document.createElement("DIV"); this.line.className = "line"; this.line.unselectable = "on"; this.line.appendChild(this.document.createElement("DIV")); this.element.appendChild(this.line); // create handle this.handle = this.document.createElement("DIV"); this.handle.className = "handle"; this.handle.unselectable = "on"; this.handle.appendChild(this.document.createElement("DIV")); this.handle.firstChild.appendChild( this.document.createTextNode(String.fromCharCode(160))); this.element.appendChild(this.handle); } this.input = oInput; // events var oThis = this; this._range.onchange = function () { oThis.recalculate(); if (typeof oThis.onchange == "function") oThis.onchange(); }; if (Slider.isSupported && oElement) { this.element.onfocus = Slider.eventHandlers.onfocus; this.element.onblur = Slider.eventHandlers.onblur; this.element.onmousedown = Slider.eventHandlers.onmousedown; this.element.onmouseover = Slider.eventHandlers.onmouseover; this.element.onmouseout = Slider.eventHandlers.onmouseout; this.element.onkeydown = Slider.eventHandlers.onkeydown; this.element.onkeypress = Slider.eventHandlers.onkeypress; this.element.onmousewheel = Slider.eventHandlers.onmousewheel; this.handle.onselectstart = this.element.onselectstart = function () { return false; }; this._timer.ontimer = function () { oThis.ontimer(); }; // extra recalculate for ie window.setTimeout(function() { oThis.recalculate(); }, 1); } else { this.input.onchange = function (e) { oThis.setValue(oThis.input.value); }; } } Slider.eventHandlers = { // helpers to make events a bit easier getEvent: function (e, el) { if (!e) { if (el) e = el.document.parentWindow.event; else e = window.event; } if (!e.srcElement) { var el = e.target; while (el != null && el.nodeType != 1) el = el.parentNode; e.srcElement = el; } if (typeof e.offsetX == "undefined") { e.offsetX = e.layerX; e.offsetY = e.layerY; } return e; }, getDocument: function (e) { if (e.target) return e.target.ownerDocument; return e.srcElement.document; }, getSlider: function (e) { var el = e.target || e.srcElement; while (el != null && el.slider == null) { el = el.parentNode; } if (el) return el.slider; return null; }, getLine: function (e) { var el = e.target || e.srcElement; while (el != null && el.className != "line") { el = el.parentNode; } return el; }, getHandle: function (e) { var el = e.target || e.srcElement; var re = /handle/; while (el != null && !re.test(el.className)) { el = el.parentNode; } return el; }, // end helpers onfocus: function (e) { var s = this.slider; s._focused = true; s.handle.className = "handle hover"; }, onblur: function (e) { var s = this.slider s._focused = false; s.handle.className = "handle"; }, onmouseover: function (e) { e = Slider.eventHandlers.getEvent(e, this); var s = this.slider; if (e.srcElement == s.handle) s.handle.className = "handle hover"; }, onmouseout: function (e) { e = Slider.eventHandlers.getEvent(e, this); var s = this.slider; if (e.srcElement == s.handle && !s._focused) s.handle.className = "handle"; }, onmousedown: function (e) { e = Slider.eventHandlers.getEvent(e, this); var s = this.slider; if (s.element.focus) s.element.focus(); Slider._currentInstance = s; var doc = s.document; if (doc.addEventListener) { doc.addEventListener("mousemove", Slider.eventHandlers.onmousemove, true); doc.addEventListener("mouseup", Slider.eventHandlers.onmouseup, true); } else if (doc.attachEvent) { doc.attachEvent("onmousemove", Slider.eventHandlers.onmousemove); doc.attachEvent("onmouseup", Slider.eventHandlers.onmouseup); doc.attachEvent("onlosecapture", Slider.eventHandlers.onmouseup); s.element.setCapture(); } if (Slider.eventHandlers.getHandle(e)) { // start drag Slider._sliderDragData = { screenX: e.screenX, screenY: e.screenY, dx: e.screenX - s.handle.offsetLeft, dy: e.screenY - s.handle.offsetTop, startValue: s.getValue(), slider: s }; } else { var lineEl = Slider.eventHandlers.getLine(e); s._mouseX = e.offsetX + (lineEl ? s.line.offsetLeft : 0); s._mouseY = e.offsetY + (lineEl ? s.line.offsetTop : 0); s._increasing = null; s.ontimer(); } }, onmousemove: function (e) { e = Slider.eventHandlers.getEvent(e, this); if (Slider._sliderDragData) { // drag var s = Slider._sliderDragData.slider; var boundSize = s.getMaximum() - s.getMinimum(); var size, pos, reset; if (s._orientation == "horizontal") { size = s.element.offsetWidth - s.handle.offsetWidth; pos = e.screenX - Slider._sliderDragData.dx; reset = Math.abs(e.screenY - Slider._sliderDragData.screenY) > 100; } else { size = s.element.offsetHeight - s.handle.offsetHeight; pos = s.element.offsetHeight - s.handle.offsetHeight - (e.screenY - Slider._sliderDragData.dy); reset = Math.abs(e.screenX - Slider._sliderDragData.screenX) > 100; } s.setValue(reset ? Slider._sliderDragData.startValue : s.getMinimum() + boundSize * pos / size); return false; } else { var s = Slider._currentInstance; if (s != null) { var lineEl = Slider.eventHandlers.getLine(e); s._mouseX = e.offsetX + (lineEl ? s.line.offsetLeft : 0); s._mouseY = e.offsetY + (lineEl ? s.line.offsetTop : 0); } } }, onmouseup: function (e) { e = Slider.eventHandlers.getEvent(e, this); var s = Slider._currentInstance; var doc = s.document; if (doc.removeEventListener) { doc.removeEventListener("mousemove", Slider.eventHandlers.onmousemove, true); doc.removeEventListener("mouseup", Slider.eventHandlers.onmouseup, true); } else if (doc.detachEvent) { doc.detachEvent("onmousemove", Slider.eventHandlers.onmousemove); doc.detachEvent("onmouseup", Slider.eventHandlers.onmouseup); doc.detachEvent("onlosecapture", Slider.eventHandlers.onmouseup); s.element.releaseCapture(); } if (Slider._sliderDragData) { // end drag Slider._sliderDragData = null; } else { s._timer.stop(); s._increasing = null; } Slider._currentInstance = null; }, onkeydown: function (e) { e = Slider.eventHandlers.getEvent(e, this); //var s = Slider.eventHandlers.getSlider(e); var s = this.slider; var kc = e.keyCode; switch (kc) { case 33: // page up s.setValue(s.getValue() + s.getBlockIncrement()); break; case 34: // page down s.setValue(s.getValue() - s.getBlockIncrement()); break; case 35: // end s.setValue(s.getOrientation() == "horizontal" ? s.getMaximum() : s.getMinimum()); break; case 36: // home s.setValue(s.getOrientation() == "horizontal" ? s.getMinimum() : s.getMaximum()); break; case 38: // up case 39: // right s.setValue(s.getValue() + s.getUnitIncrement()); break; case 37: // left case 40: // down s.setValue(s.getValue() - s.getUnitIncrement()); break; } if (kc >= 33 && kc <= 40) { return false; } }, onkeypress: function (e) { e = Slider.eventHandlers.getEvent(e, this); var kc = e.keyCode; if (kc >= 33 && kc <= 40) { return false; } }, onmousewheel: function (e) { e = Slider.eventHandlers.getEvent(e, this); var s = this.slider; if (s._focused) { s.setValue(s.getValue() + e.wheelDelta / 120 * s.getUnitIncrement()); // windows inverts this on horizontal sliders. That does not // make sense to me return false; } } }; Slider.prototype.classNameTag = "dynamic-slider-control", Slider.prototype.setValue = function (v) { this._range.setValue(v); this.input.value = this.getValue(); }; Slider.prototype.getValue = function () { return this._range.getValue(); }; Slider.prototype.setMinimum = function (v) { this._range.setMinimum(v); this.input.value = this.getValue(); }; Slider.prototype.getMinimum = function () { return this._range.getMinimum(); }; Slider.prototype.setMaximum = function (v) { this._range.setMaximum(v); this.input.value = this.getValue(); }; Slider.prototype.getMaximum = function () { return this._range.getMaximum(); }; Slider.prototype.setUnitIncrement = function (v) { this._unitIncrement = v; }; Slider.prototype.getUnitIncrement = function () { return this._unitIncrement; }; Slider.prototype.setBlockIncrement = function (v) { this._blockIncrement = v; }; Slider.prototype.getBlockIncrement = function () { return this._blockIncrement; }; Slider.prototype.getOrientation = function () { return this._orientation; }; Slider.prototype.setOrientation = function (sOrientation) { if (sOrientation != this._orientation) { if (Slider.isSupported && this.element) { // add class name tag to class name this.element.className = this.element.className.replace(this._orientation, sOrientation); } this._orientation = sOrientation; this.recalculate(); } }; Slider.prototype.recalculate = function() { if (!Slider.isSupported || !this.element) return; var w = this.element.offsetWidth; var h = this.element.offsetHeight; var hw = this.handle.offsetWidth; var hh = this.handle.offsetHeight; var lw = this.line.offsetWidth; var lh = this.line.offsetHeight; // this assumes a border-box layout if (this._orientation == "horizontal") { this.handle.style.left = (w - hw) * (this.getValue() - this.getMinimum()) / (this.getMaximum() - this.getMinimum()) + "px"; this.handle.style.top = (h - hh) / 2 + "px"; this.line.style.top = (h - lh) / 2 + "px"; this.line.style.left = hw / 2 + "px"; //this.line.style.right = hw / 2 + "px"; this.line.style.width = Math.max(0, w - hw - 2)+ "px"; this.line.firstChild.style.width = Math.max(0, w - hw - 4)+ "px"; } else { this.handle.style.left = (w - hw) / 2 + "px"; this.handle.style.top = h - hh - (h - hh) * (this.getValue() - this.getMinimum()) / (this.getMaximum() - this.getMinimum()) + "px"; this.line.style.left = (w - lw) / 2 + "px"; this.line.style.top = hh / 2 + "px"; this.line.style.height = Math.max(0, h - hh - 2) + "px"; //hard coded border width //this.line.style.bottom = hh / 2 + "px"; this.line.firstChild.style.height = Math.max(0, h - hh - 4) + "px"; //hard coded border width } }; Slider.prototype.ontimer = function () { var hw = this.handle.offsetWidth; var hh = this.handle.offsetHeight; var hl = this.handle.offsetLeft; var ht = this.handle.offsetTop; if (this._orientation == "horizontal") { if (this._mouseX > hl + hw && (this._increasing == null || this._increasing)) { this.setValue(this.getValue() + this.getBlockIncrement()); this._increasing = true; } else if (this._mouseX < hl && (this._increasing == null || !this._increasing)) { this.setValue(this.getValue() - this.getBlockIncrement()); this._increasing = false; } } else { if (this._mouseY > ht + hh && (this._increasing == null || !this._increasing)) { this.setValue(this.getValue() - this.getBlockIncrement()); this._increasing = false; } else if (this._mouseY < ht && (this._increasing == null || this._increasing)) { this.setValue(this.getValue() + this.getBlockIncrement()); this._increasing = true; } } this._timer.start(); };
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
help | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
lang | Folder | 0755 |
|
|
CHANGELOG | File | 1.92 KB | 0644 |
|
acl_security.pl | File | 958 B | 0755 |
|
apply_hdparm.cgi | File | 1.17 KB | 0755 |
|
blink.cgi | File | 384 B | 0755 |
|
cgi_args.pl | File | 483 B | 0755 |
|
config | File | 13 B | 0644 |
|
config.info | File | 144 B | 0644 |
|
config.info.bg | File | 235 B | 0644 |
|
config.info.ca | File | 167 B | 0644 |
|
config.info.de | File | 148 B | 0644 |
|
config.info.fr | File | 167 B | 0644 |
|
config.info.nl | File | 138 B | 0644 |
|
config.info.no | File | 151 B | 0644 |
|
defaultacl | File | 26 B | 0644 |
|
edit_disk.cgi | File | 4.91 KB | 0755 |
|
edit_hdparm.cgi | File | 4.36 KB | 0755 |
|
edit_part.cgi | File | 8.26 KB | 0755 |
|
edit_relabel.cgi | File | 1.32 KB | 0755 |
|
fdisk-lib.pl | File | 48.16 KB | 0755 |
|
feedback_files.pl | File | 115 B | 0755 |
|
fsck.cgi | File | 604 B | 0755 |
|
fsck_form.cgi | File | 700 B | 0755 |
|
index.cgi | File | 2.41 KB | 0755 |
|
log_parser.pl | File | 1.53 KB | 0755 |
|
make_tags.pl | File | 210 B | 0755 |
|
mkfs.cgi | File | 820 B | 0755 |
|
mkfs_form.cgi | File | 832 B | 0755 |
|
module.info | File | 238 B | 0644 |
|
module.info.af | File | 0 B | 0644 |
|
module.info.af.auto | File | 153 B | 0644 |
|
module.info.ar | File | 0 B | 0644 |
|
module.info.ar.auto | File | 209 B | 0644 |
|
module.info.be | File | 0 B | 0644 |
|
module.info.be.auto | File | 249 B | 0644 |
|
module.info.bg | File | 0 B | 0644 |
|
module.info.bg.auto | File | 236 B | 0644 |
|
module.info.ca | File | 119 B | 0644 |
|
module.info.ca.auto | File | 29 B | 0644 |
|
module.info.cs | File | 40 B | 0644 |
|
module.info.cs.auto | File | 130 B | 0644 |
|
module.info.da | File | 0 B | 0644 |
|
module.info.da.auto | File | 149 B | 0644 |
|
module.info.de | File | 131 B | 0644 |
|
module.info.de.auto | File | 26 B | 0644 |
|
module.info.el | File | 0 B | 0644 |
|
module.info.el.auto | File | 299 B | 0644 |
|
module.info.es | File | 38 B | 0644 |
|
module.info.es.auto | File | 112 B | 0644 |
|
module.info.eu | File | 0 B | 0644 |
|
module.info.eu.auto | File | 146 B | 0644 |
|
module.info.fa | File | 0 B | 0644 |
|
module.info.fa.auto | File | 233 B | 0644 |
|
module.info.fi | File | 0 B | 0644 |
|
module.info.fi.auto | File | 149 B | 0644 |
|
module.info.fr | File | 35 B | 0644 |
|
module.info.fr.auto | File | 133 B | 0644 |
|
module.info.he | File | 0 B | 0644 |
|
module.info.he.auto | File | 188 B | 0644 |
|
module.info.hr | File | 0 B | 0644 |
|
module.info.hr.auto | File | 160 B | 0644 |
|
module.info.hu | File | 79 B | 0644 |
|
module.info.hu.auto | File | 26 B | 0644 |
|
module.info.it | File | 0 B | 0644 |
|
module.info.it.auto | File | 152 B | 0644 |
|
module.info.ja | File | 58 B | 0644 |
|
module.info.ja.auto | File | 179 B | 0644 |
|
module.info.ko | File | 36 B | 0644 |
|
module.info.ko.auto | File | 137 B | 0644 |
|
module.info.lt | File | 0 B | 0644 |
|
module.info.lt.auto | File | 163 B | 0644 |
|
module.info.lv | File | 0 B | 0644 |
|
module.info.lv.auto | File | 167 B | 0644 |
|
module.info.ms | File | 120 B | 0644 |
|
module.info.ms.auto | File | 23 B | 0644 |
|
module.info.mt | File | 0 B | 0644 |
|
module.info.mt.auto | File | 153 B | 0644 |
|
module.info.nl | File | 39 B | 0644 |
|
module.info.nl.auto | File | 111 B | 0644 |
|
module.info.no | File | 38 B | 0644 |
|
module.info.no.auto | File | 112 B | 0644 |
|
module.info.pl | File | 38 B | 0644 |
|
module.info.pl.auto | File | 120 B | 0644 |
|
module.info.pt | File | 37 B | 0644 |
|
module.info.pt.auto | File | 116 B | 0644 |
|
module.info.pt_BR | File | 0 B | 0644 |
|
module.info.pt_BR.auto | File | 162 B | 0644 |
|
module.info.ro | File | 0 B | 0644 |
|
module.info.ro.auto | File | 157 B | 0644 |
|
module.info.ru | File | 60 B | 0644 |
|
module.info.ru.auto | File | 185 B | 0644 |
|
module.info.sk | File | 0 B | 0644 |
|
module.info.sk.auto | File | 166 B | 0644 |
|
module.info.sl | File | 0 B | 0644 |
|
module.info.sl.auto | File | 155 B | 0644 |
|
module.info.sv | File | 28 B | 0644 |
|
module.info.sv.auto | File | 116 B | 0644 |
|
module.info.th | File | 0 B | 0644 |
|
module.info.th.auto | File | 303 B | 0644 |
|
module.info.tr | File | 34 B | 0644 |
|
module.info.tr.auto | File | 123 B | 0644 |
|
module.info.uk | File | 0 B | 0644 |
|
module.info.uk.auto | File | 245 B | 0644 |
|
module.info.ur | File | 0 B | 0644 |
|
module.info.ur.auto | File | 266 B | 0644 |
|
module.info.vi | File | 0 B | 0644 |
|
module.info.vi.auto | File | 187 B | 0644 |
|
module.info.zh | File | 27 B | 0644 |
|
module.info.zh.auto | File | 104 B | 0644 |
|
module.info.zh_TW | File | 33 B | 0644 |
|
module.info.zh_TW.auto | File | 110 B | 0644 |
|
range.js | File | 4.7 KB | 0644 |
|
reboot.cgi | File | 261 B | 0755 |
|
relabel.cgi | File | 417 B | 0755 |
|
save_part.cgi | File | 3.75 KB | 0755 |
|
slider.js | File | 14.48 KB | 0644 |
|
timer.js | File | 2.86 KB | 0644 |
|
tunefs.cgi | File | 689 B | 0755 |
|
tunefs_form.cgi | File | 722 B | 0755 |
|
winclassic.css | File | 1.72 KB | 0644 |
|