From d8e6e62923c086d4f4c60a8bd317567646c72636 Mon Sep 17 00:00:00 2001 From: zhongjin Date: Fri, 28 Sep 2018 09:32:17 +0800 Subject: [PATCH] Initial commit --- .gitignore | 3 + .npmignore | 6 + .travis.yml | 7 + Gruntfile.js | 193 + LICENSE | 22 + README.md | 123 + admin/hqwidgets.png | Bin 0 -> 11408 bytes admin/index.html | 61 + img/widgets.png | Bin 0 -> 70688 bytes io-package.json | 122 + package.json | 49 + tasks/jscs.js | 17 + tasks/jscsRules.js | 36 + tasks/jshint.js | 17 + test/testPackageFiles.js | 91 + widgets/hqwidgets.html | 343 ++ widgets/hqwidgets/css/checkbox.css | 632 ++++ widgets/hqwidgets/css/glossy.css | 202 ++ widgets/hqwidgets/css/hqwidgets.css | 1093 ++++++ widgets/hqwidgets/css/hqwidgetsButtons.css | 544 +++ widgets/hqwidgets/css/odometer-theme-car.css | 139 + .../hqwidgets/css/odometer-theme-default.css | 98 + .../hqwidgets/css/odometer-theme-digital.css | 96 + .../hqwidgets/css/odometer-theme-minimal.css | 90 + .../hqwidgets/css/odometer-theme-plaza.css | 108 + .../css/odometer-theme-slot-machine.css | 144 + .../css/odometer-theme-train-station.css | 110 + widgets/hqwidgets/img/blind.png | Bin 0 -> 342 bytes widgets/hqwidgets/img/inject-bottom.png | Bin 0 -> 328 bytes widgets/hqwidgets/img/inject-top.png | Bin 0 -> 326 bytes widgets/hqwidgets/img/lockLocked.png | Bin 0 -> 4611 bytes widgets/hqwidgets/img/lockUnlocked.png | Bin 0 -> 5065 bytes widgets/hqwidgets/img/noise.png | Bin 0 -> 6024 bytes widgets/hqwidgets/img/openDoor.png | Bin 0 -> 2657 bytes .../hqwidgets/img/prev/Prev_hqOdometer.png | Bin 0 -> 3368 bytes .../img/prev/Prev_hqwidgetsCircleKnob.png | Bin 0 -> 2646 bytes .../img/prev/Prev_hqwidgetsDimmer.png | Bin 0 -> 6005 bytes .../img/prev/Prev_hqwidgetsInTemp.png | Bin 0 -> 6847 bytes .../img/prev/Prev_hqwidgetsOutTemp.png | Bin 0 -> 5894 bytes widgets/hqwidgets/js/hqwidgets.js | 3093 +++++++++++++++++ widgets/hqwidgets/js/jquery.knob.js | 820 +++++ widgets/hqwidgets/js/odometer.min.js | 2 + 42 files changed, 8261 insertions(+) create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 .travis.yml create mode 100644 Gruntfile.js create mode 100644 LICENSE create mode 100644 README.md create mode 100644 admin/hqwidgets.png create mode 100644 admin/index.html create mode 100644 img/widgets.png create mode 100644 io-package.json create mode 100644 package.json create mode 100644 tasks/jscs.js create mode 100644 tasks/jscsRules.js create mode 100644 tasks/jshint.js create mode 100644 test/testPackageFiles.js create mode 100644 widgets/hqwidgets.html create mode 100644 widgets/hqwidgets/css/checkbox.css create mode 100644 widgets/hqwidgets/css/glossy.css create mode 100644 widgets/hqwidgets/css/hqwidgets.css create mode 100644 widgets/hqwidgets/css/hqwidgetsButtons.css create mode 100644 widgets/hqwidgets/css/odometer-theme-car.css create mode 100644 widgets/hqwidgets/css/odometer-theme-default.css create mode 100644 widgets/hqwidgets/css/odometer-theme-digital.css create mode 100644 widgets/hqwidgets/css/odometer-theme-minimal.css create mode 100644 widgets/hqwidgets/css/odometer-theme-plaza.css create mode 100644 widgets/hqwidgets/css/odometer-theme-slot-machine.css create mode 100644 widgets/hqwidgets/css/odometer-theme-train-station.css create mode 100644 widgets/hqwidgets/img/blind.png create mode 100644 widgets/hqwidgets/img/inject-bottom.png create mode 100644 widgets/hqwidgets/img/inject-top.png create mode 100644 widgets/hqwidgets/img/lockLocked.png create mode 100644 widgets/hqwidgets/img/lockUnlocked.png create mode 100644 widgets/hqwidgets/img/noise.png create mode 100644 widgets/hqwidgets/img/openDoor.png create mode 100644 widgets/hqwidgets/img/prev/Prev_hqOdometer.png create mode 100644 widgets/hqwidgets/img/prev/Prev_hqwidgetsCircleKnob.png create mode 100644 widgets/hqwidgets/img/prev/Prev_hqwidgetsDimmer.png create mode 100644 widgets/hqwidgets/img/prev/Prev_hqwidgetsInTemp.png create mode 100644 widgets/hqwidgets/img/prev/Prev_hqwidgetsOutTemp.png create mode 100644 widgets/hqwidgets/js/hqwidgets.js create mode 100644 widgets/hqwidgets/js/jquery.knob.js create mode 100644 widgets/hqwidgets/js/odometer.min.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..13d48e4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/node_modules +/.idea +/package-lock.json diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..7e1b51c --- /dev/null +++ b/.npmignore @@ -0,0 +1,6 @@ +Gruntfile.js +tasks +node_modules +test +.travis.yml +appveyor.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..c05adf9 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,7 @@ +os: + - linux +language: node_js +node_js: + - '4' + - '8' + - '10' diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..7a3daf9 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,193 @@ +// To use this file in WebStorm, right click on the file name in the Project Panel (normally left) and select "Open Grunt Console" + +/** @namespace __dirname */ +/* jshint -W097 */// jshint strict:false +/*jslint node: true */ +"use strict"; + +function getAppName() { + var parts = __dirname.replace(/\\/g, '/').split('/'); + return parts[parts.length - 1].split('.')[0].toLowerCase(); +} + +module.exports = function (grunt) { + + var srcDir = __dirname + '/'; + var pkg = grunt.file.readJSON('package.json'); + var iopackage = grunt.file.readJSON('io-package.json'); + var version = (pkg && pkg.version) ? pkg.version : iopackage.common.version; + var appName = getAppName(); + + // Project configuration. + grunt.initConfig({ + pkg: pkg, + replace: { + core: { + options: { + patterns: [ + { + match: /var version = *'[\.0-9]*';/g, + replacement: "var version = '" + version + "';" + }, + { + match: /"version"\: *"[\.0-9]*",/g, + replacement: '"version": "' + version + '",' + } + ] + }, + files: [ + { + expand: true, + flatten: true, + src: [ + srcDir + 'controller.js', + srcDir + 'package.json', + srcDir + 'io-package.json' + ], + dest: srcDir + } + ] + }, + name: { + options: { + patterns: [ + { + match: /yunkong2/gi, + replacement: appName + } + ] + }, + files: [ + { + expand: true, + flatten: true, + src: [ + srcDir + '*.*', + srcDir + '.travis.yml' + ], + dest: srcDir + }, + { + expand: true, + flatten: true, + src: [ + srcDir + 'admin/*.*', + '!' + srcDir + 'admin/*.png' + ], + dest: srcDir + 'admin' + }, + { + expand: true, + flatten: true, + src: [ + srcDir + 'lib/*.*' + ], + dest: srcDir + 'lib' + }, + { + expand: true, + flatten: true, + src: [ + srcDir + 'example/*.*' + ], + dest: srcDir + 'example' + }, + { + expand: true, + flatten: true, + src: [ + srcDir + 'www/*.*' + ], + dest: srcDir + 'www' + } + ] + } + }, + // Javascript code styler + jscs: require(__dirname + '/tasks/jscs.js'), + // Lint + jshint: require(__dirname + '/tasks/jshint.js'), + http: { + get_hjscs: { + options: { + url: 'https://raw.githubusercontent.com/' + appName + '/' + appName + '.js-controller/master/tasks/jscs.js' + }, + dest: 'tasks/jscs.js' + }, + get_jshint: { + options: { + url: 'https://raw.githubusercontent.com/' + appName + '/' + appName + '.js-controller/master/tasks/jshint.js' + }, + dest: 'tasks/jshint.js' + }, + get_gruntfile: { + options: { + url: 'https://raw.githubusercontent.com/' + appName + '/' + appName + '.build/master/adapters/Gruntfile.js' + }, + dest: 'Gruntfile.js' + }, + get_utilsfile: { + options: { + url: 'https://raw.githubusercontent.com/' + appName + '/' + appName + '.build/master/adapters/utils.js' + }, + dest: 'lib/utils.js' + }, + get_jscsRules: { + options: { + url: 'https://raw.githubusercontent.com/' + appName + '/' + appName + '.js-controller/master/tasks/jscsRules.js' + }, + dest: 'tasks/jscsRules.js' + } + } + }); + + grunt.registerTask('updateReadme', function () { + var readme = grunt.file.read('README.md'); + var pos = readme.indexOf('## Changelog\n'); + if (pos != -1) { + var readmeStart = readme.substring(0, pos + '## Changelog\n'.length); + var readmeEnd = readme.substring(pos + '## Changelog\n'.length); + + if (readme.indexOf(version) == -1) { + var timestamp = new Date(); + var date = timestamp.getFullYear() + '-' + + ('0' + (timestamp.getMonth() + 1).toString(10)).slice(-2) + '-' + + ('0' + (timestamp.getDate()).toString(10)).slice(-2); + + var news = ""; + if (iopackage.common.whatsNew) { + for (var i = 0; i < iopackage.common.whatsNew.length; i++) { + if (typeof iopackage.common.whatsNew[i] == 'string') { + news += '* ' + iopackage.common.whatsNew[i] + '\n'; + } else { + news += '* ' + iopackage.common.whatsNew[i].en + '\n'; + } + } + } + + grunt.file.write('README.md', readmeStart + '### ' + version + ' (' + date + ')\n' + (news ? news + '\n\n' : '\n') + readmeEnd); + } + } + }); + + grunt.loadNpmTasks('grunt-replace'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-jscs'); + grunt.loadNpmTasks('grunt-http'); + + grunt.registerTask('default', [ + 'http', + 'replace:core', + 'updateReadme', + 'jshint', + 'jscs' + ]); + + grunt.registerTask('p', [ + 'replace:core', + 'updateReadme' + ]); + grunt.registerTask('rename', [ + 'replace:name' + ]); +}; \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b24d1d8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2013-2018 bluefox + +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. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..5571b44 --- /dev/null +++ b/README.md @@ -0,0 +1,123 @@ +![Logo](admin/hqwidgets.png) +yunkong2.vis-hqWidgets +============ + +[![NPM version](http://img.shields.io/npm/v/yunkong2.vis-hqwidgets.svg)](https://www.npmjs.com/package/yunkong2.vis-hqwidgets) +[![Downloads](https://img.shields.io/npm/dm/yunkong2.vis-hqwidgets.svg)](https://www.npmjs.com/package/yunkong2.vis-hqwidgets) + +[![NPM](https://nodei.co/npm/yunkong2.vis-hqwidgets.png?downloads=true)](https://nodei.co/npm/yunkong2.vis-hqwidgets/) + +hqWidgets - High quality widgets for yunkong2.vis +![Example](img/widgets.png) + +For one widget the jQuery.knob plugin (MIT) from Anthony Terrien is used. +http://anthonyterrien.com/knob/ or https://git.spacen.net/aterrien/jQuery-Knob + +## Changelog +### 1.1.2 (2018-06-09) +* (bluefox) Odometer was fixed while rendering in invisible state + +### 1.1.1 (2017-10-18) +* (bluefox) Fix interval description for russian + +### 1.0.11 (2017-09-18) +* (bluefox) Hide left description +* (Sebastian Rosenberg) added feature to select shutter popup window position. + +### 1.0.10 (2017-08-12) +* (bluefox) Fix the window handle update + +### 1.0.9 (2017-07-22) +* (bluefox) Small fixes for empty images + +### 1.0.8 (2016-11-24) +* (bluefox) Reduce render interval + +### 1.0.7 (2016-11-11) +* (bluefox) Allow set of padding for description + +### 1.0.6 (2016-10-11) +* (bluefox) Fix circle Knob if negative limits +* (bluefox) Fix first switch by checkbox + +### 1.0.5 (2016-09-14) +* (bluefox) show "last action" fixed + +### 1.0.4 (2016-09-13) +* (bluefox) fix problem in inner temperature if knob widget set installed +* (Jens Maus) removed all special IE5/6 CSS hacky statements with prepending asterisk (*) characters which are just producing CSS warnings on browsers like Safari. + +### 1.0.3 (2016-05-30) +* (bluefox) fix initial value of shutter if inverted + +### 1.0.2 (2016-05-30) +* (bluefox) change "last changed" to ms + +### 1.0.1 (2016-05-26) +* (bluefox) add odometer widget + +### 1.0.0 (2016-04-12) +* (bluefox) fix blinds - control z-index of widgets if popup window opened +* (bluefox) add colorOn for checkbox + +### 0.2.5 (2015-12-19) +* (bluefox) fix hqWidgets on/off + +### 0.2.4 (2015-12-19) +* (bluefox) fix height of graphic dialog + +### 0.2.3 (2015-12-19) +* (bluefox) add green and blue colors to checkbox +* (bluefox) working on lock +* (bluefox) add readOnly option to "on/off" + +### 0.2.2 (2015-11-10) +(bluefox) fix checkbox + +### 0.2.1 (2015-10-17) +(bluefox) enable description for door and shutter + +### 0.2.0 (2015-10-14) +(bluefox) fix problem with temperature if it was as string +(bluefox) make popup window (shutter) with most z-index when showing them + +### 0.1.10 (2015-10-12) +* (bluefox) fix door widget + +### 0.1.9 (2015-10-05) +* (bluefox) fix update of temperature on widgets + +### 0.1.8 (2015-10-03) +* (bluefox) fix On/Off Icon if changed while invisible +* (bluefox) fix error with style in OutTemp + +### 0.1.7 (2015-10-02) +* (bluefox) fix "working" icon +* (bluefox) fix on/Off button + +### 0.1.6 (2015-09-30) +* (bluefox) draw widgets first when the view is visible + +### 0.1.5 (2015-09-26) +* (bluefox) add push-button feature to on/off + +### 0.1.4 (2015-09-24) +* (bluefox) add outdoor temperature widget +* (bluefox) auto fill of OIDs +* (bluefox) add colors for texts +* (bluefox) add door widget + +### 0.1.3 (2015-09-17) +* (bluefox) try to fix feedback in hqWidgets/Dimmer + +### 0.1.2 (2015-09-13) +* (bluefox) add step to dimmer and temperature +* (bluefox) add "is comma" and "digits after comma" to circle +* (bluefox) show waves when ack=true, even if widget itself set the value. + +### 0.1.0 (2015-07-09) +- (bluefox) initial checkin + +## License + Copyright (c) 2013-2018 bluefox https://git.spacen.net/GermanBluefox + MIT diff --git a/admin/hqwidgets.png b/admin/hqwidgets.png new file mode 100644 index 0000000000000000000000000000000000000000..de75e3c45de52d53e9f53b6070beafe8d4b75d48 GIT binary patch literal 11408 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 eA7g)h?*9W@v%BLSj{AuK0000 + + + + + + + + + + + + + + + + + + +
+ + + + +

High quality Widgets settings

+ +
There is nothing to setup +
+ diff --git a/img/widgets.png b/img/widgets.png new file mode 100644 index 0000000000000000000000000000000000000000..6491f0cf63b46a08cd425cdc5a9bd7fa1373ea78 GIT binary patch literal 70688 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

eX?Z=i^)vKI&BA)%6m9O@Qja(sx1x}|**z{EV z-e~Zv!>#}yxTk!b`IYU)rWw^3&g`>pTM=H{W}5L3c2Ls7R~Q zbD4c%=ECQ3{lQK4c9YF_6;;UQNeRx|h*77+_nd2G#TK!~K8n>-BbS={fKxaaHO$7J z*X_9`)KzuaE_uvU`iS{Iq+Lp_IM$zd^*0ewr{3-{HWc7~t$%wbGjKqxp|$)zW%%ql@UB=sv-cU}u;`n*t@|Ea7BGkzOp;~A=YR&vE<~&&R8|bv79)1Ts!xkN^8zWhN zJb-YYcU$hfX6&8XexiWjmPVx)^EbsF9krT|Rd_P>XaM`d`z;tq9jI&bL7PXS)bv*hkO}j;(-6wUalmRhe9A%lnHRKrP zxYxjNfWe0E(){Vur;AT#;Fa&sS+O`8T=%S%lwJ+U$-QCUG%@x3X(E*8iG45=zQNEO zP$c86%rQgKka5-3meri^F-zjY249_FddLSIEz_H(z22QmxL5PKbGWAWqflKs4-|D3 zK8_l~s0~ZMko=5T5-jeE)-X;YXM5Q-(Q?sqC&M=08V998R8vzUt8Hw;X!cOke)?L6##-ZX+CFKI`(W=X8FWwt z5gZ{B%lYP@aGYZ&pMHRT5C3#yJ(W^1KI-e&F}KUZk0kTDf^lAAb;fX>4Ks5ZUYXe- z`gMUR5>AX?I2ST~1kE!XKSi;dGyV6w9{6|$Nw6^LBbjziT|KN5Gdz#MR4S&6a=!U$ zP#2SY5H^U*fgF}kMC*%8H z?l`8={%0|HpyDeu$hfFz6v#*bJYg%|72zn(D+ZXG}9@h}MQ@qIpH=r?OOW#^avBcNo80;%x0Wm~bvSi-+YF3}H!tsz9I3FTSIiFtTxWWYb~ zNp~+~u6X|I*RR{Gi3V5ej^V@kGGm>QS4k251ASAO8-3;3MH6MsO}jL*wGE0^W!HTBjl6LN zu=3z=qEAw>;r-w8%e`sZ!J`|1$mYtEXF+W4vW=lXuFw1K6t~XN>e67On)?g~We))C zS*p;=eHc_z=DkEHRjL(!G4p}YE=*iauRO3sVWyDUQs0!P*>A}$rFxr-U|Z1_=PA$j z>+RZp@Ii5JyR_)zSDk}Nh}q6ap&S>qiCwJ?jCdA1P2;inDVQxIRGO>Xt-+j8KzBp% zlg190qGC_>57!XluL4S`EoxwJ(XnE9czEa3P~1!jYwdguObYQWM65ME;pgCW)HSW=$?IV$Waf3p@RKz{Uy3#%SW0oAZeGa|!zS=grZlgoH zOR_uo@BK5WwF4p&T8(Lsi-tyt8jbl1S_xdSSD8raeR>Xy%_zEGs+O@LVvBFjFF&{v zoFuL)APEyJ!M#nr5EHnYe|2bUFWa%mTg|yGZwXOG-5XgW=^XIFAJdM#Wm+m`i;1X2Ia*?#*v%bx;SCD6qE#l#5y`8?Q=iI@kzbfCnQ{)7^VEV$Td zm_HA_UOpEx?*MoBA;Z(fU_T4EzUvAnjC{t}403PwIEyMlBFeR5J~#TC!veiF9P-=P zVTi5NbzgL72K91~!{QHc2qPm_B!^UC_@hZAInca%uNw+HPNHhkU2j89UXDC}7F$&_ z|Gu!rD#^faXfojkryy0%?ij`vEtF9JZOn?;5El3=k=u}vwc#4EM&Qq7H?MaWaap-R zBBRVv;3Z`hQ>E+#{~A=;&@jvQyOM=PK4QrbS-t0bt>}zx?i$tOy%r!K6#K;Zx#?T` zK-n%uev^b|>_D_p^jw07+_BVKe^BQ!$yNV|q|W!gc0dW~pNzVYoD2daoBN^iDB%t@ z7m_E-aHEHeTcfFnZR*!Tr0C@BFkG&z!ut9-E5B%K67l9Y=e#X93O-{D-ne{d!ok=Q z0UR`Ked;S1x*{#JS5u@woIrhp#)q6{=e{h9E} zW_a>cp1cU!^-zK3eLV3wKC-Q<i&xI~AgvK~>EF&#W-%QGIw zYiJLXS|U*?0N(5tS67eM(-q<4BTZofxU$#Vv+QS-l*gfBD6TmQuDR7umz^$ojm)a3g&(5_ocrt7Lr z(ixw=E|S%q$nJ&*3yEnvUzl8tvB93X&w-bYzt!NrB!|=8yk-`{t501NFFvzKdtQ9n z=nP$(@>>|KT-0cB7Sm^`6!qlVAQ7eiOg7K_z zD}GP++6yFgUxmZ7co0W=JNl zuG*%&;Mp6BD3BV)m5-yOw+YRf?z$lPyQ;w6FSuB`izv0tXK|&qPo64}Qs0ph;HFxm zl&s`9EjDu*m<}eQa%z%@uNUgyzaAC=dW@qY>E`<0j`-b5s(8_~!c#*$P?o#FIaDin+8+DKhKW@JlT&QU8hc5V@6PqPTY;&5&E z3%a&{1l~Y&vo8^_nYR_@eP9P{bZj)0YKj;-YwA7SUp6tS)u|m0@r(4iNyN_?j2||} zNFOgx%m@x6Y_^l9H!WAb)xAA(6nG0bW|8cM?kVUDC}&}_Ca)jP1*Ha(xLc3IPYtKx)SGWXgo|52Hf}ctQGq2v7#7$#XKlcfQLmY1 zcGu2&GrKRLy6~g(wj-}wgMl=WSIxyZoOWm83(L3EQZVB-pkW@obXm;VB>yw;1hcE< z&fXqBSpVTHA;rJLKj8_EF%lzlaW$gG=-RC9vep%^85l_$nR4ph@A1kHC~4lMF6+!2 zpd`SL8mqJ@r!tDGk9e(qdnv%iQJrT1$3*hI8?J0S82>1oS18Kroufm302|Ns#a`#X zw@tmMc|da-r{_%6*d8`V}q#Q5b;RA1pQLNKOYJJ#D<~>HUieWw=afUH?vK-aw@c z#w*04o;gGX2UH~c*hLwaze9D@EUohOwY3YXisV=6<|+I^pW?HlV|!<%0wDKOw`q|9 zRaliOlzHcJBO<#~pEK^RWfW|nR7g{cfP>zL^l%&vk#NX789mc7#v|q<8e=l2^BwY* z_qyV)v00xmXIzEo>KQSKUd6==;*5~-A$-MHG13^3oG4F1(_=@6{CAdE(AMo@F1)ez6<)9+UW zu7}NwPv=$12Z*dUnP%RrL2DnPL^NT7puy(urvX>s&oeGrvU1>3h5>?lciY_^0+~&0xjCcfwri8b*jRJLlCt7cq|Tk7ZKHTsQWVzSd2bFE?i)Kq z#JtEUcHY}KnnlD~A>q^=45sqFT}_wH5-4rVl?f-LYH4OTMRs zmTGh<^)EEjoSauIET^)4?&15Y`V+mOWC8nE5v_5BD&%M`kzVEK#5;44)I;0T0pIB407d~enS z)c$j0u%-@T7yGbcpX{O;bzCfIwdK@YgTtuZ!gX9+CV$!E9~yuikLozcV! z=zL^4V}8E#cjK~7%y^|zT;LmmflgCVtpp-(Op8;&anz#@K?;SUAA)ie`=*wUMQ^yW zEJc$uDr~Lpw@7CKti}e>71A%3Qf!wayiXbBz0LWyl*mFRF+S5K3{4~zZBzxwMreMf ziCWsPzISQ4LHS6RK;yF*W)}HDtgGSqQ1v|=Hs0~o*=UE>T2q+B3Mr2fN)FM&I9c*D ze#LrcIgP`JVeb-|8mT68fWd_Cp>((2`tCfHVkksux(i=Ug{qP)vid(hGR=gJ4B{80L`Y;UjFyu8*P}`IVjFaFnt)? z1H@8b&&;>fbZ0(KU~jKSdxPo;7|qGou5?-8iO5T54*>IQJ}u>~wRxNgy5cTeZpDEQ zJpe)0zpv7;JD5YEY-c)Dcw4h{amoiM(Q;27J7eC?y&TfHT1-tjxLlm?2sP+$D5bN% zg`=slSJKF~#Us8@bR1d04L+Em2D@mTPp-7wz)Dx|&W9%-9^6`j0+0}sZ7OUx!6seE zG<2RsAAiKtiHn0L!e%vv{b;usTgk7c*ufX)Al~_?>NG1ofVa~~=Ndx9-@EHxHC+-- z8{_73v7?+eG*f9wKub#twOIA;d|NCnZd;<~(!}uHn^4K}9eV%3!1n<`RZbxEPgZc) z(=N3vJUvGPPrn9odUhz`<8BZohDG8#qqn=6!5KCb{lB-PrH`Q zw>`HJ#Wr#m=r zrO~UXycIx@sG${w-c?1KC#2`0?m_wSiqg$mW^6Uq(+dEf84@OFt!0p~DMcqO4_yV! z4y%}c0*3{>+QgyWk&)?tGrsn%k`LDikG7*@Xn&y94QB_tREBOZJ zid4A^zlLdEjM{M=VSt#g<8UN~qO%bbF;F-Msqt+2qV^H81`x&4tDn4PAh@1EZ3l7b z1hZh%J07XGiF!vrXj~mkUFhd$Bq(-u*P?Cw?EW;mM(1;lj5y7>M)a?$7>LUDfXa!6 zX*Q-LAYv3pj!-!nT0>OFa{cavebm^$qm@{6`|6Ts)SJD6n-%oi8$QIlR&V78A%AeE zbo@45=c6Qhdo$v@Mch%p^D3)HjAXv`>TXbsxQ5$?^lXF9woKuUUqz%9%dcK>T6E_~ z5c;F`X78Mc|J~4@xi^z@6-wrrg%)JQqDTmI%#7go_R865qG<%Hq(s}?ubqxwxd&xn%T!*PHPV$-CT!NkTv z@tngdnzR~o72_a&INjg!IO>4-S%$#h#gi?yI*c?XOV)PWalNWGIS`F}hXGBk)-BJW za$yiX_+BkYSpghHKE60BaW~w={b*{M)2!kE+nY?}JVlZUDUpf{#6gr*dd<(Qsil<# zACLbAPh+(`Sim{y?h;9~H>I=3)8zY^c+U&^&bTsHkonnOa%XNIv2^%Ng;p>#k~YQK z3uMlU9K!+b@3OKR3oMH9=B`ZFv!Zk?G>E?(R%fcJ5TD{uU3j`e%KuhdP^-}pgAq%z zZK?}^0?q_U9IA%K0(&9DHfq99Xs+nm zHWSFHGn|>G>hU$zt5t?0{8LT>8XGTo5AEg*gi(c#gdQ$s;DZ@F*yu44nO09rPLCVI zP{zAyoloUEi**Y!Uy+88{~)xmY27N~Q{8-N#FUnB;bG}x$6}MAw)w(9&b8533Rfd# zL~S&#-Zl=gAw-kg55p`16f!{As5NhFEjZoyIuGLEb%?R67DvUORiP40FQNK7y}N-n zsV!N1?)t_=Z3`rjC2Edpr6;XBez^-*+9{ecLeahpe_lHCX}c&fZ?o^lF?{oHUhsD3 zW`hC=IF#r{s0-y8vBBkp!xtU^A$B51#L&}wZq6k zmB`fWJFeG#D$&$dpFd zNM*sMrY}*pF$WRfZKlXZfWt02WjAcX#(6(b2srod&$9IYJs^^gvS%8n zllMMl8Ba%GJs&kg5^E*f5}rAh!hz8k-M`T17{ z&!}-G#D*Q(b$npMURKh$hJhkcNV#8?9J`-Ed6%ejKgC0O!Zo^i!Q54&M_FJ@UvOKL zq2%d?Ogxh8|Apv0nxg8xxN>k{F{!okXlJP6x#47k98c9iL)bX<2Rn++c`WRl@P>MS zu(pcqUZEyE94JM_a~OgmcBM!c92&V>&ohsPT61B!(4js*kUr0G4?tmbWb`^ zU)l1!+wZ_R&2kLbJP(OGa%g1CTc7%Opd>h!T9=Mzf;f4gVKcGnH&YPwG(~aCZPBoD zVkTj9mjC936@3i&sHdp7&WV$gGgEE~L1m7=OUgL+vURKHJ2kYzJ)2s0KScyJ`uxJl z1s?{9p)gT=3~y+5_!24B!Az0`$*fRF8eLZ)I4Ux0q7X14N7FXtq^lz#C!zh}qE?Pw=E>GaT=jnu&MY1c6pVoQgl4t<8QVnj|FH39|AI`o zNV=$e0NTL=wr@kRg^gd%_`wIT+&9|bC)ad1D`lamtC2c(w$)fR#TgE>s8ekZWIJmd z>`-ayHJ(eJne~TVoaxmp`0*HQJW9k}^r-RB4D7m_V>@4^+5#ixd!q5qGZnQ&26b`s z@}{!P&iJO0QM2VGZVFFurmXnb*20T}SMMcVv`{bAO$_}^u`kuk_J7|l>CK7GYs5qd zZzj#CB}dwzFuocIm$Ci$;v207jq@x;npVR?xmm&_aCItltdFh%GP>?dCi_!iQJt2; ztlf$aD2Bl-p86e(gRFLg-U>{GU6*sQX}^8{ciEKQ=vnYPq|Z_<75Bnwfzop*UTI_S zNgM>Pg%xr4*RNh#IpH7u!Cwrd6v;#KeAj{uF>2oexoh=SZT;sB7KXt`!d~_P>7Cc= z{*ouJHA+6TuG=`}k0$ze$?L>?0>m19r-Ppy0)@7%rL_#KhL7)}>#v13a!X_`yIt~` z2N6I!30>Ai8S@90Uf3Zy170#n+Y`oW`5m9@`z|{9bySjsQ%+M zJ%>XN>9#>nL@(zD3psoImp$O5Cww|l;*Ssai@pra&G#wg?%;y9+r>e2W2ontd}oOo zbp~m`SrPKVtEFIJjCgGI&DE1?35r=ok}89|V=~e8=2WH{J11<{1k>!-esmZgf5ZUf zpf3P9h?7VIJa>mJ3qVmG3h5MUjv)t}hYVtMpRp|iiA8H9G`(FU3GB6M%yS{n*(iGl z90gqe<$2-LC}g(E)E=N<6tb|eklS}Yo~P9FWtENE2!=0(QY!Z8V<2J-q4oROnL@cs zC*U5_nd(65cq%4zuL8ns`S4`gR3x#;->QvUMDtz{B;`nz5cr&xHu**ag&)J-eVR6) zCuOTW$2omq&BW+GlUV|DBv9aKF=l~ zqIo(kvNZe!3%M$oUlvM^vfDds#%Zh-6qcNQdA=XUR5I#-PK8=89}n>J%D)A}nt-g>l%5QrXF~IYbOJuod~%K75qyDeb;xmLin+7{t>Gk@hwx;*puRR)0P82Wy60m_n;6fHdFlf@6_DfYHWc5eh=Q^psOc(&u=l?HBf1dCO>w* z4WZ%YSLR2zB#-q{>+>!1!(&3k6YxN$YH_BfQisAS1B(-gtRp@`xlc6)ac>NELEgBI zk{~I@(J;6S=*7ZLPy{bbyk7ys-S!AFkpg$Gk{@${O}g0Lnd`r}ufV~#J1CsTKfh}J za%Tk!zRzI`EIIx$H%H=BdKl!=@fg`&8~18>#$V#k+I-C~6fO`i_O!roo;|#k_%ITZwPa{3;?Pytj6*Q@$k+qX2Q61W0Pyh z0ltE?c#kW=w2fMMVXS5>lvM+@8ws#O`|F<$m-_rtH(0 zyl`iJ8xtpH-)WibyY~mDW}-70Xp_8`c5PNy>(v>sE@6_(u8xGuu5pda4ye_w;f5XD z@BnmcIEQs#wgPI_^o(VjTG)bA)xc@j6!oQ+HX$&#ao;b^JtKwmO-HPzYHtg^VK+!t zZDNZeFYZBzYOW1WMSVE*tDFv>wMeYq*5waIifgH3zUSmMa58*N7CE^~(^+zDZ2Xsw z!2i?CKNMGt6ey};W7-2mRx6uJJ9HlT`@2~^Kbd_V9vDG3rad0}Ve2N#&YOGoo>l~X zFMq44PPa0%Q)_@qJ|SnQy7j`?{M~0gyvNaM2`u@+k5!WkQ5|7}-#Hq(62ZS|H6~+l z%ifDGQ4FSW5+~?QRK;!`lAJ`&5S0VX!6?-2?kVzjc1^2h)UQf&FJ(W=z1YiiAKRp$ zVs-CR+lD|OG4b)AUG}F8cYo(3au}m7`91nHUN0Dglf#k`W2MRDcX}rWpft?Lr~5ym zp@zcv>l2Rx1O(BkxXUbZ|HHq$Fx}kXJy~NRS?zvyyBZIHuO1EDuD2E5uJ`HRtlcc% ztW}BLuBEkH8!klnCVE0dw-)gHL)@Mk^a(%F^wdXCUs&Ez3qm!>DX)?9?7EN8b6rMY zZgN8i%(!_Xk=}w3L+1+#@9OxFR8OXM<1q7$B#+gHz$ zkg?vY0U=SHS0he`qyH##T*d4x(Tyw$M*D91(m;oXVbI)i#|VhA1=Y!LhuH{#Mg!!< zUtH#0yJfObSdz{s_(h4LlmNZAJ<9jQr^i)mgxjuvmv#v_q_`%h8bAglzEe76+_5^< zO3~tc=?H7oiNRsnTJ-kt@Q?-SVeamHz=M1Mvk^z+8lkjB08>fy!5^_yW1+Q>!E13( zO#Z|D^SjYB(zBT+_ubv6r?;a$9D7wXq>sbwgX!$}a^_8;&>R(9av_r4v4IcK6yagv zXx0Oe?viZH0~UqWhqD(H`LdSuQ+Mz1|a470Th4HSj%Y`0hqX zZ{Q^^RQ-CTpdZpTe1G%O`U3GGIiwJ;1Pb}Wu z8rjF1BuI#LG8@n{!{}>eU7X>=`J87zI#+mLd%`bornqc&xw37Sv=XH@*Y^ZFekdgj zAa2So;%09>nvermP@6*!9|R&JLnui&WruyZAANtq2%d=anQ*^ERMm_ z#?=I#PSM_{Ik~jQtP)QV_bYbyfN{LXndkC3&Coy<|~QS_?2h0NP~pwPiHjZGyPwo zKV^y)-s2HZC`V;AMVwY7u~*YDTh)xXBH^-u6p^$6&0ETChJ*}S5qNiK&~ODXuSbJ% zj3p$kY!;&&&^W_~tm6YHof5Js-330DPF~&?LybAD75^X2!pjcxNI<7z)t(qb=6hX3 zE#ghjxz_&1InJzepGJ)Jd;ix98xG)3SOhePqzpafTF^0yMTY`c%sdG5p;K-NCcgksjE6?M?#yNC@sI#9kG-dv-E zfD<5)tnSXvop%>Nqpj{DtqOL_-!B^BM-A@##Wg3l`=y3E=Su5I44`(EsHIQ_s`{r< z*!5UZOG?Y17*pV7;%U3{C!I(ahwf)>f+rJnZmX7nnHyw+rl96jomOl@pLzAE!a3}O z3Jvz@2UVd&e8z94m{a}p!{jKs)$5}}=y(l@34Ve|OV!T0B>nj<4Kk5bd0U}-cA_Mb|1X{57<@stGq z+T6^dEHhJVxym9F;#6Pzc6#EM3Ws4ka^uyKm%zI8H5rEy@{;>H7K&l%deyYvxGz9) zZ-|&>O}3%ncl>F4zBBg21=Jk{iegmBwa5flTEsLP`s19NeP#n>Ie_NIliQayqs@3j zz(hO4_m=Si5H79xJ;L?#l3=sKImH9@Lv@`wX4AG=X4KQMDPH!)OeGev z=>yoiRO>QPqXUw-^%C*J(yAY*jU*CiSiM8iSC-TX=4#oDi=Js0iCY1huqI68Roer> z($&!IjO`h!Ip1^-6|!2eR(hnTq6Z818}~=?(Lr1ONxK@Y>+gH4BOiYrj85SFsY#?U zIQ7snj2;65BGH*7oa&d(UESS#GLJ>zI{arOtepq572H4VWxqVeZgk#q7$Z8mu-P{~@H6)3@+Ua1XtRB$nuf}9{nX;pO2iiJ|o0z;CR3Uys?f6* zO`njFc(;^73hS0TIfuDeKfCV{eNawQ9~$N;wG=l^>)`|gG}{4i(l54hqT2la9}I?v zY#BYI)j!0|8^9^fVgF-NCa%g}YwYPQpxc8WNzy4zIPUvezSnJ5M+P-6Z?@w$cHUUW=)M5Q?lN9Rl+y*XFh40`4 zM+g0*nBYrzNVEtbqx6v1an2C&v7gd1x5Q;XF_r&d5jFG>E|brpMKAIuIodpPKrE_C zFVFq33_xtz_G_vGa7|hV=3yzJZZ#;isG^)`K#&8Q*LR1zYneCXhWn6@_eA_I9Cf<3 zix13E*Rm0eRfi9eifSwM@}#zn3D;XL z^Wh2Vw*=Pp{kd4yIICfYbT9DB-MJ7lD1lZELr=h_8GzP|USn}v0;)c<7J-u1Bx_;! zeY`7rOT)-P#zwR>yy+KAa8DQm?D164oTU)ZxLW)R3?(rEtg*XmC$!tn9P^U6t0uRd zol;nOgYJ0hiLkW=21HVt&(GPh$2goOCd~vbs=pqt1Db{pxDt|*+XJOM0hy}L#hgQZ<-m&q!`2ixDvc&mIFxWL0F6I4A%wyk3X-!?zJQ(T$&i^}LS zFgZKap#?r=h$N8WD`jM0kO?9IxhrVWc;kVyv$NlH+GDX{kBlLgm%N#81&YncQmlJq zl$6DxvgnbiKi-b6-5L*m!edREov$#*`J;Ud#Y3qUV#tGJP5S!!-mU?H+^)veE?-uy zLj?fT3+T&9AFwYjDClW6POBl-P>Lns`&(sDo(>!B;@2HK!WBZJ9&~j`j9BSvxI$x0 z-S0%-LMAc$%6A|e{SMI9uuoAARs-Yc{QjK~3lhv6NEa%HW#K@{*-mdqL2ZpMunEdB z-*o1vgfDp=Pm(B?T|)*v%rDP-`j%9OzN#dyiLWGUt3xQ$D*Y{#zEdU(7-`7HRY zrL?LZ@FxjfKw|`ub*C2v|C(&!Pd1GRqART_;J@%4UwNN}JTvXot5WVw+e>GB%Nw4qeO`gkzz3edvF_ zQ8OkV-fPmp*ZB5it?}jXG40QTxhgsH&wLxb^n_@J-ncx5pUrrRm~7_Sc*=Z`ncK4i zm=Rxyf8)i#t$b0qsmrg6*=1xmKaVl19*Rzt+EXR*nTXQ#X>KG?7JsqlOY5E#PO=(& z(iIN0>qB_!zM8Ct{G5ScSfE4EW!##4zE7SwD<--NR)zKr`TYaZ_o8?=z+!}uCL22@ zhZ^%^)zs`2h0jDO1K9Eaap9-zM3eNZRdlNrNUH<_T_bM0MSJ*SaK$iGWzm{oUM5AJ zmJ}3g<>xm;UJvaP~9z zyFieNmvCM-cEjF_0aKF)U$6c@wbMUpY|n2J)stS%R3vHTSA2UW3an8b#D^Fxf2I2Q z42+Kkk`Np>+fws{X(P8L`E)nLT;Lw14*W+zr>-=CiG#!R`xiViW6Y^8)&JLDYT+MU z^aKG>V=>h_W#%usbY*o&n)wNsmBC=|FR|s%*TSScj5TBQDypcSk_|UzNi%5vU!R$9 z&~Yz48;x`MTr6^oESC;tYWy=&sqFNk#I$r>#JVAF^SAK>^%KzyECWye>hmY$ zRK3o=0}VS(>WJ-11nIV%_}jkyrJDZvIG?vyM~l^SH~vpvp}#)3MT zeuq2W6urtBIWs%T#4si({w?pIK;qvd?eHtWu}x6c1P8kyRtDL#pSqL(*$RrfhUe0s=_>kfST+>=wXN)g zPE}+7dEvVNjSkvholdBIjBAzGSUEi=66_>DleYN`bH-=v3~fv!$pse)O%`LWFN4u$t%FDAY?A(=KTusjPkoKQdF6yv(Qrp}6>#>*X z_;QMfQ>;8e*2=|cBb#&Jzv~f`Uw2K>8ImGcjqlT*jyjRbH))l%4#^y-`rBLp@XCQb zG-rqGyGyD&ims`C^h%5A>3>6$(r1>KE@!bx8J{F)=+978AN`gC`ZumBITst?bgJ{` zpTEuiXMqgy>f7DCPn}4-&ZRv5ZWgI*#j$Q-tVH!aOdV&tj8|;``ANn#lj|IvJ@z)9 zPWN2-?<9Y%_+szP=?!FjfGm`Br1I<8f5woO8}@?%nqN-UrsiV4@ZaD2pAY|k{R{T; c=K4;QhuF&HnA@BU0r>MyT2ZP*!XWVf0C)(J82|tP literal 0 HcmV?d00001 diff --git a/io-package.json b/io-package.json new file mode 100644 index 0000000..1949864 --- /dev/null +++ b/io-package.json @@ -0,0 +1,122 @@ +{ + "common": { + "name": "vis-hqwidgets", + "version": "1.1.2", + "news": { + "1.1.2": { + "en": "Odometer was fixed while rendering in invisible state", + "de": "Der Entfernungsmesser wurde beim Rendern im unsichtbaren Zustand behoben", + "ru": "Одометр был зафиксирован при визуализации в невидимом состоянии", + "pt": "Odometro foi corrigido durante a renderização em estado invisível", + "nl": "De odimeter is gerepareerd tijdens het renderen in onzichtbare toestand", + "fr": "Odomètre a été fixé lors du rendu dans un état invisible", + "it": "L'odometro è stato corretto durante il rendering in stato invisibile", + "es": "El odómetro se corrigió mientras se renderizaba en estado invisible", + "pl": "Licznik został naprawiony podczas renderowania w stanie niewidocznym" + }, + "1.1.1": { + "en": "Fix interval description for russian", + "de": "Korrigiere Intevall auf russisch", + "ru": "Исправлен интервал на русском" + }, + "1.0.11": { + "en": "Hide left description\nadded feature to select shutter popup window position", + "de": "Deaktiviere linke Beschreibung\nhinzugefügt Feature, um Shutter Popup-Fenster Position zu wählen", + "ru": "Можно деактивировать подпись слева\nдобавлена возможность выбора положения всплывающего окна" + }, + "1.0.10": { + "en": "Fix the window handle update", + "de": "Korrigiert den Update von Fenstergriff", + "ru": "Исправлено обновление ручки и положения окна" + }, + "1.0.9": { + "en": "Small fixes for empty images", + "de": "Kleine Verbesserungen, falls kein Bild", + "ru": "Маленькое улучшение для виджета без картинки" + }, + "1.0.8": { + "en": "Reduce render interval", + "de": "Verkleinere Renderwartezeit", + "ru": "Уменьшено время рендеринга" + }, + "1.0.7": { + "en": "Allow set of padding for description", + "de": "Erlaube das Setzen von Abständen für Beschreibung", + "ru": "Можно выставлять отступы для описания" + }, + "1.0.6": { + "en": "Fix circle Knob if negative limits\nfix first switch by checkbox", + "de": "Korregiere Circle-Knob bei negativen Werten\nKorrigiere ertse Schlatung bei Checkbox", + "ru": "Исправлена ошибка в Circle-Knob при отрицательных границах\nИсправлена ошибка в Checkbox при первом переключении" + }, + "1.0.5": { + "en": "show last action fixed", + "de": "Korregiere letze Änderungszeit", + "ru": "Исправлена ошибка в инфо о последнем изменении" + }, + "1.0.4": { + "en": "fix problem in inner temperature if knob widget set installed", + "de": "Korregiere das Problem in inner temp, falls Knob ist auch installiert", + "ru": "Исправлена совместная работа inner temp виджета и knob виджетов" + }, + "1.0.3": { + "en": "fix initial value of shutter if inverted", + "de": "fix initial value of shutter if inverted", + "ru": "fix initial value of shutter if inverted" + }, + "1.0.2": { + "en": "change [last changed] to ms", + "de": "change [last changed] to ms", + "ru": "change [last changed] to ms" + }, + "1.0.1": { + "en": "add odometer widget", + "de": "add odometer widget", + "ru": "add odometer widget" + } + }, + "title": "hqwidgets style Widgets", + "desc": { + "en": "High quality Widgets for yunkong2.vis", + "de": "Hochwertige (High quality) Widgets für yunkong2.vis", + "ru": "Высококачественные виджеты (High quality) для yunkong2.vis", + "pt": "Widgets de alta qualidade para yunkong2.vis", + "nl": "Hoge kwaliteit (High quality) Widgets voor yunkong2.vis", + "fr": "Widgets de haute qualité (High quality) pour yunkong2.vis", + "it": "Widget di alta qualità (High quality) per yunkong2.vis", + "es": "Widgets de alta calidad (High quality) para yunkong2.vis", + "pl": "Wysokiej jakości widżety (High quality) dla yunkong2.vis" + }, + "platform": "Javascript/Node.js", + "loglevel": "info", + "icon": "hqwidgets.png", + "enabled": true, + "mode": "once", + "extIcon": "https://raw.githubusercontent.com/yunkong2/yunkong2.vis-hqwidgets/master/admin/hqwidgets.png", + "keywords": [ + "hqwidgets", + "vis", + "GUI", + "graphical", + "scada" + ], + "readme": "https://git.spacen.net/yunkong2/yunkong2.vis-hqwidgets/blob/master/README.md", + "authors": [ + "bluefox " + ], + "localLink": "%web_protocol%://%ip%:%web_port%/vis/edit.html", + "license": "MIT", + "dependencies": [ + "vis" + ], + "onlyWWW": true, + "singleton": true, + "type": "visualization-widgets", + "restartAdapters": [ + "vis" + ], + "noConfig": true + }, + "native": {}, + "instanceObjects": [] +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..04de082 --- /dev/null +++ b/package.json @@ -0,0 +1,49 @@ +{ + "name": "yunkong2.vis-hqwidgets", + "description": "hqwidgets Widgets for yunkong2.vis", + "version": "1.1.2", + "author": { + "name": "bluefox", + "email": "dogafox@gmail.com" + }, + "contributors": [ + "bluefox " + ], + "homepage": "https://git.spacen.net/yunkong2/yunkong2.vis-hqwidgets", + "repository": { + "type": "git", + "url": "https://git.spacen.net/yunkong2/yunkong2.vis-hqwidgets" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://git.spacen.net/yunkong2/yunkong2.vis-hqwidgets/blob/master/LICENSE" + } + ], + "keywords": [ + "yunkong2", + "GUI", + "DashUI", + "web interface", + "home automation", + "SCADA", + "hqwidgets GUI" + ], + "devDependencies": { + "grunt": "^1.0.1", + "grunt-replace": "^1.0.1", + "grunt-contrib-jshint": "^1.1.0", + "grunt-jscs": "^3.0.1", + "grunt-http": "^2.2.0", + "mocha": "^4.1.0", + "chai": "^4.1.2" + }, + "bugs": { + "url": "https://git.spacen.net/yunkong2/yunkong2.vis-hqwidgets/issues" + }, + "main": "widgets/hqwidgets.html", + "scripts": { + "test": "node node_modules/mocha/bin/mocha --exit" + }, + "license": "MIT" +} \ No newline at end of file diff --git a/tasks/jscs.js b/tasks/jscs.js new file mode 100644 index 0000000..588b6f2 --- /dev/null +++ b/tasks/jscs.js @@ -0,0 +1,17 @@ +var srcDir = __dirname + "/../"; + +module.exports = { + all: { + src: [ + srcDir + "*.js", + srcDir + "lib/*.js", + srcDir + "adapter/example/*.js", + srcDir + "tasks/**/*.js", + srcDir + "www/**/*.js", + '!' + srcDir + "www/lib/**/*.js", + '!' + srcDir + 'node_modules/**/*.js', + '!' + srcDir + 'adapter/*/node_modules/**/*.js' + ], + options: require('./jscsRules.js') + } +}; \ No newline at end of file diff --git a/tasks/jscsRules.js b/tasks/jscsRules.js new file mode 100644 index 0000000..ded301d --- /dev/null +++ b/tasks/jscsRules.js @@ -0,0 +1,36 @@ +module.exports = { + force: true, + "requireCurlyBraces": ["else", "for", "while", "do", "try", "catch"], /*"if",*/ + "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"], + "requireSpaceBeforeBlockStatements": true, + "requireParenthesesAroundIIFE": true, + "disallowSpacesInFunctionDeclaration": {"beforeOpeningRoundBrace": true}, + "disallowSpacesInNamedFunctionExpression": {"beforeOpeningRoundBrace": true}, + "requireSpacesInFunctionExpression": {"beforeOpeningCurlyBrace": true}, + "requireSpacesInAnonymousFunctionExpression": {"beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true}, + "requireSpacesInNamedFunctionExpression": {"beforeOpeningCurlyBrace": true}, + "requireSpacesInFunctionDeclaration": {"beforeOpeningCurlyBrace": true}, + "disallowMultipleVarDecl": true, + "requireBlocksOnNewline": true, + "disallowEmptyBlocks": true, + "disallowSpacesInsideObjectBrackets": true, + "disallowSpacesInsideArrayBrackets": true, + "disallowSpaceAfterObjectKeys": true, + "disallowSpacesInsideParentheses": true, + "requireCommaBeforeLineBreak": true, + //"requireAlignedObjectValues": "all", + "requireOperatorBeforeLineBreak": ["?", "+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], +// "disallowLeftStickedOperators": ["?", "+", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], +// "requireRightStickedOperators": ["!"], +// "requireSpaceAfterBinaryOperators": ["?", "+", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], + //"disallowSpaceAfterBinaryOperators": [","], + "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], + "requireSpaceAfterBinaryOperators": ["?", ">", ",", ">=", "<=", "<", "+", "-", "/", "*", "=", "==", "===", "!=", "!=="], + //"validateIndentation": 4, + //"validateQuoteMarks": { "mark": "\"", "escape": true }, + "disallowMixedSpacesAndTabs": true, + "disallowKeywordsOnNewLine": ["else", "catch"] + +}; diff --git a/tasks/jshint.js b/tasks/jshint.js new file mode 100644 index 0000000..f823ebc --- /dev/null +++ b/tasks/jshint.js @@ -0,0 +1,17 @@ +var srcDir = __dirname + "/../"; + +module.exports = { + options: { + force: true + }, + all: [ + srcDir + "*.js", + srcDir + "lib/*.js", + srcDir + "adapter/example/*.js", + srcDir + "tasks/**/*.js", + srcDir + "www/**/*.js", + '!' + srcDir + "www/lib/**/*.js", + '!' + srcDir + 'node_modules/**/*.js', + '!' + srcDir + 'adapter/*/node_modules/**/*.js' + ] +}; \ No newline at end of file diff --git a/test/testPackageFiles.js b/test/testPackageFiles.js new file mode 100644 index 0000000..d0759c0 --- /dev/null +++ b/test/testPackageFiles.js @@ -0,0 +1,91 @@ +/* jshint -W097 */ +/* jshint strict:false */ +/* jslint node: true */ +/* jshint expr: true */ +var expect = require('chai').expect; +var fs = require('fs'); + +describe('Test package.json and io-package.json', function() { + it('Test package files', function (done) { + console.log(); + + var fileContentIOPackage = fs.readFileSync(__dirname + '/../io-package.json', 'utf8'); + var ioPackage = JSON.parse(fileContentIOPackage); + + var fileContentNPMPackage = fs.readFileSync(__dirname + '/../package.json', 'utf8'); + var npmPackage = JSON.parse(fileContentNPMPackage); + + expect(ioPackage).to.be.an('object'); + expect(npmPackage).to.be.an('object'); + + expect(ioPackage.common.version, 'ERROR: Version number in io-package.json needs to exist').to.exist; + expect(npmPackage.version, 'ERROR: Version number in package.json needs to exist').to.exist; + + expect(ioPackage.common.version, 'ERROR: Version numbers in package.json and io-package.json needs to match').to.be.equal(npmPackage.version); + + if (!ioPackage.common.news || !ioPackage.common.news[ioPackage.common.version]) { + console.log('WARNING: No news entry for current version exists in io-package.json, no rollback in Admin possible!'); + console.log(); + } + + expect(npmPackage.author, 'ERROR: Author in package.json needs to exist').to.exist; + expect(ioPackage.common.authors, 'ERROR: Authors in io-package.json needs to exist').to.exist; + + if (ioPackage.common.name.indexOf('template') !== 0) { + if (Array.isArray(ioPackage.common.authors)) { + expect(ioPackage.common.authors.length, 'ERROR: Author in io-package.json needs to be set').to.not.be.equal(0); + if (ioPackage.common.authors.length === 1) { + expect(ioPackage.common.authors[0], 'ERROR: Author in io-package.json needs to be a real name').to.not.be.equal('my Name '); + } + } + else { + expect(ioPackage.common.authors, 'ERROR: Author in io-package.json needs to be a real name').to.not.be.equal('my Name '); + } + } + else { + console.log('WARNING: Testing for set authors field in io-package skipped because template adapter'); + console.log(); + } + expect(fs.existsSync(__dirname + '/../README.md'), 'ERROR: README.md needs to exist! Please create one with description, detail information and changelog. English is mandatory.').to.be.true; + if (!ioPackage.common.titleLang || typeof ioPackage.common.titleLang !== 'object') { + console.log('WARNING: titleLang is not existing in io-package.json. Please add'); + console.log(); + } + if ( + ioPackage.common.title.indexOf('yunkong2') !== -1 || + ioPackage.common.title.indexOf('yunkong2') !== -1 || + ioPackage.common.title.indexOf('adapter') !== -1 || + ioPackage.common.title.indexOf('Adapter') !== -1 + ) { + console.log('WARNING: title contains Adapter or yunkong2. It is clear anyway, that it is adapter for yunkong2.'); + console.log(); + } + + if (ioPackage.common.name.indexOf('vis-') !== 0) { + if (!ioPackage.common.materialize || !fs.existsSync(__dirname + '/../admin/index_m.html') || !fs.existsSync(__dirname + '/../gulpfile.js')) { + console.log('WARNING: Admin3 support is missing! Please add it'); + console.log(); + } + if (ioPackage.common.materialize) { + expect(fs.existsSync(__dirname + '/../admin/index_m.html'), 'Admin3 support is enabled in io-package.json, but index_m.html is missing!').to.be.true; + } + } + + var licenseFileExists = fs.existsSync(__dirname + '/../LICENSE'); + var fileContentReadme = fs.readFileSync(__dirname + '/../README.md', 'utf8'); + if (fileContentReadme.indexOf('## Changelog') === -1) { + console.log('Warning: The README.md should have a section ## Changelog'); + console.log(); + } + expect((licenseFileExists || fileContentReadme.indexOf('## License') !== -1), 'A LICENSE must exist as LICENSE file or as part of the README.md').to.be.true; + if (!licenseFileExists) { + console.log('Warning: The License should also exist as LICENSE file'); + console.log(); + } + if (fileContentReadme.indexOf('## License') === -1) { + console.log('Warning: The README.md should also have a section ## License to be shown in Admin3'); + console.log(); + } + done(); + }); +}); diff --git a/widgets/hqwidgets.html b/widgets/hqwidgets.html new file mode 100644 index 0000000..951eda0 --- /dev/null +++ b/widgets/hqwidgets.html @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/widgets/hqwidgets/css/checkbox.css b/widgets/hqwidgets/css/checkbox.css new file mode 100644 index 0000000..6ec01e5 --- /dev/null +++ b/widgets/hqwidgets/css/checkbox.css @@ -0,0 +1,632 @@ +.checkbox-big-orange-wrap{ + width: 216px; + height: 68px; + background: #fff; + border-radius: 34px; + box-shadow: + inset 0 30px 50px #d1d1d1; + position: relative; +} + +.checkbox-big-orange-wrap:before{ + content:""; + width: 206px; + height:58px; + border-radius: 29px; + background: #e9d7be; + box-shadow: + inset 0 30px 50px #a5a4a4; + position: absolute; + left: 5px; + top: 5px; +} + +.checkbox-big-orange-wrap:after{ + content:""; + width: 200px; + height:52px; + border-radius: 26px; + background: -webkit-linear-gradient(top, #fe9810 0%,#e75400 61%,#e75400 91%,#ea8810 100%); + box-shadow: + inset 0 3px 20px rgba(0, 0, 0, 0.8); + position: absolute; + left: 8px; + top: 8px; + transition: all 1s ease-in-out; +} + +.checkbox-big-orange-button{ + display: inline-block; + width: 115px; + height: 52px; + border-radius: 30px; + background: -webkit-linear-gradient(top, #efeeee 0%,#bcb9b8 100%); + border-top: solid 2px #fafafa; + border-bottom: solid 2px #ada39d; + box-shadow: + 1px 6px 7px rgba(0, 0, 0, 0.5), + 0 0 5px rgba(0, 0, 0, 0.4); + position: relative; + top: 5px; + left: 6px; + z-index: 99; + transition: left 0.2s ease-in-out; +} + +.checkbox-big-orange-button:before{ + content: ""; + width: 36px; + height: 36px; + border-radius: 50%; + background: -webkit-linear-gradient(top, #c2c0be 0%,#d6d6d6 100%); + position: absolute; + top: 8px; + right: 10px; +} + +.checkbox-big-orange-button:hover{ + border-bottom: none; + top: 6px; + box-shadow: + 1px 4px 7px rgba(0, 0, 0, 0.5), + 0 0 3px rgba(0, 0, 0, 0.4); +} + +.checkbox-big-orange-button-active { + left: 94px !important; + transition: left 0.2s ease-in-out; +} + +.checkbox-small-orange-wrap{ + width: 108px; + height: 34px; + background: #fff; + border-radius: 17px; + box-shadow: + inset 0 15px 25px #d1d1d1; + position: relative; +} + +.checkbox-small-orange-wrap:before{ + content:""; + width: 103px; + height:29px; + border-radius: 15px; + background: #e9d7be; + box-shadow: + inset 0 15px 25px #a5a4a4; + position: absolute; + left: 3px; + top: 3px; +} + +.checkbox-small-orange-wrap:after { + content:""; + width: 100px; + height:26px; + border-radius: 13px; + background: -webkit-linear-gradient(top, #fe9810 0%,#e75400 61%,#e75400 91%,#ea8810 100%); + box-shadow: + inset 0 1px 10px rgba(0, 0, 0, 0.8); + position: absolute; + left: 4px; + top: 4px; + transition: all 1s ease-in-out; +} + +.checkbox-small-orange-button{ + display: inline-block; + width: 58px; + height: 26px; + border-radius: 15px; + background: -webkit-linear-gradient(top, #efeeee 0%,#bcb9b8 100%); + border-top: solid 2px #fafafa; + border-bottom: solid 2px #ada39d; + box-shadow: + 1px 6px 7px rgba(0, 0, 0, 0.5), + 0 0 5px rgba(0, 0, 0, 0.4); + position: relative; + top: 2px; + left: 3px; + z-index: 99; + transition: left 0.2s ease-in-out; +} + +.checkbox-small-orange-button:before{ + content: ""; + width: 18px; + height: 18px; + border-radius: 50%; + background: -webkit-linear-gradient(top, #c2c0be 0%,#d6d6d6 100%); + position: absolute; + top: 4px; + right: 5px; +} + +.checkbox-small-orange-button:hover{ + border-bottom: none; + top: 3px; + box-shadow: + 1px 4px 7px rgba(0, 0, 0, 0.5), + 0 0 3px rgba(0, 0, 0, 0.4); +} + +.checkbox-small-orange-button-active { + left: 47px !important; + transition: left 0.2s ease-in-out; +} +/* --------------------------- BLUE ------------------------- */ +.checkbox-big-blue-wrap{ + width: 216px; + height: 68px; + background: #fff; + border-radius: 34px; + box-shadow: + inset 0 30px 50px #d1d1d1; + position: relative; +} + +.checkbox-big-blue-wrap:before{ + content:""; + width: 206px; + height:58px; + border-radius: 29px; + background: #e9d7be; + box-shadow: + inset 0 30px 50px #a5a4a4; + position: absolute; + left: 5px; + top: 5px; +} + +.checkbox-big-blue-wrap:after{ + content:""; + width: 200px; + height:52px; + border-radius: 26px; + background: -webkit-linear-gradient(top, #558abd 0%, #5488ba 31%, #46729d 61%, #2a4661 100%); + box-shadow: + inset 0 3px 20px rgba(0, 0, 0, 0.8); + position: absolute; + left: 8px; + top: 8px; + transition: all 1s ease-in-out; +} + +.checkbox-big-blue-button{ + display: inline-block; + width: 115px; + height: 52px; + border-radius: 30px; + background: -webkit-linear-gradient(top, #efeeee 0%,#bcb9b8 100%); + border-top: solid 2px #fafafa; + border-bottom: solid 2px #ada39d; + box-shadow: + 1px 6px 7px rgba(0, 0, 0, 0.5), + 0 0 5px rgba(0, 0, 0, 0.4); + position: relative; + top: 5px; + left: 6px; + z-index: 99; + transition: left 0.2s ease-in-out; +} + +.checkbox-big-blue-button:before{ + content: ""; + width: 36px; + height: 36px; + border-radius: 50%; + background: -webkit-linear-gradient(top, #c2c0be 0%,#d6d6d6 100%); + position: absolute; + top: 8px; + right: 10px; +} + +.checkbox-big-blue-button:hover{ + border-bottom: none; + top: 6px; + box-shadow: + 1px 4px 7px rgba(0, 0, 0, 0.5), + 0 0 3px rgba(0, 0, 0, 0.4); +} + +.checkbox-big-blue-button-active { + left: 94px !important; + transition: left 0.2s ease-in-out; +} + +.checkbox-small-blue-wrap{ + width: 108px; + height: 34px; + background: #fff; + border-radius: 17px; + box-shadow: + inset 0 15px 25px #d1d1d1; + position: relative; +} + +.checkbox-small-blue-wrap:before{ + content:""; + width: 103px; + height:29px; + border-radius: 15px; + background: #e9d7be; + box-shadow: + inset 0 15px 25px #a5a4a4; + position: absolute; + left: 3px; + top: 3px; +} + +.checkbox-small-blue-wrap:after { + content:""; + width: 100px; + height:26px; + border-radius: 13px; + background: -webkit-linear-gradient(top, #558abd 0%, #5488ba 31%, #46729d 61%, #2a4661 100%); + box-shadow: + inset 0 1px 10px rgba(0, 0, 0, 0.8); + position: absolute; + left: 4px; + top: 4px; + transition: all 1s ease-in-out; +} + +.checkbox-small-blue-button{ + display: inline-block; + width: 58px; + height: 26px; + border-radius: 15px; + background: -webkit-linear-gradient(top, #efeeee 0%,#bcb9b8 100%); + border-top: solid 2px #fafafa; + border-bottom: solid 2px #ada39d; + box-shadow: + 1px 6px 7px rgba(0, 0, 0, 0.5), + 0 0 5px rgba(0, 0, 0, 0.4); + position: relative; + top: 2px; + left: 3px; + z-index: 99; + transition: left 0.2s ease-in-out; +} + +.checkbox-small-blue-button:before{ + content: ""; + width: 18px; + height: 18px; + border-radius: 50%; + background: -webkit-linear-gradient(top, #c2c0be 0%,#d6d6d6 100%); + position: absolute; + top: 4px; + right: 5px; +} + +.checkbox-small-blue-button:hover{ + border-bottom: none; + top: 3px; + box-shadow: + 1px 4px 7px rgba(0, 0, 0, 0.5), + 0 0 3px rgba(0, 0, 0, 0.4); +} + +.checkbox-small-blue-button-active { + left: 47px !important; + transition: left 0.2s ease-in-out; +} +/* --------------------------- GREEN ------------------------- */ +.checkbox-big-green-wrap{ + width: 216px; + height: 68px; + background: #fff; + border-radius: 34px; + box-shadow: + inset 0 30px 50px #d1d1d1; + position: relative; +} + +.checkbox-big-green-wrap:before{ + content:""; + width: 206px; + height:58px; + border-radius: 29px; + background: #e9d7be; + box-shadow: + inset 0 30px 50px #a5a4a4; + position: absolute; + left: 5px; + top: 5px; +} + +.checkbox-big-green-wrap:after{ + content:""; + width: 200px; + height:52px; + border-radius: 26px; + background: -webkit-linear-gradient(top, #00fe37 0%, #00e771 61%, #009f00 91%, #12a71f 100%); + box-shadow: + inset 0 3px 20px rgba(0, 0, 0, 0.8); + position: absolute; + left: 8px; + top: 8px; + transition: all 1s ease-in-out; +} + +.checkbox-big-green-button{ + display: inline-block; + width: 115px; + height: 52px; + border-radius: 30px; + background: -webkit-linear-gradient(top, #efeeee 0%,#bcb9b8 100%); + border-top: solid 2px #fafafa; + border-bottom: solid 2px #ada39d; + box-shadow: + 1px 6px 7px rgba(0, 0, 0, 0.5), + 0 0 5px rgba(0, 0, 0, 0.4); + position: relative; + top: 5px; + left: 6px; + z-index: 99; + transition: left 0.2s ease-in-out; +} + +.checkbox-big-green-button:before{ + content: ""; + width: 36px; + height: 36px; + border-radius: 50%; + background: -webkit-linear-gradient(top, #c2c0be 0%,#d6d6d6 100%); + position: absolute; + top: 8px; + right: 10px; +} + +.checkbox-big-green-button:hover{ + border-bottom: none; + top: 6px; + box-shadow: + 1px 4px 7px rgba(0, 0, 0, 0.5), + 0 0 3px rgba(0, 0, 0, 0.4); +} + +.checkbox-big-green-button-active { + left: 94px !important; + transition: left 0.2s ease-in-out; +} + +.checkbox-small-green-wrap{ + width: 108px; + height: 34px; + background: #fff; + border-radius: 17px; + box-shadow: + inset 0 15px 25px #d1d1d1; + position: relative; +} + +.checkbox-small-green-wrap:before{ + content:""; + width: 103px; + height:29px; + border-radius: 15px; + background: #e9d7be; + box-shadow: + inset 0 15px 25px #a5a4a4; + position: absolute; + left: 3px; + top: 3px; +} + +.checkbox-small-green-wrap:after { + content:""; + width: 100px; + height:26px; + border-radius: 13px; + background: -webkit-linear-gradient(top, #00fe37 0%, #00e771 61%, #009f00 91%, #12a71f 100%); + box-shadow: + inset 0 1px 10px rgba(0, 0, 0, 0.8); + position: absolute; + left: 4px; + top: 4px; + transition: all 1s ease-in-out; +} + +.checkbox-small-green-button{ + display: inline-block; + width: 58px; + height: 26px; + border-radius: 15px; + background: -webkit-linear-gradient(top, #efeeee 0%,#bcb9b8 100%); + border-top: solid 2px #fafafa; + border-bottom: solid 2px #ada39d; + box-shadow: + 1px 6px 7px rgba(0, 0, 0, 0.5), + 0 0 5px rgba(0, 0, 0, 0.4); + position: relative; + top: 2px; + left: 3px; + z-index: 99; + transition: left 0.2s ease-in-out; +} + +.checkbox-small-green-button:before{ + content: ""; + width: 18px; + height: 18px; + border-radius: 50%; + background: -webkit-linear-gradient(top, #c2c0be 0%,#d6d6d6 100%); + position: absolute; + top: 4px; + right: 5px; +} + +.checkbox-small-green-button:hover{ + border-bottom: none; + top: 3px; + box-shadow: + 1px 4px 7px rgba(0, 0, 0, 0.5), + 0 0 3px rgba(0, 0, 0, 0.4); +} + +.checkbox-small-green-button-active{ + left: 47px !important; + transition: left 0.2s ease-in-out; +} + +/* ---------------------------------- GREY -------------------------------- */ +.checkbox-big-grey-wrap{ + width: 216px; + height: 68px; + background: #fff; + border-radius: 34px; + box-shadow: + inset 0 30px 50px #d1d1d1; + position: relative; +} + +.checkbox-big-grey-wrap:before{ + content:""; + width: 206px; + height:58px; + border-radius: 29px; + background: #d4d4d4; + box-shadow: + inset 0 30px 50px #a5a4a4; + position: absolute; + left: 5px; + top: 5px; +} + +.checkbox-big-grey-wrap:after{ + content:""; + width: 200px; + height:52px; + border-radius: 26px; + background: -webkit-linear-gradient(top, #898989 0%, #696969 61%, #696969 91%, #808080 100%); + box-shadow: + inset 0 3px 20px rgba(0, 0, 0, 0.8); + position: absolute; + left: 8px; + top: 8px; + transition: all 1s ease-in-out; +} + +.checkbox-big-grey-button{ + display: inline-block; + width: 115px; + height: 52px; + border-radius: 30px; + background: -webkit-linear-gradient(top, #efeeee 0%,#bcb9b8 100%); + border-top: solid 2px #fafafa; + border-bottom: solid 2px #a4a4a4; + box-shadow: + 1px 6px 7px rgba(0, 0, 0, 0.5), + 0 0 5px rgba(0, 0, 0, 0.4); + position: relative; + top: 5px; + left: 6px; + z-index: 99; + transition: left 0.2s ease-in-out; +} + +.checkbox-big-grey-button:before{ + content: ""; + width: 36px; + height: 36px; + border-radius: 50%; + background: -webkit-linear-gradient(top, #c2c0be 0%,#d6d6d6 100%); + position: absolute; + top: 8px; + right: 10px; +} + +.checkbox-big-grey-button:hover{ + border-bottom: none; + top: 6px; + box-shadow: + 1px 4px 7px rgba(0, 0, 0, 0.5), + 0 0 3px rgba(0, 0, 0, 0.4); +} + +.checkbox-big-grey-button-active { + left: 94px !important; + transition: left 0.2s ease-in-out; +} + +.checkbox-small-grey-wrap{ + width: 108px; + height: 34px; + background: #fff; + border-radius: 17px; + box-shadow: + inset 0 15px 25px #d1d1d1; + position: relative; +} + +.checkbox-small-grey-wrap:before{ + content:""; + width: 103px; + height:29px; + border-radius: 15px; + background: #d4d4d4; + box-shadow: + inset 0 15px 25px #a5a4a4; + position: absolute; + left: 3px; + top: 3px; +} + +.checkbox-small-grey-wrap:after { + content:""; + width: 100px; + height:26px; + border-radius: 13px; + background: -webkit-linear-gradient(top, #898989 0%, #696969 61%, #696969 91%, #808080 100%); + box-shadow: + inset 0 1px 10px rgba(0, 0, 0, 0.8); + position: absolute; + left: 4px; + top: 4px; + transition: all 1s ease-in-out; +} + +.checkbox-small-grey-button{ + display: inline-block; + width: 58px; + height: 26px; + border-radius: 15px; + background: -webkit-linear-gradient(top, #efeeee 0%, #b9b9b9 100%); + border-top: solid 2px #fafafa; + border-bottom: solid 2px #a5a5a5; + box-shadow: + 1px 6px 7px rgba(0, 0, 0, 0.5), + 0 0 5px rgba(0, 0, 0, 0.4); + position: relative; + top: 2px; + left: 3px; + z-index: 99; + transition: left 0.2s ease-in-out; +} + +.checkbox-small-grey-button:before{ + content: ""; + width: 18px; + height: 18px; + border-radius: 50%; + background: -webkit-linear-gradient(top, #c2c0be 0%,#d6d6d6 100%); + position: absolute; + top: 4px; + right: 5px; +} + +.checkbox-small-grey-button:hover{ + border-bottom: none; + top: 3px; + box-shadow: + 1px 4px 7px rgba(0, 0, 0, 0.5), + 0 0 3px rgba(0, 0, 0, 0.4); +} + +.checkbox-small-grey-button-active { + left: 47px !important; + transition: left 0.2s ease-in-out; +} \ No newline at end of file diff --git a/widgets/hqwidgets/css/glossy.css b/widgets/hqwidgets/css/glossy.css new file mode 100644 index 0000000..fe43196 --- /dev/null +++ b/widgets/hqwidgets/css/glossy.css @@ -0,0 +1,202 @@ + +/* -------------------------------------- COMBINED STYLES ---------------------------------------------------*/ +.glossy-button-grey, +.glossy-button-blue, +.glossy-button-green, +.glossy-button-pink, +.glossy-button-orange, +.glossy-button-grey-active, +.glossy-button-blue-active, +.glossy-button-green-active, +.glossy-button-pink-active, +.glossy-button-orange-active +{ + background: #777777; + cursor: pointer; + /* text */ + text-decoration: none; + font: 24px/1em 'Droid Sans', sans-serif; + font-weight: bold; + text-shadow: rgba(255,255,255,.5) 0 1px 0; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + + /* layout */ + /*padding: .5em .6em .4em .6em; + margin: .5em;*/ + display: inline-block; + + /* effects */ + border-top: 1px solid rgba(255,255,255,0.8); + border-bottom: 1px solid rgba(0,0,0,0.1); + + background-image: -webkit-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0.7) )), url(../img/noise.png); + background-image: -moz-radial-gradient(top, ellipse cover, rgba(255,255,255,0.7) 0%, rgba(255,255,255,0) 100%), url(../img/noise.png); + background-image: gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0.7) )), url(../img/noise.png); + + -webkit-transition: background .2s ease-in-out; + -moz-transition: background .2s ease-in-out; + transition: background .2s ease-in-out; + +} +.glossy-button-grey:active, +.glossy-button-blue:active, +.glossy-button-green:active, +.glossy-button-pink:active, +.glossy-button-orange:active, +.glossy-button-grey-active:active, +.glossy-button-blue-active:active, +.glossy-button-green-active:active, +.glossy-button-pink-active:active, +.glossy-button-orange-active:active +{ + background-image: -webkit-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(noise.png); + background-image: -moz-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(noise.png); + background-image: gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(noise.png); + + -webkit-box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, + rgba(0,0,0,0.4) 0 .1em 1px, + rgba(0,0,0,0.2) 0 .2em 6px; + -moz-box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, + rgba(0,0,0,0.4) 0 .1em 1px, + rgba(0,0,0,0.2) 0 .2em 6px; + box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, + rgba(0,0,0,0.4) 0 .1em 1px, + rgba(0,0,0,0.2) 0 .2em 6px; + + -webkit-transform: translateY(.2em); + -moz-transform: translateY(.2em); + transform: translateY(.2em); +} + +.glossy-button-grey, +.glossy-button-grey-active +{ + /* color */ + color: hsl(0, 0%, 40%) !important; + background-color: hsl(0, 0%, 75%); + + -webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(0, 0%, 60%) 0 .1em 3px, hsl(0, 0%, 45%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ + -moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(0, 0%, 60%) 0 .1em 3px, hsl(0, 0%, 45%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ + box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(0, 0%, 60%) 0 .1em 3px, hsl(0, 0%, 45%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ +} + +.glossy-button-grey:hover, +.glossy-button-grey-active:hover +{ background-color: hsl(0, 0%, 83%); } + +/* -------------- colours -------------- */ +.glossy-button-orange, +.glossy-button-orange-active +{ + color: hsl(39, 100%, 30%) !important; + background-color: hsl(39, 100%, 50%); + + -webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(39, 100%, 40%) 0 .1em 3px, hsl(39, 100%, 30%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ + -moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(39, 100%, 40%) 0 .1em 3px, hsl(39, 100%, 30%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ + box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(39, 100%, 40%) 0 .1em 3px, hsl(39, 100%, 30%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ +} + +.glossy-button-orange:hover, +.glossy-button-orange-active:hover +{ background-color: hsl(39, 100%, 65%); } + + +.glossy-button-blue, +.glossy-button-blue-active +{ + color: hsl(208, 50%, 40%) !important; + background-color: hsl(208, 100%, 75%); + + -webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(208, 50%, 55%) 0 .1em 3px, hsl(208, 50%, 40%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ + -moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(208, 50%, 55%) 0 .1em 3px, hsl(208, 50%, 40%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ + box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(208, 50%, 55%) 0 .1em 3px, hsl(208, 50%, 40%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ +} +.glossy-button-blue:hover, +.glossy-button-blue-active:hover +{ background-color: hsl(208, 100%, 83%); } + +.glossy-button-green, +.glossy-button-green-active +{ + color: hsl(88, 70%, 30%) !important; + background-color: hsl(88, 70%, 60%); + -webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(88, 70%, 40%) 0 .1em 3px, hsl(88, 70%, 30%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ + -moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(88, 70%, 40%) 0 .1em 3px, hsl(88, 70%, 30%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ + box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(88, 70%, 40%) 0 .1em 3px, hsl(88, 70%, 30%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ +} + +.glossy-button-green:hover, +.glossy-button-green-active:hover +{ background-color: hsl(88, 70%, 75%); } + + +.glossy-button-pink, +.glossy-button-pink-active +{ + color: hsl(340, 100%, 30%) !important; + background-color: hsl(340, 100%, 75%); + -webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(340, 70%, 50%) 0 .1em 3px, hsl(340, 80%, 40%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ + -moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(340, 70%, 50%) 0 .1em 3px, hsl(340, 80%, 40%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ + box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */ + hsl(340, 70%, 50%) 0 .1em 3px, hsl(340, 80%, 40%) 0 .3em 1px, /* color border */ + rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */ +} + +.glossy-button-pink:hover, +.glossy-button-pink-active:hover +{ background-color: hsl(340, 100%, 83%); } + +.glossy-button-grey-active, +.glossy-button-blue-active, +.glossy-button-green-active, +.glossy-button-pink-active, +.glossy-button-orange-active +{ + background-image: -webkit-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(../img/noise.png); + background-image: -moz-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(../img/noise.png); + background-image: gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(../img/noise.png); + + -webkit-box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, /* inner shadow */ + rgba(0,0,0,0.4) 0 .1em 1px, /* border */ + rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */ + -moz-box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, /* inner shadow */ + rgba(0,0,0,0.4) 0 .1em 1px, /* border */ + rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */ + box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, /* inner shadow */ + rgba(0,0,0,0.4) 0 .1em 1px, /* border */ + rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */ + + -webkit-transform: translateY(.2em); + -moz-transform: translateY(.2em); + transform: translateY(.2em); +} diff --git a/widgets/hqwidgets/css/hqwidgets.css b/widgets/hqwidgets/css/hqwidgets.css new file mode 100644 index 0000000..70c6164 --- /dev/null +++ b/widgets/hqwidgets/css/hqwidgets.css @@ -0,0 +1,1093 @@ +/*.vis-hq-no-select { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +}*/ +.vis-hq-no-space { + border: 0; + margin: 0; + padding: 0; + border-spacing: 0; + border-image-width: 0; +} + +.vis-hq-nodata { + position: absolute; + top: 10%; + left: 10%; + transform: scale(2); +} +.vis-hq-battery { + position: absolute; + top: -8px; + right: -8px; +} +.vis-hq-working { + position: absolute; + top: -8px; + left: -8px; + } +/* ------------------------ Button styles ---------------------------*/ +/* Basis */ +.vis-hq-button-base { + font-family: 'Tahoma', sans-serif; + cursor: pointer; + z-index:2; +} +.vis-hq-main { + width: 100%; + height: 100%; +} +.vis-hq-main:active { + transform: scale(0.95); +} +.vis-hq-main-none { + /*transform: none !important;*/ + pointer-events:none; +} +.vis-hq-leftinfo { + background: #bbe9f9; /* Old browsers */ + background: rgba(182,182,182,0.6); + font-family: 'Tahoma', sans-serif; + position: absolute; + z-index: -1; + font-size: 12px; + border-radius: 10px; + margin-top: 5px; + padding-top: 3px; + padding-bottom: 3px; +} +.vis-hq-rightinfo { + background: #bbe9f9; /* Old browsers */ + background: rgba(182,182,182,0.6); + font-family: 'Tahoma', sans-serif; + position: absolute; + z-index: -1; + margin-top: 5px; + font-size: 12px; + border-radius: 10px; + padding-top: 3px; + padding-bottom: 3px; + left: 50%; + white-space: nowrap; +} +.vis-hq-button-base-normal { + background: #ADADAD; + background: -ms-linear-gradient(top, #ADADAD 0%, #333333 100%); + background: -moz-linear-gradient(top, #ADADAD 0%, #333333 100%); + background: -o-linear-gradient(top, #ADADAD 0%, #333333 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ADADAD), color-stop(1, #333333)); + background: -webkit-linear-gradient(top, #ADADAD 0%, #333333 100%); + background: linear-gradient(to bottom, #ADADAD 0%, #333333 100%); + border: 1px solid rgba(0,0,0,0.9) ; + box-shadow: inset 0 1px 0 0 rgba(128,128,128,0.5), + 0 0 1px 1px rgba(128,128,128,0.8), + 0 0 0 6px rgba(0,0,0,0.06), + 0 0 0 3px rgba(0,0,0,0.1); +} +.vis-hq-button-base-normal:hover { + background: #E0E0E0; + backgrounD: -ms-linear-gradient(top, #E0E0E0 0%, #8F8F8F 100%); + backgrounD: -moz-linear-gradient(top, #E0E0E0 0%, #8F8F8F 100%); + backgrounD: -o-linear-gradient(top, #E0E0E0 0%, #8F8F8F 100%); + backgrounD: -webkit-gradient(linear, left top, left bottom, color-stop(0, #E0E0E0), color-stop(1, #8F8F8F)); + backgrounD: -webkit-linear-gradient(top, #E0E0E0 0%, #8F8F8F 100%); + backgrounD: linear-gradient(to bottom, #E0E0E0 0%, #8F8F8F 100%); + border: 1px solid rgba(0,0,0,0.4) ; + box-shadow: inset 0 1px 0 0 rgba(128,128,128,0.5), + 0 0 1px 1px rgba(128,128,128,0.8), + 0 0 0 6px rgba(0,0,0,0.06), + 0 0 0 3px rgba(0,0,0,0.1); +} +.vis-hq-button-base-on { + background: rgb(255,214,94); + background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZDY1ZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZWJmMDQiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, rgba(255,214,94,1) 0%, rgba(254,191,4,1) 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,214,94,1)), color-stop(100%,rgba(254,191,4,1))); + background: -webkit-linear-gradient(top, rgba(255,214,94,1) 0%,rgba(254,191,4,1) 100%); + background: -o-linear-gradient(top, rgba(255,214,94,1) 0%,rgba(254,191,4,1) 100%); + background: -ms-linear-gradient(top, rgba(255,214,94,1) 0%,rgba(254,191,4,1) 100%); + background: linear-gradient(top, rgba(255,214,94,1) 0%,rgba(254,191,4,1) 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffd65e', endColorstr='#febf04',GradientType=0 ); + border: 1px solid rgba(0,0,0,0.4) ; + box-shadow: inset 0 1px 0 0 rgba(255,255,255,0.5), + 0 0 1px 1px rgba(255,255,255,0.8), + 0 0 0 6px rgba(0,0,0,0.06), + 0 0 0 3px rgba(0,0,0,0.1); +} +.vis-hq-button-base-on:hover { + background-image: -ms-linear-gradient(top, #FDCB28 0%, #E08600 100%); + background-image: -moz-linear-gradient(top, #FDCB28 0%, #E08600 100%); + background-image: -o-linear-gradient(top, #FDCB28 0%, #E08600 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #FDCB28), color-stop(1, #E08600)); + background-image: -webkit-linear-gradient(top, #FDCB28 0%, #E08600 100%); + background-image: linear-gradient(to bottom, #FDCB28 0%, #E08600 100%); + border: 1px solid rgba(0,0,0,0.4) ; + box-shadow: inset 0 1px 0 0 rgba(255,255,255,0.5), + 0 0 1px 1px rgba(255,255,255,0.8), + 0 0 0 6px rgba(0,0,0,0.06), + 0 0 0 3px rgba(0,0,0,0.1); +} +.vis-hq-button-base-moving { + background-image: -ms-linear-gradient(top, #00ACFC 0%, #006899 100%); + background-image: -moz-linear-gradient(top, #00ACFC 0%, #006899 100%); + background-image: -o-linear-gradient(top, #00ACFC 0%, #006899 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #00ACFC), color-stop(1, #006899)); + background-image: -webkit-linear-gradient(top, #00ACFC 0%, #006899 100%); + background-image: linear-gradient(to bottom, #00ACFC 0%, #006899 100%); + cursor:move; + border: 1px solid rgba(0,0,0,0.9) ; + box-shadow: inset 0 1px 0 0 rgba(128,128,128,0.5), + 0 0 1px 1px rgba(128,128,128,0.8), + 0 0 0 6px rgba(0,0,0,0.06), + 0 0 0 3px rgba(0,0,0,0.1); +} + +.vis-hq-actual-style { + font-weight: bold; + text-align: center; +} +.vis-hq-humidity-style { + text-align: center; +} +.vis-hq-readonly::before { + content: ""; + cursor: default; + display: block; + position: absolute; + top: -2px; + left: -2px; + right: -2px; + bottom: -2px; + z-index: 10; +} + +/* ------------------------ Blind styles ---------------------------*/ +.hq-blind-base { /* Basis */ + background: #fffeff; /* Old browsers */ + background: -moz-linear-gradient(top, #fffeff 0%, #8e8e90 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fffeff), color-stop(100%,#8e8e90)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fffeff 0%,#8e8e90 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fffeff 0%,#8e8e90 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fffeff 0%,#8e8e90 100%); /* IE10+ */ + background: linear-gradient(to bottom, #fffeff 0%,#8e8e90 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fffeff', endColorstr='#8e8e90',GradientType=0 ); /* IE6-9 */ + box-shadow: inset 0 1px 0 0 rgba(128,128,128,0.5), + 0 0 1px 1px rgba(128,128,128,0.8), + 0 0 0 6px rgba(0,0,0,0.06), + 0 0 0 3px rgba(0,0,0,0.1); + overflow: visible; +} +.hq-blind-blind { + background-image:url(../img/blind.png); + background-position: 0 100%; +} +.hq-blind-blind1 { + width: 100%; + height: 100%; + box-sizing:border-box; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + border-style: solid; + background: rgb(173,174,178); /* Old browsers */ + background: -moz-linear-gradient(45deg, rgba(173,174,178,1) 0%, rgba(251,251,251,1) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,rgba(173,174,178,1)), color-stop(100%,rgba(251,251,251,1))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(45deg, rgba(173,174,178,1) 0%,rgba(251,251,251,1) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(45deg, rgba(173,174,178,1) 0%,rgba(251,251,251,1) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(45deg, rgba(173,174,178,1) 0%,rgba(251,251,251,1) 100%); /* IE10+ */ + background: linear-gradient(45deg, rgba(173,174,178,1) 0%,rgba(251,251,251,1) 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#adaeb2', endColorstr='#fbfbfb',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ +} +.hq-blind-blind2 { + position: relative; + width: 100%; + height: 100%; + box-sizing:border-box; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + border-style: solid; + border-color: rgba(0,0,0,0); +} +.hq-blind-blind3 { + position: relative; + width: 100%; + height: 100%; + box-sizing:border-box; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + background: -moz-linear-gradient(top, rgba(0,0,0,0.8) 0%, rgba(0,51,135,0.83) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(0,0,0,0.8)), color-stop(100%,rgba(0,51,135,0.83))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(0,0,0,0.8) 0%,rgba(0,51,135,0.83) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(0,0,0,0.8) 0%,rgba(0,51,135,0.83) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(0,0,0,0.8) 0%,rgba(0,51,135,0.83) 100%); /* IE10+ */ + background: linear-gradient(to bottom, rgba(0,0,0,0.8) 0%,rgba(0,51,135,0.83) 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cc000000', endColorstr='#d4003387',GradientType=0 ); /* IE6-9 */ +} + +.hq-blind-blind4 { + position: relative; + width: 100%; + height: 100%; + box-sizing:border-box; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + border-style: solid; + background: rgb(221,231,243); /* Old browsers */ + background: -moz-linear-gradient(45deg, rgba(221,231,243,0.7) 0%, rgba(120,132,146,0.7) 52%, rgba(166,178,190,0.7) 68%, rgba(201,206,210,0.7) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,rgba(221,231,243,0.7)), color-stop(52%,rgba(120,132,146,0.7)), color-stop(68%,rgba(166,178,190,0.7)), color-stop(100%,rgba(201,206,210,0.7))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(45deg, rgba(221,231,243,0.7) 0%,rgba(120,132,146,0.7) 52%,rgba(166,178,190,0.7) 68%,rgba(201,206,210,0.7) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(45deg, rgba(221,231,243,0.7) 0%,rgba(120,132,146,0.7) 52%,rgba(166,178,190,0.7) 68%,rgba(201,206,210,0.7) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(45deg, rgba(221,231,243,0.7) 0%,rgba(120,132,146,0.7) 52%,rgba(166,178,190,0.7) 68%,rgba(201,206,210,0.7) 100%); /* IE10+ */ + background: linear-gradient(45deg, rgba(221,231,243,0.7) 0%,rgba(120,132,146,0.7) 52%,rgba(166,178,190,0.7) 68%,rgba(201,206,210,0.7) 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dde7f3', endColorstr='#c9ced2',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ +} +.hq-blind-blind4-opened-left { + -moz-transform: skew(0deg,10deg) scale(0.9, 1); + -webkit-transform: skew(0deg, 10deg) scale(0.9, 1); + -o-transform: skew(0deg,10deg) scale(0.9, 1); + -ms-transform: skew(0deg,10deg) scale(0.9, 1); + transform: skew(0deg,10deg) scale(0.9, 1); + transform-origin: 0 0 +} +.hq-blind-blind4-opened-right { + -moz-transform: skew(0deg,-10deg) scale(0.9, 1); + -webkit-transform: skew(0deg, -10deg) scale(0.9, 1); + -o-transform: skew(0deg,-10deg) scale(0.9, 1); + -ms-transform: skew(0deg,-10deg) scale(0.9, 1); + transform: skew(0deg,-10deg) scale(0.9, 1); + transform-origin: 100% 0 +} +.hq-blind-blind4-opened-top, .hq-blind-blind4-tilted { + -moz-transform: skew(-10deg,0deg) scale(1, 0.9); + -webkit-transform: skew(-10deg, 0deg) scale(1, 0.9); + -o-transform: skew(-10deg,0deg) scale(1, 0.9); + -ms-transform: skew(-10deg,0deg) scale(1, 0.9); + transform: skew(-10deg,0deg) scale(1, 0.9); + transform-origin: 0 100% +} +.hq-blind-blind4-opened-bottom { + -moz-transform: skew(10deg,0deg) scale(1, 0.9); + -webkit-transform: skew(10deg, 0deg) scale(1, 0.9); + -o-transform: skew(10deg,0deg) scale(1, 0.9); + -ms-transform: skew(10deg,0deg) scale(1, 0.9); + transform: skew(10deg,0deg) scale(1, 0.9); + transform-origin: 0 0 +} + +.hq-blind-handle { + position: absolute; + border-color: #a5aaad; + border-style: solid; +} +.hq-blind-handle-bg { + background: rgb(226,226,226); /* Old browsers */ + background: -moz-linear-gradient(top, rgba(226,226,226,1) 0%, rgba(219,219,219,1) 50%, rgba(209,209,209,1) 51%, rgba(254,254,254,1) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(226,226,226,1)), color-stop(50%,rgba(219,219,219,1)), color-stop(51%,rgba(209,209,209,1)), color-stop(100%,rgba(254,254,254,1))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(226,226,226,1) 0%,rgba(219,219,219,1) 50%,rgba(209,209,209,1) 51%,rgba(254,254,254,1) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(226,226,226,1) 0%,rgba(219,219,219,1) 50%,rgba(209,209,209,1) 51%,rgba(254,254,254,1) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(226,226,226,1) 0%,rgba(219,219,219,1) 50%,rgba(209,209,209,1) 51%,rgba(254,254,254,1) 100%); /* IE10+ */ + background: linear-gradient(to bottom, rgba(226,226,226,1) 0%,rgba(219,219,219,1) 50%,rgba(209,209,209,1) 51%,rgba(254,254,254,1) 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e2e2e2', endColorstr='#fefefe',GradientType=0 ); /* IE6-9 */ +} +.hq-blind-handle-tilted-bg { + background: rgb(241,231,103); /* Old browsers */ + background: -moz-linear-gradient(top, rgba(241,231,103,1) 0%, rgba(254,182,69,1) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(241,231,103,1)), color-stop(100%,rgba(254,182,69,1))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(241,231,103,1) 0%,rgba(254,182,69,1) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(241,231,103,1) 0%,rgba(254,182,69,1) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(241,231,103,1) 0%,rgba(254,182,69,1) 100%); /* IE10+ */ + background: linear-gradient(to bottom, rgba(241,231,103,1) 0%,rgba(254,182,69,1) 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f1e767', endColorstr='#feb645',GradientType=0 ); /* IE6-9 */ +} + +.hq-blind-big { + position: absolute; + z-index: 901; + /*top: calc(50% - 120px); + left: calc(50% - 55px);*/ + width: 7em; + height: 18em; +} + +.hq-blind-big-slider { + border-width: 3px 2px 2px 2px; + border-color: #a5aaad; + border-style: solid; + width: 100%; + height: 100%; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; + background: rgb(221,231,243); /* Old browsers */ + background: -moz-linear-gradient(45deg, rgba(221,231,243,0.9) 0%, rgba(120,132,146,0.9) 52%, rgba(166,178,190,0.9) 68%, rgba(201,206,210,0.9) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,rgba(221,231,243,0.9)), color-stop(52%,rgba(120,132,146,0.9)), color-stop(68%,rgba(166,178,190,0.9)), color-stop(100%,rgba(201,206,210,0.9))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(45deg, rgba(221,231,243,0.9) 0%,rgba(120,132,146,0.9) 52%,rgba(166,178,190,0.9) 68%,rgba(201,206,210,0.9) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(45deg, rgba(221,231,243,0.9) 0%,rgba(120,132,146,0.9) 52%,rgba(166,178,190,0.9) 68%,rgba(201,206,210,0.9) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(45deg, rgba(221,231,243,0.9) 0%,rgba(120,132,146,0.9) 52%,rgba(166,178,190,0.9) 68%,rgba(201,206,210,0.9) 100%); /* IE10+ */ + background: linear-gradient(45deg, rgba(221,231,243,0.9) 0%,rgba(120,132,146,0.9) 52%,rgba(166,178,190,0.9) 68%,rgba(201,206,210,0.9) 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dde7f3', endColorstr='#c9ced2',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ +} + +.hq-blind-big-button { + height: 2.5em; + width: 100%; + -moz-box-shadow:inset 0 1px 0 0 #bbdaf7; + -webkit-box-shadow:inset 0 1px 0 0 #bbdaf7; + box-shadow:inset 0 1px 0 0 #bbdaf7; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #79bbff), color-stop(1, #378de5) ); + background:-moz-linear-gradient( center top, #79bbff 5%, #378de5 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#79bbff', endColorstr='#378de5'); + background-color:#79bbff; + -webkit-border-radius:15px; + -moz-border-radius:15px; + border-radius:15px; + text-indent:0; + border:1px solid #84bbf3; +} +.hq-blind-big-button-up { + background-image: url(../img/inject-bottom.png); + background-repeat: no-repeat; + background-position: center; +} + +.hq-blind-big-button-down { + background-image: url(../img/inject-top.png); + background-repeat: no-repeat; + background-position: center; +} + +/* ------------- Door --------------------------------*/ +.vis-hq-door { + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; +} +.vis-hq-door-sheet { + background: #fffeff; /* Old browsers */ + background: -moz-linear-gradient(top, #fffeff 0%, #8e8e90 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fffeff), color-stop(100%,#8e8e90)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fffeff 0%,#8e8e90 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fffeff 0%,#8e8e90 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fffeff 0%,#8e8e90 100%); /* IE10+ */ + background: linear-gradient(to bottom, #fffeff 0%,#8e8e90 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fffeff', endColorstr='#8e8e90',GradientType=0 ); /* IE6-9 */ + + width: 100%; + height: 100%; +} +.vis-hq-door-empty-right, .vis-hq-door-empty-left { + width: 0; + height: 100%; +} +.vis-hq-door-handle { + position: absolute; + top: 50%; + background: #fffeff; /* Old browsers */ + background: -moz-linear-gradient(top, #fffeff 0%, #8e8e90 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fffeff), color-stop(100%,#8e8e90)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fffeff 0%,#8e8e90 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fffeff 0%,#8e8e90 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fffeff 0%,#8e8e90 100%); /* IE10+ */ + background: linear-gradient(to bottom, #fffeff 0%,#8e8e90 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fffeff', endColorstr='#8e8e90',GradientType=0 ); /* IE6-9 */ + box-shadow: inset 0 1px 0 0 rgba(128,128,128,0.5), + 0 0 1px 1px rgba(128,128,128,0.8), + 0 0 0 3px rgba(0,0,0,0.1); + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + width: 4px; + height: 4px; +} +/* ------------ Lock -----------*/ +.vis-hq-biglock { + position: absolute; + z-index:1001; + background: rgb(221,231,243); /* Old browsers */ + background: -moz-linear-gradient(45deg, rgba(221,231,243,0.9) 0%, rgba(120,132,146,0.9) 52%, rgba(166,178,190,0.9) 68%, rgba(201,206,210,0.9) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,rgba(221,231,243,0.9)), color-stop(52%,rgba(120,132,146,0.9)), color-stop(68%,rgba(166,178,190,0.9)), color-stop(100%,rgba(201,206,210,0.9))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(45deg, rgba(221,231,243,0.9) 0%,rgba(120,132,146,0.9) 52%,rgba(166,178,190,0.9) 68%,rgba(201,206,210,0.9) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(45deg, rgba(221,231,243,0.9) 0%,rgba(120,132,146,0.9) 52%,rgba(166,178,190,0.9) 68%,rgba(201,206,210,0.9) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(45deg, rgba(221,231,243,0.9) 0%,rgba(120,132,146,0.9) 52%,rgba(166,178,190,0.9) 68%,rgba(201,206,210,0.9) 100%); /* IE10+ */ + background: linear-gradient(45deg, rgba(221,231,243,0.9) 0%,rgba(120,132,146,0.9) 52%,rgba(166,178,190,0.9) 68%,rgba(201,206,210,0.9) 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dde7f3', endColorstr='#c9ced2',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ + border-width: 3px 2px 2px 2px; + border-color: #a5aaad; + border-style: solid; + width: 150px; + height: 150px; + -webkit-border-radius: 75px; + -moz-border-radius: 75px; + border-radius: 75px; + +} +.vis-hq-biglock-button { + width: 28%; + height: 28%; + position: absolute; +} +.vis-hq-biglock-close { + left: 36%; + top: 12%; +} +.vis-hq-biglock-open { + left: 16%; + bottom: 18%; +} +.vis-hq-biglock-openDoor { + right: 16%; + bottom: 18%; +} +.vis-hq-biglock-button:hover { + transform: scale(1.2); +} + +/* ------------- Animation ---------------------------*/ +.animated05s { + -webkit-animation-duration: 0.5s; + animation-duration: 0.5s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} +.animated1s { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.animated2s { + -webkit-animation-duration: 2s; + animation-duration: 2s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.animated3s { + -webkit-animation-duration: 3s; + animation-duration: 3s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +@-webkit-keyframes zoomIn1 { + 0% { + opacity: 0.7; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 70% { + opacity: 0; + -webkit-transform: scale3d(2.5, 2.5, 2.5); + transform: scale3d(2.5, 2.5, 2.5); + } + 100% { + opacity: 0; + } +} +@-webkit-keyframes zoomIn2 { + 0% { + opacity: 0; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + /*29% { + opacity: 0; + }*/ + 30% { + opacity: 0.7; + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(2.5, 2.5, 2.5); + transform: scale3d(2.5, 2.5, 2.5); + } +} + +@keyframes zoomIn1 { + 0% { + opacity: 0.7; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 70% { + opacity: 0; + -webkit-transform: scale3d(2.5, 2.5, 2.5); + transform: scale3d(2.5, 2.5, 2.5); + } + 100% { + opacity: 0; + } +} +@keyframes zoomIn2 { + 0% { + opacity: 0; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + /*29% { + opacity: 0; + }*/ + 30% { + opacity: 0.7; + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(2.5, 2.5, 2.5); + transform: scale3d(2.5, 2.5, 2.5); + } +} + +.zoomIn1 { + -webkit-animation-name: zoomIn1; + animation-name: zoomIn1; +} +.zoomIn2 { + -webkit-animation-name: zoomIn2; + animation-name: zoomIn2; +} +.wave { + border: 3px solid grey; + opacity: 0.7; + border-radius: 50px; + position: relative; + display:none; +} + +@-webkit-keyframes zoomIn { + 0% { + opacity: 0.3; + -webkit-transform: scale3d(0.1, 0.1, 0.1); + transform: scale3d(0.1, 0.1, 0.1); + } + 100% { + opacity: 0.8; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +@keyframes zoomIn { + 0% { + opacity: 0.3; + -webkit-transform: scale3d(0.1, 0.1, 0.1); + transform: scale3d(0.1, 0.1, 0.1); + } + 100% { + opacity: 0.8; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +.zoomIn{ + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} + +@-webkit-keyframes fadeOut { + 0% { + opacity: 0.8; + } + + 100% { + opacity: 0; + } +} + +@keyframes fadeOut { + 0% { + opacity: 0.8; + } + + 100% { + opacity: 0; + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes zoomOut { + 0% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + 100% { + opacity: 0.3; + -webkit-transform: scale3d(0.1, 0.1, 0.1); + transform: scale3d(0.1, 0.1, 0.1); + } +} +@keyframes zoomOut { + 0% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + 100% { + opacity: 0.3; + -webkit-transform: scale3d(0.1, 0.1, 0.1); + transform: scale3d(0.1, 0.1, 0.1); + } +} +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; +} + +@-webkit-keyframes bounce { + 0%, 20%, 53%, 80%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +@keyframes bounce { + 0%, 20%, 53%, 80%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} + +@-webkit-keyframes flash { + 0%, 50%, 100% { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +@keyframes flash { + 0%, 50%, 100% { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://git.spacen.net/nickpettit/glide */ + +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes pulse { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} + +@-webkit-keyframes rubberBand { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes rubberBand { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} + +@-webkit-keyframes shake { + 0%, 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +@keyframes shake { + 0%, 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://git.spacen.net/nickpettit/glide */ + +@-webkit-keyframes wobble { + 0% { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +@keyframes wobble { + 0% { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} diff --git a/widgets/hqwidgets/css/hqwidgetsButtons.css b/widgets/hqwidgets/css/hqwidgetsButtons.css new file mode 100644 index 0000000..d24f4e4 --- /dev/null +++ b/widgets/hqwidgets/css/hqwidgetsButtons.css @@ -0,0 +1,544 @@ + +/* -------------- Button base --------------------- */ +.hq-button-base-normal { + background-image: -ms-linear-gradient(top, #ADADAD 0%, #333333 100%); + background-image: -moz-linear-gradient(top, #ADADAD 0%, #333333 100%); + background-image: -o-linear-gradient(top, #ADADAD 0%, #333333 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ADADAD), color-stop(1, #333333)); + background-image: -webkit-linear-gradient(top, #ADADAD 0%, #333333 100%); + background-image: linear-gradient(to bottom, #ADADAD 0%, #333333 100%); + border: 1px solid rgba(0,0,0,0.9) ; + box-shadow: inset 0 1px 0 0 rgba(128,128,128,0.5), + 0 0 1px 1px rgba(128,128,128,0.8), + 0 0 0 6px rgba(0,0,0,0.06), + 0 0 0 3px rgba(0,0,0,0.1); +} +.hq-button-base-normal:hover { + background-image: -ms-linear-gradient(top, #E0E0E0 0%, #8F8F8F 100%); + background-image: -moz-linear-gradient(top, #E0E0E0 0%, #8F8F8F 100%); + background-image: -o-linear-gradient(top, #E0E0E0 0%, #8F8F8F 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #E0E0E0), color-stop(1, #8F8F8F)); + background-image: -webkit-linear-gradient(top, #E0E0E0 0%, #8F8F8F 100%); + background-image: linear-gradient(to bottom, #E0E0E0 0%, #8F8F8F 100%); + border: 1px solid rgba(0,0,0,0.4) ; + box-shadow: inset 0 1px 0 0 rgba(128,128,128,0.5), + 0 0 1px 1px rgba(128,128,128,0.8), + 0 0 0 6px rgba(0,0,0,0.06), + 0 0 0 3px rgba(0,0,0,0.1); +} +.hq-button-base-on { + background: rgb(255,214,94); + background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZDY1ZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZWJmMDQiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, rgba(255,214,94,1) 0%, rgba(254,191,4,1) 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,214,94,1)), color-stop(100%,rgba(254,191,4,1))); + background: -webkit-linear-gradient(top, rgba(255,214,94,1) 0%,rgba(254,191,4,1) 100%); + background: -o-linear-gradient(top, rgba(255,214,94,1) 0%,rgba(254,191,4,1) 100%); + background: -ms-linear-gradient(top, rgba(255,214,94,1) 0%,rgba(254,191,4,1) 100%); + background: linear-gradient(top, rgba(255,214,94,1) 0%,rgba(254,191,4,1) 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffd65e', endColorstr='#febf04',GradientType=0 ); + border: 1px solid rgba(0,0,0,0.4) ; + box-shadow: inset 0 1px 0 0 rgba(255,255,255,0.5), + 0 0 1px 1px rgba(255,255,255,0.8), + 0 0 0 6px rgba(0,0,0,0.06), + 0 0 0 3px rgba(0,0,0,0.1); +} +.hq-button-base-on:hover { + background-image: -ms-linear-gradient(top, #FDCB28 0%, #E08600 100%); + background-image: -moz-linear-gradient(top, #FDCB28 0%, #E08600 100%); + background-image: -o-linear-gradient(top, #FDCB28 0%, #E08600 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #FDCB28), color-stop(1, #E08600)); + background-image: -webkit-linear-gradient(top, #FDCB28 0%, #E08600 100%); + background-image: linear-gradient(to bottom, #FDCB28 0%, #E08600 100%); + border: 1px solid rgba(0,0,0,0.4) ; + box-shadow: inset 0 1px 0 0 rgba(255,255,255,0.5), + 0 0 1px 1px rgba(255,255,255,0.8), + 0 0 0 6px rgba(0,0,0,0.06), + 0 0 0 3px rgba(0,0,0,0.1); +} + +/* ---------------------- Button outdoor temperature */ +.hq-button-base-outtemp { + background: #e0f3fa; /* Old browsers */ + background: -moz-linear-gradient(top, #e0f3fa 0%, #b6dffd 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e0f3fa), color-stop(100%,#b6dffd)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #e0f3fa 0%,#b6dffd 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #e0f3fa 0%,#b6dffd 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #e0f3fa 0%,#b6dffd 100%); /* IE10+ */ + background: linear-gradient(to bottom, #e0f3fa 0%,#b6dffd 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e0f3fa', endColorstr='#b6dffd',GradientType=0 ); /* IE6-9 */ + border: 1px solid rgba(182,223,253,0.9) ; + box-shadow: inset 0 1px 0 0 rgba(182,223,253,0.5), + 0 0 1px 1px rgba(182,223,253,0.8), + 0 0 0 6px rgba(182,223,253,0.06), + 0 0 0 3px rgba(182,223,253,0.1); +} +.hq-button-base-outtemp:hover { + background: #bbe9f9; /* Old browsers */ + background: -moz-linear-gradient(top, #bbe9f9 0%, #94d1fc 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#bbe9f9), color-stop(100%,#94d1fc)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #bbe9f9 0%,#94d1fc 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #bbe9f9 0%,#94d1fc 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #bbe9f9 0%,#94d1fc 100%); /* IE10+ */ + background: linear-gradient(to bottom, #bbe9f9 0%,#94d1fc 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#bbe9f9', endColorstr='#94d1fc',GradientType=0 ); /* IE6-9 */ + border: 1px solid rgba(182,223,253,0.9) ; + box-shadow: inset 0 1px 0 0 rgba(182,223,253,0.5), + 0 0 1px 1px rgba(182,223,253,0.8), + 0 0 0 6px rgba(182,223,253,0.06), + 0 0 0 3px rgba(182,223,253,0.1); +} + +/* ---------------------- Button indoor temperature */ +.hq-button-base-intemp { + background: #f6e6b4; /* Old browsers */ + background: -moz-linear-gradient(top, #f6e6b4 0%, #eaac60 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f6e6b4), color-stop(100%,#eaac60)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f6e6b4 0%,#eaac60 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f6e6b4 0%,#eaac60 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f6e6b4 0%,#eaac60 100%); /* IE10+ */ + background: linear-gradient(to bottom, #f6e6b4 0%,#eaac60 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f6e6b4', endColorstr='#eaac60',GradientType=0 ); /* IE6-9 */ + border: 1px solid rgba(232,158,69,0.9) ; + box-shadow: inset 0 1px 0 0 rgba(232,158,69,0.5), + 0 0 1px 1px rgba(232,158,69,0.8), + 0 0 0 6px rgba(232,158,69,0.06), + 0 0 0 3px rgba(232,158,69,0.1); +} +.hq-button-base-intemp:hover { + background: #f4d169; /* Old browsers */ + background: -moz-linear-gradient(top, #f4d169 0%, #e89e45 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f4d169), color-stop(100%,#e89e45)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f4d169 0%,#e89e45 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f4d169 0%,#e89e45 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f4d169 0%,#e89e45 100%); /* IE10+ */ + background: linear-gradient(to bottom, #f4d169 0%,#e89e45 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4d169', endColorstr='#e89e45',GradientType=0 ); /* IE6-9 */ + border: 1px solid rgba(232,158,69,0.9) ; + box-shadow: inset 0 1px 0 0 rgba(232,158,69,0.5), + 0 0 1px 1px rgba(232,158,69,0.8), + 0 0 0 6px rgba(232,158,69,0.06), + 0 0 0 3px rgba(232,158,69,0.1); +} + +/* -------------- Button red --------------------- */ +.hq-button-red-normal { + background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf)); + background:-moz-linear-gradient(top, #ededed 5%, #dfdfdf 100%); + background:-webkit-linear-gradient(top, #ededed 5%, #dfdfdf 100%); + background:-o-linear-gradient(top, #ededed 5%, #dfdfdf 100%); + background:-ms-linear-gradient(top, #ededed 5%, #dfdfdf 100%); + background:linear-gradient(to bottom, #ededed 5%, #dfdfdf 100%); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf',GradientType=0); + background-color:#ededed; +} + +.hq-button-red-active { + background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #fe1a00), color-stop(1, #ce0100)); + background:-moz-linear-gradient(top, #fe1a00 5%, #ce0100 100%); + background:-webkit-linear-gradient(top, #fe1a00 5%, #ce0100 100%); + background:-o-linear-gradient(top, #fe1a00 5%, #ce0100 100%); + background:-ms-linear-gradient(top, #fe1a00 5%, #ce0100 100%); + background:linear-gradient(to bottom, #fe1a00 5%, #ce0100 100%); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fe1a00', endColorstr='#ce0100',GradientType=0); + + background-color:#fe1a00; +} +.hq-button-red-normal, .hq-button-red-active { + -moz-box-shadow:inset 0px 1px 0px 0px #333333; + -webkit-box-shadow:inset 0px 1px 0px 0px #333333; + box-shadow:inset 0px 1px 0px 0px #333333; + + border:1px solid #dcdcdc; + + display:inline-block; + color:#777777; + font-family:arial; + font-size:15px; + font-weight:bold; + text-decoration:none; + + text-shadow:0px 1px 0px #ffffff; +} + +.hq-button-red-normal:hover { + background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #dfdfdf), color-stop(1, #ededed)); + background:-moz-linear-gradient(top, #dfdfdf 5%, #ededed 100%); + background:-webkit-linear-gradient(top, #dfdfdf 5%, #ededed 100%); + background:-o-linear-gradient(top, #dfdfdf 5%, #ededed 100%); + background:-ms-linear-gradient(top, #dfdfdf 5%, #ededed 100%); + background:linear-gradient(to bottom, #dfdfdf 5%, #ededed 100%); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed',GradientType=0); + + background-color:#dfdfdf; +} +.hq-button-red-active:hover { + background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #ce0100), color-stop(1, #fe1a00)); + background:-moz-linear-gradient(top, #ce0100 5%, #fe1a00 100%); + background:-webkit-linear-gradient(top, #ce0100 5%, #fe1a00 100%); + background:-o-linear-gradient(top, #ce0100 5%, #fe1a00 100%); + background:-ms-linear-gradient(top, #ce0100 5%, #fe1a00 100%); + background:linear-gradient(to bottom, #ce0100 5%, #fe1a00 100%); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ce0100', endColorstr='#fe1a00',GradientType=0); + + background-color:#ce0100; +} +/* -------------- Button no background --------------------- */ + +.hq-button-no-background { + background:none; +} + +/* -------------- Button green --------------------- */ +.hq-button-green-normal, .hq-button-green-active { + -moz-box-shadow:inset 3px 2px 7px 0px #d9fbbe; + -webkit-box-shadow:inset 3px 2px 7px 0px #d9fbbe; + box-shadow:inset 3px 2px 7px 0px #d9fbbe; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b8e356), color-stop(1, #a5cc52) ); + background:-moz-linear-gradient( center top, #b8e356 5%, #a5cc52 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b8e356', endColorstr='#a5cc52'); + background-color:#b8e356; + border:1px solid #83c41a; + display:inline-block; + color:#ffffff; +} + +.hq-button-green-active { + position:relative; + top:1px; +} + +.hq-button-green-normal:hover, +.hq-button-green-active:hover{ + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #a5cc52), color-stop(1, #b8e356) ); + background:-moz-linear-gradient( center top, #a5cc52 5%, #b8e356 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#a5cc52', endColorstr='#b8e356'); + background-color:#a5cc52; +} + +/* most of them taken here: http://www.sanwebe.com/2014/02/css3-buttons-examples-with-effects-animations*/ +/* ---------------------------- Button metall ----------------------------- */ +.hq-button-metall-normal { + /*display: block;*/ + background: #434343; +} +.hq-button-metall-active { + /*display: block;*/ + background: #434343; +} + +.hq-button-metall-normal, .hq-button-metall-active { + /*display: block;*/ + background-color: #434343; + background-image: -webkit-linear-gradient(100% 100% 90deg, #515151, #7A7A7A); + background-image: -moz-linear-gradient(100% 100% 90deg, #515151, #7A7A7A); + background-image: -o-linear-gradient(100% 100% 90deg, #515151, #7A7A7A); + background-image: -ms-linear-gradient(100% 100% 90deg, #515151, #7A7A7A); + background-image: linear-gradient(100% 100% 90deg, #515151, #7A7A7A); + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#7A7A7A), to(#515151)); + border: none; + border-top: 3px solid #c2c2c2; + /*border-radius*/ + -webkit-border-radius: 40px; + -moz-border-radius: 40px; + border-radius: 40px; + /*box-shadow*/ + -webkit-box-shadow: inset 0 1px 2px rgba(255,255,255,0.2), 0 1px 0 #2D2D2D, 0 2px 0 #2D2D2D, 0 3px 0 #2C2C2C, 0 4px 0 #2A2A2A, 0 0 0 6px black, 0 4px 0 6px black, 0 0 0 7px #222, 0 4px 0 7px #222; + -moz-box-shadow: inset 0 1px 2px rgba(255,255,255,0.2), 0 1px 0 #2D2D2D, 0 2px 0 #2D2D2D, 0 3px 0 #2C2C2C, 0 4px 0 #2A2A2A, 0 0 0 6px black, 0 4px 0 6px black, 0 0 0 7px #222, 0 4px 0 7px #222; + box-shadow: inset 0 1px 2px rgba(255,255,255,0.2), 0 1px 0 #2D2D2D, 0 2px 0 #2D2D2D, 0 3px 0 #2C2C2C, 0 4px 0 #2A2A2A, 0 0 0 6px black, 0 4px 0 6px black, 0 0 0 7px #222, 0 4px 0 7px #222; + padding: 10px; + text-shadow: 0 1px 0 rgba(255,255,255,0.2); + margin-right: 10px; + text-decoration: none; + color: #242424; + background-image: -webkit-radial-gradient( 50% 0%, 8% 50%, hsla(0,0%,100%,.5) 0%, hsla(0,0%,100%,0) 100%), + -webkit-radial-gradient( 50% 100%, 12% 50%, hsla(0,0%,100%,.6) 0%, hsla(0,0%,100%,0) 100%), + -webkit-radial-gradient( 0% 50%, 50% 7%, hsla(0,0%,100%,.5) 0%, hsla(0,0%,100%,0) 100%), + -webkit-radial-gradient( 100% 50%, 50% 5%, hsla(0,0%,100%,.5) 0%, hsla(0,0%,100%,0) 100%), + -webkit-repeating-radial-gradient( 50% 50%, 100% 100%, hsla(0,0%, 0%,0) 0%, hsla(0,0%, 0%,0) 3%, hsla(0,0%, 0%,.1) 3.5%), + -webkit-repeating-radial-gradient( 50% 50%, 100% 100%, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 6%, hsla(0,0%,100%,.1) 7.5%), + -webkit-repeating-radial-gradient( 50% 50%, 100% 100%, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1.2%, hsla(0,0%,100%,.2) 2.2%), + -webkit-radial-gradient( 50% 50%, 200% 50%, hsla(0,0%,90%,1) 5%, hsla(0,0%,85%,1) 30%, hsla(0,0%,60%,1) 100%); +} + +.hq-button-metall-active { + border-top: 0px solid #dde1e7; + /*box-shadow*/ + -webkit-box-shadow: inset 0 1px 2px rgba(255,255,255,0.2), 0 1px 0 #2D2D2D, 0 2px 0 #2D2D2D, 0 3px 0 #2C2C2C, 0 4px 0 #2A2A2A, 0 0 0 6px black, 0 4px 0 6px black, 0 0 0 7px #222, 0 4px 0 7px #222,0px 0px 5px #00aeff,0px 0px 50px #00aeff,0px 0px 50px #93d9fa; + -moz-box-shadow: inset 0 1px 2px rgba(255,255,255,0.2), 0 1px 0 #2D2D2D, 0 2px 0 #2D2D2D, 0 3px 0 #2C2C2C, 0 4px 0 #2A2A2A, 0 0 0 6px black, 0 4px 0 6px black, 0 0 0 7px #222, 0 4px 0 7px #222,0px 0px 5px #00aeff,0px 0px 50px #00aeff,0px 0px 50px #93d9fa; + box-shadow: inset 0 1px 2px rgba(255,255,255,0.2), 0 1px 0 #2D2D2D, 0 2px 0 #2D2D2D, 0 3px 0 #2C2C2C, 0 4px 0 #2A2A2A, 0 0 0 6px black, 0 4px 0 6px black, 0 0 0 7px #222, 0 4px 0 7px #222,0px 0px 5px #00aeff,0px 0px 50px #00aeff,0px 0px 50px #93d9fa; + /*transform*/ + -webkit-transform: translateY(4px); + -moz-transform: translateY(4px); + -ms-transform: translateY(4px); + -o-transform: translateY(4px); + transform: translateY(4px); +} + +.hq-button-metall-normal:hover, .hq-button-metall-active:hover { + color: #00aeff; + text-shadow: -1px -2px 1px #000; +} + +.hq-button-metall-normal:before, +.hq-button-metall-normal:after, +.hq-button-metall-active:before, +.hq-button-metall-active:after { + content: ""; + top: 0; + left: 0; + position: absolute; + width: inherit; + height: inherit; + /*border-radius*/ + -webkit-border-radius: inherit; + -moz-border-radius: inherit; + border-radius: inherit; + /* fake conical gradients */ + background-image: -webkit-radial-gradient( 50% 0%, 10% 50%, hsla(0,0%,0%,.1) 0%, hsla(0,0%,0%,0) 100%), + -webkit-radial-gradient( 50% 100%, 10% 50%, hsla(0,0%,0%,.1) 0%, hsla(0,0%,0%,0) 100%), + -webkit-radial-gradient( 0% 50%, 50% 10%, hsla(0,0%,0%,.1) 0%, hsla(0,0%,0%,0) 100%), + -webkit-radial-gradient( 100% 50%, 50% 06%, hsla(0,0%,0%,.1) 0%, hsla(0,0%,0%,0) 100%); +} + +.hq-button-metall-normal:before, .hq-button-metall-active:before{ + /*transform*/ + -webkit-transform: rotate( 65deg); + -moz-transform: rotate( 65deg); + -ms-transform: rotate( 65deg); + -o-transform: rotate( 65deg); + transform: rotate( 65deg); +} +.hq-button-metall-normal:after, .hq-button-metall-active:after { + /*transform*/ + -webkit-transform: rotate(-65deg); + -moz-transform: rotate(-65deg); + -ms-transform: rotate(-65deg); + -o-transform: rotate(-65deg); + transform: rotate(-65deg); +} + +/* ------------------------------ Glossy buttons -------------------------------------- */ +.hq-button-glossy-blue { + background: #94c4fe; + background: -webkit-gradient(linear, left top, left bottom, color-stop(31%,#94c4fe), color-stop(100%,#d3f6fe)); + background: -webkit-linear-gradient(top, #94c4fe 31%,#d3f6fe 100%); + background: -moz-linear-gradient(top, #94c4fe 31%, #d3f6fe 100%); + background: -o-linear-gradient(top, #94c4fe 31%,#d3f6fe 100%); + background: -ms-linear-gradient(top, #94c4fe 31%,#d3f6fe 100%); + background: linear-gradient(to bottom, #94c4fe 31%,#d3f6fe 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#94c4fe', endColorstr='#d3f6fe',GradientType=0 ); + border: 1px solid #4864a9; +} + +.hq-button-glossy-green { + background: #54bc3e; + background: -moz-linear-gradient(top, #54bc3e 0%, #aee850 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#54bc3e), color-stop(100%,#aee850)); + background: -webkit-linear-gradient(top, #54bc3e 0%,#aee850 100%); + background: -o-linear-gradient(top, #54bc3e 0%,#aee850 100%); + background: -ms-linear-gradient(top, #54bc3e 0%,#aee850 100%); + background: linear-gradient(to bottom, #54bc3e 0%,#aee850 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#54bc3e', endColorstr='#aee850',GradientType=0 ); + border: 1px solid #1d6511; +} + +.hq-button-glossy-blue, +.hq-button-glossy-green { + width: 100%; + height: 100%; + -webkit-border-radius: 25px; + -moz-border-radius: 25px; + border-radius: 25px; + + color: #000; + text-shadow: 1px 1px 0px rgba(255,255,255,.5); + + -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, .2); + box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, .2); +} + +.hq-button-glossy-blue:hover, +.hq-button-glossy-green:hover { + -webkit-filter: brightness(.9); + -moz-filter: brightness(.9); + -ms-filter: brightness(.9); + filter: brightness(.9); +} + +.hq-button-glossy-blue:before, +.hq-button-glossy-green:before { + content: ""; + width: calc(100% - 10px); + height: 50%; + + display: block; + position: absolute; + left: 5px; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + + background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(255,255,255,0.7) 8%, rgba(255,255,255,0) 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(8%,rgba(255,255,255,0.7)), color-stop(100%,rgba(255,255,255,0))); + background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(255,255,255,0.7) 8%,rgba(255,255,255,0) 100%); + background: -o-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(255,255,255,0.7) 8%,rgba(255,255,255,0) 100%); + background: -ms-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(255,255,255,0.7) 8%,rgba(255,255,255,0) 100%); + background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(255,255,255,0.7) 8%,rgba(255,255,255,0) 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#00ffffff',GradientType=0 ); +} + +/* ---------------- Nice buttons ---------------------------------- */ +.hq-button-nice-blue { + background: #108FE8; + box-shadow: 0 -2px 0 3px #0d72b8 inset, 0 5px 5px rgba(3, 25, 41, 0.17), 0 15px rgba(255, 255, 255, 0.25) inset; +} +.hq-button-nice-blue:hover { + background: #333; + box-shadow: 0 -2px 0 3px #1a1a1a inset, 0 5px 5px rgba(0, 0, 0, 0.17), 0 15px rgba(255, 255, 255, 0.32) inset; +} +.hq-button-nice-red { + background: #E53030; + box-shadow: 0 -2px 0 3px #c91919 inset, 0 5px 5px rgba(65, 8, 8, 0.17), 0 15px rgba(255, 255, 255, 0.25) inset; +} +.hq-button-nice-red:hover { + background: #333; + box-shadow: 0 -2px 0 3px #1a1a1a inset, 0 5px 5px rgba(0, 0, 0, 0.17), 0 15px rgba(255, 255, 255, 0.32) inset; +} +.hq-button-nice-green { + background: #0EC518; + box-shadow: 0 -2px 0 3px #0b9512 inset, 0 5px 5px rgba(0, 7, 1, 0.17), 0 15px rgba(255, 255, 255, 0.25) inset; +} +.hq-button-nice-green:hover { + background: #333; + box-shadow: 0 -2px 0 3px #1a1a1a inset, 0 5px 5px rgba(0, 0, 0, 0.17), 0 15px rgba(255, 255, 255, 0.32) inset; +} +.hq-button-nice-yellow { + background: #FFC334; + box-shadow: 0 -2px 0 3px #ffb401 inset, 0 5px 5px rgba(103, 73, 0, 0.17), 0 15px rgba(255, 255, 255, 0.25) inset; +} +.hq-button-nice-yellow:hover { + background: #333; + box-shadow: 0 -2px 0 3px #1a1a1a inset, 0 5px 5px rgba(0, 0, 0, 0.17), 0 15px rgba(255, 255, 255, 0.32) inset; +} +.hq-button-nice-grey { + background: #555555; + box-shadow: 0 -2px 0 3px #3b3b3b inset, 0 5px 5px rgba(0, 0, 0, 0.17), 0 15px rgba(255, 255, 255, 0.25) inset; +} +.hq-button-nice-grey:hover { + background: #333; + box-shadow: 0 -2px 0 3px #1a1a1a inset, 0 5px 5px rgba(0, 0, 0, 0.17), 0 15px rgba(255, 255, 255, 0.32) inset; +} +.hq-button-nice-blue, .hq-button-nice-red, .hq-button-nice-green, .hq-button-nice-yellow, .hq-button-nice-grey { + border: 3px solid #fff; +} + +/* ------------------------- Push butons ------------------------------------- */ +.hq-button-push-red { + text-shadow:-1px -1px 0 #A84155; + background: #D25068; + border:1px solid #D25068; + + background-image:-webkit-linear-gradient(top, #F66C7B, #D25068); + background-image:-moz-linear-gradient(top, #F66C7B, #D25068); + background-image:-ms-linear-gradient(top, #F66C7B, #D25068); + background-image:-o-linear-gradient(top, #F66C7B, #D25068); + background-image:linear-gradient(to bottom, #F66C7B, #D25068); + + -webkit-box-shadow:0 1px 0 rgba(255, 255, 255, .5) inset, 0 -1px 0 rgba(255, 255, 255, .1) inset, 0 4px 0 #AD4257, 0 4px 2px rgba(0, 0, 0, .5); + -moz-box-shadow:0 1px 0 rgba(255, 255, 255, .5) inset, 0 -1px 0 rgba(255, 255, 255, .1) inset, 0 4px 0 #AD4257, 0 4px 2px rgba(0, 0, 0, .5); + box-shadow:0 1px 0 rgba(255, 255, 255, .5) inset, 0 -1px 0 rgba(255, 255, 255, .1) inset, 0 4px 0 #AD4257, 0 4px 2px rgba(0, 0, 0, .5); +} + +.hq-button-push-green { + text-shadow:-1px -1px 0 #2C7982; + background: #3EACBA; + border:1px solid #379AA4; + + background-image:-webkit-linear-gradient(top, #48C6D4, #3EACBA); + background-image:-moz-linear-gradient(top, #48C6D4, #3EACBA); + background-image:-ms-linear-gradient(top, #48C6D4, #3EACBA); + background-image:-o-linear-gradient(top, #48C6D4, #3EACBA); + background-image:linear-gradient(top, #48C6D4, #3EACBA); + + -webkit-box-shadow:0 1px 0 rgba(255, 255, 255, .5) inset, 0 -1px 0 rgba(255, 255, 255, .1) inset, 0 4px 0 #338A94, 0 4px 2px rgba(0, 0, 0, .5); + -moz-box-shadow:0 1px 0 rgba(255, 255, 255, .5) inset, 0 -1px 0 rgba(255, 255, 255, .1) inset, 0 4px 0 #338A94, 0 4px 2px rgba(0, 0, 0, .5); + box-shadow:0 1px 0 rgba(255, 255, 255, .5) inset, 0 -1px 0 rgba(255, 255, 255, .1) inset, 0 4px 0 #338A94, 0 4px 2px rgba(0, 0, 0, .5); +} + +.hq-button-push-red, +.hq-button-push-green +{ + text-align:center; + color:#FFF; + text-decoration:none; + font-family:'Oswald', Helvetica; + -webkit-border-radius:5px; + -moz-border-radius:5px; + border-radius:5px; +} + +.hq-button-push-red:before, +.hq-button-push-green:before +{ + background:#f0f0f0; + background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#D0D0D0), to(#f0f0f0)); + + -webkit-border-radius:5px; + -moz-border-radius:5px; + border-radius:5px; + + -webkit-box-shadow:0 1px 2px rgba(0, 0, 0, .5) inset, 0 1px 0 #FFF; + -moz-box-shadow:0 1px 2px rgba(0, 0, 0, .5) inset, 0 1px 0 #FFF; + box-shadow:0 1px 2px rgba(0, 0, 0, .5) inset, 0 1px 0 #FFF; + + position: absolute; + content: ""; + left: -6px; right: -6px; + top: -6px; bottom: -10px; + z-index: -1; +} + +.hq-button-push-red:active, +.hq-button-push-green:active +{ + -webkit-box-shadow:0 1px 0 rgba(255, 255, 255, .5) inset, 0 -1px 0 rgba(255, 255, 255, .1) inset; + margin-top: 5px; +} +.hq-button-push-red:active:before, +.hq-button-push-green:active:before{ + top: -6px; + bottom: -11px; + content: ""; +} + +.hq-button-push-red:hover { + background: #F66C7B; + background-image:-webkit-linear-gradient(top, #D25068, #F66C7B); + background-image:-moz-linear-gradient(top, #D25068, #F66C7B); + background-image:-ms-linear-gradient(top, #D25068, #F66C7B); + background-image:-o-linear-gradient(top, #D25068, #F66C7B); + background-image:linear-gradient(top, #D25068, #F66C7B); +} + +.hq-button-push-green:hover { + background: #48C6D4; + background-image:-webkit-linear-gradient(top, #3EACBA, #48C6D4); + background-image:-moz-linear-gradient(top, #3EACBA, #48C6D4); + background-image:-ms-linear-gradient(top, #3EACBA, #48C6D4); + background-image:-o-linear-gradient(top, #3EACBA, #48C6D4); + background-image:linear-gradient(top, #3EACBA, #48C6D4); +} + +.hq-button-base-normal:active, +.hq-button-base-on:active, +.hq-button-base-outtemp:active, +.hq-button-base-intemp:active, +.hq-button-red-normal:active, +.hq-button-red-active:active, +.hq-button-green-normal:active, +.hq-button-green-active:active, +.hq-button-no-background:active +{ + transform: scale(0.95); +} diff --git a/widgets/hqwidgets/css/odometer-theme-car.css b/widgets/hqwidgets/css/odometer-theme-car.css new file mode 100644 index 0000000..bcdfc92 --- /dev/null +++ b/widgets/hqwidgets/css/odometer-theme-car.css @@ -0,0 +1,139 @@ +@import url("//fonts.googleapis.com/css?family=Arimo"); +.odometer.odometer-auto-theme, .odometer.odometer-theme-car { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-car .odometer-digit { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-car .odometer-digit .odometer-digit-spacer { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-car .odometer-digit .odometer-digit-inner { + text-align: left; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-car .odometer-digit .odometer-ribbon { + display: block; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-car .odometer-digit .odometer-ribbon-inner { + display: block; + -webkit-backface-visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-car .odometer-digit .odometer-value { + display: block; + -webkit-transform: translateZ(0); +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-car .odometer-digit .odometer-value.odometer-last-value { + position: absolute; +} +.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-up .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; +} +.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-up.odometer-animating .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-down .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-down.odometer-animating .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} + +.odometer.odometer-auto-theme, .odometer.odometer-theme-car { + -moz-border-radius: 0.34em; + -webkit-border-radius: 0.34em; + -o-border-radius: 0.34em; + -ms-border-radius: 0.34em; + -khtml-border-radius: 0.34em; + border-radius: 0.34em; + font-family: "Arimo", monospace; + padding: 0.15em; + background: black; + color: #eee0d3; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-car .odometer-digit { + -moz-box-shadow: inset 0 0 0.3em rgba(0, 0, 0, 0.8); + -webkit-box-shadow: inset 0 0 0.3em rgba(0, 0, 0, 0.8); + -o-box-shadow: inset 0 0 0.3em rgba(0, 0, 0, 0.8); + box-shadow: inset 0 0 0.3em rgba(0, 0, 0, 0.8); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #333333), color-stop(40%, #333333), color-stop(60%, #101010), color-stop(80%, #333333), color-stop(100%, #333333)); + background-image: -webkit-linear-gradient(top, #333333 0%, #333333 40%, #101010 60%, #333333 80%, #333333 100%); + background-image: -moz-linear-gradient(top, #333333 0%, #333333 40%, #101010 60%, #333333 80%, #333333 100%); + background-image: -o-linear-gradient(top, #333333 0%, #333333 40%, #101010 60%, #333333 80%, #333333 100%); + background-image: -ms-linear-gradient(top, #333333 0%, #333333 40%, #101010 60%, #333333 80%, #333333 100%); + background-image: linear-gradient(top, #333333 0%, #333333 40%, #101010 60%, #333333 80%, #333333 100%); + padding: 0 0.15em; +} +.odometer.odometer-auto-theme .odometer-digit:first-child, .odometer.odometer-theme-car .odometer-digit:first-child { + -moz-border-radius: 0.2em 0 0 0.2em; + -webkit-border-radius: 0.2em 0 0 0.2em; + -o-border-radius: 0.2em 0 0 0.2em; + -ms-border-radius: 0.2em 0 0 0.2em; + -khtml-border-radius: 0.2em 0 0 0.2em; + border-radius: 0.2em 0 0 0.2em; +} +.odometer.odometer-auto-theme .odometer-digit:last-child, .odometer.odometer-theme-car .odometer-digit:last-child { + -moz-border-radius: 0 0.2em 0.2em 0; + -webkit-border-radius: 0 0.2em 0.2em 0; + -o-border-radius: 0 0.2em 0.2em 0; + -ms-border-radius: 0 0.2em 0.2em 0; + -khtml-border-radius: 0 0.2em 0.2em 0; + border-radius: 0 0.2em 0.2em 0; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eee0d3), color-stop(40%, #eee0d3), color-stop(60%, #bbaa9a), color-stop(80%, #eee0d3), color-stop(100%, #eee0d3)); + background-image: -webkit-linear-gradient(top, #eee0d3 0%, #eee0d3 40%, #bbaa9a 60%, #eee0d3 80%, #eee0d3 100%); + background-image: -moz-linear-gradient(top, #eee0d3 0%, #eee0d3 40%, #bbaa9a 60%, #eee0d3 80%, #eee0d3 100%); + background-image: -o-linear-gradient(top, #eee0d3 0%, #eee0d3 40%, #bbaa9a 60%, #eee0d3 80%, #eee0d3 100%); + background-image: -ms-linear-gradient(top, #eee0d3 0%, #eee0d3 40%, #bbaa9a 60%, #eee0d3 80%, #eee0d3 100%); + background-image: linear-gradient(top, #eee0d3 0%, #eee0d3 40%, #bbaa9a 60%, #eee0d3 80%, #eee0d3 100%); + background-color: #eee0d3; + color: black; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-car .odometer-digit .odometer-digit-inner { + left: 0.15em; +} +.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-down.odometer-animating .odometer-ribbon-inner { + -webkit-transition-timing-function: linear; + -moz-transition-timing-function: linear; + -ms-transition-timing-function: linear; + -o-transition-timing-function: linear; + transition-timing-function: linear; +} diff --git a/widgets/hqwidgets/css/odometer-theme-default.css b/widgets/hqwidgets/css/odometer-theme-default.css new file mode 100644 index 0000000..571de28 --- /dev/null +++ b/widgets/hqwidgets/css/odometer-theme-default.css @@ -0,0 +1,98 @@ +.odometer.odometer-auto-theme, .odometer.odometer-theme-default { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + position: relative; +} +.odometer.odometer-auto-theme, .odometer.odometer-theme-default { + *display: inline; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { + *display: inline; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { + *display: inline; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { + text-align: left; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { + display: block; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { + display: block; + -webkit-backface-visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { + display: block; + -webkit-transform: translateZ(0); +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { + position: absolute; +} +.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; +} +.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} + +.odometer.odometer-auto-theme, .odometer.odometer-theme-default { + font-family: "Helvetica Neue", sans-serif; + line-height: 1.1em; +} +.odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { + text-align: center; +} diff --git a/widgets/hqwidgets/css/odometer-theme-digital.css b/widgets/hqwidgets/css/odometer-theme-digital.css new file mode 100644 index 0000000..bb92519 --- /dev/null +++ b/widgets/hqwidgets/css/odometer-theme-digital.css @@ -0,0 +1,96 @@ +@import url("//fonts.googleapis.com/css?family=Wallpoet"); +.odometer.odometer-auto-theme, .odometer.odometer-theme-digital { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-digital .odometer-digit { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-digital .odometer-digit .odometer-digit-spacer { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-digital .odometer-digit .odometer-digit-inner { + text-align: left; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-digital .odometer-digit .odometer-ribbon { + display: block; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-digital .odometer-digit .odometer-ribbon-inner { + display: block; + -webkit-backface-visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-digital .odometer-digit .odometer-value { + display: block; + -webkit-transform: translateZ(0); +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-digital .odometer-digit .odometer-value.odometer-last-value { + position: absolute; +} +.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-digital.odometer-animating-up .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; +} +.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-digital.odometer-animating-up.odometer-animating .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-digital.odometer-animating-down .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-digital.odometer-animating-down.odometer-animating .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} + +.odometer.odometer-auto-theme, .odometer.odometer-theme-digital { + background-image: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 100, color-stop(0%, rgba(139, 245, 165, 0.4)), color-stop(100%, #000000)); + background-image: -webkit-radial-gradient(rgba(139, 245, 165, 0.4), #000000); + background-image: -moz-radial-gradient(rgba(139, 245, 165, 0.4), #000000); + background-image: -o-radial-gradient(rgba(139, 245, 165, 0.4), #000000); + background-image: -ms-radial-gradient(rgba(139, 245, 165, 0.4), #000000); + background-image: radial-gradient(rgba(139, 245, 165, 0.4), #000000); + background-color: black; + font-family: "Wallpoet", monospace; + padding: 0 0.2em; + line-height: 1.1em; + color: #8bf5a5; +} +.odometer.odometer-auto-theme .odometer-digit + .odometer-digit, .odometer.odometer-theme-digital .odometer-digit + .odometer-digit { + margin-left: 0.1em; +} diff --git a/widgets/hqwidgets/css/odometer-theme-minimal.css b/widgets/hqwidgets/css/odometer-theme-minimal.css new file mode 100644 index 0000000..8bab775 --- /dev/null +++ b/widgets/hqwidgets/css/odometer-theme-minimal.css @@ -0,0 +1,90 @@ +.odometer.odometer-auto-theme, .odometer.odometer-theme-minimal { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + position: relative; +} +.odometer.odometer-auto-theme, .odometer.odometer-theme-minimal { + *display: inline; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-minimal .odometer-digit { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-minimal .odometer-digit { + *display: inline; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-minimal .odometer-digit .odometer-digit-spacer { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-minimal .odometer-digit .odometer-digit-spacer { + *display: inline; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-minimal .odometer-digit .odometer-digit-inner { + text-align: left; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-minimal .odometer-digit .odometer-ribbon { + display: block; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-minimal .odometer-digit .odometer-ribbon-inner { + display: block; + -webkit-backface-visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-minimal .odometer-digit .odometer-value { + display: block; + -webkit-transform: translateZ(0); +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-minimal .odometer-digit .odometer-value.odometer-last-value { + position: absolute; +} +.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-minimal.odometer-animating-up .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; +} +.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-minimal.odometer-animating-up.odometer-animating .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-minimal.odometer-animating-down .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-minimal.odometer-animating-down.odometer-animating .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} diff --git a/widgets/hqwidgets/css/odometer-theme-plaza.css b/widgets/hqwidgets/css/odometer-theme-plaza.css new file mode 100644 index 0000000..566a877 --- /dev/null +++ b/widgets/hqwidgets/css/odometer-theme-plaza.css @@ -0,0 +1,108 @@ +@import url("//fonts.googleapis.com/css?family=Arimo"); +.odometer.odometer-auto-theme, .odometer.odometer-theme-plaza { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-plaza .odometer-digit { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-plaza .odometer-digit .odometer-digit-spacer { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-plaza .odometer-digit .odometer-digit-inner { + text-align: left; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-plaza .odometer-digit .odometer-ribbon { + display: block; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-plaza .odometer-digit .odometer-ribbon-inner { + display: block; + -webkit-backface-visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-plaza .odometer-digit .odometer-value { + display: block; + -webkit-transform: translateZ(0); +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-plaza .odometer-digit .odometer-value.odometer-last-value { + position: absolute; +} +.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-plaza.odometer-animating-up .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; +} +.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-plaza.odometer-animating-up.odometer-animating .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-plaza.odometer-animating-down .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-plaza.odometer-animating-down.odometer-animating .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} + +.odometer.odometer-auto-theme, .odometer.odometer-theme-plaza { + -moz-border-radius: 0.15em; + -webkit-border-radius: 0.15em; + -o-border-radius: 0.15em; + -ms-border-radius: 0.15em; + -khtml-border-radius: 0.15em; + border-radius: 0.15em; + background-color: #f0f8ff; + font-family: "Helvetica Neue", sans-serif; + font-weight: 100; + padding: 0 0.12em; + line-height: 1.2em; + font-size: 1.2em; + background-size: 16px 16px; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-plaza .odometer-digit { + -moz-border-radius: 0.1em; + -webkit-border-radius: 0.1em; + -o-border-radius: 0.1em; + -ms-border-radius: 0.1em; + -khtml-border-radius: 0.1em; + border-radius: 0.1em; + padding: 0 0.03em; + color: #648baf; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-plaza .odometer-digit .odometer-digit-inner { + left: 0.03em; +} diff --git a/widgets/hqwidgets/css/odometer-theme-slot-machine.css b/widgets/hqwidgets/css/odometer-theme-slot-machine.css new file mode 100644 index 0000000..fac9e0f --- /dev/null +++ b/widgets/hqwidgets/css/odometer-theme-slot-machine.css @@ -0,0 +1,144 @@ +@import url("//fonts.googleapis.com/css?family=Rye"); +.odometer.odometer-auto-theme, .odometer.odometer-theme-slot-machine { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-slot-machine .odometer-digit { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-digit-spacer { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-digit-inner { + text-align: left; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-ribbon { + display: block; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-ribbon-inner { + display: block; + -webkit-backface-visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-value { + display: block; + -webkit-transform: translateZ(0); +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-value.odometer-last-value { + position: absolute; +} +.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-slot-machine.odometer-animating-up .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; +} +.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-slot-machine.odometer-animating-up.odometer-animating .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-slot-machine.odometer-animating-down .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-slot-machine.odometer-animating-down.odometer-animating .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} + +.odometer.odometer-auto-theme, .odometer.odometer-theme-slot-machine { + -moz-border-radius: 0.34em; + -webkit-border-radius: 0.34em; + -o-border-radius: 0.34em; + -ms-border-radius: 0.34em; + -khtml-border-radius: 0.34em; + border-radius: 0.34em; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffff00), color-stop(100%, #ffa500)); + background-image: -webkit-linear-gradient(#ffff00, #ffa500); + background-image: -moz-linear-gradient(#ffff00, #ffa500); + background-image: -o-linear-gradient(#ffff00, #ffa500); + background-image: -ms-linear-gradient(#ffff00, #ffa500); + background-image: linear-gradient(#ffff00, #ffa500); + background-color: #ffcc00; + font-family: "Rye", monospace; + padding: 0.15em; + color: #f80000; + line-height: 1.35em; + border: 0.03em solid black; + -webkit-text-stroke: 0.05em black; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-slot-machine .odometer-digit { + -moz-box-shadow: inset 0 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); + -o-box-shadow: inset 0 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); + box-shadow: inset 0 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); + -moz-border-radius: 0.2em; + -webkit-border-radius: 0.2em; + -o-border-radius: 0.2em; + -ms-border-radius: 0.2em; + -khtml-border-radius: 0.2em; + border-radius: 0.2em; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #cccccc), color-stop(20%, #ffffff), color-stop(80%, #ffffff), color-stop(100%, #cccccc)); + background-image: -webkit-linear-gradient(top, #cccccc 0%, #ffffff 20%, #ffffff 80%, #cccccc 100%); + background-image: -moz-linear-gradient(top, #cccccc 0%, #ffffff 20%, #ffffff 80%, #cccccc 100%); + background-image: -o-linear-gradient(top, #cccccc 0%, #ffffff 20%, #ffffff 80%, #cccccc 100%); + background-image: -ms-linear-gradient(top, #cccccc 0%, #ffffff 20%, #ffffff 80%, #cccccc 100%); + background-image: linear-gradient(top, #cccccc 0%, #ffffff 20%, #ffffff 80%, #cccccc 100%); + border: 0.03em solid #444444; + padding: 0.1em 0.15em 0; +} +.odometer.odometer-auto-theme .odometer-digit:first-child, .odometer.odometer-theme-slot-machine .odometer-digit:first-child { + -moz-box-shadow: inset 0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); + -o-box-shadow: inset 0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); + box-shadow: inset 0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); +} +.odometer.odometer-auto-theme .odometer-digit:last-child, .odometer.odometer-theme-slot-machine .odometer-digit:last-child { + -moz-box-shadow: inset -0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset -0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); + -o-box-shadow: inset -0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); + box-shadow: inset -0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em white, 0 0 0 0.05em rgba(0, 0, 0, 0.2); +} +.odometer.odometer-auto-theme .odometer-digit + .odometer-digit, .odometer.odometer-theme-slot-machine .odometer-digit + .odometer-digit { + margin-left: 0.15em; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-digit-inner { + padding-top: 0.08em; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-value.odometer-last-value { + left: 0; + right: 0; + text-align: center; +} diff --git a/widgets/hqwidgets/css/odometer-theme-train-station.css b/widgets/hqwidgets/css/odometer-theme-train-station.css new file mode 100644 index 0000000..6074dd1 --- /dev/null +++ b/widgets/hqwidgets/css/odometer-theme-train-station.css @@ -0,0 +1,110 @@ +@import url("//fonts.googleapis.com/css?family=Economica"); +.odometer.odometer-auto-theme, .odometer.odometer-theme-train-station { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-train-station .odometer-digit { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + position: relative; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-train-station .odometer-digit .odometer-digit-spacer { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-train-station .odometer-digit .odometer-digit-inner { + text-align: left; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-train-station .odometer-digit .odometer-ribbon { + display: block; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-train-station .odometer-digit .odometer-ribbon-inner { + display: block; + -webkit-backface-visibility: hidden; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-train-station .odometer-digit .odometer-value { + display: block; + -webkit-transform: translateZ(0); +} +.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-train-station .odometer-digit .odometer-value.odometer-last-value { + position: absolute; +} +.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-train-station.odometer-animating-up .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; +} +.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-train-station.odometer-animating-up.odometer-animating .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-train-station.odometer-animating-down .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-train-station.odometer-animating-down.odometer-animating .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} + +.odometer.odometer-auto-theme, .odometer.odometer-theme-train-station { + font-family: "Economica", sans-serif; +} +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-train-station .odometer-digit { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + -moz-border-radius: 0.1em; + -webkit-border-radius: 0.1em; + -o-border-radius: 0.1em; + -ms-border-radius: 0.1em; + -khtml-border-radius: 0.1em; + border-radius: 0.1em; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #111111), color-stop(35%, #111111), color-stop(55%, #333333), color-stop(55%, #111111), color-stop(100%, #111111)); + background-image: -webkit-linear-gradient(top, #111111 0%, #111111 35%, #333333 55%, #111111 55%, #111111 100%); + background-image: -moz-linear-gradient(top, #111111 0%, #111111 35%, #333333 55%, #111111 55%, #111111 100%); + background-image: -o-linear-gradient(top, #111111 0%, #111111 35%, #333333 55%, #111111 55%, #111111 100%); + background-image: -ms-linear-gradient(top, #111111 0%, #111111 35%, #333333 55%, #111111 55%, #111111 100%); + background-image: linear-gradient(top, #111111 0%, #111111 35%, #333333 55%, #111111 55%, #111111 100%); + background-color: #222222; + padding: 0 0.15em; + color: white; +} +.odometer.odometer-auto-theme .odometer-digit + .odometer-digit, .odometer.odometer-theme-train-station .odometer-digit + .odometer-digit { + margin-left: 0.1em; +} +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-train-station .odometer-digit .odometer-digit-inner { + left: 0.15em; +} diff --git a/widgets/hqwidgets/img/blind.png b/widgets/hqwidgets/img/blind.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ea8c54715c95a51b24bd0dbbba3a5c89802a33 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^8bBPy!3HExiHIx*QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`6_P!Id>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N&5W zr;B4qhV$DS7da0(h`3z5QJ<};G*{!+p~S=q+E0oPJ$|E8`D54n-?h5`_c80)U;k9F z|8lOwnt-OLg)G7$jAySqiq*_}zV}be>BF_@tDEmQ)*gIW z9gF>E&+xBsFR;3=8u$=m)j^g}htH)GSf6j7`IGT0hu`zvaHAkvH$C`cw%P6hd!S{1 V+-s452%!HMJYD@<);T3K0RXP4j5PoN literal 0 HcmV?d00001 diff --git a/widgets/hqwidgets/img/inject-bottom.png b/widgets/hqwidgets/img/inject-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..de0e1fac18a531a3b33149f80ee6720341b82e23 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPggaPDXAnAy2O<1wbLm64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiAh8kfPxHw370~qEv=}#LT=BJwMkFg)(D3Q$0gN_s>q|Kvg}S zE{-7<{>cdoM1TDMZ_h7~-;yLZ=?!DnB(_J%4m`{X+e`x67(~06J_f3sHBj^L5m~Po zaMpc8MjL12lMT{LrDkTcFP>#y>G+k;4Q*AEf$n1P MboFyt=akR{01dKc7ytkO literal 0 HcmV?d00001 diff --git a/widgets/hqwidgets/img/inject-top.png b/widgets/hqwidgets/img/inject-top.png new file mode 100644 index 0000000000000000000000000000000000000000..94a1024e2e319fb636a158412f16052505a1267a GIT binary patch literal 326 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 G^8Wz?r!v_9 literal 0 HcmV?d00001 diff --git a/widgets/hqwidgets/img/noise.png b/widgets/hqwidgets/img/noise.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa0135438826c88a949e7c23e53be417055ef38 GIT binary patch literal 6024 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 C=Z|9m literal 0 HcmV?d00001 diff --git a/widgets/hqwidgets/img/openDoor.png b/widgets/hqwidgets/img/openDoor.png new file mode 100644 index 0000000000000000000000000000000000000000..240e821c155a8b1bc292504a359aad118d879195 GIT binary patch literal 2657 zcmW+&d011|5}$jM8^XOof+UeB#$ZJw5}FzlNOd95e!ZfrgH*T!DAGp$po#+Ao2)QYsL^B(dGR1fPW8G;oy-=A>2+3Z>L(MMFWcr8jI8#xgaa6;ayGrt$ymhGN<}^aPi}{=S>fsS~J&s*xnR_gZz>@(0yw|t7_Q(pVIs( z8{9{VHZ*3aBe-?<;5cNMlIr&J=f+#s!g3)sDUCb4%#}ZeP_T-NCDTBLAZimh z5g8v6vIYkhhP}^fdCtVMe=(dJ62?5qE9)yw;o{(14(lsXQ6vV*2IJtl{km5IJ#1vt z7uOVcYV;(en}*r2d1M~0xw>xnr_6DLROIpHERA#_HEFaO6-$-c`1sMJmRm(|^>eC3 zDMh$X9W9)0?m87+0mk-f@9KUg>B^C5Pz*vEx=Cl&=nBSHb211lSF9|ZuM{lLU;$9! z_fJh1Vr<2;X&|Qw?K?ZDc6O?iD^^MNMSvvFebjhJ`tj%tFi4wIJUQi z;F^yWOR>gA-MmG}NYT$K0aP~+P`Jx#d0pCo9IRC?AbPrQjy?cpxSuuPao6Dt zZJrKL!Ewsi9H&H32}ODr!*gt}+MqiD8hrp`QOZ6BHY%K3g@gI=(<@6Mn)b0w1AgI0 zHc){ewhnuyR;03Qjmmr3{COr>%~TIz~5BBjtozYr3g_}z%RZD9~Q>FysA zHIB%@^!*XGu$*UyWB~8K#wy^VRgpE2@Qcnhw>E-&6vD+9S@ zJfN|SWZ<_9&eh3rZ8yc!*QkG25sTb}3Ot7svj^jE6 zX%tV%w$j5LJyYINBz5z_;b12rK(+Z5BJ)H)qGly0*U6)d@95?tC8@?A@CO-JivD1o z25*+Opfr)bU32;tUZav}SKTPxy~`H^1r1{hPn}xrPlVrN+r!caH%kg<&1w>BQ_G!X zC7rHI;wVEH_$qpXKuv$Q2)o1X$8odN3d9WyiEfduiPUm<-eoGxh*~NLexcLJHi$+L z5*pI3nrlVzfnkg*i6TK)gaa+m`gXdYnKCh7LzsQ#dbqv6G$<`kjQFn@E~Rj`6O&k# zh$}j_F^oloFA3*_V?+dE7+9_+x|~_z7@#=}!XhmvyO;k8r0i*|KAeGT%6{K9B9s~SHfti57;<` z*KHT~6M`W2iZ8aWusLmK^jU%t2#h&!X{47pmd0tXSzN&Ae| z)z!65=!WqdAO(vo>g@#(Yvt-l@lPVzBJfeLC>g52ch1zX_2P_HE-gC7RB2n7p{=0N zu>LkqbAR4}9|^Ll!Z|{E3@BI=7q;LoziJ5&)8uQ5pqmxaq2A(8)szt3c-CBG2M(`< zh-Y!trdoD28GbBoUi9*E_1U(!kN85>3QIa4P6T5;vs#D@UjdL$!O>r@z0yttZU59819Muk{>}A#ui!{@Y;&s}j-+<1q?}726|paG@M~TW{re zpcAh^QCUxZp740r;?qyU{+%S%F#HP_5&?5`oXE~80nwO!Y=Z#2{Ham}lS^;*L5D(6 zN3-DQjSodJ9Vh-B1fUqWV6MKrd;Saza~!b!C{n`(>ktZx%-h?c9z@4J^t0^>^ZmFa zn*B0Xb#HKL&ZprGrQgI>wigh_Js-VTRND0k{!CLat6eS5OCGFCH0-&Dm+_wN@!!sL z!5O;Vs3tH?&wqV>)8S9EhuJHx=I0>3K& zXpYED*j3A$^7pvSsG~LG{>ZwrLCZSh@bK^&r@qgnCQ0vBbP>S}} literal 0 HcmV?d00001 diff --git a/widgets/hqwidgets/img/prev/Prev_hqOdometer.png b/widgets/hqwidgets/img/prev/Prev_hqOdometer.png new file mode 100644 index 0000000000000000000000000000000000000000..df871d4d75c4cb97906835e9a2ce2e7d9b0db526 GIT binary patch literal 3368 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 Ef^#$jApigX literal 0 HcmV?d00001 diff --git a/widgets/hqwidgets/img/prev/Prev_hqwidgetsDimmer.png b/widgets/hqwidgets/img/prev/Prev_hqwidgetsDimmer.png new file mode 100644 index 0000000000000000000000000000000000000000..0e1dc746426452370fd9c174b5d1d0f8818f5c7d GIT binary patch literal 6005 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 literal 0 HcmV?d00001 diff --git a/widgets/hqwidgets/img/prev/Prev_hqwidgetsInTemp.png b/widgets/hqwidgets/img/prev/Prev_hqwidgetsInTemp.png new file mode 100644 index 0000000000000000000000000000000000000000..c9fff0c177c53d3eff4244cbd0f05f29967b4bee GIT binary patch literal 6847 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 literal 0 HcmV?d00001 diff --git a/widgets/hqwidgets/js/hqwidgets.js b/widgets/hqwidgets/js/hqwidgets.js new file mode 100644 index 0000000..fd31039 --- /dev/null +++ b/widgets/hqwidgets/js/hqwidgets.js @@ -0,0 +1,3093 @@ +/* + yunkong2.vis high quality Widget-Set + + version: "1.1.2" + + Copyright 6'2014-2018 bluefox + +*/ +'use strict'; + + +(function ( $ ) { + $.fn.scala = function (options, arg) { + if (typeof options === 'string') { + if (options === 'value') { + if (arg === null || arg === undefined) arg = '0'; + return this.each(function () { + var $this = $(this); + var $input = $this.find('.scalaInput'); + if ($input.val().toString() !== arg.toString()) { + $this.find('.scalaInput').val(arg).trigger('change'); + } + }); + } + return; + } + + function h2rgba (h, a) { + var rgb; + h = h.substring(1,7); + rgb = [ + parseInt(h.substring(0,2), 16), + parseInt(h.substring(2,4), 16), + parseInt(h.substring(4,6), 16) + ]; + + return 'rgba(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ',' + a + ')'; + } + + var settings = $.extend({ + bgColor: '#EEEEEE', + value: 0, + width: 0, + thickness: null, + unit: null, + fontSize: 24, + readOnly: false, + color: '#FFCC00', + alwaysShow: false, + hideNumber: false, + step: 1, + change: function (value) { + console.log('change ' + value); + }, + changing: function (value) {}, + onshow: function (isShow) {}, + onhide: function (isShow) {}, + click: function () { + //console.log('click'); + }, + colorize: function (color, value) { + return h2rgba(color, (value - settings.min) / (settings.max - settings.min) + 0.5) + }, + min: 0, + max: 100, + isComma: false + }, options); + + return this.each(function () { + // Do something to each element here. + var $this = $(this); + if ($this.data('scaled')) return; + $this.data('scaled', true); + $this.wrapInner('

'); + var divW = $this.width(); + var divH = $this.height(); + var divMax = ((divW > divH) ? divW : divH); + + // calculate thickness + if (!settings.width) settings.width = Math.round(divMax + 30) + ''; + if (!settings.thickness) settings.thickness = 1 - (divMax / settings.width); + + $this.prepend(''); + + var $scalaInput = $this.find('.scalaInput'); + var $scalaWrapped = $this.find('.scalaWrapped'); + + if (typeof settings.step === 'string') { + settings.step = parseFloat(settings.step.replace(',', '.') || 1); + } + + var $knobDiv = $scalaInput.knobHQ({ + release: function (v, noAck) { + $knobDiv._mouseDown = false; + + hide('release'); + + if ($knobDiv._pressTimer) { + $knobDiv._pressTimer = null; + setValue($knobDiv._oldValue); + if (settings.click) { + var newVal = settings.click($knobDiv._oldValue); + + if (newVal !== undefined) setValue(newVal); + } + } else { + // remove unit + var val = $scalaInput.val(); + if (settings.unit !== null && val.substring(val.length - settings.unit.length, val.length) === settings.unit) { + val = val.substring(0, val.length - settings.unit.length); + } + if (settings.change/* && $knobDiv._oldValue != val*/) settings.change(val, noAck); + } + }, + cancel: function () { + $knobDiv._mouseDown = false; + hide('cancel'); + // set old value + setValue($knobDiv._oldValue); + + }, + change: function (value) { + if (settings.changing) settings.changing(value); + }, + format: function (v) { + if (settings.digits !== null) v = v.toFixed(settings.digits); + if (settings.isComma && v) v = v.toString().replace('.', ','); + if (settings.unit) v = v + settings.unit; + return v; + }, + displayPrevious: true, + displayInput: !settings.hideNumber, + bgColor: settings.bgColor, + readOnly: settings.readOnly, + fgColor: settings.color, + inputColor: settings.color, + colorize: settings.colorize ? settings.colorize : undefined, + min: settings.min, + max: settings.max, + step: parseFloat(settings.step || 1) + }); + + var w = $knobDiv.width(); + $this.data('$knobDiv', $knobDiv); + + function setValue(value) { + console.log('Restore value ' + value); + setTimeout(function () { + $scalaInput.data('setByUser', true); + $scalaInput.val(value).trigger('change'); + }, 200); + } + + function hide(event){ + if (!settings.alwaysShow && !$knobDiv._mouseEnter && !$knobDiv._mouseDown) { + $knobDiv.hide(); + $scalaWrapped.show(); + if (settings.onhide) settings.onhide(false); + } + //console.log((event || '') + ' (enter: ' + $knobDiv._mouseEnter + ', down: ' + $knobDiv._mouseDown + ')'); + } + function show(event){ + $knobDiv.show(); + if (settings.onshow) settings.onshow(true); + + //console.log((event || '') + ' (enter: ' + $knobDiv._mouseEnter + ', down: ' + $knobDiv._mouseDown + ')'); + } + + function press(event) { + if (!$knobDiv._mouseDown) { + var val = $scalaInput.val(); + if (settings.unit !== null) { + val = val.substring(0, val.length - settings.unit.length); + } + + $knobDiv._oldValue = val; + $knobDiv._mouseDown = true; + $knobDiv._pressTimer = setTimeout(function () { + $knobDiv._pressTimer = null; + }, 300); + //console.log((new Date().getSeconds() + '.' + new Date().getMilliseconds())+ ' ' + (event || '') + ' (enter: ' + $knobDiv._mouseEnter + ', down: ' + $knobDiv._mouseDown + ')'); + show(event); + } + } + function unpress(event) { + $knobDiv._mouseDown = false; + //console.log((new Date().getSeconds() + '.' + new Date().getMilliseconds()) + ' ' + (event || '') + ' (enter: ' + $knobDiv._mouseEnter + ', down: ' + $knobDiv._mouseDown + ')'); + hide(event); + + if ($knobDiv._pressTimer) { + clearTimeout($knobDiv._pressTimer); + } + } + + $knobDiv.css({ + position: 'absolute', + left: '-' + ((w - divW) / 2) + 'px', + top: '-' + ((w - divH) / 2) + 'px', + 'z-index': 2, + cursor: 'pointer', + 'opacity': 0.7 + }).bind('mouseleave',function (e) { + $knobDiv._mouseEnter = false; + hide(e.type); + }).bind('mousedown', function (e) { + press(e.type); + }).bind('mouseup', function (e) { + unpress(e.type); + }).bind('mouseenter', function (e) { + $knobDiv._mouseEnter = true; + show(e.type); + }).bind('touchend', function (e) { + $knobDiv._mouseEnter = false; + unpress(e.type); + }); + if (!settings.alwaysShow) { + $knobDiv.hide(); + } + + $this.bind('mouseenter', function (e) { + $knobDiv._mouseEnter = true; + show(e.type); + }).bind('touchstart', function (e) { + if (e.simulated) { + e.preventDefault(); + return; + } + press(e.type); + var event = $.Event(e.type, {simulated: true, originalEvent: {touches: [{pageX: e.originalEvent.touches[e.originalEvent.touches.length - 1].pageX, pageY: e.originalEvent.touches[e.originalEvent.touches.length - 1].pageY}]}} ); + $knobDiv.find('canvas').trigger(event); + e.preventDefault(); + }).bind('mousedown', function (e) { + if (e.simulated) { + e.preventDefault(); + return; + } + press(e.type); + var event = $.Event(e.type, {simulated: true, pageX: e.pageX, pageY: e.pageY}); + $knobDiv.find('canvas').trigger(event); + e.preventDefault(); + }); + + $scalaInput.bind('focusout', function (e) { + $knobDiv._mouseEnter = false; + hide(e.type) + }).bind('focusin', function (e) { + unpress(e.type); + }).css({ + 'font-size': settings.fontSize, + cursor: 'pointer', + '-webkit-touch-callout': 'none', + '-webkit-user-select': 'none', + '-khtml-user-select': 'none', + '-moz-user-select': 'none', + '-ms-user-select': 'none', + 'user-select': 'none' + }).prop('readonly', true); + }); + }; + + $.fn.shineCheckbox = function (options, arg) { + if (typeof options === 'string') { + if (options === 'value') { + return this.each(function () { + var $this = $(this); + var f = parseFloat(arg); + var val; + if (f.toString() == arg) { + val = f > 0; + } else { + val = arg === 'true' || arg === true; + } + if (val != $this.prop('checked')) { + $this.data('update', true); + $this.prop('checked', val).trigger('change'); + } + }); + } + return; + } + + if (!options) options = {}; + + var settings = { + backgroundCheckbox: '',//-webkit-linear-gradient(top, #fe9810 0%,#e75400 61%,#e75400 91%,#ea8810 100%)", + backgroundButton: '',//"-webkit-linear-gradient(top, #efeeee 0%,#bcb9b8 100%);", + checkboxSize: options.checkboxSize || 'big', + checkboxColor: options.checkboxColor || 'grey', + checkboxColorOn: options.checkboxColorOn || options.checkboxColor || 'orange', + readOnly: options.readOnly || false + }; + + return this.each(function () { + // Do something to each element here. + var $this = $(this); + if ($this.data('shineCheckbox')) return; + $this.data('shineCheckbox', true); + $this.hide(); + var checkboxStyle = 'background: ' + settings.backgroundCheckbox; + var buttonStyle = 'background: ' + settings.backgroundButton; + var color = $this.prop('checked') ? settings.checkboxColorOn : settings.checkboxColor; + + $this.wrap('
'); + $this.change(function () { + //console.log('change ' + $this.prop('checked')); + var color; + if ($this.prop('checked')) { + color = settings.checkboxColorOn; + setTimeout(function () { + $this.parent().addClass('checkbox-' + settings.checkboxSize + '-' + settings.checkboxColorOn + '-button-active'); + $this.parent().parent().removeClass('checkbox-' + settings.checkboxSize + '-' + settings.checkboxColor + '-wrap').addClass('checkbox-' + settings.checkboxSize + '-' + settings.checkboxColorOn + '-wrap'); + }, 100); + } else { + color = settings.checkboxColor; + $this.parent().removeClass('checkbox-' + settings.checkboxSize + '-' + settings.checkboxColorOn + '-button-active'); + $this.parent().parent().removeClass('checkbox-' + settings.checkboxSize + '-' + settings.checkboxColorOn + '-wrap').addClass('checkbox-' + settings.checkboxSize + '-' + settings.checkboxColor + '-wrap'); + } + }); + + if (!settings.readOnly) { + $this.parent().parent().click(function () { + //console.log($this.prop('checked')); + $this.prop('checked', !$this.prop('checked')).trigger('change'); + }); + } + + if ($this.prop('checked')) $this.parent().addClass('checkbox-' + settings.checkboxSize + '-' + color + '-button-active'); + }); + }; + + // possible options: waves wobble tada swing shake rubberBand pulse flash bounce + $.fn.animateDiv = function (effect, options) { + return this.each(function () { + // Do something to each element here. + var $this = $(this); + options = options || {}; + effect = effect || 'waves'; + + if (options.speed != 1 && options.speed != 2 && options.speed != 2) options.speed = 1; + + if (effect === 'waves') { + var borderThickness = (options.tickness || 3) - 1; + var border = ';border: ' + borderThickness + 'px ' + (options.style || 'solid') +' ' + (options.color || 'grey'); + + var text = '
'; + $this.prepend(text); + $this.prepend(text.replace('wave1', 'wave2')); + + $this.find('.wave1').show().addClass('animated' + options.speed + 's zoomIn1'); + $this.find('.wave2').show().addClass('animated' + options.speed + 's zoomIn2'); + + setTimeout(function () { + $this.find('.wave1').remove(); + $this.find('.wave2').remove(); + }, 2050); + } else { + $this.addClass('animated' + options.speed + 's ' + effect); + setTimeout(function () { + $this.removeClass('animated' + options.speed + 's ' + effect); + }, 2100); + } + }); + }; + + $.fn.popupShow = function ($div, options, callback) { + + if (typeof options === 'function') { + callback = options; + options = null; + } + options = options || {}; + options.effect = options.effect || 'zoomIn'; + options.speed = options.speed || '05'; + options.relative = options.relative || false; + + return this.each(function () { + // Do something to each element here. + var $this = $(this); + if (!$div) { + console.log('no div'); + return; + } + var offset = $this.position(); + var eTop = options.relative ? 0 : offset.top; //get the offset top of the element + var eLeft = options.relative ? 0 : offset.left; //get the offset top of the element + + var dh = $div.css({opacity: 0}).show().height(); + var dw = $div.width(); + // calculate center + //var x = $this.width(); + //var y = $this.height(); + var zindex = $div.css('z-index'); + zindex = options.zindex || ((zindex === 'auto') ? 1 : (zindex || 0) + 1); + $div.css({position: 'absolute', left: eLeft + ($this.width() - dw) / 2, top: eTop + ($this.height() - dh) / 2, 'z-index': zindex}); + setTimeout(function () { + $div.addClass('animated' + options.speed + 's ' + options.effect); + }, 0); + setTimeout(function () { + $div.removeClass('animated' + options.speed + 's ' + options.effect).css({opacity: 1}); + if (callback) callback(); + }, (options.speed === '05') ? 550 : parseInt(options.speed, 10) * 1000 + 50); + }); + }; + $.fn.popupHide = function ($div, options, callback) { + if (typeof $div === 'function') { + callback = $div; + $div = null; + } + if (typeof options === 'function') { + callback = options; + options = null; + } + options = options || {}; + options.effect = options.effect || 'zoomOut'; + options.speed = options.speed || '05'; + + return this.each(function () { + // Do something to each element here. + if (!$div) { + $div = $(this); + } + setTimeout(function () { + $div.addClass('animated' + options.speed + 's ' + options.effect); + }, 0); + setTimeout(function () { + $div.removeClass('animated' + options.speed + 's ' + options.effect); + $div.hide(); + if (callback) callback(); + }, (options.speed === '05') ? 550 : parseInt(options.speed, 10) * 1000 + 50); + }); + }; + + $.fn.makeSlider = function (options, onChange, onIdle) { + if (options === 'hide') { + return this.each(function () { + var $this = $(this); + var timer = $this.data('hideTimer'); + if (timer) clearTimeout(timer); + $this.data('hideTimer', null); + $this.hide(); + }); + } else if (options === 'show') { + return this.each(function () { + var $this = $(this).show(); + var hideTimer = $this.data('hideTimer'); + + options = $this.data('options'); + + if (onChange !== undefined) { + if (options.invert) onChange = options.max - onChange + options.min; + $this.slider('value', onChange); + } + + if (hideTimer) clearTimeout(hideTimer); + + if (options.timeout) { + $this.data('hideTimer', setTimeout(function () { + $this.data('hideTimer', null); + if (options.onIdle) options.onIdle(); + }, options.timeout)); + } + }); + } + if (typeof options === 'string') { + if (options === 'restart') { + return this.each(function () { + var $this = $(this); + var options = $this.data('options'); + if (options.timeout) { + $this.data('hideTimer', setTimeout(function () { + if (options.onIdle) options.onIdle(); + }, options.timeout)); + } + }); + } + return; + } + + if (typeof options === 'function') { + onIdle = onChange; + onChange = options; + options = null; + } + + options = options || {}; + + options.timeout = (options.timeout === undefined) ? 2000 : options.timeout; + options.min = (options.min === undefined) ? 0 : options.min; + options.max = (options.max === undefined) ? 100 : options.max; + options.value = (options.value === undefined) ? options.max : options.value; + options.show = (options.show === undefined) ? true : options.show; + options.onIdle = onIdle; + options.onChange = onChange; + + if (options.invert) { + options.value = options.max - options.value + options.min; + } + + return this.each(function () { + var $this = $(this); + + if (options.timeout && options.show) { + $this.data('hideTimer', setTimeout(function () { + $this.data('hideTimer', null); + if (onIdle) onIdle(); + }, options.timeout)); + } + + $this.data('options', options); + + $this.slider({ + orientation: "vertical", + range: "max", + min: options.min, + max: options.max, + value: options.value, + start: function () { + var timer = $this.data('hideTimer'); + if (timer) { + clearTimeout(timer); + $this.data('hideTimer', null); + } + }, + stop: function (event, ui) { + var hideTimer = $this.data('hideTimer'); + + if (hideTimer) clearTimeout(hideTimer); + + if (options.onChange) { + var val = ui.value; + if (options.invert) { + val = options.max - ui.value + options.min; + } + + options.onChange(val); + } + + if (options.timeout) { + $this.data('hideTimer', setTimeout(function () { + $this.data('hideTimer', null); + if (options.onIdle) options.onIdle(); + }, options.timeout)); + } + } + }); + + $this.find('.ui-slider-range').removeClass("ui-widget-header").addClass('hq-blind-blind').css({'background-position': '0% 100%'}); + }); + }; + + $.fn.batteryIndicator = function (options, args) { + if (typeof options === 'string') { + if (options === 'show') { + return this.each(function () { + var $this = $(this); + if (args === undefined) args = true; + + if (args) { + $this.find('.vis-hq-battery').show(); + } else { + $this.find('.vis-hq-battery').hide(); + } + }); + } else + if (options === 'hide') { + return this.each(function () { + $(this).find('.vis-hq-battery').hide(); + }); + } + return; + } + + options = options || {}; + options.color = options.color || '#FF5555'; + options.angle = (options.angle !== undefined) ? options.angle : -90; + options.size = options.size || 32; + options.title = options.title || ''; + + return this.each(function () { + var $this = $(this); + + $this.data('options', options); + if ($this.find('.vis-hq-battery').length) return; + + $this.append('
' + + '' + + '' + + '' + + '
'); + if (!options.show) { + $this.find('.vis-hq-battery').hide(); + } + }); + }; + + $.fn.popupDialog = function (options) { + return this.each(function () { + var $this = $(this); + var $dialog; + // timeout: data.dialog_timeout, + + var dialog = $this.data('dialog'); + if (!dialog) { + if (typeof options === 'string') { + console.log('Show prior init'); + return; + } + var text = ''; + $this.append(text); + $dialog = $this.find('.vis-hq-dialog'); + + $this.data('dialog', $dialog[0]); + + var dialogButtons = [ + { + text: _('Ok'), + click: function () { + $dialog.dialog('close'); + }, + id: 'ok' + } + ]; + + dialogButtons[_('Ok')] = function () { + $dialog.dialog('close'); + }; + if (options.timeout) { + dialogButtons.unshift( { + id: 'donthide', + text: false, + icons: {primary: 'ui-icon-pin-w'}, + click: function () { + $dialog.data('no-timeout', !$dialog.data('no-timeout')); + if ($dialog.data('no-timeout')) { + $(this).parent().find('#donthide').addClass('ui-state-error').button({ + icons: {primary: 'ui-icon-pin-s'} + }); + var timeout = $dialog.data('timeout'); + if (timeout) { + clearTimeout(timeout); + $dialog.data('timeout', null); + } + } else { + $(this).parent().find('#donthide').removeClass('ui-state-error').button({ + icons: {primary: 'ui-icon-pin-w'} + }); + $dialog.data('timeout', setTimeout(function () { + $dialog.dialog('close'); + }, data.timeout)); + } + } + }); + } + $dialog.dialog({ + autoOpen: options.open || false, + width: options.width || 800, + height: options.height || 400, + modal: options.modal === undefined ? true : !!options.modal, + title: options.title || _('Chart'), + show: { + effect: options.effect, + duration: 500 + }, + open: function (event, ui) { + $dialog.height(options.height || 400); + $(this).parent().css('top', ($(window).height() - $(this).parent().height()) / 2); + + $(this).parent().find('#donthide').css({width: 37, height: 37}); + $(this).parent().find("#ok").focus(); + if (options.effect) { + setTimeout(function () { + $dialog.html(options.content || ''); + }, 500); + } else { + $dialog.html(options.content || ''); + } + if (options.timeout && !$dialog.data('no-timeout')) { + $dialog.data('timeout', setTimeout(function () { + $dialog.dialog('close'); + }, options.timeout)); + } + //$('[aria-describedby="dialog_delete"]').css('z-index', 11002); + //$('.ui-widget-overlay').css('z-index', 1001); + }, + close: function () { + $dialog.html(''); + var timeout = $dialog.data('timeout'); + if (timeout) { + clearTimeout(timeout); + $dialog.data('timeout', null); + } + }, + buttons: dialogButtons + }); + $dialog.data('data', options); + } else { + $dialog = $(dialog); + } + var data = $dialog.data('data'); + + if (typeof options === 'string') { + switch (options) { + case 'show': + $dialog.dialog('open'); + break; + + case 'hide': + $dialog.dialog('close'); + break; + + default: + console.log('Unknown command ' + options); + break; + } + } + }); + }; +}(jQuery)); + +// Add words for bars +if (vis.editMode) { + $.extend(true, systemDictionary, { + "circleWidth": {"en": "Сircle width", "de": "Kreisbreite", "ru": "Ширина дуги"}, + "showValue": {"en": "Show value", "de": "Wert anzeigen", "ru": "Показать значение"}, + "alwaysShow": {"en": "Always show circle", "de": "Kreis immer zeigen", "ru": "Показывать круг всегда"}, + "iconName": {"en": "Icon", "de": "Kleinbild", "ru": "Миниатюра"}, + "iconOn": {"en": "Active icon", "de": "Aktivbild", "ru": "Активная миниатюра"}, + "btIconWidth": {"en": "Icon width", "de": "Bildbreite", "ru": "Ширина миниатюры"}, + "offsetAuto": {"en": "Auto positioning", "de": "Positionieren(Auto)", "ru": "Автоматическое позиционирование"}, + "leftOffset": {"en": "Left offset", "de": "Offset links", "ru": "Сдвиг слева"}, + "topOffset": {"en": "Top offset", "de": "Offset von Oben", "ru": "Сдвиг сверху"}, + "group_leftRight": {"en": "Descriptions", "de": "Beschreibungen", "ru": "Подписи"}, + "hoursLastAction": {"en": "Hide last action after(hrs)", "de": "Ausblenden letze Anderungszeit nach(Std)", "ru": "Скрыть последнее изменение(часов)"}, + "timeAsInterval": {"en": "Time as interval", "de": "Zeit als Intervall", "ru": "Время, как интервал"}, + "descriptionLeft": {"en": "Description (left)", "de": "Beschreibung (links)", "ru": "Подпись (слева)"}, + "descriptionLeftDisabled": {"en": "No description (left)", "de": "Keine Beschreibung (links)", "ru": "Без подписи (слева)"}, + "infoLeftFontSize": {"en": "Left font size", "de": "Schriftgrosse links", "ru": "Размер шрифта слева"}, + "infoRight": {"en": "Description (right)", "de": "Beschreibung (rechts)", "ru": "Подпись (справа)"}, + "infoFontRightSize": {"en": "Right font size", "de": "Schriftgrosse rechts", "ru": "Размер шрифта справа"}, + "group_styles": {"en": "Styles", "de": "Stil", "ru": "Стили"}, + "styleNormal": {"en": "Normal", "de": "Normal", "ru": "Нормальный"}, + "styleActive": {"en": "Active", "de": "Aktiv", "ru": "Активный"}, + "usejQueryStyle": {"en": "Use jQuery Styles", "de": "jQuery Stil anwenden", "ru": "Применить jQuery стили"}, + "changeEffect": {"en": "Change effect", "de": "Anderungseffekt", "ru": "Эффект при изменении"}, + "waveColor": {"en": "Wave color", "de": "Wellenfarbe", "ru": "Цвет волн"}, + "testActive": {"en": "Test", "de": "Test", "ru": "Тест"}, + "group_value": {"en": "Value", "de": "Wert", "ru": "Значение"}, + "unit": {"en": "Unit", "de": "Einheit", "ru": "Единицы"}, + "readOnly": {"en": "Read only", "de": "Nur lesend", "ru": "Не изменять"}, + "group_center": {"en": "Center", "de": "Zentrum", "ru": "Центр"}, + "caption": {"en": "Caption", "de": "Beschriftung", "ru": "Подпись"}, + "captionOn": {"en": "Caption active", "de": "Beschriftung bei aktiv", "ru": "Подпись когда активно"}, + "hideNumber": {"en": "Hide number", "de": "Nummer ausblenden", "ru": "Скрыть число"}, + "group_arc": {"en": "Arc", "de": "Bogen", "ru": "Дуга"}, + "angleOffset": {"en": "Angle offset", "de": "Winkeloffset", "ru": "Сдвиг дуги"}, + "angleArc": {"en": "Angle arc", "de": "Bogenwinkel", "ru": "Угол дуги"}, + "displayPrevious": {"en": "Display previous", "de": "Letztes Wert zeigen", "ru": "Показывать предыдущее значение"}, + "cursor": {"en": "Cursor", "de": "Griff", "ru": "Ручка"}, + "thickness": {"en": "Thickness", "de": "Dicke", "ru": "Толщина"}, + "bgcolor": {"en": "Background color", "de": "Hintergrundfarbe", "ru": "Цвет фона"}, + "linecap": {"en": "Line cap", "de": "Linienende", "ru": "Округлое окончание"}, + "anticlockwise": {"en": "Anticlockwise", "de": "Gegenuhrzeigersinn", "ru": "Против часовой стрелки"}, + "oid-battery": {"en": "Battery object ID", "de": "Battery ObjektID", "ru": "ID батарейного индикатора"}, + "oid-signal": {"en": "Signal object ID", "de": "Signal ObjektID", "ru": "ID качества сигнала"}, + "oid-humidity": {"en": "Humidity ID", "de": "Luftfeuchtigkeit ID", "ru": "ID влажности"}, + "oid-drive": {"en": "Valve ID", "de": "Ventil ID", "ru": "ID вентиля"}, + "oid-actual": {"en": "Actual temperature ID", "de": "Ist ID", "ru": "ID актуальной температуры"}, + "group_chart": {"en": "Chart", "de": "Grafik", "ru": "График"}, + "dialog_effect": {"en": "Show effect", "de": "Anzeigeeffekt", "ru": "Эффект открытия"}, + "dialog_timeout": {"en": "Hide timeout(ms)", "de": "Zumachen nach(ms)", "ru": "Закрыть после(мс)"}, + "dialog_open": {"en": "Test open", "de": "Testen", "ru": "Тест"}, + "border_width": {"en": "Border width", "de": "Rahmenbreite", "ru": "Ширина рамы"}, + "slide_count": {"en": "Slides count", "de": "Flügelanzahl", "ru": "Кол-во створок"}, + "hide_timeout": {"en": "Timeout for hide", "de": "Timeout für ", "ru": "Интервал для скрытия"}, + "group_slides": {"en": "Slides", "de": "Flügel", "ru": "Створка"}, + "slide_type": {"en": "Slide type", "de": "Flügeltyp", "ru": "Тип створки"}, + "oid-slide-sensor": {"en": "Slide sensor", "de": "Fensterblatt-Sensor", "ru": "Сенсор на створке"}, + "oid-slide-sensor-lowbat": {"en": "Slide sensor lowbat", "de": "FB-Sensor lowbat", "ru": "Сенсор на створке (lowbat)"}, + "oid-slide-handle": {"en": "Slide handle", "de": "Griff-Sensor", "ru": "Сенсор на ручке"}, + "oid-slide-handle-lowbat": {"en": "Slide handle lowbat", "de": "Griff-Sensor lowbat", "ru": "Сенсор на ручке (lowbat)"}, + "door_type": {"en": "Door swing", "de": "Türtyp", "ru": "Тип двери"}, + "noAnimate": {"en": "No animation", "de": "Keine Animation", "ru": "Не анимировать"}, + "popupHorizontalPos": {"en": "Horizontal popup position", "de": "Horizontale PopUp Position", "ru": "Горизонтальное положение"}, + "popupVerticalPos": {"en": "Vertical popup position", "de": "Vertikale PopUp Position", "ru": "Вертикальное положение"}, + "infoColor": {"en": "Text color", "de": "Textfarbe", "ru": "Цвет текста"}, + "infoBackground": {"en": "Background", "de": "Hintergrund", "ru": "Цвет фона"}, + "midTextColor": {"en": "Middle text color", "de": "Textfarbe Mitte", "ru": "Цвет текста в середине"}, + "pushButton": {"en": "Push-Button", "de": "Taster", "ru": "Кнопка"}, + "big": {"en": "big", "de": "groß", "ru": "большой"}, + "small": {"en": "small", "de": "klein", "ru": "маленький"}, + "orange": {"en": "orange", "de": "orange", "ru": "оранжевый"}, + "blue": {"en": "blue", "de": "blau", "ru": "синий"}, + "green": {"en": "green", "de": "grün", "ru": "зелёный"}, + "grey": {"en": "grey", "de": "grau", "ru": "серый"}, + "show_value": {"en": "Show value", "de": "Wert anzeigen", "ru": "Показывать значение"}, + "staticValue": {"en": "Static value", "de": "Statisches Wert", "ru": "Статичное значение"}, + "staticValue_tooltip": { + "en": "Static value used if no Object ID set", + "de": "Statisches Wert wird nur dann verwendet,\x0Afalls keine ObjektID gesetzt ist", + "ru": "Статичное значение используется если не задан ID объекта" + }, + "checkboxSize": {"en": "Size", "de": "Größe", "ru": "Размер"}, + "checkboxColor": {"en": "Color by OFF", "de": "Farbe bei AUS", "ru": "Цвет при 0"}, + "checkboxColorOn": {"en": "Color by ON", "de": "Farbe bei ON", "ru": "Цвет при 1"}, + "group_style": {"en": "Style", "de": "Still", "ru": "Стиль"}, + "oid-open": {"en": "Object ID Open", "de": "Objekt-ID Aufmachen", "ru": "Полностью открыть ID"}, + "group_image": {"en": "Images", "de": "Bilder", "ru": "Кнопки"}, + "closedIcon": {"en": "Icon-Closed", "de": "Bild für Zu", "ru": "Картинка 'Закрыть'"}, + "openedIcon": {"en": "Icon-Opened", "de": "Bild für Auf", "ru": "Картинка 'Открыть'"}, + "group_popup": {"en": "Popup", "de": "Popup", "ru": "Popup"}, + "popupRadius": {"en": "Popup radius", "de": "Popup-Radius", "ru": "Popup радиус"}, + "buttonRadius": {"en": "Buttons radius", "de": "Knopfe-Radius", "ru": "Радиус кнопок"}, + "closeIcon": {"en": "Close-Icon", "de": "Zu-Bild", "ru": "Закрыть-Картинка"}, + "closeValue": {"en": "Close-Value", "de": "Zu-Wert", "ru": "Закрыть-Значение"}, + "closeStyle": {"en": "Close-Style", "de": "Zu-Still", "ru": "Закрыть-Стиль"}, + "openIcon": {"en": "Open Lock-Icon", "de": "Schloss Auf-Bild", "ru": "Открыть замок-Картинка"}, + "openValue": {"en": "Open Lock-Value", "de": "Schloss Auf-Wert", "ru": "Открыть замок-Значение"}, + "openStyle": {"en": "Open Lock-Style", "de": "Schloss Auf-Still", "ru": "Открыть замок-Стиль"}, + "openDoorIcon": {"en": "Open Door-Icon", "de": "Tür Auf-Bild", "ru": "Открыть дверь-Картинка"}, + "openDoorValue": {"en": "Open Door-Value", "de": "Tür Auf-Wert", "ru": "Открыть дверь-Значение"}, + "openDoorStyle": {"en": "Open Door-Style", "de": "Tür Auf-Still", "ru": "Открыть дверь-Стиль"}, + "showTimeout": {"en": "Popup timeout", "de": "Popup-Timeout", "ru": "Popup таймаут"}, + "val_false": {"en": "Off value", "de": "Aus-Wert", "ru": "Выкл.-Значение"}, + "val_true": {"en": "On value", "de": "An-Wert", "ru": "Вкл.-Значение"}, + "invert": {"en": "Invert", "de": "Invertieren", "ru": "Инвертировать"}, + "infoLeftPaddingLeft": {"en": "Left padding (left)", "de": "Linker Abstand (Links)", "ru": "Отступ слева (левый текст)"}, + "infoLeftPaddingRight": {"en": "Right padding (left", "de": "Rechter Abstand (Links)", "ru": "Отступ справа (левый текст)"}, + "infoRightPaddingLeft": {"en": "Left padding (right)", "de": "Linker Abstand (Rechts)", "ru": "Отступ слева (правый текст)"}, + "infoRightPaddingRight": {"en": "Right padding (right)", "de": "Rechter Abstand (Rechts)", "ru": "Отступ справа (правый текст)"}, + "valveBinary": {"en": "Valve only On/Off", "de": "Ventil nur An/Aus", "ru": "Вентиль только Откр/Закр"} + }); +} + +$.extend(true, systemDictionary, { + "just now": {"en": "just now", "de": "gerade jetzt", "ru": "только что"}, + "for %s min.": {"en": "for %s min.", "de": "vor %s Min.", "ru": "%s мин. назад"}, + // plural hours + "forHours": { + "en": "for %s hrs. and %s min.", + "de": "vor %s St. und %s Min.", + "ru": "%s часов и %s мин. назад" + }, + // singular hour + "for1Hour": { + "en": "for %s hr. and %s min.", + "de": "vor %s St. und %s Min.", + "ru": "%s час и %s мин. назад" + }, + // 2-4 hour + "for2-4Hours": { + "en": "for %s hr. and %s min.", + "de": "vor %s St. und %s Min.", + "ru": "%s часа и %s мин. назад" + }, + "yesterday": {"en": "yesterday", "de": "gestern", "ru": "вчера"}, + "for %s hours": {"en": "for %s hours", "de": "vor %s Stunden", "ru": "%s ч. назад"}, + "Chart": {"en": "Chart", "de": "Grafik", "ru": "График"}, + "opened": {"en": "opened", "de": "auf", "ru": "откр."}, + "closed": {"en": "closed", "de": "zu", "ru": "закр."} +}); +// widget can has following parts: +// left info (descriptionLeft) +// right info (additional info) +// working/cancel icon +// center icon +// main form +//
+//
+//
+//
+//
+ +vis.binds.hqwidgets = { + version: "1.1.2", + contextEnabled: true, + zindex: [], + preventDefault: function (e) { + e.preventDefault(); + }, + contextMenu: function (isEnable) { + if (isEnable && !vis.binds.hqwidgets.contextEnabled) { + vis.binds.hqwidgets.contextEnabled = true; + document.removeEventListener('contextmenu', vis.binds.hqwidgets.preventDefault, false); + } + if (!isEnable && vis.binds.hqwidgets.contextEnabled) { + vis.binds.hqwidgets.contextEnabled = false; + document.addEventListener('contextmenu', vis.binds.hqwidgets.preventDefault, false); + } + }, + showVersion: function () { + if (vis.binds.hqwidgets.version) { + console.log('Version vis-hqwidgets: ' + vis.binds.hqwidgets.version); + vis.binds.hqwidgets.version = null; + } + }, + getTimeInterval: function (oldTime, hoursToShow) { + // if less than 2000.01.01 00:00:00 + if (oldTime < 946681200000) oldTime = oldTime * 1000; + + var result = ''; + + var newTime = new Date (); + + if (!oldTime) return ''; + if (typeof oldTime === 'string') { + oldTime = new Date(oldTime); + } else { + if (typeof oldTime === 'number') { + oldTime = new Date(oldTime); + } + } + + var seconds = (newTime.getTime() - oldTime.getTime ()) / 1000; + + if (hoursToShow && (seconds / 3600) > hoursToShow) return ''; + + if (seconds < 60) { + result = _('just now'); + } else + if (seconds <= 3600) { + result = _('for %s min.', Math.floor(seconds / 60)); + } + else + if (seconds <= 3600 * 24) { // between 1 und 24 hours + var hrs = Math.floor(seconds / 3600); + if (hrs === 1 || hrs === 21) { + result = _('for1Hour', hrs, (Math.floor(seconds / 60) % 60)); + } else if (hrs >= 2 && hrs <= 4) { + result = _('for2-4Hours', hrs, (Math.floor(seconds / 60) % 60)); + } else { + result = _('forHours', hrs, (Math.floor(seconds / 60) % 60)); + } + } + else + if (seconds > 3600 * 24 && seconds <= 3600 * 48) { + result = _('yesterday'); + } + else + if (seconds > 3600 * 48) { // over 2 days + result = _('for %s hours', Math.floor(seconds / 3600)); + } + + return result; + }, + button: { + showRightInfo: function ($div, value) { + var data = $div.data('data'); + + var time = null; + var timer = null; + if (data.hoursLastAction) { + // show time interval. It must be updated every minute + if (data.timeAsInterval) { + time = vis.binds.hqwidgets.getTimeInterval(data.lc, data.hoursLastAction); + $div.find('.vis-hq-time').html(time); + if (!vis.editMode) { + timer = $div.data('lastTimer'); + if (!timer) { + timer = setInterval(function () { + var time = vis.binds.hqwidgets.getTimeInterval(data.lc, data.hoursLastAction); + $div.find('.vis-hq-time').html(time); + + if (time && $div.find('.vis-hq-time').text()){ + $div.find('.vis-hq-rightinfo').show(); + } else { + $div.find('.vis-hq-rightinfo').hide(); + } + }, 60000); + + $div.data('lastTimer', timer); + } + } + + } else { + // Show static date + time = vis.binds.basic.formatDate(data.lc, data.format_date); + $div.find('.vis-hq-time').html(time); + } + } + + // Kill timer if not required + if (!timer) { + var t = $div.data('lastTimer'); + if (t) clearTimeout(t); + } + + // Set number value + var text = null; + if (data.wType === 'number' && data.oid) { + var html = ((value === undefined || value === null) ? data.min : value) + ((data.unit === undefined) ? '' : data.unit); + if (data.drive !== undefined) { + html += '
' + data.drive + ''; + if (!data.valveBinary) html += '%'; + } + text = $div.find('.vis-hq-rightinfo-text').html(html); + } + + // Hide right info if empty + if (data.infoRight || time || (text && text.text())) { + $div.find('.vis-hq-rightinfo').show(); + } else { + $div.find('.vis-hq-rightinfo').hide(); + } + + }, + showCenterInfo: function ($div, isHide, reInit) { + var data = $div.data('data'); + if (!data) return; + + var $c = $div.find('.vis-hq-centerinfo'); + if (reInit || data.humidity !== undefined || data.actual !== undefined) { + if (isHide) { + $c.hide(); + $div.find('.vis-hq-middle').css('opacity', 1); + } else { + if (!$div.is(':visible')) { + if (!data.showCenterInfo) { + data.showCenterInfo = setTimeout(function () { + data.showCenterInfo = null; + vis.binds.hqwidgets.button.showCenterInfo($div, isHide, reInit); + }, 1000); + } + return; + } + + if (reInit || !$c.length) { + $c.remove(); + var text = ''; + + if (data.actual !== undefined) { + text += ''; + } + if (data.humidity !== undefined) { + text += ''; + } + + text += '
' + ((data.unit === undefined) ? '' : data.unit) + '
%
'; + $div.find('.vis-hq-main').prepend(text); + $c = $div.find('.vis-hq-centerinfo'); + } else { + $c.show(); + } + $div.find('.vis-hq-middle').css('opacity', 0.7); + if (data.actual !== undefined && data.actual !== null) { + if (typeof data.actual !== 'number') data.actual = parseFloat(data.actual) || 0; + $div.find('.vis-hq-actual').html((data.digits !== null) ? (data.actual || 0).toFixed(data.digits) : (data.actual || 0)); + } + + if (data.humidity !== undefined && data.humidity !== null) { + if (typeof data.humidity !== 'number') data.humidity = parseFloat(data.humidity) || 0; + $div.find('.vis-hq-humidity').html(Math.round(data.humidity || 0)); + } + + var $main = $div.find('.vis-hq-main'); + if ($c.length) { + $c.css({ + top: ($main.height() - $c.height()) / 2, + left: ($main.width() - $c.width()) / 2 + }); + } + } + } else { + $c.hide(); + } + }, + centerImage: function ($div, data, $img) { + // find the right position for image and caption in the middle + var $main = $div.find('.vis-hq-main'); + if (!$img) $img = $div.find('.vis-hq-icon-img'); + + if (data.offsetAuto) { + if (!$div.is(':visible')) { + if (!data.centerImage) { + data.centerImage = setTimeout(function () { + data.centerImage = null; + vis.binds.hqwidgets.button.centerImage($div, data, $img); + }, 1000); + } + } else { + var $middle = $div.find('.vis-hq-table'); + $middle.css({ + left: ($main.width() - $middle.width()) / 2, + top: ($main.height() - $middle.height()) / 2 + }); + $img.load(function () { + var $middle = $div.find('.vis-hq-table'); + $middle.css({ + left: ($main.width() - $middle.width()) / 2, + top: ($main.height() - $middle.height()) / 2 + }); + }); + } + } + }, + // Calculate state of button + changeState: function ($div, isInit, isForce, isOwn) { + var data = $div.data('data'); + if (!data) return; + + var value = (data.tempValue !== undefined) ? data.tempValue : data.value; + + if (!isForce && data.oldValue !== undefined && data.oldValue == value && !data.ack) return; + + if (data.wType === 'number') { + value = parseFloat((value || 0).toString().replace(',', '.')); + } + data.oldValue = value; + + if (data.temperature) { + data.state = 'normal'; + } else if (value == data.min) { + data.state = 'normal'; + } else if (value == data.max) { + data.state = 'active'; + } else if (data.max && + (value === null || + value === '' || + value === undefined || + value === 'false' || + value === false)) { + data.state = 'normal'; + } else { + if (data.wType === 'number') { + if (data.max) { + if (value > data.min) { + data.state = 'active'; + } else { + data.state = 'normal'; + } + } else if (value) { + data.state = 'active'; + } else { + data.state = 'normal'; + } + } else { + if (data.max) { + if (value == data.max) { + data.state = 'active'; + } else { + data.state = 'normal'; + } + } else if (value) { + data.state = 'active'; + } else { + data.state = 'normal'; + } + } + } + + if (vis.editMode && data.testActive) { + data.state = (data.state === 'normal') ? 'active' : 'normal'; + } + + if (value !== null && value !== undefined) { + $div.find('.vis-hq-nodata').remove(); + } + + switch (data.state) { + case 'normal': + $('#' + data.wid + ' .vis-hq-main') + .removeClass(data.styleActive) + .addClass(data.styleNormal); + + if (data.iconName || data.iconOn) { + var $img = $div.find('.vis-hq-icon-img'); + + if ($img.attr('src') !== (data.iconName || '')) { + $img.attr('src', (data.iconName || '')); + vis.binds.hqwidgets.button.centerImage($div, data, $img); + } + } + if (data.captionOn) { + $div.find('.vis-hq-text-caption').html(data.caption || ''); + } + break; + case 'active': + $('#' + data.wid + ' .vis-hq-main') + .removeClass(data.styleNormal) + .addClass(data.styleActive); + + if (data.iconName || data.iconOn) { + var $img = $div.find('.vis-hq-icon-img'); + + if ($img.attr('src') !== (data.iconOn || data.iconName)) { + $img.attr('src', (data.iconOn || data.iconName)); + vis.binds.hqwidgets.button.centerImage($div, data, $img); + } + } + if (data.captionOn) { + $div.find('.vis-hq-text-caption').html(data.captionOn); + } + break; + } + if (data.digits !== null && value !== null && value !== undefined) { + if (typeof value !== 'number') value = parseFloat(value) || 0; + value = value.toFixed(data.digits); + } + if (data.is_comma && value) value = value.toString().replace('.', ','); + + vis.binds.hqwidgets.button.showRightInfo($div, value); + + if ((!data.ack && !data['oid-working']) || (data['oid-working'] && data.working)) { + $div.find('.vis-hq-working').show(); + } else { + $div.find('.vis-hq-working').hide(); + } + + if (data['oid-battery']) $div.batteryIndicator('show', data.battery || false); + + if (data['oid-signal']) { + $div.find('.vis-hq-signal').html(data.signal); + } + + if (data['oid-humidity']) { + var $h = $div.find('.vis-hq-humidity'); + if (!$h.length) { + vis.binds.hqwidgets.button.showCenterInfo($div, false, true); + } else { + $h.html(Math.round(data.humidity || 0)); + } + } + + if (data['oid-actual']) { + var $a = $div.find('.vis-hq-actual'); + if (!$a.length) { + vis.binds.hqwidgets.button.showCenterInfo($div, false, true); + } else { + if (typeof data.actual !== 'number') data.actual = parseFloat(data.actual) || 0; + $a.html((data.digits !== null) ? (data.actual || 0).toFixed(data.digits) : (data.actual || 0)); + } + } + + if (data['oid-drive']) { + $div.find('.vis-hq-drive').html(data.drive || 0); + } + + // Show change effect + if (data.changeEffect && ((!isInit && !isOwn) || (vis.editMode && data.testActive))) { + var $main = $div.find('.vis-hq-main'); + $main.animateDiv(data.changeEffect, {color: data.waveColor}); + } + }, + draw: function ($div) { + if (!$div.is(':visible')) { + setTimeout(function () { + vis.binds.hqwidgets.button.draw($div); + }, 100); + return; + } + + var data = $div.data('data'); + data.state = data.state || 'normal'; + var radius = $div.css('borderTopLeftRadius') || vis.views[data.view].widgets[data.wid].style['border-radius']; + + // place left-info, right-info, caption and image + if (!$div.find('.vis-hq-main').length) { + var text = ''; + if (!data.descriptionLeftDisabled && data.descriptionLeft) { + if (data.infoLeftPaddingLeft === undefined || data.infoLeftPaddingLeft === null) data.infoLeftPaddingLeft = '15px'; + if (data.infoLeftPaddingRight === undefined || data.infoLeftPaddingRight === null) data.infoLeftPaddingRight = '50px'; + if (!data.infoLeftPaddingLeft.match(/px$|rem$|em$/)) data.infoLeftPaddingLeft = data.infoLeftPaddingLeft + 'px'; + if (!data.infoLeftPaddingRight.match(/px$|rem$|em$/)) data.infoLeftPaddingRight = data.infoLeftPaddingRight + 'px'; + + text += '
' + + (data.descriptionLeft || '').replace(/\s/g, ' ').replace(/\\n/g, '
') + '
\n'; + } + if (data.infoRight || data.wType === 'number' || data.hoursLastAction) { + if (data.infoRightPaddingLeft === undefined || data.infoRightPaddingLeft === null) data.infoRightPaddingLeft = 0; + if (data.infoRightPaddingRight === undefined || data.infoRightPaddingRight === null) data.infoRightPaddingRight = '15px'; + if (!data.infoRightPaddingRight.match(/px$|rem$|em$/)) data.infoRightPaddingRight = data.infoRightPaddingRight + 'px'; + + text += '
' + + (data.infoRight || '').replace(/\s/g, ' ').replace(/\\n/g, '
') + '
'; + + if (data.hoursLastAction) { + if (data.infoRight || data.wType === 'number') text += '
'; + text += ''; + } + + text += '
\n'; + } + text += '
\n'; + + if (data.offsetAuto) { + text += '\n'; + } else { + text += '
\n'; + } + + if (data.caption || data.captionOn) { + if ($div.height() > $div.width()) text += ''; + text += ''; + } + + text += '
'; + $div.append(text); + } + + // Get the border radius from parent + var $main = $div.find('.vis-hq-main'); + $main.css({'border-radius': radius}); + $div.find('.vis-hq-text-caption').html(data.caption || ''); + + var width = $div.width(); + var offset = width - 20 - parseInt(radius, 10); + if (offset < width / 2) offset = width / 2; + $div.find('.vis-hq-leftinfo').css({right: offset + 'px'}); + $div.find('.vis-hq-rightinfo').css({'padding-left': (5 + (width / 2) + (parseInt(data.infoRightPaddingLeft, 10) || 0)) + 'px'}); + + // Place icon + var img = null; + if (data.iconName || data.iconOn) { + img = (data.state === 'normal') ? (data.iconName || '') : (data.iconOn || ''); + $div.find('.vis-hq-icon').html('').css('opacity', img ? 1 : 0); + } else { + $div.find('.vis-hq-icon').html(''); + } + + if (data['oid-battery']) $div.batteryIndicator(); + + if (data['oid-working']) { + $div.append('
'); + } + + // find the right position for image and caption in the middle + if (data.offsetAuto) { + vis.binds.hqwidgets.button.centerImage($div, data); + } + + function onChange(e, newVal, oldVal) { + if (e.type === data.oid + '.val') { + if (data.wType === 'number') { + data.value = parseFloat(newVal || 0); + } else { + data.value = newVal; + } + data.ack = vis.states[data.oid + '.ack']; + data.lc = vis.states[data.oid + '.lc']; + + if (data.wType === 'number') { + if (newVal === false || newVal === 'false') data.value = data.min; + if (newVal === true || newVal === 'true') data.value = data.max; + } + data.tempValue = undefined; + + vis.binds.hqwidgets.button.changeState($div); + + if (data.wType === 'number') { + if (typeof data.value !== 'number') data.value = parseFloat(data.value) || 0; + $main.scala('value', (data.digits !== null) ? data.value.toFixed(data.digits) : data.value); + } + return; + } else if (e.type === data.oid + '.ack') { + data.ack = vis.states[data.oid + '.ack']; + data.lc = vis.states[data.oid + '.lc']; + + vis.binds.hqwidgets.button.changeState($div); + return; + } else if (e.type === data['oid-working'] + '.val') { + data.working = newVal; + } else if (e.type === data['oid-battery'] + '.val') { + data.battery = newVal; + } else if (e.type === data['oid-signal'] + '.val') { + data.signal = newVal; + } else if (e.type === data['oid-humidity'] + '.val') { + data.humidity = newVal; + } else if (e.type === data['oid-actual'] + '.val') { + data.actual = newVal; + } else if (e.type === data['oid-drive'] + '.val') { + if (data.valveBinary === 'true' || data.valveBinary === true) { + if (newVal === null || newVal === undefined) newVal = 0; + if (newVal === 'true') { + newVal = true; + } else if (parseFloat(newVal).toString() === newVal.toString()) { + newVal = !!parseFloat(newVal); + } else if (newVal === 'false') { + newVal = false; + } + newVal = newVal ? _('opened') : _('closed'); + } + + data.drive = newVal; + } + vis.binds.hqwidgets.button.changeState($div, false, true); + } + + // action + if (1 || !vis.editMode) { + + var bound = []; + if (data.oid) { + + $div.append('
'); + + vis.states.bind(data.oid + '.val', onChange); + vis.states.bind(data.oid + '.ack', onChange); + bound.push(data.oid + '.val'); + bound.push(data.oid + '.ack'); + } + if (data['oid-working']) { + vis.states.bind(data['oid-working'] + '.val', onChange); + bound.push(data['oid-working'] + '.val'); + } + + if (data['oid-battery']) { + vis.states.bind(data['oid-battery'] + '.val', onChange); + bound.push(data['oid-battery'] + '.val'); + } + + if (data['oid-signal']) { + vis.states.bind(data['oid-signal'] + '.val', onChange); + bound.push(data['oid-signal'] + '.val'); + } + + if (data['oid-humidity']) { + vis.states.bind(data['oid-humidity'] + '.val', onChange); + bound.push(data['oid-humidity'] + '.val'); + } + + if (data['oid-actual']) { + vis.states.bind(data['oid-actual'] + '.val', onChange); + bound.push(data['oid-actual'] + '.val'); + } + + if (data['oid-drive']) { + vis.states.bind(data['oid-drive'] + '.val', onChange); + bound.push(data['oid-drive'] + '.val'); + } + // remember all ids, that bound + $div.data('bound', bound); + // remember bind handler + $div.data('bindHandler', onChange); + } + + // initiate state + vis.binds.hqwidgets.button.changeState($div, true); + + // If dimmer or number + if (data.wType === 'number') { + var scalaOptions; + if (data.oid) { + scalaOptions = { + change: function (value, notAck) { + //console.log(data.wid + ' filtered out:' + value + '(' + notAck + ')'); + if (!notAck) return; + + if (data.readOnly || (data.value || 0).toString() === value.toString()) return; + + data.value = parseFloat(value.toString().replace(',', '.')); + + if (data.digits !== null) { + if (typeof data.value !== 'number') data.value = parseFloat(data.value) || 0; + data.value = data.value.toFixed(data.digits); + } + + data.value = parseFloat(data.value) || 0; + data.ack = false; + data.tempValue = undefined; + + vis.binds.hqwidgets.button.changeState($div, false, false, true); + vis.setValue(data.oid, data.value); + }, + min: data.min, + max: data.max, + changing: function (value) { + // round to step + data.tempValue = Math.round(parseFloat(value) / data.step) * data.step; + vis.binds.hqwidgets.button.changeState($div, false, false, true); + }, + click: function (val) { + val = data.value; + if (!data.temperature) { + if (val - data.min > ((data.max - data.min) / 2)) { + val = data.min; + } else { + val = data.max; + } + } else { + data.tempValue = undefined; + vis.binds.hqwidgets.button.changeState($div, false, false, true); + + // Show dialog + if (data.url) $div.popupDialog('show'); + } + return val; + }, + alwaysShow: data.alwaysShow, + onshow: function () { + if (!data.alwaysShow) { + vis.binds.hqwidgets.button.showCenterInfo($div, true); + } + }, + onhide: function () { + vis.binds.hqwidgets.button.showCenterInfo($div); + }, + hideNumber: !data.showValue || (data.temperature && data.alwaysShow), + readOnly: vis.editMode || data.readOnly, + step: data.step, + digits: data.digits, + isComma: data.is_comma, + width: ((100 + parseInt(data.circleWidth || 50, 10)) * width / 100).toFixed(0) + }; + } + + // show for temperature color depends on value + if (data.temperature) { + vis.binds.hqwidgets.button.showCenterInfo($div); + + if (scalaOptions) { + scalaOptions.color = 'black'; + scalaOptions.colorize = function (color, value, isPrevious) { + var ratio = (value - data.min) / (data.max - data.min); + return 'hsla(' + (180 + Math.round(180 * ratio)) + ', 70%, 50%, ' + ((isPrevious) ? 0.7 : 0.9) + ')'; + } + } + } + if (scalaOptions) { + $main.scala(scalaOptions); + $main.scala('value', data.value); + } + } else { + if (!data.oidFalse && data.oidTrue) data.oidFalse = data.oidTrue; + if (!data.urlFalse && data.urlTrue) data.urlFalse = data.urlTrue; + if (data.min === undefined || data.min === 'false' || data.min === null) data.min = false; + if (data.max === undefined || data.max === 'true' || data.max === null) data.max = true; + if (data.oidTrueVal === undefined || data.oidTrueVal === null) data.oidTrueVal = data.max; + if (data.oidTrueVal === 'false') data.oidTrueVal = false; + if (data.oidTrueVal === 'true') data.oidTrueVal = true; + if (data.oidFalseVal === undefined || data.oidFalseVal === null) data.oidFalseVal = data.min; + if (data.oidFalseVal === 'false') data.oidFalseVal = false; + if (data.oidFalseVal === 'true') data.oidFalseVal = true; + var f = parseFloat(data.oidFalseVal); + if (f.toString() == data.oidFalseVal) data.oidFalseVal = f; + + f = parseFloat(data.oidTrueVal); + if (f.toString() == data.oidTrueVal) data.oidTrueVal = f; + + f = parseFloat(data.min); + if (f.toString() == data.min) data.min = f; + + f = parseFloat(data.max); + if (f.toString() == data.max) data.max = f; + + if (!vis.editMode && !data.readOnly && (data.oid || data.urlFalse || data.urlTrue || data.oidFalse || data.oidTrue)) { + if (!data.pushButton) { + $main.on('click touchstart', function () { + // Protect against two events + if (vis.detectBounce(this)) return; + + data.value = (data.state === 'normal') ? data.max : data.min; + data.ack = false; + + vis.binds.hqwidgets.button.changeState($div, false, false, true); + + if (data.oidTrue) { + if (data.state !== 'normal') { + vis.setValue(data.oidTrue, data.oidTrueVal); + } else { + vis.setValue(data.oidFalse, data.oidFalseVal); + } + } + + if (data.urlTrue) { + if (data.state !== 'normal') { + vis.conn.httpGet(data.urlTrue) + } else { + vis.conn.httpGet(data.urlFalse); + } + } + + // show new state + if (data.oid && data.oid !== 'nothing_selected') { + vis.setValue(data.oid, data.value); + } + }); + } else { + $main.on('mousedown touchstart', function (e) { + // Protect against two events + if (vis.detectBounce(this)) return; + + vis.binds.hqwidgets.contextMenu(false); + + data.value = data.max; + data.ack = false; + vis.binds.hqwidgets.button.changeState($div, false, false, true); + + if (data.oidTrue) vis.setValue(data.oidTrue, data.oidTrueVal); + if (data.urlTrue) vis.conn.httpGet(data.urlTrue); + if (data.oid && data.oid !== 'nothing_selected') vis.setValue(data.oid, data.value); + }); + $main.on('mouseup touchend', function (e) { + + // Protect against two events + if (vis.detectBounce(this, true)) return; + + data.value = data.min; + data.ack = false; + vis.binds.hqwidgets.button.changeState($div, false, false, true); + + if (data.oidFalse) vis.setValue(data.oidFalse, data.oidFalseVal); + if (data.urlFalse) vis.conn.httpGet(data.urlFalse); + if (data.oid && data.oid !== 'nothing_selected') vis.setValue(data.oid, data.value); + + vis.binds.hqwidgets.contextMenu(true); + }); + } + } else if (data.readOnly) { + $div.addClass('vis-hq-readonly'); + } + } + + // Chart dialog + if (data.url/* && !vis.editMode*/) { + $div.popupDialog({ + content: '', + width: data.dialog_width, + height: data.dialog_height, + effect: data.dialog_effect, + timeout: data.dialog_timeout, + modal: data.dialog_modal, + title: data.dialog_title || data['oid-actual'], + open: data.dialog_open && vis.editMode + }); + if (!data.oid) { + $main.on('click touchstart', function () { + // Protect against two events + if (vis.detectBounce(this)) return; + + $div.popupDialog('show'); + }); + } + } + if (!data.oid && !data.url) { + $main.addClass('vis-hq-main-none'); + $div.css({cursor: 'auto'}); + } + }, + init: function (wid, view, data, style, wType) { + vis.binds.hqwidgets.showVersion(); + var $div = $('#' + wid).addClass('vis-hq-button-base'); + if (!$div.length) { + setTimeout(function () { + vis.binds.hqwidgets.button.init(wid, view, data, style, wType); + }, 100); + return; + } + var _data = {wid: wid, view: view, wType: wType}; + for (var a in data) { + if (!data.hasOwnProperty(a) || typeof data[a] === 'function') continue; + if (a[0] !== '_') { + _data[a] = data[a]; + } + } + data = _data; + + if (!data.wType) { + if (data.min === undefined || data.min === null || data.min === '') data.min = false; + if (data.max === undefined || data.max === null || data.max === '') data.max = true; + } + + data.styleNormal = data.usejQueryStyle ? 'ui-state-default' : (data.styleNormal || 'vis-hq-button-base-normal'); + data.styleActive = data.usejQueryStyle ? 'ui-state-active' : (data.styleActive || 'vis-hq-button-base-on'); + data.digits = (data.digits || data.digits === 0) ? parseInt(data.digits, 10) : null; + if (typeof data.step === 'string') data.step = data.step.replace(',', '.'); + data.step = parseFloat(data.step || 1); + data.is_comma = (data.is_comma === 'true' || data.is_comma === true); + data.readOnly = (data.readOnly === 'true' || data.readOnly === true); + data.midTextColor = data.midTextColor || ''; + data.infoColor = data.infoColor || ''; + data.infoBackground = data.infoBackground || 'rgba(182,182,182,0.6)'; + data.pushButton = (data.pushButton === 'true' || data.pushButton === true); + + if (data.wType === 'number') { + data.min = (data.min === 'true' || data.min === true) ? true : ((data.min === 'false' || data.min === false) ? false : ((data.min !== undefined) ? parseFloat(data.min) : 0)); + data.max = (data.max === 'true' || data.max === true) ? true : ((data.max === 'false' || data.max === false) ? false : ((data.max !== undefined) ? parseFloat(data.max) : 100)); + } else { + data.min = (data.min === 'true' || data.min === true) ? true : ((data.min === 'false' || data.min === false) ? false : ((data.min !== undefined && data.min !== null && data.min !== '') ? data.min : 0)); + data.max = (data.max === 'true' || data.max === true) ? true : ((data.max === 'false' || data.max === false) ? false : ((data.max !== undefined && data.max !== null && data.max !== '') ? data.max : 100)); + } + $div.data('data', data); + $div.data('style', style); + + if (data.oid) { + data.value = vis.states.attr(data.oid + '.val'); + data.ack = vis.states.attr(data.oid + '.ack'); + data.lc = vis.states.attr(data.oid + '.lc'); + } + + if (data['oid-working']) data.working = vis.states.attr(data['oid-working'] + '.val'); + if (data['oid-battery']) data.battery = vis.states.attr(data['oid-battery'] + '.val'); + if (data['oid-signal']) data.signal = vis.states.attr(data['oid-signal'] + '.val'); + if (data['oid-humidity']) data.humidity = vis.states.attr(data['oid-humidity'] + '.val'); + if (data['oid-actual']) data.actual = vis.states.attr(data['oid-actual'] + '.val'); + if (data['oid-drive']) { + var val = vis.states.attr(data['oid-drive'] + '.val'); + if (val === null || val === undefined) val = 0; + if (data.valveBinary === 'true' || data.valveBinary === true) { + if (val === 'true') { + val = true; + } else if (parseFloat(val).toString() === val.toString()) { + val = !!parseFloat(val); + } else if (val === 'false') { + val = false; + } + val = val ? _('opened') : _('closed'); + } + data.drive = val; + } + + vis.binds.hqwidgets.button.draw($div); + } + }, + window: { + drawOneWindow: function (index, options) { + var bWidth = options.border_width; + var div1 = '
'; + + var div2 = '
'; + options.shutterPos = options.shutterPos || 0; + + var div3 = '
'; + + var hanldePos = null; + var slidePos = null; + + if (options.handleOid) { + hanldePos = vis.states[options.handleOid + '.val']; + /* problem ?? */ + if (hanldePos == 2) { + hanldePos = 1; + } else if (hanldePos == 1) { + hanldePos = 2; + } + slidePos = hanldePos; + } + if (options.slideOid) { + slidePos = vis.states[options.slideOid + '.val']; + if (!options.handleOid) hanldePos = slidePos; + if (hanldePos == 2) slidePos = 2; + } + + var div4 = '
'; + + var div5 = ''; + + //console.log('HOID: ' + options.handleOid + ', ' + hanldePos); + if (options.type) { + div5 = '
'; + } + + return div1 + div2 + div3 + div4 + div5 + '
'; + }, + hidePopup: function ($div) { + var data = $div.data('data'); + if (!data) return; + + for (var z = 0; z < vis.binds.hqwidgets.zindex.length; z++) { + if (vis.binds.hqwidgets.zindex[z] === $div.css('z-index')) { + vis.binds.hqwidgets.zindex.splice(z, 1); + break; + } + } + + var $big = $div.find('.hq-blind-big'); + if (data.noAnimate) { + //$big.makeSlider('hide'); + setTimeout(function () { + $big.find('.hq-blind-big-slider').makeSlider('hide'); + $big.hide(); + $big.data('show', false); + // restore zindex + $div.css('z-index', $div.data('zindex')); + }, 200); + } else { + $big.animate({width: $div.width(), height: $div.height(), opacity: 0, top: 0, left: 0}, 500, 'swing', function () { + $big.find('.hq-blind-big-slider').makeSlider('hide'); + $big.hide(); + $big.data('show', false); + // restore zindex + $div.css('z-index', $div.data('zindex')); + }); + } + + }, + openPopup: function ($div) { + var data = $div.data('data'); + if (!data) return; + + // make temporary z-index maximal + var zindex = $div.data('zindex'); + // remember z-index + if (zindex === null || zindex === undefined) { + zindex = $div.css('z-index'); + $div.data('zindex', zindex); + } + // find maximal z-index + var zindexMax = 900; + /*$('.vis-widget').each(function () { + var z = $(this).css('z-index'); + if (z > zindexMax) zindexMax = z; + });*/ + for (var z = 0; z < vis.binds.hqwidgets.zindex.length; z++) { + if (vis.binds.hqwidgets.zindex[z] > zindexMax) zindexMax = vis.binds.hqwidgets.zindex[z]; + } + zindexMax++; + + // set this widget to maximal zindex + $div.css('z-index', zindexMax); + vis.binds.hqwidgets.zindex.push($div.css('z-index')); + + var $big = $div.find('.hq-blind-big'); + if (!$big.length) { + var text = '' + + ' ' + + ' ' + + ' ' + + ''; + $div.append(text); + $div.find('.hq-blind-big-slider').makeSlider({ + max: data.max, + min: data.min, + invert: !data.invert, + show: false, + relative: true, + value: data.value, + timeout: data.hide_timeout + }, function (newValue) { + vis.setValue(data.oid, newValue); + vis.binds.hqwidgets.window.hidePopup($div); + }, function () { + vis.binds.hqwidgets.window.hidePopup($div); + }); + $div.find('.hq-blind-big-button-down').click(function () { + vis.setValue(data.oid, data.invert ? data.min : data.max); + vis.binds.hqwidgets.window.hidePopup($div); + }); + $div.find('.hq-blind-big-button-up').click(function () { + vis.setValue(data.oid, data.invert ? data.max : data.min); + vis.binds.hqwidgets.window.hidePopup($div); + }); + $big = $div.find('.hq-blind-big'); + } + + $big.data('show', true); + + if (data.bigLeft === undefined) { + var pos = $div.position(); + var w = $div.width(); + var h = $div.height(); + + data.bigWidth = $big.width(); + data.bigHeight = $big.height(); + + //default will still be center + var popUpHorPos = Math.round((h - data.bigHeight) / 2); + var popUpVerPos = Math.round((w - data.bigWidth) / 2); + + if ( data.popupVerticalPos === "left" ) { + popUpVerPos = Math.round(w - data.bigWidth); + } + else if ( data.popupVerticalPos === "right" ) { + popUpVerPos = 0; + } + data.bigLeft = popUpVerPos; + + + if ( data.popupHorizontalPos === "top" ) { + popUpHorPos = Math.round(h - data.bigHeight); + } + else if ( data.popupHorizontalPos === "bottom" ) { + popUpHorPos = 0; + } + data.bigTop = popUpHorPos; + + + if (pos.top + data.bigTop < 0) data.bigTop = -pos.top; + if (pos.left + data.bigLeft < 0) data.bigLeft = -pos.left; + } + + $big.css({top: data.bigTop, left: data.bigLeft}); + + if (data.noAnimate) { + $big.find('.hq-blind-big-slider').makeSlider('show', data.value); + $big.show(); + } else { + $big.css({top:0, left: 0, width: $div.width(), height: $div.height(), opacity: 0}).show(); + $big.find('.hq-blind-big-slider').makeSlider('show', data.value); + $big.animate({top: data.bigTop, left: data.bigLeft, width: data.bigWidth, height: data.bigHeight, opacity: 1}, 500); + } + }, + draw: function ($div) { + var data = $div.data('data'); + if (!data) return; + + $div.css({ + 'padding-top': data.border_width, + 'padding-bottom': data.border_width - 1, + 'padding-right': data.border_width + 1, + 'padding-left': data.border_width + 1 + }); + + // get position + data.shutterPos = 0; + if (data.oid) { + data.value = vis.states[data.oid + '.val']; + data.shutterPos = data.value; + if (data.shutterPos === undefined || data.shutterPos === null) { + data.shutterPos = 0; + } else { + if (data.shutterPos < data.min) data.shutterPos = data.min; + if (data.shutterPos > data.max) data.shutterPos = data.max; + + data.shutterPos = Math.round(100 * (data.shutterPos - data.min) / (data.max - data.min)); + } + if (data.invert) data.shutterPos = 100 - data.shutterPos; + } + + var text = ''; + if (!data.descriptionLeftDisabled && data.descriptionLeft) { + if (data.infoLeftPaddingLeft === undefined || data.infoLeftPaddingLeft === null) data.infoLeftPaddingLeft = '15px'; + if (data.infoLeftPaddingRight === undefined || data.infoLeftPaddingRight === null) data.infoLeftPaddingRight = '50px'; + if (!data.infoLeftPaddingLeft.match(/px$|rem$|em$/)) data.infoLeftPaddingLeft = data.infoLeftPaddingLeft + 'px'; + if (!data.infoLeftPaddingRight.match(/px$|rem$|em$/)) data.infoLeftPaddingRight = data.infoLeftPaddingRight + 'px'; + + text += '
' + + (data.descriptionLeft || '').replace(/\s/g, ' ').replace(/\\n/g, '
') + '
\n'; + } + if (data.show_value) { + if (data.infoRightPaddingLeft === undefined || data.infoRightPaddingLeft === null) data.infoRightPaddingLeft = '15px'; + if (data.infoRightPaddingRight === undefined || data.infoRightPaddingRight === null) data.infoRightPaddingRight = '15px'; + if (!data.infoRightPaddingRight.match(/px$|rem$|em$/)) data.infoRightPaddingRight = data.infoRightPaddingRight + 'px'; + + text += '
' + + (data.infoRight || '').replace(/\s/g, ' ').replace(/\\n/g, '
') + '
'; + + text += '
\n'; + } + for (var i = 1; i <= data.slide_count; i++) { + var options = { + slideOid: data['oid-slide-sensor' + i], + handleOid: data['oid-slide-handle' + i], + type: data['slide_type' + i], + border_width: data.border_width, + shutterPos: data.shutterPos + }; + text += ''; + } + text += '
' + this.drawOneWindow(i, options) + '
'; + $div.html(text); + + $div.find('.hq-blind-blind2').each(function (id) { + id++; + if (data['oid-slide-sensor-lowbat' + id]) { + data['oid-slide-sensor-lowbat'][id] = vis.states[data['oid-slide-sensor-lowbat' + id] + '.val']; + $(this).batteryIndicator({ + show: data['oid-slide-sensor-lowbat'][id] || false, + title: _('Low battery on sash sensor'), + classes: 'slide-low-battery' + }); + } + }); + $div.find('.hq-blind-blind3').each(function (id) { + id++; + if (data['oid-slide-handle-lowbat' + id]) { + data['oid-slide-handle-lowbat'][id] = vis.states[data['oid-slide-handle-lowbat' + id] + '.val']; + $(this).batteryIndicator({ + show: data['oid-slide-handle-lowbat'][id] || false, + color: '#FF55FA', + title: _('Low battery on handle sensor'), + classes: 'handle-low-battery' + }); + $(this).find('.handle-low-battery').css({top: 8}); + } + }); + + var width = $div.width(); + var offset = width - 20; + if (offset < width / 2) offset = width / 2; + $div.find('.vis-hq-leftinfo').css({right: offset + 'px'}); + $div.find('.vis-hq-rightinfo').css({'padding-left': (5 + (width / 2) + (parseInt(data.infoRightPaddingLeft, 10) || 0)) + 'px'}); + }, + init: function (wid, view, data, style) { + vis.binds.hqwidgets.showVersion(); + + var $div = $('#' + wid).addClass('vis-hq-button-base'); + if (!$div.length) { + setTimeout(function () { + vis.binds.hqwidgets.window.init(wid, view, data, style); + }, 100); + return; + } + var _data = {wid: wid, view: view}; + for (var a in data) { + if (!data.hasOwnProperty(a) || typeof data[a] === 'function') continue; + if (a[0] !== '_') _data[a] = data[a]; + } + data = _data; + + data.hide_timeout = (data.hide_timeout === 0 || data.hide_timeout === '0') ? 0 : (parseInt(data.hide_timeout, 10) || 2000); + data.min = ((data.min !== undefined) ? parseFloat(data.min) : 0); + data.max = ((data.max !== undefined) ? parseFloat(data.max) : 100); + data.digits = (data.digits || data.digits === 0) ? parseInt(data.digits, 10) : null; + data.noAnimate = (data.noAnimate === 'true' || data.noAnimate === true || data.noAnimate == 1); + + if (!data.border_width && data.border_width !== '0') data.border_width = 3; + data.border_width = parseInt(data.border_width, 10); + + $div.data('data', data); + $div.data('style', style); + + data.min = parseFloat(data.min); + data.max = parseFloat(data.max); + if (data.max < data.min) { + var tmp = data.min; + data.min = data.max; + data.max = tmp; + } + data['oid-slide-sensor-lowbat'] = []; + data['oid-slide-handle-lowbat'] = []; + + if (data['oid-working']) { + data.working = vis.states.attr(data['oid-working'] + '.val'); + } + + vis.binds.hqwidgets.window.draw($div); + + function onChange(e, newVal /* , oldVal */) { + if (e.type === data.oid + '.val') { + var shutterPos = newVal; + data.value = shutterPos; + if (shutterPos === undefined || shutterPos === null) { + data.shutterPos = 0; + } else { + if (shutterPos < data.min) shutterPos = data.min; + if (shutterPos > data.max) shutterPos = data.max; + + data.shutterPos = Math.round(100 * (shutterPos - data.min) / (data.max - data.min)); + } + + if (data.invert) data.shutterPos = 100 - data.shutterPos; + + if (!data.noAnimate) { + $div.find('.hq-blind-position').animate({'height': data.shutterPos + '%'}, 500); + } else { + $div.find('.hq-blind-position').css({'height': data.shutterPos + '%'}); + } + $div.find('.vis-hq-rightinfo-text').html(data.shutterPos + '%'); + } else { + for (var t = 1; t <= data.slide_count; t++) { + if (e.type === data['oid-slide-sensor' + t] + '.val' || e.type === data['oid-slide-handle' + t] + '.val') { + vis.binds.hqwidgets.window.draw($div); + break; + } else if (e.type === data['oid-slide-sensor-lowbat' + t] + '.val') { + data['oid-slide-sensor-lowbat'][t] = vis.states[data['oid-slide-sensor-lowbat' + t] + '.val']; + $div.find('.slide-low-battery').each(function (id) { + id++; + if (data['oid-slide-sensor-lowbat' + id]) { + if (data['oid-slide-sensor-lowbat'][id]) { + $(this).show(); + } else { + $(this).hide(); + } + } + }); + } else if (e.type === data['oid-slide-handle-lowbat' + t] + '.val') { + data['oid-slide-handle-lowbat'][t] = vis.states[data['oid-slide-handle-lowbat' + t] + '.val']; + $div.find('.handle-low-battery').each(function (id) { + id++; + if (data['oid-slide-handle-lowbat' + id]) { + if (data['oid-slide-handle-lowbat'][id]) { + $(this).show(); + } else { + $(this).hide(); + } + } + }); + } + } + } + } + + var bound = []; + + for (var i = 1; i <= data.slide_count; i++) { + if (data['oid-slide-sensor' + i]) { + vis.states.bind(data['oid-slide-sensor' + i] + '.val', onChange); + bound.push(data['oid-slide-sensor' + i] + '.val'); + } + if (data['oid-slide-handle' + i]) { + vis.states.bind(data['oid-slide-handle' + i] + '.val', onChange); + bound.push(data['oid-slide-handle' + i] + '.val'); + } + if (data['oid-slide-sensor-lowbat' + i]) { + vis.states.bind(data['oid-slide-sensor-lowbat' + i] + '.val', onChange); + bound.push(data['oid-slide-sensor-lowbat' + i] + '.val'); + } + if (data['oid-slide-handle-lowbat' + i]) { + vis.states.bind(data['oid-slide-handle-lowbat' + i] + '.val', onChange); + bound.push(data['oid-slide-handle-lowbat' + i] + '.val'); + } + } + + if (data.oid) { + if (!vis.editMode) { + // prepare big window + $div.click(function () { + var $big = $div.find('.hq-blind-big'); + if (!$big.length || !$big.data('show')) { + vis.binds.hqwidgets.window.openPopup($div); + } + }); + } + + vis.states.bind(data.oid + '.val', onChange); + bound.push(data.oid + '.val'); + } + + if (bound.length) { + // remember all ids, that bound + $div.data('bound', bound); + // remember bind handler + $div.data('bindHandler', onChange); + } + + var shutterPos = vis.states[data.oid + '.val'] || 0; + if (shutterPos < data.min) shutterPos = data.min; + if (shutterPos > data.max) shutterPos = data.max; + shutterPos = Math.round(100 * (shutterPos - data.min) / (data.max - data.min)); + if (data.invert) shutterPos = 100 - shutterPos; + $div.find('.vis-hq-rightinfo-text').html(shutterPos + '%'); + + if (vis.editMode && vis.activeWidgets.indexOf(wid) !== -1) { + $div.resizable('destroy'); + vis.resizable($div); + } + } + }, + door: { + changeState: function ($div, notUpdateDoor, isFirst) { + var data = $div.data('data'); + if (!data) return; + + var value = data.value; + + if (data['oid-battery']) $div.batteryIndicator('show', data.battery || false); + + if (data['oid-signal']) { + $div.find('.vis-hq-signal').html(data.signal); + } + + if (!notUpdateDoor) { + if (value) { + if (data.noAnimate || isFirst) { + $div.find('.vis-hq-door-sheet').css({width: '80%'}); + $div.find('.vis-hq-door-empty-' + (data.door_type || 'left')).css({width: '20%'}); + $div.find('.vis-hq-door-handle').css({left: (data.door_type !== 'right') ? '60%': '30%'}); + } else { + $div.find('.vis-hq-door-sheet').animate({width: '80%'}, 500); + $div.find('.vis-hq-door-empty-' + (data.door_type || 'left')).animate({width: '20%'}, 500); + $div.find('.vis-hq-door-handle').animate({left: (data.door_type !== 'right') ? '60%': '30%'}, 500); + } + } else { + if (data.noAnimate || isFirst) { + $div.find('.vis-hq-door-sheet').css({width: '100%'}); + $div.find('.vis-hq-door-empty-' + (data.door_type || 'left')).css({width: 0}); + $div.find('.vis-hq-door-handle').css({left: (data.door_type !== 'right') ? '85%': '15%'}); + } else { + $div.find('.vis-hq-door-sheet').animate({width: '100%'}, 500); + $div.find('.vis-hq-door-empty-' + (data.door_type || 'left')).animate({width: 0}); + $div.find('.vis-hq-door-handle').animate({left: (data.door_type !== 'right') ? '85%': '15%'}, 500); + } + } + } + }, + draw: function ($div) { + var data = $div.data('data'); + if (!data) return; + + // place left-info, right-info, caption and image + if (!$div.find('.vis-hq-main').length) { + var text = ''; + if (!data.descriptionLeftDisabled && data.descriptionLeft) { + if (data.infoLeftPaddingLeft === undefined || data.infoLeftPaddingLeft === null) data.infoLeftPaddingLeft = '15px'; + if (data.infoLeftPaddingRight === undefined || data.infoLeftPaddingRight === null) data.infoLeftPaddingRight = '50px'; + if (!data.infoLeftPaddingLeft.match(/px$|rem$|em$/)) data.infoLeftPaddingLeft = data.infoLeftPaddingLeft + 'px'; + if (!data.infoLeftPaddingRight.match(/px$|rem$|em$/)) data.infoLeftPaddingRight = data.infoLeftPaddingRight + 'px'; + + text += '
' + + (data.descriptionLeft || '').replace(/\s/g, ' ').replace(/\\n/g, '
') + '
\n'; + } + if (data.infoRight || data.wType === 'number' || data.hoursLastAction) { + if (data.infoRightPaddingLeft === undefined || data.infoRightPaddingLeft === null) data.infoRightPaddingLeft = '15px'; + if (data.infoRightPaddingRight === undefined || data.infoRightPaddingRight === null) data.infoRightPaddingRight = '15px'; + if (!data.infoRightPaddingRight.match(/px$|rem$|em$/)) data.infoRightPaddingRight = data.infoRightPaddingRight + 'px'; + + text += '
' + + (data.infoRight || '').replace(/\s/g, ' ').replace(/\\n/g, '
') + '
'; + + if (data.hoursLastAction) { + if (data.infoRight || data.wType === 'number') text += '
'; + text += ''; + } + + text += '
\n'; + } + text += '' + + '' + + '' + + '' + + '' + + '
\n'; + $div.append(text); + } + $div.find('.vis-hq-door-empty-' + (data.door_type || 'left')).css({background: data.emptyColor || '#515151'}); + if (data.door_type === 'right') { + $div.find('.vis-hq-door-handle').css({left: '15%'}); + } else { + $div.find('.vis-hq-door-handle').css({left: '85%'}); + } + + $div.css({ + 'padding-top': data.border_width, + 'padding-bottom' : data.border_width - 1, + 'padding-right': data.border_width + 1, + 'padding-left': data.border_width + 1 + }); + + var width = $div.width(); + var offset = width - 20; + if (offset < width / 2) offset = width / 2; + $div.find('.vis-hq-leftinfo').css({right: offset + 'px'}); + }, + init: function (wid, view, data, style) { + vis.binds.hqwidgets.showVersion(); + + var $div = $('#' + wid).addClass('vis-hq-button-base'); + if (!$div.length) { + setTimeout(function () { + vis.binds.hqwidgets.door.init(wid, view, data, style); + }, 100); + return; + } + var _data = {wid: wid, view: view}; + for (var a in data) { + if (!data.hasOwnProperty(a) || typeof data[a] === 'function') continue; + if (a[0] !== '_') _data[a] = data[a]; + } + data = _data; + + if (!data.border_width && data.border_width !== '0') data.border_width = 3; + data.border_width = parseInt(data.border_width, 10); + if (data['oid-battery']) data.battery = vis.states.attr(data['oid-battery'] + '.val'); + if (data['oid-signal']) data.signal = vis.states.attr(data['oid-signal'] + '.val'); + + $div.data('data', data); + $div.data('style', style); + + vis.binds.hqwidgets.door.draw($div); + + function onChange(e, newVal) { + if (e.type === data.oid + '.val') { + var doorState = newVal; + if (newVal === 'true' || newVal === true) { + doorState = true; + } else if (newVal === 'false' || newVal === false) { + doorState = false; + } else if (typeof newVal === 'string') { + doorState = parseFloat(newVal) > 0; + } else { + doorState = !!newVal; + } + + if (data.invert) doorState = !doorState; + data.value = doorState; + + vis.binds.hqwidgets.door.changeState($div); + } else if (e.type === data['oid-signal'] + '.val') { + data.signal = newVal; + vis.binds.hqwidgets.door.changeState($div, true); + } else if (e.type === data['oid-battery'] + '.val') { + data.battery = newVal; + vis.binds.hqwidgets.door.changeState($div, true); + } + } + var bound = []; + + if (data.oid) { + if (!vis.editMode) { + // prepare big window + $div.click(function () { + var $big = $div.find('.hq-blind-big'); + if (!$big.length || !$big.data('show')) { + //vis.binds.hqwidgets.window.openPopup($div); + } + }); + } + + vis.states.bind(data.oid + '.val', onChange); + bound.push(data.oid + '.val'); + var newVal = vis.states.attr(data.oid + '.val'); + var doorState; + + if (newVal === 'true' || newVal === true) { + doorState = true; + } else if (newVal === 'false' || newVal === false) { + doorState = false; + } else if (typeof newVal === 'string') { + doorState = parseFloat(newVal) > 0; + } else { + doorState = !!newVal; + } + + if (data.invert) doorState = !doorState; + data.value = doorState; + } + if (data['oid-battery']) { + $div.batteryIndicator(); + vis.states.bind(data['oid-battery'] + '.val', onChange); + bound.push(data['oid-battery'] + '.val'); + } + + if (data['oid-signal']) { + vis.states.bind(data['oid-signal'] + '.val', onChange); + bound.push(data['oid-signal'] + '.val'); + } + if (bound.length) { + // remember all ids, that bound + $div.data('bound', bound); + // remember bind handler + $div.data('bindHandler', onChange); + } + vis.binds.hqwidgets.door.changeState($div, false, true); + } + }, + lock: { + draw: function ($div, isInit) { + var data = $div.data('data'); + if (!data) return; + + var $img = $div.find('img:first'); + if (!$img.length) { + if (!$div.is(':visible')) { + return setTimeout(function () { + vis.binds.hqwidgets.lock.draw($div, isInit); + }, 400); + } + + $div.html('' + + ''); + $img = $div.find('.vis-hq-lock1'); + var $big = $div.find('.vis-hq-biglock'); + data.popupRadius = parseInt(data.popupRadius, 10) || 75; + $big.css({'border-radius': data.popupRadius, width: data.popupRadius * 2, height: data.popupRadius * 2}); + $div.find('.vis-hq-biglock-button').css({borderRadius: parseInt(data.buttonRadius, 10) || 0}); + + $big.css({top: ($div.height() - $big.height()) / 2, left: ($div.width() - $big.width()) / 2}); + + if (data.oid && data.oid !== 'nothing_selected') { + if (data.openValue === undefined || data.openValue === null || data.openValue === '') { + data.openValue = true; + } else { + if (data.openValue === 'true') data.openValue = true; + if (data.openValue === 'false') data.openValue = false; + if (parseFloat(data.openValue).toString() == data.openValue) data.openValue = parseFloat(data.openValue); + } + if (data.closeValue === undefined || data.closeValue === null || data.closeValue === '') { + data.closeValue = false; + } else { + if (data.closeValue === 'true') data.closeValue = true; + if (data.closeValue === 'false') data.closeValue = false; + if (parseFloat(data.closeValue).toString() == data.closeValue) data.closeValue = parseFloat(data.closeValue); + } + + $img.click(function () { + $div.popupShow($big, {relative: true}); + // hide + if (data.showTimeout) { + data.timer = setTimeout(function () { + data.timer = null; + $div.popupHide($big, {relative: true}); + }, data.showTimeout) + } + }); + if (!vis.editMode) { + $div.find('.vis-hq-biglock-close').click(function () { + if (data.timer) { + clearTimeout(data.timer); + data.timer = null; + } + $div.popupHide($big, {relative: true}); + vis.setValue(data.oid, data.closeValue); + }); + $div.find('.vis-hq-biglock-open').click(function () { + if (data.timer) { + clearTimeout(data.timer); + data.timer = null; + } + $div.popupHide($big, {relative: true}); + vis.setValue(data.oid, data.openValue); + }); + } + } + if (!data['oid-open']) { + $div.find('.vis-hq-biglock-openDoor').hide(); + } else { + if (data.openDoorValue === undefined || data.openDoorValue === null || data.openDoorValue === '') { + data.openDoorValue = true; + } else { + if (data.openDoorValue === 'true') data.openDoorValue = true; + if (data.openDoorValue === 'false') data.openDoorValue = false; + if (parseFloat(data.openDoorValue).toString() == data.openDoorValue) data.openDoorValue = parseFloat(data.openDoorValue); + } + if (!vis.editMode) { + $div.find('.vis-hq-biglock-openDoor').click(function () { + $div.popupHide($big, {relative: true}); + if (data.timer) { + clearTimeout(data.timer); + data.timer = null; + } + vis.setValue(data['oid-open'], data.openDoorValue); + }); + } + } + } + if (!data.oid || data.oid === 'nothing_selected' || vis.binds.hqwidgets.lock.isFalse(vis.states.attr(data.oid + '.val'), data.closeValue, data.openValue)) { + $div.removeClass(data.styleActive).addClass(data.styleNormal); + $img.attr('src', data.closedIcon || ''); + } else { + $div.removeClass(data.styleNormal).addClass(data.styleActive); + $img.attr('src', data.openedIcon || data.closedIcon || ''); + } + + // Show change effect + if (data.changeEffect && (!isInit || (vis.editMode && data.testActive))) { + $div.animateDiv(data.changeEffect, {color: data.waveColor}); + } + }, + isFalse: function (val, min, max) { + if (min !== undefined && min !== null && min !== '') { + if (max !== undefined && max !== null && max !== '') { + return val != max; + } else { + return val == min; + } + } + if (val === undefined || val === null || val === false || val === 'false' || val === '') return true; + if (val === '0' || val === 0) return true; + var f = parseFloat(val); + if (f.toString() !== 'NaN') return !f; + return false; + }, + init: function (wid, view, data, style) { + vis.binds.hqwidgets.showVersion(); + var $div = $('#' + wid).addClass('vis-hq-button-base'); + if (!$div.length) { + setTimeout(function () { + vis.binds.hqwidgets.lock.init(wid, view, data, style); + }, 100); + return; + } + var _data = {wid: wid, view: view}; + for (var a in data) { + if (!data.hasOwnProperty(a) || typeof data[a] === 'function') continue; + if (a[0] !== '_') { + _data[a] = data[a]; + } + } + data = _data; + + if (data.closeValue === undefined || data.closeValue === null || data.closeValue === '') data.closeValue = false; + if (data.openValue === undefined || data.openValue === null || data.openValue === '') data.openValue = true; + + data.styleNormal = data.usejQueryStyle ? 'ui-state-default' : (data.styleNormal || 'hq-button-no-background'); + data.styleActive = data.usejQueryStyle ? 'ui-state-active' : (data.styleActive || 'hq-button-no-background'); + $div.data('data', data); + function onChange(e, newVal, oldVal) { + data.signal = newVal; + vis.binds.hqwidgets.lock.draw($div); + } + + if (data.oid) { + vis.states.bind(data.oid + '.val', onChange); + // remember all ids, that bound + $div.data('bound', [data.oid + '.val']); + // remember bind handler + $div.data('bindHandler', onChange); + } + + vis.binds.hqwidgets.lock.draw($div, true); + } + }, + circle: { + init: function (wid, view, data) { + vis.binds.hqwidgets.showVersion(); + + var $div = $('#' + wid); + if (!$div.length) { + setTimeout(function () { + vis.binds.hqwidgets.circle.init(wid, view, data); + }, 100); + return; + } + + var settings = data; + var $scalaInput = $div.find('input'); + $div.addClass('vis-hq-button-base'); + + function onChange(e, newVal, oldVal) { + settings.value = newVal; + $scalaInput.val(settings.value).trigger('change'); + } + + if (settings.oid) { + $scalaInput.val(vis.states.attr(settings.oid + '.val')); + if (1 || !vis.editMode) { + vis.states.bind(settings.oid + '.val', onChange); + // remember all ids, that bound + $div.data('bound', [settings.oid + '.val']); + // remember bind handler + $div.data('bindHandler', onChange); + } + } else { + $scalaInput.val(settings.min); + } + + var offset = settings.angleOffset; + if (settings.angleArc !== undefined && !offset && offset !== 0 && offset !== '0') { + offset = 180 + (360 - parseInt(settings.angleArc, 10)) / 2; + } + + $scalaInput.attr('data-angleOffset', offset); + $scalaInput.attr('data-angleArc', settings.angleArc); + $scalaInput.attr('data-thickness', settings.thickness); + $scalaInput.attr('data-linecap', (settings.linecap === 'true' || settings.linecap === true) ? 'round' : 'butt'); + $scalaInput.show(); + + $scalaInput.knobHQ({ + width: parseInt($div.width(), 10), + height: parseInt($div.height(), 10), + release: function () { + if (settings.readOnly) return; + // remove unit + var oldValue = $scalaInput.data('oldValue'); + var val = $scalaInput.val(); + + if ((settings.unit || settings.unit === 0) && val.substring(val.length - settings.unit.length, val.length) === settings.unit) { + val = val.substring(0, val.length - settings.unit.length); + } + if (oldValue != val && !vis.editMode && settings.oid) { + $scalaInput.data('oldValue', val); + val = parseFloat(val.toString().replace(',', '.')); + vis.setValue(settings.oid, val); + } + }, + cancel: function () { + }, + change: function (value) { + }, + format: function (v) { + v = parseFloat(v) || 0; + if (settings.digits !== null) v = v.toFixed(settings.digits); + if ((settings.is_comma === 'true' || settings.is_comma === true) && v) v = v.toString().replace('.', ','); + if (settings.unit) v = v + settings.unit; + return v; + }, + displayPrevious : settings.displayPrevious, + displayInput: !settings.hideNumber, + bgColor: settings.bgcolor || undefined, + readOnly: settings.readOnly, + fgColor: settings.color, + inputColor: settings.color, + colorize: settings.colorize ? settings.colorize : undefined, + min: parseFloat(settings.min), + max: parseFloat(settings.max), + step: settings.step, + cursor: settings.cursor, + rotation: settings.anticlockwise ? 'anticlockwise' : 'clockwise' + + }); + + if (settings.caption) { + $scalaInput.after('
' + settings.caption + '
'); + } + + $scalaInput.prop('readonly', true); + var parentFont = $div.parent().css('font-size'); + var font = $div.css('font-size'); + if (font !== parentFont) $scalaInput.css('font-size', font); + + parentFont = $div.parent().css('font-weight'); + font = $div.css('font-weight'); + if (font !== parentFont) $scalaInput.css('font-weight', font); + + parentFont = $div.parent().css('font-style'); + font = $div.css('font-style'); + if (font !== parentFont) $scalaInput.css('font-style', font); + + parentFont = $div.parent().css('font-variant'); + font = $div.css('font-variant'); + if (font !== parentFont) $scalaInput.css('font-variant', font); + } + }, + checkbox: { + styles: [ + 'orange', 'blue', 'green', 'grey' + ], + isTrue: function (value, max) { + if (value === 'true') value = true; + if (value === 'false') value = false; + if (value == parseFloat(value)) value = parseFloat(value); + if (max === true && typeof value === 'number') { + value = value > 0; + } + + return value == max; + }, + init: function (wid, view, data) { + vis.binds.hqwidgets.showVersion(); + + var $div = $('#' + wid); + if (!$div.length) { + setTimeout(function () { + vis.binds.hqwidgets.checkbox.init(wid, view, data); + }, 100); + return; + } + if (data.val_false === undefined || data.val_false === 'false') data.val_false = false; + if (data.val_false === 'true') data.val_false = true; + if (data.val_false == parseFloat(data.val_false)) data.val_false = parseFloat(data.val_false); + + if (data.val_true === undefined || data.val_true === 'true') data.val_true = true; + if (data.val_true === 'false') data.val_true = false; + if (data.val_true == parseFloat(data.val_true)) data.val_true = parseFloat(data.val_true); + + var settings = { + oid: data.oid || null, + staticValue: data.staticValue, + checkboxSize: data.checkboxSize || 'big', + checkboxColor: data.checkboxColor || 'grey', + checkboxColorOn: data.checkboxColorOn || data.checkboxColor || 'orange', + readOnly: vis.editMode || data.readOnly || false, + min: data.val_false, + max: data.val_true + }; + if (settings.checkboxSize === 'small') { + $div.css({width: 108, height: 34}); + } + + if (!$div.find('input').length) $div.append(''); + var $input = $div.find('input'); + + var $shineCheckbox = $input.shineCheckbox(settings); + function onChange(e, newVal, oldVal) { + $shineCheckbox.shineCheckbox('value', vis.binds.hqwidgets.checkbox.isTrue(newVal, settings.max)); + } + + if (settings.oid && settings.oid !== 'nothing_selected') { + $shineCheckbox.shineCheckbox('value', vis.binds.hqwidgets.checkbox.isTrue(vis.states.attr(settings.oid + '.val'), settings.max)); + $shineCheckbox.data('update', false); + vis.states.bind(settings.oid + '.val', onChange); + // remember all ids, that bound + $div.data('bound', [settings.oid + '.val']); + // remember bind handler + $div.data('bindHandler', onChange); + + $div.find('input').change(function (evt) { + if ($(this).data('update')) { + $(this).data('update', false); + } else { + vis.setValue(settings.oid, $(this).prop('checked') ? settings.max : settings.min); + } + }); + } else { + $shineCheckbox.shineCheckbox('value', vis.binds.hqwidgets.checkbox.isTrue(settings.staticValue, settings.max)); + } + } + }, + odometer: function (view, data) { + vis.binds.hqwidgets.showVersion(); + + var $div = $('#' + data.wid); + if (!$div.length) { + setTimeout(function () { + vis.binds.hqwidgets.odometer(view, data); + }, 100); + return; + } else + if (!$div.is(':visible')) { + setTimeout(function () { + vis.binds.hqwidgets.odometer(view, data); + }, 500); + return; + } + + Odometer.prototype.watchForMutations = function() {}; + + var oid = data.oid; + var format = data.format || '(.ddd),dd'; + var factor = parseFloat(data.factor) || 1; + var max = 0; + var $od = $div.find('.odometer'); + if ($od.length) { + $od.innerHTML = ''; + $od.remove(); + } + $div.append('
'); + $od = $div.find('.odometer'); + + if (data.leadingZeros) { + var m = format.match(/\([,.\s]?(d+)\)/); + if (m && m[1]) { + max = m[1].length; + max = Math.pow(10, max); + } + m = format.match(/(\(+\))?[,.](d+)/); + if (m && m[2]) { + format += 'd'; + max += Math.pow(0.1, m[2].length + 1); + } else { + max *= 10; + format = format.replace('d', 'dd'); + factor *= 10; + } + $od.parent().addClass('odometer-leading'); + } + + var od = new Odometer({ + el: $od[0], + value: (vis.states[oid + '.val'] || 0) * factor + max, + duration: parseInt(data.duration, 10) || 3000, + theme: data.style || 'car', + format: format + }); + + + if (oid && oid !== 'nothing_selected') { + vis.states.bind(oid + '.val', function (e, newVal) { + od.update(parseFloat(newVal) * factor + max); + }); + od.update(parseFloat(vis.states[oid + '.val']) * factor + max); + } else { + od.update(max); + } + } +}; + +if (vis.editMode) { +/* + "tpl": "tplHqShutter", + "hqoptions" : "{ + "x":1095, + "y":336, + "height":54, + "width":54, + "radius":0, + "zindex":3, + "buttonType":3, + "windowConfig":"1", + "title":"Schlaffzimmer.Rolladen.Aktor", + "room":"Schlafzimmer", + + }", + + * / + /* + "tpl": "tplHqButton", + "hqoptions": "{ + "x":1040, + "y":429, + "height":46, + "width":46, + "radius":22, + "zindex":2, + "iconName":"img/KinderBug.png", + "title":"LampeAmFenster.Aktor", + "room":"Kinderzimmer", + "hm_id":"7480" + }", + */ + /* + "tpl": "tplHqOutTemp", + "hqoptions": "{ + "x":481, + "y":45, + "width":46, + "radius":22, + "zindex":2, + "buttonType":2, + "iconName":"Temperature.png", + "title":"Temperatur.Sensor", + "room":"Balkon", + "hm_id":"12871", + "charts":{ + "navigator":"", + "percentaxis":"true", + "period":"72", + "theme":"dark-blue", + "range":"24", + "scrollbar":"true", + "grouping":"true", + "legend":"inline", + "zoom":"true", + "loader":"false" + } + }", + "informWindow": "{"x":85, + "y":20, + "width":656, + "height":491}" + }, +*//* + "tpl": "tplHqInTemp", + "hqoptions": "{ + "x":877, + "y":430, + "height":44, + "width":46, + "radius":22, + "zindex":2, + "buttonType":1, + "iconName":"Temperature.png", + "title":"Heizung.Regler", + "room":"Kinderzimmer", + "hm_id":"3837", + "hm_idV":"3822", + "charts":{ + "navigator":"", + "percentaxis":"true", + "period":"72", + "theme":"dark-green", + "range":"24", + "scrollbar":"true", + "grouping":"true", + "legend":"inline", + "zoom":"true", + "loader":"false" + } + }", + "informWindow": "{ + "x":500, + "y":253, + "width":800, + "height":400 + }" + */ + + vis.binds.hqwidgets.convertOldWidgets = function (widget) { + if (widget.data && widget.data.hqoptions) { + try { + var hqoptions = JSON.parse(widget.data.hqoptions); + widget.style.height = 45; + widget.style.width = 45; + for (var opt in hqoptions) { + if (opt === 'width') { + widget.style.width = hqoptions.width || 45; + } else if (opt === 'height') { + widget.style.height = hqoptions.height || 45; + } else if (opt === 'radius') { + widget.style['border-radius'] = hqoptions.radius + 'px'; + } else if (opt === 'zindex') { + widget.style['z-index'] = hqoptions.zindex; + } else if (opt === 'iconName') { + widget.data.btIconWidth = 32; + if (hqoptions.iconName === 'Temperature.png') { + widget.data.iconName = 'img/Heating.png' + } else + if (hqoptions.iconName === 'Lamp.png') { + widget.data.iconName = 'img/Lamp.png' + } else + if (hqoptions.iconName && hqoptions.iconName.indexOf('http://') === -1 && hqoptions.iconName[0] !== '/') { + widget.data.iconName = '/' + vis.conn.namespace + '/' + vis.projectPrefix + hqoptions.iconName; + } else { + widget.data.iconName = hqoptions.iconName; + } + } else if (opt === 'iconOn') { + if (hqoptions.iconOn === 'Temperature.png') { + widget.data.iconOn = 'img/Heating.png' + } else + if (hqoptions.iconOn === 'Lamp.png') { + widget.data.iconOn = 'img/Lamp.png' + } else + if (hqoptions.iconOn && hqoptions.iconOn.indexOf('http://') === -1 && hqoptions.iconOn[0] !== '/') { + widget.data.iconOn = '/' + vis.conn.namespace + '/' + vis.projectPrefix + hqoptions.iconOn; + } else { + widget.data.iconOn = hqoptions.iconOn; + } + } else if (opt === 'title') { + widget.data.descriptionLeft = hqoptions.title; + } else if (opt === 'room') { + widget.data.descriptionLeft += '
' + hqoptions.room; + } else if (opt === 'windowConfig') { + var parts = hqoptions.windowConfig.split(','); + widget.data.slide_count = parts.length || 1; + for (var p = 0; p < parts.length; p++) { + if (parts[p] === '0') { + widget.data['slide_type' + (p + 1)] = ''; + } else if (parts[p] === '1') { + widget.data['slide_type' + (p + 1)] = 'left'; + } else if (parts[p] === '2') { + widget.data['slide_type' + (p + 1)] = 'right'; + } else if (parts[p] === '3') { + widget.data['slide_type' + (p + 1)] = 'top'; + } + } + widget.data.border_width = 1; + if (widget.data.hm_id !== undefined) delete widget.data.hm_id; + if (widget.data.digits !== undefined) delete widget.data.digits; + if (widget.data.factor !== undefined) delete widget.data.factor; + } + } + } catch (e) { + console.log('Cannot convert. Invalid JSON in hqoptions: ' + widget.data.hqoptions); + } + delete widget.data.hqoptions; + } + return widget; + }; + + vis.binds.hqwidgets.changedSensorId = function (widgetID, view, newId, attr, isCss, oldValue) { + var index = attr.match(/(\d+)$/); + var bName = (attr === 'oid-slide-handle' + index[1]) ? 'oid-slide-handle-lowbat' : 'oid-slide-sensor-lowbat'; + bName += index[1]; + var fields = {}; + fields[bName] = 'indicator.battery'; + + return vis.binds.hqwidgets.changedId (widgetID, view, newId, fields); + }; + + vis.binds.hqwidgets.changedWindowId = function (widgetID, view, newId, attr, isCss, oldValue) { + if (oldValue && oldValue !== 'nothing_selected') return; + return vis.binds.hqwidgets.changedId (widgetID, view, newId, { + 'oid-battery': 'indicator.battery', + 'oid-working': 'indicator.working', + 'oid-signal': 'indicator.signal', + 'oid-humidity': 'value.humidity' + }); + }; + + vis.binds.hqwidgets.changedId = function (widgetID, view, newId, fields) { + var obj = vis.objects[newId]; + var changed = []; + // If it is real object and SETPOINT + if (obj && obj.common && obj.type === 'state') { + var roles = []; + + // If some attributes are not set + for (var field in fields) { + if (!fields.hasOwnProperty(field)) continue; + if (!vis.views[view].widgets[widgetID].data[field]) roles.push(fields[field]); + } + + if (roles.length) { + var result = vis.findByRoles(newId, roles); + if (result) { + var name; + for (var r in result) { + if (!result.hasOwnProperty(r)) continue; + name = null; + for (field in fields) { + if (!fields.hasOwnProperty(field)) continue; + if (fields[field] == r) { + name = field; + break; + } + } + if (name) { + changed.push(name); + vis.views[view].widgets[widgetID].data[name] = result[r]; + vis.widgets[widgetID].data[name] = result[r]; + } + } + } + } + + if (!vis.views[view].widgets[widgetID].data.descriptionLeft && obj.common.name) { + vis.views[view].widgets[widgetID].data.descriptionLeft = obj.common.name; + } + } + + return changed.length ? changed : null; + }; + + vis.binds.hqwidgets.changedTempId = function (widgetID, view, newId, attr, isCss, oldValue) { + if (oldValue && oldValue !== 'nothing_selected') return; + return vis.binds.hqwidgets.changedId (widgetID, view, newId, { + 'oid-battery': 'indicator.battery', + 'oid-working': 'indicator.working', + 'oid-signal': 'indicator.signal', + 'oid-humidity': 'value.humidity' + }); + }; + + vis.binds.hqwidgets.changedButtonId = function (widgetID, view, newId, attr, isCss, oldValue) { + if (oldValue && oldValue !== 'nothing_selected') return; + return vis.binds.hqwidgets.changedId (widgetID, view, newId, { + 'oid-battery': 'indicator.battery', + 'oid-working': 'indicator.working', + 'oid-signal': 'indicator.signal' + }); + }; + + vis.binds.hqwidgets.changedLockId = function (widgetID, view, newId, attr, isCss, oldValue) { + if (oldValue && oldValue !== 'nothing_selected') return; + return vis.binds.hqwidgets.changedId (widgetID, view, newId, { + 'oid-battery': 'indicator.battery', + 'oid-working': 'indicator.working', + 'oid-signal': 'indicator.signal' + }); + }; + + vis.binds.hqwidgets.changedTemperatureId = function (widgetID, view, newId, attr, isCss, oldValue) { + if (oldValue && oldValue !== 'nothing_selected') return; + return vis.binds.hqwidgets.changedId (widgetID, view, newId, { + 'oid-humidity': 'value.humidity' + }); + }; +} diff --git a/widgets/hqwidgets/js/jquery.knob.js b/widgets/hqwidgets/js/jquery.knob.js new file mode 100644 index 0000000..f0b0029 --- /dev/null +++ b/widgets/hqwidgets/js/jquery.knob.js @@ -0,0 +1,820 @@ +/*!jQuery Knob*/ +/** + * Downward compatible, touchable dial + * + * Version: 1.2.11 + * Requires: jQuery v1.7+ + * + * Copyright (c) 2012 Anthony Terrien + * Under MIT License (http://www.opensource.org/licenses/mit-license.php) + * + * small modifications by bluefox in this version + * + * Thanks to vor, eskimoblood, spiffistan, FabrizioC + */ +(function (factory) { + if (typeof exports === 'object') { + // CommonJS + module.exports = factory(require('jquery')); + } else if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + + /** + * Kontrol library + */ + "use strict"; + + /** + * Definition of globals and core + */ + var k = {}, // kontrol + max = Math.max, + min = Math.min; + + k.c = {}; + k.c.d = $(document); + k.c.t = function (e) { + return e.originalEvent.touches.length - 1; + }; + + /** + * Kontrol Object + * + * Definition of an abstract UI control + * + * Each concrete component must call this one. + * + * k.o.call(this); + * + */ + k.o = function () { + var s = this; + + this.o = null; // array of options + this.$ = null; // jQuery wrapped element + this.i = null; // mixed HTMLInputElement or array of HTMLInputElement + this.g = null; // deprecated 2D graphics context for 'pre-rendering' + this.v = null; // value ; mixed array or integer + this.cv = null; // change value ; not commited value + this.x = 0; // canvas x position + this.y = 0; // canvas y position + this.w = 0; // canvas width + this.h = 0; // canvas height + this.$c = null; // jQuery canvas element + this.c = null; // rendered canvas context + this.t = 0; // touches index + this.isInit = false; + this.fgColor = null; // main color + this.pColor = null; // previous color + this.dH = null; // draw hook + this.cH = null; // change hook + this.eH = null; // cancel hook + this.rH = null; // release hook + this.scale = 1; // scale factor + this.relative = false; + this.relativeWidth = false; + this.relativeHeight = false; + this.$div = null; // component div + + this.run = function () { + var cf = function (e, conf) { + var k; + for (k in conf) { + s.o[k] = conf[k]; + } + s._carve().init(); + s._configure() + ._draw(); + }; + + if (this.$.data('kontroled')) return; + this.$.data('kontroled', true); + + this.extend(); + this.o = $.extend({ + // Config + min: this.$.data('min') !== undefined ? this.$.data('min') : 0, + max: this.$.data('max') !== undefined ? this.$.data('max') : 100, + stopper: true, + readOnly: this.$.data('readonly') || (this.$.attr('readonly') === 'readonly'), + + // UI + cursor: this.$.data('cursor') === true && 30 + || this.$.data('cursor') || 0, + thickness: this.$.data('thickness') + && Math.max(Math.min(this.$.data('thickness'), 1), 0.01) + || 0.35, + lineCap: this.$.data('linecap') || 'butt', + width: this.$.data('width') || 200, + height: this.$.data('height') || 200, + displayInput: this.$.data('displayinput') == null || this.$.data('displayinput'), + displayPrevious: this.$.data('displayprevious'), + fgColor: this.$.data('fgcolor') || '#87CEEB', + inputColor: this.$.data('inputcolor'), + font: this.$.data('font') || 'Arial', + fontWeight: this.$.data('font-weight') || 'bold', + inline: false, + step: this.$.data('step') || 1, + rotation: this.$.data('rotation'), + + // Hooks + draw: null, // function () {} + change: null, // function (value) {} + cancel: null, // function () {} + release: null, // function (value) {} + + // Output formatting, allows to add unit: %, ms ... + format: function(v) { + return v; + }, + parse: function (v) { + return parseFloat(v); + }, + colorize: function (color, v) { + return color; + } + }, this.o + ); + + // finalize options + this.o.flip = this.o.rotation === 'anticlockwise' || this.o.rotation === 'acw'; + if (!this.o.inputColor) { + this.o.inputColor = this.o.fgColor; + } + + // routing value + if (this.$.is('fieldset')) { + + // fieldset = array of integer + this.v = {}; + this.i = this.$.find('input'); + this.i.each(function(k) { + var $this = $(this); + s.i[k] = $this; + s.v[k] = s.o.parse($this.val()); + + $this.bind( + 'change blur', + function () { + var val = {}; + var setByUser = false; + val[k] = $this.val(); + if ($this.data('setByUser')) { + $this.data('setByUser', false); + setByUser = true; + } + s.val(s._validate(val), undefined, setByUser); + } + ); + }); + this.$.find('legend').remove(); + } else { + + // input = integer + this.i = this.$; + this.v = this.o.parse(this.$.val()); + this.v === '' && (this.v = this.o.min); + this.$.bind( + 'change blur', + function () { + var setByUser = false; + if (s.$.data('setByUser')) { + s.$.data('setByUser', false); + setByUser = true; + } + s.val(s._validate(s.o.parse(s.$.val())), undefined, setByUser); + } + ); + + } + + !this.o.displayInput && this.$.hide(); + + // adds needed DOM elements (canvas, div) + this.$c = $(document.createElement('canvas')).attr({ + width: this.o.width, + height: this.o.height + }); + + // wraps all elements in a div + // add to DOM before Canvas init is triggered + this.$div = $('
'); + + this.$.wrap(this.$div).before(this.$c); + this.$div = this.$.parent(); + + if (typeof G_vmlCanvasManager !== 'undefined') { + G_vmlCanvasManager.initElement(this.$c[0]); + } + + this.c = this.$c[0].getContext ? this.$c[0].getContext('2d') : null; + + if (!this.c) { + throw { + name: "CanvasNotSupportedException", + message: "Canvas not supported. Please use excanvas on IE8.0.", + toString: function(){return this.name + ": " + this.message} + } + } + + // hdpi support + this.scale = (window.devicePixelRatio || 1) / ( + this.c.webkitBackingStorePixelRatio || + this.c.mozBackingStorePixelRatio || + this.c.msBackingStorePixelRatio || + this.c.oBackingStorePixelRatio || + this.c.backingStorePixelRatio || 1 + ); + + // detects relative width / height + this.relativeWidth = this.o.width % 1 !== 0 + && this.o.width.indexOf('%'); + this.relativeHeight = this.o.height % 1 !== 0 + && this.o.height.indexOf('%'); + this.relative = this.relativeWidth || this.relativeHeight; + + // computes size and carves the component + this._carve(); + + // prepares props for transaction + if (this.v instanceof Object) { + this.cv = {}; + this.copy(this.v, this.cv); + } else { + this.cv = this.v; + } + + // binds configure event + this.$ + .bind("configure", cf) + .parent() + .bind("configure", cf); + + // finalize init + this._listen() + ._configure() + ._xy() + .init(); + + this.isInit = true; + + this.$.val(this.o.format(this.v)); + this._draw(); + + return this; + }; + + this._carve = function() { + if (this.relative) { + var w = this.relativeWidth ? + this.$div.parent().width() * + parseInt(this.o.width) / 100 + : this.$div.parent().width(), + h = this.relativeHeight ? + this.$div.parent().height() * + parseInt(this.o.height) / 100 + : this.$div.parent().height(); + + // apply relative + this.w = this.h = Math.min(w, h); + } else { + this.w = this.o.width; + this.h = this.o.height; + } + + // finalize div + this.$div.css({ + 'width': this.w + 'px', + 'height': this.h + 'px' + }); + + // finalize canvas with computed width + this.$c.attr({ + width: this.w, + height: this.h + }); + + // scaling + if (this.scale !== 1) { + this.$c[0].width = this.$c[0].width * this.scale; + this.$c[0].height = this.$c[0].height * this.scale; + this.$c.width(this.w); + this.$c.height(this.h); + } + + return this; + } + + this._draw = function () { + + // canvas pre-rendering + var d = true; + + s.g = s.c; + + s.clear(); + + s.dH && (d = s.dH()); + + d !== false && s.draw(); + }; + + this._touch = function (e, x, y) { + var touchMove = function (e) { + var v = s.xy2val( + e.originalEvent.touches[s.t].pageX, + e.originalEvent.touches[s.t].pageY + ); + + if (v == s.cv) return; + + if (s.cH && s.cH(v) === false) return; + + s.change(s._validate(v)); + s._draw(); + }; + + // get touches index + this.t = k.c.t(e); + + // First touch + touchMove(e); + + // Touch events listeners + k.c.d + .bind("touchmove.k", touchMove) + .bind( + "touchend.k", + function () { + k.c.d.unbind('touchmove.k touchend.k'); + s.val(s.cv, undefined, true); + } + ); + + return this; + }; + + this._mouse = function (e) { + var mouseMove = function (e) { + var v = s.xy2val(e.pageX, e.pageY); + + if (v == s.cv) return; + + if (s.cH && (s.cH(v) === false)) return; + + s.change(s._validate(v)); + s._draw(); + }; + + // First click + mouseMove(e); + + // Mouse events listeners + k.c.d + .bind("mousemove.k", mouseMove) + .bind( + // Escape key cancel current change + "keyup.k", + function (e) { + if (e.keyCode === 27) { + k.c.d.unbind("mouseup.k mousemove.k keyup.k"); + + if (s.eH && s.eH() === false) + return; + + s.cancel(); + } + } + ) + .bind( + "mouseup.k", + function (e) { + k.c.d.unbind('mousemove.k mouseup.k keyup.k'); + s.val(s.cv, undefined, true); + } + ); + + return this; + }; + + this._xy = function () { + var o = this.$c.offset(); + this.x = o.left; + this.y = o.top; + + return this; + }; + + this._listen = function () { + if (!this.o.readOnly) { + this.$c + .bind( + "mousedown", + function (e) { + e.preventDefault(); + s._xy()._mouse(e); + } + ) + .bind( + "touchstart", + function (e) { + e.preventDefault(); + s._xy()._touch(e); + } + ); + + this.listen(); + } else { + this.$.attr('readonly', 'readonly'); + } + + if (this.relative) { + $(window).resize(function() { + s._carve().init(); + s._draw(); + }); + } + + return this; + }; + + this._configure = function () { + + // Hooks + if (this.o.draw) this.dH = this.o.draw; + if (this.o.change) this.cH = this.o.change; + if (this.o.cancel) this.eH = this.o.cancel; + if (this.o.release) this.rH = this.o.release; + + if (this.o.displayPrevious) { + this.pColor = this.h2rgba(this.o.fgColor, "0.4"); + this.fgColor = this.h2rgba(this.o.fgColor, "0.6"); + } else { + this.fgColor = this.o.fgColor; + } + + return this; + }; + + this._clear = function () { + this.$c[0].width = this.$c[0].width; + }; + + this._validate = function (v) { + var val = (~~ (((v < 0) ? -0.5 : 0.5) + (v/this.o.step))) * this.o.step; + return Math.round(val * 100) / 100; + }; + + // Abstract methods + this.listen = function () {}; // on start, one time + this.extend = function () {}; // each time configure triggered + this.init = function () {}; // each time configure triggered + this.change = function (v) {}; // on change + this.val = function (v) {}; // on release + this.xy2val = function (x, y) {}; // + this.draw = function () {}; // on change / on release + this.clear = function () { this._clear(); }; + + // Utils + this.h2rgba = function (h, a) { + var rgb; + h = h.substring(1,7) + rgb = [ + parseInt(h.substring(0,2), 16), + parseInt(h.substring(2,4), 16), + parseInt(h.substring(4,6), 16) + ]; + + return "rgba(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + "," + a + ")"; + }; + + this.copy = function (f, t) { + for (var i in f) { + t[i] = f[i]; + } + }; + }; + + + /** + * k.Dial + */ + k.Dial = function () { + k.o.call(this); + + this.startAngle = null; + this.xy = null; + this.radius = null; + this.lineWidth = null; + this.cursorExt = null; + this.w2 = null; + this.PI2 = 2*Math.PI; + + this.extend = function () { + this.o = $.extend({ + bgColor: this.$.data('bgcolor') || '#EEEEEE', + angleOffset: this.$.data('angleoffset') || 0, + angleArc: this.$.data('anglearc') || 360, + inline: true + }, this.o); + }; + + this.val = function (v, triggerRelease, setByUser) { + if (null != v) { + + // reverse format + v = this.o.parse(v); + + if (triggerRelease !== false + && v != this.v + && this.rH + && this.rH(v, setByUser) === false) { return; } + + this.cv = this.o.stopper ? max(min(v, this.o.max), this.o.min) : v; + this.v = this.cv; + this.$.val(this.o.format(this.v)); + this._draw(); + } else { + return this.v; + } + }; + + this.xy2val = function (x, y) { + var a, ret; + + a = Math.atan2( + x - (this.x + this.w2), + - (y - this.y - this.w2) + ) - this.angleOffset; + + if (this.o.flip) { + a = this.angleArc - a - this.PI2; + } + + if (this.angleArc != this.PI2 && (a < 0) && (a > -0.5)) { + + // if isset angleArc option, set to min if .5 under min + a = 0; + } else if (a < 0) { + a += this.PI2; + } + + ret = (a * (this.o.max - this.o.min) / this.angleArc) + this.o.min; + + this.o.stopper && (ret = max(min(ret, this.o.max), this.o.min)); + + return ret; + }; + + this.listen = function () { + + // bind MouseWheel + var s = this, mwTimerStop, + mwTimerRelease, + mw = function (e) { + e.preventDefault(); + + var ori = e.originalEvent, + deltaX = ori.detail || ori.wheelDeltaX, + deltaY = ori.detail || ori.wheelDeltaY, + v = s._validate(s.o.parse(s.$.val())) + + ( + deltaX > 0 || deltaY > 0 + ? s.o.step + : deltaX < 0 || deltaY < 0 ? -s.o.step : 0 + ); + + v = max(min(v, s.o.max), s.o.min); + + s.val(v, false); + + if (s.rH) { + // Handle mousewheel stop + clearTimeout(mwTimerStop); + mwTimerStop = setTimeout(function () { + s.rH(v, true); + mwTimerStop = null; + }, 100); + + // Handle mousewheel releases + if (!mwTimerRelease) { + mwTimerRelease = setTimeout(function () { + if (mwTimerStop) + s.rH(v, true); + mwTimerRelease = null; + }, 200); + } + } + }, + kval, + to, + m = 1, + kv = { + 37: -s.o.step, + 38: s.o.step, + 39: s.o.step, + 40: -s.o.step + }; + + this.$ + .bind( + "keydown", + function (e) { + var kc = e.keyCode; + + // numpad support + if (kc >= 96 && kc <= 105) { + kc = e.keyCode = kc - 48; + } + + kval = parseInt(String.fromCharCode(kc)); + + if (isNaN(kval)) { + (kc !== 13) // enter + && kc !== 8 // bs + && kc !== 9 // tab + && kc !== 189 // - + && (kc !== 190 + || s.$.val().match(/\./)) // . allowed once + && e.preventDefault(); + + // arrows + if ($.inArray(kc,[37,38,39,40]) > -1) { + e.preventDefault(); + + var v = s.o.parse(s.$.val()) + kv[kc] * m; + s.o.stopper && (v = max(min(v, s.o.max), s.o.min)); + + s.change(s._validate(v)); + s._draw(); + + // long time keydown speed-up + to = window.setTimeout(function () { + m *= 2; + }, 30); + } + } + } + ) + .bind( + "keyup", + function (e) { + if (isNaN(kval)) { + if (to) { + window.clearTimeout(to); + to = null; + m = 1; + s.val(s.$.val(), undefined, true); + } + } else { + // kval postcond + (s.$.val() > s.o.max && s.$.val(s.o.max)) + || (s.$.val() < s.o.min && s.$.val(s.o.min)); + } + } + ); + + this.$c.bind("mousewheel DOMMouseScroll", mw); + this.$.bind("mousewheel DOMMouseScroll", mw) + }; + + this.init = function () { + if (this.v < this.o.min + || this.v > this.o.max) { this.v = this.o.min; } + + this.$.val(this.o.format(this.v)); + this.w2 = this.w / 2; + this.cursorExt = this.o.cursor / 100; + this.xy = this.w2 * this.scale; + this.lineWidth = this.xy * this.o.thickness; + this.lineCap = this.o.lineCap; + this.radius = this.xy - this.lineWidth / 2; + + this.o.angleOffset + && (this.o.angleOffset = isNaN(this.o.angleOffset) ? 0 : this.o.angleOffset); + + this.o.angleArc + && (this.o.angleArc = isNaN(this.o.angleArc) ? this.PI2 : this.o.angleArc); + + // deg to rad + this.angleOffset = this.o.angleOffset * Math.PI / 180; + this.angleArc = this.o.angleArc * Math.PI / 180; + + // compute start and end angles + this.startAngle = 1.5 * Math.PI + this.angleOffset; + this.endAngle = 1.5 * Math.PI + this.angleOffset + this.angleArc; + + var s = max( + String(Math.abs(this.o.max)).length, + String(Math.abs(this.o.min)).length, + 2 + ) + 2; + + this.o.displayInput + && this.i.css({ + 'width' : ((this.w / 2 + 4) >> 0) + 'px', + 'height' : ((this.w / 3) >> 0) + 'px', + 'position' : 'absolute', + 'vertical-align' : 'middle', + 'margin-top' : ((this.w / 3) >> 0) + 'px', + 'margin-left' : '-' + ((this.w * 3 / 4 + 2) >> 0) + 'px', + 'border' : 0, + 'background' : 'none', + 'font' : this.o.fontWeight + ' ' + ((this.w / s) >> 0) + 'px ' + this.o.font, + 'text-align' : 'center', + 'color' : this.o.inputColor || this.o.fgColor, + 'padding' : '0px', + '-webkit-appearance': 'none' + }) || this.i.css({ + 'width': '0px', + 'visibility': 'hidden' + }); + }; + + this.change = function (v) { + this.cv = v; + this.$.val(this.o.format(v)); + }; + + this.angle = function (v) { + return (v - this.o.min) * this.angleArc / (this.o.max - this.o.min); + }; + + this.arc = function (v) { + var sa, ea; + v = this.angle(v); + if (this.o.flip) { + sa = this.endAngle + 0.00001; + ea = sa - v - 0.00001; + } else { + sa = this.startAngle - 0.00001; + ea = sa + v + 0.00001; + } + this.o.cursor + && (sa = ea - this.cursorExt) + && (ea = ea + this.cursorExt); + + return { + s: sa, + e: ea, + d: this.o.flip && !this.o.cursor + }; + }; + + this.draw = function () { + var c = this.g, // context + a = this.arc(this.cv), // Arc + pa, // Previous arc + r = 1; + + c.lineWidth = this.lineWidth; + c.lineCap = this.lineCap; + + if (this.o.bgColor !== "none") { + c.beginPath(); + c.strokeStyle = this.o.bgColor; + c.arc(this.xy, this.xy, this.radius, this.endAngle - 0.00001, this.startAngle + 0.00001, true); + c.stroke(); + } + + if (this.o.displayPrevious) { + pa = this.arc(this.v); + c.beginPath(); + c.strokeStyle = this.o.colorize(this.pColor, this.v, true); + c.arc(this.xy, this.xy, this.radius, pa.s, pa.e, pa.d); + c.stroke(); + r = this.cv == this.v; + } + + c.beginPath(); + c.strokeStyle = r ? this.o.colorize(this.o.fgColor, this.cv, true) : this.o.colorize(this.o.fgColor, this.cv, false); + c.arc(this.xy, this.xy, this.radius, a.s, a.e, a.d); + c.stroke(); + }; + + this.cancel = function () { + this.val(this.v); + }; + }; + + $.fn.dial = $.fn.knobHQ = function (o) { + return this.each( + function () { + var d = new k.Dial(); + d.o = o; + d.$ = $(this); + d.run(); + } + ).parent(); + }; + +})); diff --git a/widgets/hqwidgets/js/odometer.min.js b/widgets/hqwidgets/js/odometer.min.js new file mode 100644 index 0000000..2c08ad7 --- /dev/null +++ b/widgets/hqwidgets/js/odometer.min.js @@ -0,0 +1,2 @@ +/*! odometer 0.4.7 */ +(function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G=[].slice;q='',n=''+q+"",d='8'+n+"",g='',c="(,ddd).dd",h=/^\(?([^)]*)\)?(?:(.)(d+))?$/,i=30,f=2e3,a=20,j=2,e=.5,k=1e3/i,b=1e3/a,o="transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd",y=document.createElement("div").style,p=null!=y.transition||null!=y.webkitTransition||null!=y.mozTransition||null!=y.oTransition,w=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,l=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,s=function(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.children[0]},v=function(a,b){return a.className=a.className.replace(new RegExp("(^| )"+b.split(" ").join("|")+"( |$)","gi")," ")},r=function(a,b){return v(a,b),a.className+=" "+b},z=function(a,b){var c;return null!=document.createEvent?(c=document.createEvent("HTMLEvents"),c.initEvent(b,!0,!0),a.dispatchEvent(c)):void 0},u=function(){var a,b;return null!=(a=null!=(b=window.performance)&&"function"==typeof b.now?b.now():void 0)?a:+new Date},x=function(a,b){return null==b&&(b=0),b?(a*=Math.pow(10,b),a+=.5,a=Math.floor(a),a/=Math.pow(10,b)):Math.round(a)},A=function(a){return 0>a?Math.ceil(a):Math.floor(a)},t=function(a){return a-x(a)},C=!1,(B=function(){var a,b,c,d,e;if(!C&&null!=window.jQuery){for(C=!0,d=["html","text"],e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(function(a){var b;return b=window.jQuery.fn[a],window.jQuery.fn[a]=function(a){var c;return null==a||null==(null!=(c=this[0])?c.odometer:void 0)?b.apply(this,arguments):this[0].odometer.update(a)}}(a));return e}})(),setTimeout(B,0),m=function(){function a(b){var c,d,e,g,h,i,l,m,n,o,p=this;if(this.options=b,this.el=this.options.el,null!=this.el.odometer)return this.el.odometer;this.el.odometer=this,m=a.options;for(d in m)g=m[d],null==this.options[d]&&(this.options[d]=g);null==(h=this.options).duration&&(h.duration=f),this.MAX_VALUES=this.options.duration/k/j|0,this.resetFormat(),this.value=this.cleanValue(null!=(n=this.options.value)?n:""),this.renderInside(),this.render();try{for(o=["innerHTML","innerText","textContent"],i=0,l=o.length;l>i;i++)e=o[i],null!=this.el[e]&&!function(a){return Object.defineProperty(p.el,a,{get:function(){var b;return"innerHTML"===a?p.inside.outerHTML:null!=(b=p.inside.innerText)?b:p.inside.textContent},set:function(a){return p.update(a)}})}(e)}catch(q){c=q,this.watchForMutations()}}return a.prototype.renderInside=function(){return this.inside=document.createElement("div"),this.inside.className="odometer-inside",this.el.innerHTML="",this.el.appendChild(this.inside)},a.prototype.watchForMutations=function(){var a,b=this;if(null!=l)try{return null==this.observer&&(this.observer=new l(function(){var a;return a=b.el.innerText,b.renderInside(),b.render(b.value),b.update(a)})),this.watchMutations=!0,this.startWatchingMutations()}catch(c){a=c}},a.prototype.startWatchingMutations=function(){return this.watchMutations?this.observer.observe(this.el,{childList:!0}):void 0},a.prototype.stopWatchingMutations=function(){var a;return null!=(a=this.observer)?a.disconnect():void 0},a.prototype.cleanValue=function(a){var b;return"string"==typeof a&&(a=a.replace(null!=(b=this.format.radix)?b:".",""),a=a.replace(/[.,]/g,""),a=a.replace("","."),a=parseFloat(a,10)||0),x(a,this.format.precision)},a.prototype.bindTransitionEnd=function(){var a,b,c,d,e,f,g=this;if(!this.transitionEndBound){for(this.transitionEndBound=!0,b=!1,e=o.split(" "),f=[],c=0,d=e.length;d>c;c++)a=e[c],f.push(this.el.addEventListener(a,function(){return b?!0:(b=!0,setTimeout(function(){return g.render(),b=!1,z(g.el,"odometerdone")},0),!0)},!1));return f}},a.prototype.resetFormat=function(){var a,b,d,e,f,g,i,j;if(a=null!=(i=this.options.format)?i:c,a||(a="d"),d=h.exec(a),!d)throw new Error("Odometer: Unparsable digit format");return j=d.slice(1,4),g=j[0],f=j[1],b=j[2],e=(null!=b?b.length:void 0)||0,this.format={repeating:g,radix:f,precision:e}},a.prototype.render=function(a){var b,c,d,e,f,g,h;for(null==a&&(a=this.value),this.stopWatchingMutations(),this.resetFormat(),this.inside.innerHTML="",f=this.options.theme,b=this.el.className.split(" "),e=[],g=0,h=b.length;h>g;g++)c=b[g],c.length&&((d=/^odometer-theme-(.+)$/.exec(c))?f=d[1]:/^odometer(-|$)/.test(c)||e.push(c));return e.push("odometer"),p||e.push("odometer-no-transitions"),e.push(f?"odometer-theme-"+f:"odometer-auto-theme"),this.el.className=e.join(" "),this.ribbons={},this.formatDigits(a),this.startWatchingMutations()},a.prototype.formatDigits=function(a){var b,c,d,e,f,g,h,i,j,k;if(this.digits=[],this.options.formatFunction)for(d=this.options.formatFunction(a),j=d.split("").reverse(),f=0,h=j.length;h>f;f++)c=j[f],c.match(/0-9/)?(b=this.renderDigit(),b.querySelector(".odometer-value").innerHTML=c,this.digits.push(b),this.insertDigit(b)):this.addSpacer(c);else for(e=!this.format.precision||!t(a)||!1,k=a.toString().split("").reverse(),g=0,i=k.length;i>g;g++)b=k[g],"."===b&&(e=!0),this.addDigit(b,e)},a.prototype.update=function(a){var b,c=this;return a=this.cleanValue(a),(b=a-this.value)?(v(this.el,"odometer-animating-up odometer-animating-down odometer-animating"),b>0?r(this.el,"odometer-animating-up"):r(this.el,"odometer-animating-down"),this.stopWatchingMutations(),this.animate(a),this.startWatchingMutations(),setTimeout(function(){return c.el.offsetHeight,r(c.el,"odometer-animating")},0),this.value=a):void 0},a.prototype.renderDigit=function(){return s(d)},a.prototype.insertDigit=function(a,b){return null!=b?this.inside.insertBefore(a,b):this.inside.children.length?this.inside.insertBefore(a,this.inside.children[0]):this.inside.appendChild(a)},a.prototype.addSpacer=function(a,b,c){var d;return d=s(g),d.innerHTML=a,c&&r(d,c),this.insertDigit(d,b)},a.prototype.addDigit=function(a,b){var c,d,e,f;if(null==b&&(b=!0),"-"===a)return this.addSpacer(a,null,"odometer-negation-mark");if("."===a)return this.addSpacer(null!=(f=this.format.radix)?f:".",null,"odometer-radix-mark");if(b)for(e=!1;;){if(!this.format.repeating.length){if(e)throw new Error("Bad odometer format without digits");this.resetFormat(),e=!0}if(c=this.format.repeating[this.format.repeating.length-1],this.format.repeating=this.format.repeating.substring(0,this.format.repeating.length-1),"d"===c)break;this.addSpacer(c)}return d=this.renderDigit(),d.querySelector(".odometer-value").innerHTML=a,this.digits.push(d),this.insertDigit(d)},a.prototype.animate=function(a){return p&&"count"!==this.options.animation?this.animateSlide(a):this.animateCount(a)},a.prototype.animateCount=function(a){var c,d,e,f,g,h=this;if(d=+a-this.value)return f=e=u(),c=this.value,(g=function(){var i,j,k;return u()-f>h.options.duration?(h.value=a,h.render(),void z(h.el,"odometerdone")):(i=u()-e,i>b&&(e=u(),k=i/h.options.duration,j=d*k,c+=j,h.render(Math.round(c))),null!=w?w(g):setTimeout(g,b))})()},a.prototype.getDigitCount=function(){var a,b,c,d,e,f;for(d=1<=arguments.length?G.call(arguments,0):[],a=e=0,f=d.length;f>e;a=++e)c=d[a],d[a]=Math.abs(c);return b=Math.max.apply(Math,d),Math.ceil(Math.log(b+1)/Math.log(10))},a.prototype.getFractionalDigitCount=function(){var a,b,c,d,e,f,g;for(e=1<=arguments.length?G.call(arguments,0):[],b=/^\-?\d*\.(\d*?)0*$/,a=f=0,g=e.length;g>f;a=++f)d=e[a],e[a]=d.toString(),c=b.exec(e[a]),e[a]=null==c?0:c[1].length;return Math.max.apply(Math,e)},a.prototype.resetDigits=function(){return this.digits=[],this.ribbons=[],this.inside.innerHTML="",this.resetFormat()},a.prototype.animateSlide=function(a){var b,c,d,f,g,h,i,j,k,l,m,n,o,p,q,s,t,u,v,w,x,y,z,B,C,D,E;if(s=this.value,j=this.getFractionalDigitCount(s,a),j&&(a*=Math.pow(10,j),s*=Math.pow(10,j)),d=a-s){for(this.bindTransitionEnd(),f=this.getDigitCount(s,a),g=[],b=0,m=v=0;f>=0?f>v:v>f;m=f>=0?++v:--v){if(t=A(s/Math.pow(10,f-m-1)),i=A(a/Math.pow(10,f-m-1)),h=i-t,Math.abs(h)>this.MAX_VALUES){for(l=[],n=h/(this.MAX_VALUES+this.MAX_VALUES*b*e),c=t;h>0&&i>c||0>h&&c>i;)l.push(Math.round(c)),c+=n;l[l.length-1]!==i&&l.push(i),b++}else l=function(){E=[];for(var a=t;i>=t?i>=a:a>=i;i>=t?a++:a--)E.push(a);return E}.apply(this);for(m=w=0,y=l.length;y>w;m=++w)k=l[m],l[m]=Math.abs(k%10);g.push(l)}for(this.resetDigits(),D=g.reverse(),m=x=0,z=D.length;z>x;m=++x)for(l=D[m],this.digits[m]||this.addDigit(" ",m>=j),null==(u=this.ribbons)[m]&&(u[m]=this.digits[m].querySelector(".odometer-ribbon-inner")),this.ribbons[m].innerHTML="",0>d&&(l=l.reverse()),o=C=0,B=l.length;B>C;o=++C)k=l[o],q=document.createElement("div"),q.className="odometer-value",q.innerHTML=k,this.ribbons[m].appendChild(q),o===l.length-1&&r(q,"odometer-last-value"),0===o&&r(q,"odometer-first-value");return 0>t&&this.addDigit("-"),p=this.inside.querySelector(".odometer-radix-mark"),null!=p&&p.parent.removeChild(p),j?this.addSpacer(this.format.radix,this.digits[j-1],"odometer-radix-mark"):void 0}},a}(),m.options=null!=(E=window.odometerOptions)?E:{},setTimeout(function(){var a,b,c,d,e;if(window.odometerOptions){d=window.odometerOptions,e=[];for(a in d)b=d[a],e.push(null!=(c=m.options)[a]?(c=m.options)[a]:c[a]=b);return e}},0),m.init=function(){var a,b,c,d,e,f;if(null!=document.querySelectorAll){for(b=document.querySelectorAll(m.options.selector||".odometer"),f=[],c=0,d=b.length;d>c;c++)a=b[c],f.push(a.odometer=new m({el:a,value:null!=(e=a.innerText)?e:a.textContent}));return f}},null!=(null!=(F=document.documentElement)?F.doScroll:void 0)&&null!=document.createEventObject?(D=document.onreadystatechange,document.onreadystatechange=function(){return"complete"===document.readyState&&m.options.auto!==!1&&m.init(),null!=D?D.apply(this,arguments):void 0}):document.addEventListener("DOMContentLoaded",function(){return m.options.auto!==!1?m.init():void 0},!1),"function"==typeof define&&define.amd?define(["jquery"],function(){return m}):"undefined"!=typeof exports&&null!==exports?module.exports=m:window.Odometer=m}).call(this); \ No newline at end of file