PageSourceSearch

https://lacapriata.it/wp-content/themes/lacapriata/js/jquery.knob%EF%B9%96ver=20120206.js

js lacapriata.it collected 2026-10-06 19:36:11 UTC 26,366 bytes, 764 lines download raw bytes

1/*!jQuery Knob*/�
2/**�
3 * Downward compatible, touchable dial�
4 *�
5 * Version: 1.2.0 (15/07/2012)�
6 * Requires: jQuery v1.7+�
7 *�
8 * Copyright (c) 2012 Anthony Terrien�
9 * Under MIT and GPL licenses:�
10 *  http://www.opensource.org/licenses/mit-license.php�
11 *  http://www.gnu.org/licenses/gpl.html�
12 *�
13 * Thanks to vor, eskimoblood, spiffistan, FabrizioC�
14 */�
15(function($) {�
16�
17    /**�
18     * Kontrol library�
19     */�
20    "use strict";�
21�
22    /**�
23     * Definition of globals and core�
24     */�
25    var k = {}, // kontrol�
26        max = Math.max,�
27        min = Math.min;�
28�
29    k.c = {};�
30    k.c.d = $(document);�
31    k.c.t = function (e) {�
32        return e.originalEvent.touches.length - 1;�
33    };�
34�
35    /**�
36     * Kontrol Object�
37     *�
38     * Definition of an abstract UI control�
39     *�
40     * Each concrete component must call this one.�
41     * <code>�
42     * k.o.call(this);�
43     * </code>�
44     */�
45    k.o = function () {�
46        var s = this;�
47�
48        this.o = null; // array of options�
49        this.$ = null; // jQuery wrapped element�
50        this.i = null; // mixed HTMLInputElement or array of HTMLInputElement�
51        this.g = null; // deprecated 2D graphics context for 'pre-rendering'�
52        this.v = null; // value ; mixed array or integer�
53        this.cv = null; // change value ; not commited value�
54        this.x = 0; // canvas x position�
55        this.y = 0; // canvas y position�
56        this.w = 0; // canvas width�
57        this.h = 0; // canvas height�
58        this.$c = null; // jQuery canvas element�
59        this.c = null; // rendered canvas context�
60        this.t = 0; // touches index�
61        this.isInit = false;�
62        this.fgColor = null; // main color�
63        this.pColor = null; // previous color�
64        this.dH = null; // draw hook�
65        this.cH = null; // change hook�
66        this.eH = null; // cancel hook�
67        this.rH = null; // release hook�
68        this.scale = 1; // scale factor�
69        this.relative = false;�
70        this.relativeWidth = false;�
71        this.relativeHeight = false;�
72        this.$div = null; // component div�
73�
74        this.run = function () {�
75            var cf = function (e, conf) {�
76                var k;�
77                for (k in conf) {�
78                    s.o[k] = conf[k];�
79                }�
80                s.init();�
81                s._configure()�
82                 ._draw();�
83            };�
84�
85            if(this.$.data('kontroled')) return;�
86            this.$.data('kontroled', true);�
87�
88            this.extend();�
89            this.o = $.extend(�
90                {�
91                    // Config�
92                    min : this.$.data('min') || 0,�
93                    max : this.$.data('max') || 100,�
94                    stopper : true,�
95                    readOnly : this.$.data('readonly') || (this.$.attr('readonly') == 'readonly'),�
96�
97                    // UI�
98                    cursor : (this.$.data('cursor') === true && 30)�
99                                || this.$.data('cursor')�
100                                || 0,�
101                    thickness : (�
102                                this.$.data('thickness')�
103                                && Math.max(Math.min(this.$.data('thickness'), 1), 0.01)�
104                                )�
105                                || 0.35,�
106                    lineCap : this.$.data('linecap') || 'butt',�
107                    width : this.$.data('width') || 200,�
108                    height : this.$.data('height') || 200,�
109                    displayInput : this.$.data('displayinput') == null || this.$.data('displayinput'),�
110                    displayPrevious : this.$.data('displayprevious'),�
111                    fgColor : this.$.data('fgcolor') || '#87CEEB',�
112                    inputColor: this.$.data('inputcolor'),�
113                    font: this.$.data('font') || 'Arial',�
114                    fontWeight: this.$.data('font-weight') || 'bold',�
115                    inline : false,�
116                    step : this.$.data('step') || 1,�
117�
118                    // Hooks�
119                    draw : null, // function () {}�
120                    change : null, // function (value) {}�
121                    cancel : null, // function () {}�
122                    release : null, // function (value) {}�
123                    error : null // function () {}�
124                }, this.o�
125            );�
126�
127            // finalize options�
128            if(!this.o.inputColor) {�
129                this.o.inputColor = this.o.fgColor;�
130            }�
131�
132            // routing value�
133            if(this.$.is('fieldset')) {�
134�
135                // fieldset = array of integer�
136                this.v = {};�
137                this.i = this.$.find('input')�
138                this.i.each(function(k) {�
139                    var $this = $(this);�
140                    s.i[k] = $this;�
141                    s.v[k] = $this.val();�
142�
143                    $this.bind(�
144                        'change keyup'�
145                        , function () {�
146                            var val = {};�
147                            val[k] = $this.val();�
148                            s.val(val);�
149                        }�
150                    );�
151                });�
152                this.$.find('legend').remove();�
153�
154            } else {�
155�
156                // input = integer�
157                this.i = this.$;�
158                this.v = this.$.val();�
159                (this.v == '') && (this.v = this.o.min);�
160�
161                this.$.bind(�
162                    'change keyup'�
163                    , function () {�
164                        s.val(s._validate(s.$.val()));�
165                    }�
166                );�
167�
168            }�
169�
170            (!this.o.displayInput) && this.$.hide();�
171�
172            // adds needed DOM elements (canvas, div)�
173            this.$c = $(document.createElement('canvas'));�
174            if (typeof G_vmlCanvasManager !== 'undefined') {�
175              G_vmlCanvasManager.initElement(this.$c[0]);�
176            }�
177            this.c = this.$c[0].getContext ? this.$c[0].getContext('2d') : null;�
178            if (!this.c) {�
179                this.o.error && this.o.error();�
180                return;�
181            }�
182�
183            // hdpi support�
184            this.scale = (window.devicePixelRatio || 1) /�
185                        (�
186                            this.c.webkitBackingStorePixelRatio ||�
187                            this.c.mozBackingStorePixelRatio ||�
188                            this.c.msBackingStorePixelRatio ||�
189                            this.c.oBackingStorePixelRatio ||�
190                            this.c.backingStorePixelRatio || 1�
191                        );�
192�
193            // detects relative width / height�
194            this.relativeWidth = ((this.o.width % 1 !== 0)�
195                                    && this.o.width.indexOf('%'));�
196            this.relativeHeight = ((this.o.height % 1 !== 0)�
197                                    && this.o.height.indexOf('%'));�
198�
199            this.relative = (this.relativeWidth || this.relativeHeight);�
200�
201            // wraps all elements in a div�
202            this.$div = $('<div style="'�
203                        + (this.o.inline ? 'display:inline;' : '')�
204                        + '"></div>');�
205�
206            this.$.wrap(this.$div).before(this.$c);�
207            this.$div = this.$.parent();�
208�
209            // computes size and carves the component�
210            this._carve();�
211�
212            // prepares props for transaction�
213            if (this.v instanceof Object) {�
214                this.cv = {};�
215                this.copy(this.v, this.cv);�
216            } else {�
217                this.cv = this.v;�
218            }�
219�
220            // binds configure event�
221            this.$�
222                .bind("configure", cf)�
223                .parent()�
224                .bind("configure", cf);�
225�
226            // finalize init�
227            this._listen()�
228                ._configure()�
229                ._xy()�
230                .init();�
231�
232            this.isInit = true;�
233�
234            // the most important !�
235            this._draw();�
236�
237            return this;�
238        };�
239�
240        this._carve = function() {�
241            if(this.relative) {�
242                var w = this.relativeWidth�
243                            ? this.$div.parent().width()�
244                                * parseInt(this.o.width) / 100�
245                            : this.$div.parent().width(),�
246                    h = this.relativeHeight�
247                            ? this.$div.parent().height()�
248                                * parseInt(this.o.height) / 100�
249                            : this.$div.parent().height();�
250�
251                // apply relative�
252                this.w = this.h = Math.min(w, h);�
253            } else {�
254                this.w = this.o.width;�
255                this.h = this.o.height;�
256            }�
257�
258            // finalize div�
259            this.$div.css({�
260                'width': this.w + 'px',�
261                'height': this.h + 'px'�
262            });�
263�
264            // finalize canvas with computed width�
265            this.$c.attr({�
266                width: this.w,�
267                height: this.h�
268            });�
269�
270            // scaling�
271            if (this.scale !== 1) {�
272                this.$c[0].width = this.$c[0].width * this.scale;�
273                this.$c[0].height = this.$c[0].height * this.scale;�
274                this.$c.width(this.w);�
275                this.$c.height(this.h);�
276            }�
277�
278            return this;�
279        }�
280�
281        this._draw = function () {�
282�
283            // canvas pre-rendering�
284            var d = true;�
285�
286            s.g = s.c;�
287�
288            s.clear();�
289�
290            s.dH�
291            && (d = s.dH());�
292�
293            (d !== false) && s.draw();�
294�
295        };�
296�
297        this._touch = function (e) {�
298�
299            var touchMove = function (e) {�
300�
301                var v = s.xy2val(�
302                            e.originalEvent.touches[s.t].pageX,�
303                            e.originalEvent.touches[s.t].pageY�
304                            );�
305                s.change(s._validate(v));�
306                s._draw();�
307            };�
308�
309            // get touches index�
310            this.t = k.c.t(e);�
311�
312            // First touch�
313            touchMove(e);�
314�
315            // Touch events listeners�
316            k.c.d�
317                .bind("touchmove.k", touchMove)�
318                .bind(�
319                    "touchend.k"�
320                    , function () {�
321                        k.c.d.unbind('touchmove.k touchend.k');�
322�
323                        if (�
324                            s.rH�
325                            && (s.rH(s.cv) === false)�
326                        ) return;�
327�
328                        s.val(s.cv);�
329                    }�
330                );�
331�
332            return this;�
333        };�
334�
335        this._mouse = function (e) {�
336�
337            var mouseMove = function (e) {�
338                var v = s.xy2val(e.pageX, e.pageY);�
339                s.change(s._validate(v));�
340                s._draw();�
341            };�
342�
343            // First click�
344            mouseMove(e);�
345�
346            // Mouse events listeners�
347            k.c.d�
348                .bind("mousemove.k", mouseMove)�
349                .bind(�
350                    // Escape key cancel current change�
351                    "keyup.k"�
352                    , function (e) {�
353                        if (e.keyCode === 27) {�
354                            k.c.d.unbind("mouseup.k mousemove.k keyup.k");�
355�
356                            if (�
357                                s.eH�
358                                && (s.eH() === false)�
359                            ) return;�
360�
361                            s.cancel();�
362                        }�
363                    }�
364                )�
365                .bind(�
366                    "mouseup.k"�
367                    , function (e) {�
368                        k.c.d.unbind('mousemove.k mouseup.k keyup.k');�
369�
370                        if (�
371                            s.rH�
372                            && (s.rH(s.cv) === false)�
373                        ) return;�
374�
375                        s.val(s.cv);�
376                    }�
377                );�
378�
379            return this;�
380        };�
381�
382        this._xy = function () {�
383            var o = this.$c.offset();�
384            this.x = o.left;�
385            this.y = o.top;�
386            return this;�
387        };�
388�
389        this._listen = function () {�
390�
391            if (!this.o.readOnly) {�
392                this.$c�
393                    .bind(�
394                        "mousedown"�
395                        , function (e) {�
396                            e.preventDefault();�
397                            s._xy()._mouse(e);�
398                         }�
399                    )�
400                    .bind(�
401                        "touchstart"�
402                        , function (e) {�
403                            e.preventDefault();�
404                            s._xy()._touch(e);�
405                         }�
406                    );�
407�
408                this.listen();�
409            } else {�
410                this.$.attr('readonly', 'readonly');�
411            }�
412�
413            if(this.relative) {�
414                $(window).resize(function() {�
415                    s._carve()�
416                     .init();�
417                    s._draw();�
418                });�
419            }�
420�
421            return this;�
422        };�
423�
424        this._configure = function () {�
425�
426            // Hooks�
427            if (this.o.draw) this.dH = this.o.draw;�
428            if (this.o.change) this.cH = this.o.change;�
429            if (this.o.cancel) this.eH = this.o.cancel;�
430            if (this.o.release) this.rH = this.o.release;�
431�
432            if (this.o.displayPrevious) {�
433                this.pColor = this.h2rgba(this.o.fgColor, "0.4");�
434                this.fgColor = this.h2rgba(this.o.fgColor, "0.6");�
435            } else {�
436                this.fgColor = this.o.fgColor;�
437            }�
438�
439            return this;�
440        };�
441�
442        this._clear = function () {�
443            this.$c[0].width = this.$c[0].width;�
444        };�
445�
446        this._validate = function(v) {�
447            return (~~ (((v < 0) ? -0.5 : 0.5) + (v/this.o.step))) * this.o.step;�
448        };�
449�
450        // Abstract methods�
451        this.listen = function () {}; // on start, one time�
452        this.extend = function () {}; // each time configure triggered�
453        this.init = function () {}; // each time configure triggered�
454        this.change = function (v) {}; // on change�
455        this.val = function (v) {}; // on release�
456        this.xy2val = function (x, y) {}; //�
457        this.draw = function () {}; // on change / on release�
458        this.clear = function () { this._clear(); };�
459�
460        // Utils�
461        this.h2rgba = function (h, a) {�
462            var rgb;�
463            h = h.substring(1,7)�
464            rgb = [parseInt(h.substring(0,2),16)�
465                   ,parseInt(h.substring(2,4),16)�
466                   ,parseInt(h.substring(4,6),16)];�
467            return "rgba(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + "," + a + ")";�
468        };�
469�
470        this.copy = function (f, t) {�
471            for (var i in f) { t[i] = f[i]; }�
472        };�
473    };�
474�
475�
476    /**�
477     * k.Dial�
478     */�
479    k.Dial = function () {�
480        k.o.call(this);�
481�
482        this.startAngle = null;�
483        this.xy = null;�
484        this.radius = null;�
485        this.lineWidth = null;�
486        this.cursorExt = null;�
487        this.w2 = null;�
488        this.PI2 = 2*Math.PI;�
489�
490        this.extend = function () {�
491            this.o = $.extend(�
492                {�
493                    bgColor : this.$.data('bgcolor') || '#EEEEEE',�
494                    angleOffset : this.$.data('angleoffset') || 0,�
495                    angleArc : this.$.data('anglearc') || 360,�
496                    inline : true�
497                }, this.o�
498            );�
499        };�
500�
501        this.val = function (v) {�
502            if (null != v) {�
503                this.cv = this.o.stopper ? max(min(v, this.o.max), this.o.min) : v;�
504		this.v = this.cv;�
505                this.$.val(this.v);�
506                this._draw();�
507            } else {�
508                return this.v;�
509            }�
510        };�
511�
512        this.xy2val = function (x, y) {�
513            var a, ret;�
514�
515            a = Math.atan2(�
516                        x - (this.x + this.w2)�
517                        , - (y - this.y - this.w2)�
518                    ) - this.angleOffset;�
519�
520            if(this.angleArc != this.PI2 && (a < 0) && (a > -0.5)) {�
521                // if isset angleArc option, set to min if .5 under min�
522                a = 0;�
523            } else if (a < 0) {�
524                a += this.PI2;�
525            }�
526�
527            ret = ~~ (0.5 + (a * (this.o.max - this.o.min) / this.angleArc))�
528                    + this.o.min;�
529�
530            this.o.stopper�
531            && (ret = max(min(ret, this.o.max), this.o.min));�
532�
533            return ret;�
534        };�
535�
536        this.listen = function () {�
537            // bind MouseWheel�
538            var s = this, mwTimerStop, mwTimerRelease,�
539                mw = function (e) {�
540                            e.preventDefault();�
541�
542                            var ori = e.originalEvent�
543                                ,deltaX = ori.detail || ori.wheelDeltaX�
544                                ,deltaY = ori.detail || ori.wheelDeltaY�
545                                ,v = s._validate(s.$.val())�
546                                    + (deltaX>0 || deltaY>
vendor: 4,737 bytes, lines 546-665
5460 ? s.o.step : deltaX<0 || deltaY<0 ? -s.o.step : 0);�
547�
548                            v = max(min(v, s.o.max), s.o.min);�
549                            �
550                            s.val(v);�
551�
552                            if(s.rH) {�
553                                // Handle mousewheel stop�
554                                clearTimeout(mwTimerStop);�
555                                mwTimerStop = setTimeout(function() {�
556                                    s.rH(v);�
557                                    mwTimerStop = null;�
558                                }, 100);�
559�
560                                // Handle mousewheel releases�
561                                if(!mwTimerRelease) {�
562                                    mwTimerRelease = setTimeout(function() {�
563                                        if(mwTimerStop) s.rH(v);�
564                                        mwTimerRelease = null;�
565                                    }, 200);�
566                                }�
567                            }�
568                        }�
569                , kval, to, m = 1, kv = {37:-s.o.step, 38:s.o.step, 39:s.o.step, 40:-s.o.step};�
570�
571            this.$�
572                .bind(�
573                    "keydown"�
574                    ,function (e) {�
575                        var kc = e.keyCode;�
576�
577                        // numpad support�
578                        if(kc >= 96 && kc <= 105) {�
579                            kc = e.keyCode = kc - 48;�
580                        }�
581�
582                        kval = parseInt(String.fromCharCode(kc));�
583�
584                        if (isNaN(kval)) {�
585�
586                            (kc !== 13)         // enter�
587                            && (kc !== 8)       // bs�
588                            && (kc !== 9)       // tab�
589                            && (kc !== 189)     // -�
590                            && e.preventDefault();�
591�
592                            // arrows�
593                            if ($.inArray(kc,[37,38,39,40]) > -1) {�
594                                e.preventDefault();�
595�
596                                var v = parseInt(s.$.val()) + kv[kc] * m;�
597�
598                                s.o.stopper�
599                                && (v = max(min(v, s.o.max), s.o.min));�
600�
601                                s.change(v);�
602                                s._draw();�
603�
604                                // long time keydown speed-up�
605                                to = window.setTimeout(�
606                                    function () { m*=2; }�
607                                    ,30�
608                                );�
609                            }�
610                        }�
611                    }�
612                )�
613                .bind(�
614                    "keyup"�
615                    ,function (e) {�
616                        if (isNaN(kval)) {�
617                            if (to) {�
618                                window.clearTimeout(to);�
619                                to = null;�
620                                m = 1;�
621                                s.val(s.$.val());�
622                            }�
623                        } else {�
624                            // kval postcond�
625                            (s.$.val() > s.o.max && s.$.val(s.o.max))�
626                            || (s.$.val() < s.o.min && s.$.val(s.o.min));�
627                        }�
628�
629                    }�
630                );�
631�
632            this.$c.bind("mousewheel DOMMouseScroll", mw);�
633            this.$.bind("mousewheel DOMMouseScroll", mw)�
634        };�
635�
636        this.init = function () {�
637�
638            if (�
639                this.v < this.o.min�
640                || this.v > this.o.max�
641            ) this.v = this.o.min;�
642�
643            this.$.val(this.v);�
644            this.w2 = this.w / 2;�
645            this.cursorExt = this.o.cursor / 100;�
646            this.xy = this.w2 * this.scale;�
647            this.lineWidth = this.xy * this.o.thickness;�
648            this.lineCap = this.o.lineCap;�
649            this.radius = this.xy - this.lineWidth / 2;�
650�
651            this.o.angleOffset�
652            && (this.o.angleOffset = isNaN(this.o.angleOffset) ? 0 : this.o.angleOffset);�
653�
654            this.o.angleArc�
655            && (this.o.angleArc = isNaN(this.o.angleArc) ? this.PI2 : this.o.angleArc);�
656�
657            // deg to rad�
658            this.angleOffset = this.o.angleOffset * Math.PI / 180;�
659            this.angleArc = this.o.angleArc * Math.PI / 180;�
660�
661            // compute start and end angles�
662            this.startAngle = 1.5 * Math.PI + this.angleOffset;�
663            this.endAngle = 1.5 * Math.PI + this.angleOffset + this.angleArc;�
664�
665            var s = max(�
666                            String(Math.abs(this.o.max)).length�
667                            , String(Math.abs(this.o.min)).length�
668                            , 2�
669                            ) + 2;�
670�
671            this.o.displayInput�
672                && this.i.css({�
673                        'width' : ((this.w / 2 + 4) >> 0) + 'px'�
674                        ,'height' : ((this.w / 3) >> 0) + 'px'�
675                        ,'position' : 'absolute'�
676                        ,'vertical-align' : 'middle'�
677                        ,'margin-top' : ((this.w / 3) >> 0) + 'px'�
678                        ,'margin-left' : '-' + ((this.w * 3 / 4 + 2) >> 0) + 'px'�
679                        ,'border' : 0�
680                        ,'background' : 'none'�
681                        ,'font' : this.o.fontWeight + ' ' + ((this.w / s) >> 0) + 'px ' + this.o.font�
682                        ,'text-align' : 'center'�
683                        ,'color' : this.o.inputColor || this.o.fgColor�
684                        ,'padding' : '0px'�
685                        ,'-webkit-appearance': 'none'�
686                        })�
687                || this.i.css({�
688                        'width' : '0px'�
689                        ,'visibility' : 'hidden'�
690                        });�
691        };�
692�
693        this.change = function (v) {�
694            if (v == this.cv) return;�
695            this.cv = v;�
696            if (�
697                this.cH�
698                && (this.cH(v) === false)�
699            ) return;�
700        };�
701�
702        this.angle = function (v) {�
703            return (v - this.o.min) * this.angleArc / (this.o.max - this.o.min);�
704        };�
705�
706        this.draw = function () {�
707�
708            var c = this.g,                 // context�
709                a = this.angle(this.cv)    // Angle�
710                , sat = this.startAngle     // Start angle�
711                , eat = sat + a             // End angle�
712                , sa, ea                    // Previous angles�
713                , r = 1;�
714�
715            c.lineWidth = this.lineWidth;�
716�
717            c.lineCap = this.lineCap;�
718�
719            this.o.cursor�
720                && (sat = eat - this.cursorExt)�
721                && (eat = eat + this.cursorExt);�
722�
723            c.beginPath();�
724                c.strokeStyle = this.o.bgColor;�
725                c.arc(this.xy, this.xy, this.radius, this.endAngle - 0.00001, this.startAngle + 0.00001, true);�
726            c.stroke();�
727�
728            if (this.o.displayPrevious) {�
729                ea = this.startAngle + this.angle(this.v);�
730                sa = this.startAngle;�
731                this.o.cursor�
732                    && (sa = ea - this.cursorExt)�
733                    && (ea = ea + this.cursorExt);�
734�
735                c.beginPath();�
736                    c.strokeStyle = this.pColor;�
737                    c.arc(this.xy, this.xy, this.radius, sa - 0.00001, ea + 0.00001, false);�
738                c.stroke();�
739                r = (this.cv == this.v);�
740            }�
741�
742            c.beginPath();�
743                c.strokeStyle = r ? this.o.fgColor : this.fgColor ;�
744                c.arc(this.xy, this.xy, this.radius, sat - 0.00001, eat + 0.00001, false);�
745            c.stroke();�
746        };�
747�
748        this.cancel = function () {�
749            this.val(this.v);�
750        };�
751    };�
752�
753    $.fn.dial = $.fn.knob = function (o) {�
754        return this.each(�
755            function () {�
756                var d = new k.Dial();�
757                d.o = o;�
758                d.$ = $(this);�
759                d.run();�
760            }�
761        ).parent();�
762    };�
763�
764})(jQuery);�

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.