Compare commits

...

357 commits

Author SHA1 Message Date
d82bd08d12 Merge pull request 'feature/3-migrate-from-grunt-to-webpack' (#13) from feature/3-migrate-from-grunt-to-webpack into develop
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #13
2021-02-24 17:01:19 +01:00
5d6f519564 Use newer docker image for build.
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2021-02-24 16:56:43 +01:00
2fdbbe888e Delete Gruntfile.js.
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-24 16:51:54 +01:00
a45d25ded6 Reorganize all build related files into a more or less sensible folder structure. 2021-02-24 16:45:25 +01:00
09b6658788 Remove all dependencies on grunt and the like. 2021-02-24 16:28:25 +01:00
3cb1a940f0 Generate the CSS files by rollup as well. Grunt is now obsolete.
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-24 16:19:00 +01:00
41c8f57146 Move all build config javascript files to a dedicated folder. 2021-02-24 14:30:29 +01:00
e06d1d6f73 Simplify all rollup build configs.
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-24 13:45:07 +01:00
621468b27f Build JS assets with rollup instead of grunt.
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-24 13:19:33 +01:00
b6a368040c Don't call grunt directly, thus decoupling it from the build process.
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-24 10:25:08 +01:00
4f82a9175f Merge pull request 'Run npm audit fix' (#11) from feature/3-migrate-from-grunt-to-webpack into develop
Reviewed-on: #11
2021-02-24 09:48:00 +01:00
4979cb2371 Run npm audit fix 2021-02-24 09:39:23 +01:00
079bda7fb0 Merge branch 'feature/build-on-drone-ci' of manuel/uhr into develop
All checks were successful
continuous-integration/drone/push Build is passing
2019-05-04 00:25:58 +02:00
dd8356861f Make the test less strict.
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2019-05-04 00:21:38 +02:00
92817becc8 Lift version to 9.0.0-dev.0, since there were several large dependency upgrades
Some checks failed
continuous-integration/drone/pr Build is failing
continuous-integration/drone/push Build is failing
2019-05-04 00:04:11 +02:00
1655a24aa4 Fix test again (to run on Linux, screw Windows) and re-add all files in dist/.
Some checks failed
continuous-integration/drone/push Build is failing
2019-05-03 23:54:30 +02:00
3355ee5cf5 Various clean ups
All checks were successful
continuous-integration/drone/push Build is passing
2019-05-03 23:52:23 +02:00
40d762f90a Add rebuilt file
All checks were successful
continuous-integration/drone/push Build is passing
2019-05-03 23:44:03 +02:00
864f0052b4 Fix test 2019-05-03 23:43:51 +02:00
1583f73220 Don't include deprecated jquery-ui.core.js, which breaks everything. 2019-05-03 23:43:10 +02:00
5a3e672b9c Fix various linting errors 2019-05-03 22:27:16 +02:00
82f867a8ec Update all dependencies to their latest versions
Some checks failed
continuous-integration/drone/push Build is failing
2019-05-03 19:01:49 +02:00
17fd6f70b8 Add .drone.yml for continuous integration on Drone CI.
All checks were successful
continuous-integration/drone/push Build is passing
2019-05-03 18:48:36 +02:00
d7581628af Fix Readme
Gitea renders differently. Need to fix.
2018-06-22 12:15:54 +02:00
a482920f44 Merge branch 'feature/remove-bower' into 'develop'
Feature/remove bower



See merge request !49
2016-06-27 20:49:58 +02:00
9f63969eff revert tests to previous state 2016-06-27 20:44:55 +02:00
fc8dc28fb7 final clean up 2016-06-27 20:34:43 +02:00
bb0dab5434 the build runs! 2016-06-27 20:26:20 +02:00
c5bc72c0ad update .gitlab-ci.yml 2016-06-27 19:49:06 +02:00
909e263d41 moved stuff from bower to npm, adapted gruntfile. tests fail for now. 2016-06-27 18:07:24 +02:00
852ff910f0 update version to next dev (8.0.4-dev.0) 2016-06-27 01:49:37 +02:00
61d180fcfd release version 8.0.3, as 8.0.2 is utterly unusable. sorry. 2016-06-27 01:48:21 +02:00
eec51682ac Merge branch 'master' into develop
Conflicts:
	dist/libs.js
	dist/libs.min.js
2016-06-27 01:45:28 +02:00
cf27fa9d04 release version 8.0.2 2016-06-27 01:42:40 +02:00
57aba62acf Merge branch 'feature/set-up-environments' into 'develop'
Feature/set up environments

enable continuous delivery!

See merge request !48
2016-06-27 01:27:26 +02:00
cdb30e405f make sure we're using a javascript-enabled runner for the builds 2016-06-27 01:19:34 +02:00
1c2015b41b obviously, we don't want to print the destination path in the build
output
2016-06-27 01:13:09 +02:00
7d774e6f6a also relete hidden files and directories 2016-06-27 01:12:12 +02:00
f6a24858d0 making progress: the deploy script seems somewhat useful now. 2016-06-27 01:10:08 +02:00
1163a6e357 perhaps use switch-statement? 2016-06-27 00:58:36 +02:00
36a94a07a7 some testing 2016-06-27 00:54:38 +02:00
9cb3b60335 ... and do it properly 2016-06-27 00:49:00 +02:00
c218052556 try to simplify stuff 2016-06-27 00:47:59 +02:00
c7dc93e092 fixed CD. 2016-06-27 00:28:31 +02:00
65c113913f first attempt at CD! 2016-06-27 00:23:08 +02:00
7448563449 use job template to prevent copy&pasting 2016-06-27 00:11:18 +02:00
491a130991 fixed path to deploy.sh (hopefully) 2016-06-27 00:03:40 +02:00
9a2c22ec64 added new environment for deploying branch builds 2016-06-27 00:00:20 +02:00
12838e31ee only include minified files in artifact 2016-06-26 23:56:15 +02:00
c942c42bf6 reverted ALL unintended changes now 2016-06-26 23:50:54 +02:00
5206457484 Revert "even the tests are linted!"
This reverts commit c666ee8022.
2016-06-26 23:46:44 +02:00
797088c988 Revert "... and more linting"
This reverts commit 6f7a77e355.
2016-06-26 23:46:33 +02:00
49b4fc4dfe Revert "get rid of more linting errors"
This reverts commit 0035264f27.
2016-06-26 23:46:20 +02:00
9e4a00e4bc Revert "get rid of linting errors, hopefully"
This reverts commit 0b26225c87.
2016-06-26 23:46:02 +02:00
bc835598a4 these files were committes accidentally 2016-06-26 23:41:41 +02:00
f810da8f0e force-removing the directories might prevent the cleanup builds from
failing all the time.
2016-06-26 23:36:56 +02:00
c666ee8022 even the tests are linted! 2016-06-26 23:35:04 +02:00
6f7a77e355 ... and more linting 2016-06-26 23:29:50 +02:00
0035264f27 get rid of more linting errors 2016-06-26 23:26:45 +02:00
0b26225c87 get rid of linting errors, hopefully 2016-06-26 23:22:05 +02:00
63cbc1da3c define cleanup jobs 2016-06-26 23:02:18 +02:00
a64b1d02e7 clean up after we're done 2016-06-26 22:53:54 +02:00
b919bc2243 perhaps a new variable fixes it 2016-06-26 22:51:03 +02:00
574d3ad271 tried to fix setting of PATH 2016-06-26 22:44:26 +02:00
306b54c3e9 try and use locally installed node packages of bower and grunt 2016-06-26 22:42:49 +02:00
dc93de27e5 fixed YAML, again 2016-06-26 22:28:07 +02:00
3e2a37f3e7 fixed YAML 2016-06-26 22:22:09 +02:00
2394301b10 first attempt at creating environments and some sophisticated CI stuff. 2016-06-26 22:20:30 +02:00
b57ee1534a Merge branch '29-typo-in-readme-md' into 'develop'
fixed typo

Closes #29

See merge request !47
2016-05-28 21:33:50 +02:00
6075d74022 fixed typo 2016-05-28 21:24:30 +02:00
a3cbfe8de5 Merge branch 'feature/update-markdown' into 'develop'
updated README.md to use syntax highlighting in the markdown



See merge request !46
2016-05-27 17:52:38 +02:00
4ff55d967e updated README.md to use syntax highlighting in the markdown 2016-05-17 22:16:39 +02:00
a261d807cc Merge branch 'bugfix/build-failure' into 'develop'
Bugfix/build failure

Fixed the build failure. Lifted all dependencies to their latest versions.

See merge request !45
2015-10-07 19:50:35 +02:00
2daf130c68 updated all dependencies to the latest available versions and re-generated some files in dist/ 2015-10-07 19:43:41 +02:00
04afcad428 okay, so deleting these dirs is not required 2015-10-07 19:16:03 +02:00
3b2fcbe16e tried to fix .gitlab-ci.yml 2015-10-07 19:14:09 +02:00
fcf16cc80e renamed COPYING to LICENSE 2015-10-07 19:00:37 +02:00
2bc132b76b incremented version to next dev: 8.0.2-dev.0 2015-07-15 20:02:05 +02:00
f07ccb9918 updated version to next release, 8.0.1 2015-07-15 17:51:13 +02:00
5db6f042cf Merge branch 'feature/language-pt' into 'develop'
Feature/language pt

See merge request !44
2015-07-15 17:47:54 +02:00
b98913ccf8 added dist-files 2015-07-15 17:43:35 +02:00
5944c3d487 added "fast forward" test page and added license header to the existing
test file
2015-07-15 17:36:17 +02:00
250a5beb73 Merge branch 'develop' into feature/language-pt 2015-07-14 00:53:31 +02:00
672c453b90 added dist-files for portuguese 2015-07-14 00:39:34 +02:00
7c227ef572 corrected language string 2015-07-14 00:39:08 +02:00
2ab2e36349 added dist-files for portuguese language 2015-07-14 00:38:07 +02:00
2f57cb4054 Merge branch 'feature/gitlab-ci-yml' into 'develop'
added .gitlab-ci.yml build descriptor

See merge request !43
2015-07-14 00:09:47 +02:00
9ead720de6 added .gitlab-ci.yml build descriptor 2015-07-14 00:06:29 +02:00
e19e11e4d6 added portuguese translation 2015-07-13 23:53:44 +02:00
6e7e5afc55 Merge branch 'bugfix/issue-28-fix-readme' into 'develop'
fixed paragraph 6 in the README.md. this fixes #28

See merge request !42
2015-06-17 00:11:19 +02:00
11495c1cca fixed paragraph 6 in the README.md. this fixes #28 2015-06-17 00:05:30 +02:00
e104df7aa9 increment version number to next dev cycle 2015-01-19 01:57:40 +01:00
76a97046c8 incremented version to 8.0.0 2015-01-19 01:54:29 +01:00
2344a400d8 Merge branch 'feature/update-toolchain' into 'develop'
Feature/update toolchain

This will fix #19 , #20 , #21 .

See merge request !41
2015-01-19 01:50:46 +01:00
ef6d48b906 Merge branch 'feature/unify-versioninfo' into 'feature/update-toolchain'
Feature/unify versioninfo

This will fix #21 .

See merge request !40
2015-01-19 01:19:54 +01:00
80857bd69a Merge branch 'feature/update-toolchain' into feature/unify-versioninfo 2015-01-19 01:14:29 +01:00
2bc3298628 fixed typo 2015-01-19 01:11:41 +01:00
055cb6aca6 fixed path to the main uhr.css in the README.md 2015-01-19 01:09:38 +01:00
b8fbffdf3e also invoke the version task on grunt buildonly. 2015-01-19 01:07:09 +01:00
91ac2ce048 added grunt-version. what's now left to do is automatic/semi-automatic
incrementation of version numbers.
i'm not so sure anymore whether the files in dist/ should contain the
version number in their filename. i'll ponder on that and decide later.
2015-01-19 01:01:06 +01:00
6692d2d6d9 Merge branch 'feature/update-toolchain' into feature/unify-versioninfo
Conflicts:
	Gruntfile.js
2015-01-19 00:51:15 +01:00
316e045770 also minify the CSS files and store them in dist/ 2015-01-19 00:42:16 +01:00
959e4a41aa Merge branch 'feature/update-toolchain' into feature/unify-versioninfo 2015-01-18 22:39:58 +01:00
607eeabfd2 use separate .jshintrc for the tests. this allows us to remove the
"predef" section from the productive .jshintrc, which is good.
2015-01-18 21:49:19 +01:00
bb69485b9f jshint didn't like the "e" variable, because of some possible problem in
IE8; so I renamed it to "elem".
2015-01-18 21:40:36 +01:00
1e314cba57 added more tests:
- test config options (default and custom)
- test invalid parameters (language and theme)
- test URL params (long and short)
2015-01-18 21:36:55 +01:00
2295283ba4 Merge branch 'feature/update-toolchain' into feature/unify-versioninfo 2015-01-18 18:54:18 +01:00
a8f8aa0947 first tests with firefox and chrome seem to indicate that it is working.
i will have to deploy it onto my test server and perform some more
tests.
2015-01-18 18:31:23 +01:00
5e85458936 added a manifest.appcache file; first draft. 2015-01-18 18:03:49 +01:00
e035362905 inserted some commented code in order to remind myself what to do about
versioning. it's very tedious to maintain the version in 3 different
places, so this needs to be handled by the build process, and one and
only one source must be provided for the final version string; that is
probably going to be package.json.
2015-01-18 17:24:17 +01:00
dfac2ae47a executed grunt in order to update the version info in the dist/* files 2015-01-18 17:17:17 +01:00
8c08c93b1d added description for the cookiePath config option, which has been
completely undocumented so far. my bad.
2015-01-18 17:11:32 +01:00
3c193c5472 Merge branch 'feature/update-toolchain' into feature/update-docs 2015-01-18 17:01:37 +01:00
9218b331f9 Merge branch 'develop' into feature/update-toolchain
Conflicts:
	VERSION
2015-01-18 16:53:58 +01:00
c1a17a315d Merge branch 'release' into develop
Conflicts:
	manifest.appcache
2015-01-18 16:52:08 +01:00
0684b57321 updated the version to 8.0.0-dev.0, as that's actually correct for a
semver string; v7 has been released, so the next one needs to be
8.0.0-PRE or something; increasing major version because ôf
backwards-incompatible changes
2015-01-18 16:50:11 +01:00
684f502cfd updated info/index.html 2015-01-18 16:44:28 +01:00
5bed926072 clarified the use of URL configuration and pointed out that the settings
apply to all Uhr elements on a page.
2015-01-18 16:18:06 +01:00
1eb733b069 updated README.md to reflect the latest changes; also added new
paragraph about the URL parameter configuration, which was forgotten in
the previous releaseupdated README.md to reflect the latest changes;
also added new paragraph about the URL parameter configuration, which
was forgotten in the previous release..
2015-01-18 16:14:23 +01:00
0c7aebc200 added the first two test methods that actually work! 2015-01-16 17:50:23 +01:00
51d21d8ff6 added a few more build targets:
- base: includes the main uhr.js plus de_CH
- baselangs: includes all languages except de_CH
- complete: includes uhr.js and all languages (existed before)
- langs: includes all languages (existed before)
- main: includes only uhr.js (existed before)
- libs: includes required libs: jquery, jquery-ui (core + widget),
  jquery-cookie

updated info/index.html
2015-01-16 15:48:51 +01:00
d0a28a0097 Merge branch 'develop' into feature/update-toolchain 2015-01-15 17:23:26 +01:00
9848cc4961 Merge branch 'feature/updatecharsetmetatag' into 'develop'
Feature/updatecharsetmetatag

See merge request !38
2015-01-15 17:21:37 +01:00
057d2a51a8 Merge branch 'develop' into feature/updatecharsetmetatag
Conflicts:
	index.html
	info/index.html
2015-01-15 17:20:32 +01:00
319c08d74e Merge branch 'feature/no-appcache' into 'develop'
Feature/no appcache

See merge request !39
2015-01-15 17:15:48 +01:00
5932eba348 also updated the info/index.html file 2015-01-15 15:07:53 +01:00
a28df80158 deleted manifest.appcache and removed the attribute from the html tag.
appcache causes a major headache on firefox, need to really look into
that one day!
2015-01-15 15:06:53 +01:00
f9b6bd6117 - added lang=de to the html tag
- changed the charset meta tag to the new and simpler HTML5 syntax
2015-01-15 15:04:06 +01:00
2e55875262 - updated version to a correct semver string
- disable qunit in the default grunt task, as no tests are available yet
  and that causes the build to fail (i don't like the --force option)
2015-01-15 14:48:10 +01:00
fa79447259 fixed name of minified main js file 2015-01-13 20:16:32 +01:00
387a89dcbc "gruntified" the libraries, too. and updated the license and the version
information in Gruntfile.js and package.json
2015-01-13 20:06:02 +01:00
351d9b6534 fixed the path in the HTML file 2015-01-13 19:52:04 +01:00
c990752abc corrected absolutely silly syntax error in Gruntfile.js and added /dist
directory
2015-01-13 19:50:48 +01:00
018367f1ce first step of gruntifying/nodifying/bowerifying the whole thing 2015-01-12 18:49:30 +01:00
589751be5f increased version to next development cycle 2014-12-07 23:50:39 +01:00
b431a46dfb updated version to 7.0 2014-12-07 23:48:48 +01:00
02599b22af Merge branch 'feature/#17_urlparameters' into 'develop'
Feature/#17 urlparameters

Add URL parameters. Fixes #17

See merge request !37
2014-12-07 23:46:29 +01:00
3b497435ae support long named parameters 2014-12-07 23:45:33 +01:00
f952690dd1 added parameters for mode and status 2014-12-07 13:03:34 +01:00
a444094779 first version of URL parameters. l=language, t=theme. 2014-12-07 12:59:33 +01:00
04b8fa02a8 updated version to 6.7-next for next dev cycle 2014-12-05 22:36:59 +01:00
4c867f50a7 updated version to 6.7 2014-12-05 22:35:31 +01:00
9669f25312 Merge branch 'develop' into release 2014-12-05 22:34:46 +01:00
3deaafaebe Merge branch 'bugfix/#14' into 'develop'
Bugfix/#14

See merge request !36
2014-12-05 22:30:11 +01:00
7dda927326 removed unnecessary variable; fixes #14 2014-12-05 22:29:01 +01:00
c53f1479f2 Merge branch 'feature/lang-dk' into 'develop'
Feature/lang dk

Fixes #15

See merge request !35
2014-12-05 22:26:08 +01:00
80864851eb minor re-formatting 2014-12-05 22:25:14 +01:00
6690ea4978 added danish translation and updated documentation accordingly 2014-12-05 22:15:09 +01:00
2ac305c640 Merge branch 'develop' into 'master'
Develop

This will fix #13 (as soon as the tag is made).

See merge request !34
2014-12-05 20:54:11 +01:00
78eea9ac1e Merge branch 'release/6.6' into 'develop'
Release/6.6

See merge request !33
2014-12-05 20:52:48 +01:00
284ec8fb8c updated version to 6.6 2014-12-05 20:51:37 +01:00
58e93c0d6d Merge branch 'feature/lang-nl' into 'develop'
Feature/lang nl

See merge request !32

Fixes #12
2014-12-05 20:43:08 +01:00
df856c22f7 fixed the info/index.html file 2014-12-05 20:41:21 +01:00
4e902cb6a1 updated version and fixed bugs in the NL translation 2014-11-24 12:40:17 +01:00
8ce86f4d4c added first version of dutch translation 2014-11-24 12:29:41 +01:00
36f0bdf93f Merge branch 'develop' into 'master'
Develop

The MR will resolve #11

See merge request !31
2014-11-20 03:53:18 +01:00
5cf26ca23a updated version to next release 2014-11-20 03:51:39 +01:00
18319d15e6 Merge branch 'feature/language-spanish' into 'develop'
Feature/language spanish

Merge the spanish feature into develop

See merge request !30
2014-11-20 03:50:19 +01:00
4c6567cc0f updated version and manifest.appcache 2014-11-20 03:42:22 +01:00
72de912636 added spanish translation 2014-11-20 03:41:30 +01:00
0e137ec0b4 Merge branch 'develop' 2014-10-22 00:01:32 +02:00
4ab7b71848 updated version 2014-10-22 00:01:17 +02:00
ae911be61d Merge branch 'feature/redo-controls-layout' into 'develop'
Feature/redo controls layout

This MR should fix #9 .

See merge request !29
2014-10-21 23:56:19 +02:00
8a05f00f6e updated manifest version 2014-10-19 18:53:20 +02:00
c345209450 add some margin between control-button and control-panel 2014-10-19 18:52:19 +02:00
f6904bfdd5 first version of re-done config area. needs testing on mobile and other
browsers than firefox.
2014-10-19 18:25:36 +02:00
e9d0d57c15 Merge branch 'feature/seconds-as-firstclass-citizens' into 'develop'
Feature/seconds as firstclass citizens

See merge request !28
2014-10-18 17:23:10 +02:00
2a45b8fc0b updated manifest 2014-10-18 17:22:37 +02:00
665fc71dd3 Merge branch 'feature/seconds-as-firstclass-citizens' into 'develop'
Feature/seconds as firstclass citizens

This closes #8

See merge request !27
2014-10-18 17:21:38 +02:00
ff4c90c673 updated documentation 2014-10-18 17:18:45 +02:00
92abc8e15b bugfix: initial display mode 2014-10-18 17:11:24 +02:00
9f37f1f971 removed de_CH-seconds layout 2014-10-18 16:45:33 +02:00
35eef98722 added new toggle switch for choosing between normal time mode and seconds mode 2014-10-18 16:44:36 +02:00
80df0d24cb corrected typo and incremented version to next snapshot 2014-10-17 21:13:02 +02:00
3afc388856 Merge branch 'develop' into 'master'
Develop

See merge request !26
2014-09-03 15:24:52 +02:00
5f6f67cfef Merge branch 'release/6_3_3' into 'develop'
Release/6 3 3

merge release branch into develop

See merge request !25
2014-09-03 15:23:57 +02:00
8a18858bd1 increment version number, update manifest.appcache 2014-09-03 15:18:24 +02:00
164ef0c6c3 Merge branch 'cleanup/frontpage_issue5' into 'develop'
Cleanup/frontpage issue5

fixes #5

See merge request !23
2014-09-03 15:14:13 +02:00
72de1a90d7 Merge branch 'develop' into cleanup/frontpage_issue5
Conflicts:
	index.html
2014-09-03 15:12:46 +02:00
cf9c6ab5f7 Merge branch 'feature/no-external-links' into 'develop'
Feature/no external links

See merge request !24
2014-09-03 11:50:48 +02:00
87d2a01244 removed test.html 2014-09-02 18:55:09 +02:00
a5599242f6 replaced all important links with javascript links, thus effectively enabling the
app to be a true offline app.
2014-09-02 18:53:20 +02:00
28670a66bb Merge branch 'develop' into feature/no-external-links 2014-09-02 18:41:03 +02:00
4ba32fc443 deleted the link to the showcase and the showcase directory itself.
resolves issue #5.
2014-09-02 18:37:10 +02:00
7afe681ec2 updated version 2014-08-28 08:53:09 +02:00
ef4ec5fc4b added $ to the closure 2014-08-28 08:50:19 +02:00
bc37a5cfa9 Merge branch 'develop' into feature/no-external-links
Conflicts:
	index.html
2014-08-26 18:29:28 +02:00
4e98987653 Merge branch 'develop' into 'master'
v6.3.1

See merge request !22
2014-08-26 18:18:08 +02:00
ed7f36552e updated version to 6.3.1 in preparation of release 6.3.1 (issue #4) 2014-08-26 18:15:18 +02:00
8d471226b4 Merge branch 'feature/cleanup' into 'develop'
Feature/cleanup

Fixes issue #3

See merge request !21
2014-08-26 18:11:04 +02:00
3c22e2ab5f removed unnecessary options 2014-08-26 18:00:52 +02:00
9abfc59786 incremented the version 2014-08-26 17:50:33 +02:00
f171b9c8aa reformatted the whole code base 2014-08-26 17:49:23 +02:00
3e7451ac6d Merge branch 'develop' into feature/no-external-links
Conflicts:
	index.html
2014-08-26 17:18:42 +02:00
f576347c06 Merge branch 'develop' into 'master'
v6.3

autoresize
seconds
config in overlay

See merge request !20
2014-08-26 16:29:53 +02:00
ced6306c30 updated version to 6.3 2014-08-26 16:16:08 +02:00
6442a80d60 updated version 2014-08-26 15:57:31 +02:00
0bd5c3bc16 Merge branch 'develop' into feature/autoresize
Conflicts:
	VERSION
2014-08-26 15:54:00 +02:00
28108572c4 added VERSION to manifest.appcache 2014-08-26 15:51:26 +02:00
8a6f336d9e added VERSION file 2014-08-26 15:50:13 +02:00
c885b15fcb Merge branch 'master' into develop 2014-08-21 16:50:43 +02:00
53831896bb added VERSION file 2014-08-21 16:50:31 +02:00
2edf130472 added autoresize option and updated documentation 2014-08-12 19:19:37 +02:00
e8a0bfe5be updated manifest.appcache 2014-08-12 18:23:46 +02:00
0a86959c32 Merge branch 'feature/seconds' into 'develop'
Feature/seconds

See merge request !19
2014-08-12 18:22:05 +02:00
3f6a315208 tried to add newline let's see what happens 2014-08-12 18:20:45 +02:00
be1e1cf89b fixed line-endings in .gitignore 2014-08-12 11:59:06 +02:00
fcfdaaa2cd fade controls in and out 2014-08-12 11:55:34 +02:00
a3dce2322b don't remove blank line 2014-08-12 00:44:29 +02:00
dbbfae83b3 don't add trailing slash 2014-08-12 00:41:26 +02:00
79430a6821 old file, it's now at js/uhr.js 2014-08-12 00:39:13 +02:00
504e139bf2 adapted the changes on the seconds branch to the refactored code 2014-08-11 23:52:46 +02:00
020fc96036 Merge branch 'develop' into feature/seconds
Conflicts:
	.gitignore
	manifest.appcache
	showcase/index.html
	uhr.js
2014-08-11 23:04:28 +02:00
3ef3ce346f Merge branch 'feature/config_in_popup' into 'develop'
Feature/config in popup

See merge request !18
2014-08-11 22:47:55 +02:00
072ef1e2d1 increased version to 7.0-alpha 2014-08-11 19:24:18 +02:00
c0742a6f11 make the clock adjust its size on window resizing 2014-08-11 19:19:11 +02:00
633401862f tweaked the info page 2014-08-11 18:10:38 +02:00
055cd4ff52 changed the order of stylesheets in README.md, to match the one used on
the main page
2014-08-11 17:41:36 +02:00
fa0da37425 make the control panel full-size on narrow (<=400px) screens, and include
all colors and languages on the main page
2014-08-11 17:36:53 +02:00
e03102172c updated manifest.appcache 2014-08-10 23:21:01 +02:00
6deb0d50fe converted controls into an overlay 2014-08-10 23:14:29 +02:00
27435ed9a8 put controls in their own div element and hide/show it with action links.
now to do: css styling!
2014-08-09 12:15:01 +02:00
275234abd8 README.md angepasst 2014-08-09 11:41:43 +02:00
501dfb50be syntax fix 2014-07-16 23:48:13 +02:00
c0af4a976f rename seconds-file; add more failsafety (undefined-checks); override
_getDotMinute for the second, so the dots don't show up.
2014-07-16 17:08:10 +02:00
a0e2588d91 added definitions for seconds 2014-07-16 16:45:00 +02:00
8badcc549f added first second-thing 2014-07-16 16:39:37 +02:00
69a843fc29 added example of seconds layout 2014-07-16 16:21:23 +02:00
689e348532 added IDEA files to ignore list 2014-07-16 15:58:50 +02:00
cca9e21d08 intermediate commit 2014-07-04 21:51:39 +02:00
65e1466508 JSHinting 2014-07-04 13:52:32 +02:00
be221aa88d use Function.bind() instead of passing the 'this' object to each and every
function. but that's no nice solution either ...
2014-07-04 13:47:16 +02:00
b23a56f866 set up testing structure 2014-07-04 01:08:39 +02:00
6f6feb5cf5 re-indented the code 2014-07-04 00:52:09 +02:00
de75a3bdaf no more JSHint errors for now 2014-07-04 00:50:16 +02:00
ec8a185dd7 more JSHinting 2014-07-04 00:42:05 +02:00
cd58ff4ba3 converted many old-fashioned for-loops to modern ones 2014-07-03 22:03:54 +02:00
dd752c8db0 use forEach() instead of for(i=0...) 2014-07-03 21:26:13 +02:00
9720d1dcd1 accept "unsafe" line breaks 2014-07-03 21:25:47 +02:00
df9e435da3 renamed _currentMinute to currentMinute 2014-07-03 21:20:20 +02:00
60e68ffeaf renamed _id to id 2014-07-03 21:18:27 +02:00
ec9b44427c renamed _timer to timer 2014-07-03 21:16:47 +02:00
08cca0a915 helper variables don't need to be wrapped in their own object. 2014-07-03 21:06:06 +02:00
3d0245abfa wrap the layout definitions in immediately executing anonymous functions 2014-07-03 20:37:34 +02:00
85b5670dfc removed the window.uhr global variable! hooray! 2014-07-03 20:33:26 +02:00
5a9ec0e0df basically the whole thing is rewritten :) 2014-07-03 20:10:55 +02:00
7b0e77f16f fixed syntax error. was probably introduced while refactoring 2014-07-03 20:09:01 +02:00
218a0f40e5 fixed the path to the font 2014-07-03 20:06:37 +02:00
09562d47a4 intermediate commit 2014-07-03 18:36:43 +02:00
afe923c136 some JSHint'ing and reorganizing of the project-structure 2014-07-03 16:53:28 +02:00
e316557ac8 added script which should convert normal links into javascript links 2014-07-02 19:21:50 +02:00
f3d8aab61f Merge branch 'develop' into 'master'
Develop

hotfix
2014-06-28 23:46:44 +02:00
340669c5eb fixed 24h bug 2014-06-28 23:46:12 +02:00
0fb0551783 Merge branch 'develop' into 'master'
Develop

Configurable cookie path
2014-06-28 23:39:52 +02:00
348177e52a Merge branch 'feature/fix-cookie-path' into 'develop'
Feature/Fix Cookie Path
2014-06-28 23:32:27 +02:00
719a2a8343 update manifest version 2014-06-28 23:31:47 +02:00
c890429dd6 consider the path when setting a cookie, but make it overridable with the configuration parameter 'cookiePath'. 2014-06-28 23:27:41 +02:00
6047499a18 Merge branch 'develop' into feature/fix-cookie-path 2014-06-28 23:16:36 +02:00
9ffc1bec75 Merge branch 'develop' into 'master'
Develop
2014-06-28 23:14:32 +02:00
4811367f46 deleted test.html 2014-06-28 23:14:09 +02:00
065d9a2853 update manifest version 2014-06-28 23:12:54 +02:00
bd3fb48b0d find all stylesheets, not only those defined in the head. 2014-06-28 23:12:20 +02:00
9eba4192ed Merge branch 'develop' into feature/fix-cookie-path 2014-06-28 23:07:26 +02:00
8a5912af98 Merge branch 'develop' into 'master'
Develop

V6.1.1
2014-06-28 22:55:37 +02:00
0461411c6a Merge branch 'feature/lang-it' into 'develop'
Feature/Lang It
2014-06-28 22:52:12 +02:00
9971763697 added it layout and updated documentation and manifest.appcache 2014-06-28 22:50:42 +02:00
ff850fca64 Merge branch 'feature/lang-fr' into 'develop'
Feature/Lang Fr
2014-06-28 22:16:52 +02:00
120574c36b i guess this version deserves a minor-version-bump, not only micro, as _normalizeHours() is gone. 2014-06-28 22:14:05 +02:00
e666350b3f updated the documentation 2014-06-28 22:12:59 +02:00
a378f45470 activate french in the showcase and update manifest 2014-06-28 22:06:15 +02:00
f7defa96d5 added french layout 2014-06-28 22:04:24 +02:00
f93083c128 preparing to support languages that make a difference between AM and PM 2014-06-28 22:03:35 +02:00
bde19624b2 Merge branch 'develop' into feature/fix-cookie-path 2014-06-28 17:04:47 +02:00
75568578f6 deleted commented old stuff 2014-06-28 17:04:30 +02:00
07b64480cd Merge branch 'develop' into feature/fix-cookie-path
Conflicts:
	manifest.appcache
2014-06-28 17:00:30 +02:00
deb8f40080 Merge branch 'develop' into 'master'
Develop

Version 6.0
2014-06-28 16:51:57 +02:00
56f20907d9 Merge branch 'feature/refactor-layout-definition' into 'develop'
Feature/Refactor Layout Definition
2014-06-28 16:49:07 +02:00
f04d5a9aef remove trailing newline 2014-06-28 16:47:44 +02:00
59c5b8d358 updated manifest, including the version 2014-06-28 16:44:03 +02:00
bb027261b2 register languages with help of a function. that enables advances functionality with fallback-language and makes it generally more robust.
this commit concludes the refactoring of the layout definition.
2014-06-28 16:40:24 +02:00
d9ae1f3783 removed unnecessary comma 2014-06-28 16:38:12 +02:00
2564eec812 added yellow theme 2014-06-28 16:04:06 +02:00
194ebc58de fix sizing 2014-06-28 15:58:28 +02:00
480736e877 refactor: move every helper function inside the scope-limiting block in order not to pollute world 2014-06-28 15:53:08 +02:00
ffcf8fa2f2 added showcase 2014-06-28 15:52:48 +02:00
135a180e12 make cookie path configurable 2014-06-28 14:41:30 +02:00
d334101ae0 updated version in manifest.appcache 2014-06-28 14:36:46 +02:00
b45b6bcaad use default cookie-path instead of / 2014-06-28 14:34:20 +02:00
96507d58a2 Merge branch 'develop' into feature/refactor-layout-definition 2014-06-28 14:23:29 +02:00
28b74b30c5 Merge branch 'develop' into 'master'
Develop

V5.1: auto-detect themes
2014-06-28 14:20:08 +02:00
66287994ca Merge branch 'feature/css-auto-detect' into 'develop'
Feature/Css Auto Detect
2014-06-28 14:16:39 +02:00
fd940192f4 fixed (?) markdown 2014-06-28 14:13:47 +02:00
7be99ce264 update documentation in README.md and incremented version in
manifest.appcache
2014-06-28 14:11:44 +02:00
fbf0217719 updated manifest.appcache version 2014-06-28 13:58:00 +02:00
4c1ea9e1cd update documentation 2014-06-28 13:57:10 +02:00
ee60105130 only include required files 2014-06-28 13:56:55 +02:00
448747626c make auto-detection more robust and include a fallback if cookie or config
doesn't match available themes
2014-06-28 13:56:20 +02:00
ae3da935be only render selectors for language and theme if there is more than one
language / theme definition.
use the first defined theme as default if not explicitly specified.
2014-06-28 12:10:24 +02:00
1bc60d7a1b use data-class and data-name attributes on stylesheets to define
styleclass and pretty-name of themes
2014-06-28 10:54:28 +02:00
a4a440c8f0 deleted detector.js, it is integrated in uhr.js 2014-06-28 02:21:54 +02:00
1a8e268a6a re-ordered head contents 2014-06-28 02:09:48 +02:00
38df0a87c9 integrate detection in main file 2014-06-28 02:00:34 +02:00
09a53b0883 the order in which JS and CSS files are included MATTERS! autodetection of
themes works, as a first draft.
2014-06-28 01:04:53 +02:00
455068d069 temporarily include detector.js 2014-06-28 00:52:55 +02:00
a72aacb504 first playground parsing the CSS names 2014-06-28 00:52:05 +02:00
600b84c36a Merge branch 'develop' into feature/refactor-layout-definition 2014-06-27 13:45:24 +02:00
011e4cdf64 updated manifest.appcache 2014-06-27 13:44:59 +02:00
32d19fe85e added pink style 2014-06-27 13:43:35 +02:00
e5ce0ab2bb cache parsed layouts instead of re-parsing them every time the language
changes
2014-06-27 13:23:10 +02:00
a263a1f18c fixed hour3 + minutes45 to 49 2014-06-27 13:20:36 +02:00
29b280cf8b removed unnecessary array-brackets 2014-06-27 12:56:32 +02:00
fa1c6a1ea3 added comments 2014-06-27 12:55:31 +02:00
a9d8888f6a drop support for the old layout. only v2 supported as of now. 2014-06-27 12:44:38 +02:00
4942cfda2f deleted obsolete helper methods 2014-06-27 12:34:01 +02:00
d4874d1ec2 migrated en to v2 2014-06-27 12:28:19 +02:00
14d7ee79bc bugfix: when explicitly setting the time to a value with the same minute,
it didn't get updated.
2014-06-27 12:27:43 +02:00
c25a0d6c33 migrating en to v2, first step 2014-06-26 16:46:50 +02:00
c1961d7fca migrated de to v2 2014-06-26 16:38:30 +02:00
0c67a41116 fixed bug with minute 49 2014-06-26 16:37:43 +02:00
77ccc95b93 migrated normal de_CH layout to v2 2014-06-26 16:19:56 +02:00
428074b1f8 added missing semicolon 2014-06-26 16:19:18 +02:00
8f609294ff renamed _new to _genau 2014-06-26 16:06:23 +02:00
57556987ac renamed the helper renderer to _..., as per private naming convention 2014-06-26 16:01:42 +02:00
8234d4f3ea deleted unnecessary line 2014-06-26 16:01:25 +02:00
b9473f405f moved parsing of v2-layouts to own class 2014-06-26 15:52:08 +02:00
6d588aa08b bugfix for update in relation to fixed time; slight change in format of
layout definition.
2014-06-26 14:41:56 +02:00
f9b6acf8b6 improved handling of explicit time()-setting: no re-rendering, just update
the time and call _update(). that avoids flashing of the letters.
2014-06-26 14:13:21 +02:00
3e8252fa13 fixed a typo 2014-06-26 14:07:31 +02:00
eff9700864 first working version with some bugfixes! refactoring ensues ... 2014-06-26 13:46:10 +02:00
9a1160f66e deletes _TEST-file, working with the _new-file from now on. 2014-06-26 10:43:15 +02:00
10c07a05cf using a helper object works, as object properties cannot be accesses
before the object has been initialized.
2014-06-26 08:08:06 +02:00
0d90b3dd76 moved testing stuff to ownfiles. 2014-06-26 08:00:15 +02:00
b4f2a466b7 some debug output 2014-06-25 13:13:11 +02:00
d7c461f39a added new layout and first handling of it in the parser 2014-06-25 13:13:10 +02:00
78dcd7c66f Merge branch 'develop' into 'master'
Develop
2014-06-20 02:19:49 +02:00
dc098233fe changed the things according to the comments in the merge request 2014-06-20 01:57:06 +02:00
8e0aaacbd8 updated manifest.appcache in preparation of release 5.0 2014-06-20 01:50:34 +02:00
ad50e9237a Merge branch 'develop' into feature/ios-app
Conflicts:
	index.html
2014-06-20 01:43:41 +02:00
ad809a6a6e new touch icon 2014-06-20 00:55:52 +02:00
6b24cc3eb3 mark the icon as precomposed 2014-06-20 00:32:21 +02:00
1b06330329 NOW it's good: initial-scale=1 2014-06-20 00:27:21 +02:00
c39ea30e9b perhaps it gets more readable on an iOS device like this 2014-06-20 00:25:58 +02:00
50e4006a84 Merge branch 'bugfix/typos-layout' into 'develop'
Bugfix/Typos Layout
2014-06-20 00:16:53 +02:00
8b5b343e35 corrected some typos and increased font-size on the info page
(cherry picked from commit e702aa6869ee9eed64271b71f3a48d2c4206f12f)
2014-06-20 00:14:20 +02:00
2c5ac65bad updated manifest.appcache 2014-06-19 23:55:21 +02:00
90e6d6d0f3 fixed various small things 2014-06-19 23:09:58 +02:00
aeeb197104 fixed HTML structure (un-closed p-tag)
removed link around clock
2014-05-15 15:20:48 +02:00
b4d67be48c added splash screen. doesn't show up yet, though. 2014-05-09 15:21:45 +02:00
23411bc59b added splash screen for ios 2014-05-09 15:07:30 +02:00
a9f5667954 changed a-umlaut to REAL (utf-8) a-umlaut 2014-05-09 14:45:06 +02:00
c629833812 added home-icon for iOS 2014-05-09 14:42:26 +02:00
8f9adbe567 added some neat tags for ios :) 2014-05-08 13:54:24 +02:00
e640fe4362 Merge branch 'develop' 2014-04-22 21:03:08 +02:00
18460cfbbe updated manifest.appcache 2014-04-22 21:02:42 +02:00
7f86fa1a4a Merge branch 'develop' into 'master'
Develop
2014-04-22 20:52:16 +02:00
76cefba0fb Merge branch 'feature/info' into 'develop'
Feature/Info
2014-04-22 20:50:36 +02:00
013c6c48c4 turned the clock in the info page into a link to root 2014-04-22 20:49:26 +02:00
100 changed files with 35348 additions and 1497 deletions

13
.drone.yml Normal file
View file

@ -0,0 +1,13 @@
kind: pipeline
type: docker
name: default
steps:
- name: prepare
image: node:15-alpine
commands:
- npm install
- name: build
image: node:15-alpine
commands:
- npm run build

15
.editorconfig Normal file
View file

@ -0,0 +1,15 @@
# http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.yml]
indent_size = 2
[*.md]
trim_trailing_whitespace = false

5
.gitignore vendored
View file

@ -1 +1,6 @@
*~
.idea
*.iml
atlassian-ide-plugin.xml
/node_modules/
/bower_components/

52
.jshintrc Normal file
View file

@ -0,0 +1,52 @@
{
// Settings
"passfail" : false, // Stop on first error.
"maxerr" : 100, // Maximum error before stopping.
// Predefined globals whom JSHint will ignore.
"browser" : true, // Standard browser globals e.g. `window`, `document`.
"node" : true,
"jquery" : true,
// Development.
"debug" : false, // Allow debugger statements e.g. browser breakpoints.
"devel" : true, // Allow developments statements e.g. `console.log();`.
"strict" : true, // Require `use strict` pragma in every file.
"globalstrict" : false, // Allow global "use strict" (also enables 'strict').
// The Good Parts.
"asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons).
"laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons.
"bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.).
"boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments.
"curly" : true, // Require {} for every new block or scope.
"eqeqeq" : true, // Require triple equals i.e. `===`.
"eqnull" : false, // Tolerate use of `== null`.
"evil" : false, // Tolerate use of `eval`.
"expr" : false, // Tolerate `ExpressionStatement` as Programs.
"forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`.
"immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );`
"latedef" : true, // Prohipit variable use before definition.
"loopfunc" : false, // Allow functions to be defined within loops.
"noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`.
"scripturl" : true, // Tolerate script-targeted URLs.
"shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`.
"supernew" : false, // Tolerate `new function () { ... };` and `new Object;`.
"undef" : true, // Require all non-global variables be declared before they are used.
// Personal styling preferences.
"newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`.
"noempty" : true, // Prohibit use of empty blocks.
"nonew" : true, // Prohibit use of constructors for side-effects.
"nomen" : true, // Prohibit use of initial or trailing underbars in names.
"onevar" : false, // Allow only one `var` statement per function.
"plusplus" : false, // Prohibit use of `++` & `--`.
"sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`.
"trailing" : true, // Prohibit trailing whitespaces.
"white" : true, // Check against strict whitespace and indentation rules.
"indent" : 0 // Specify indentation spacing
}

View file

199
README.md
View file

@ -1,97 +1,172 @@
Bärneruhr
=========
# Bärneruhr
Du willst Bärneruhr auf deiner Website verwenden? Dank des jQuery-Plugins geht das so einfach, dass es sogar deine Grossmutter tun könnte!
1. Benötigte Dateien einbinden
------------------------------
* Binde folgende Javascript-Dateien im HTML-Dokument ein:
* jquery-2.0.3.min.js (Falls nicht bereits vorhanden)
* jquery-ui-1.10.3.custom.min.js (Falls nicht bereits vorhanden)
* Von jquery-ui werden die Komponenten 'core' und 'widget' benötigt.
* jquery-cookie-1.4.0.js (Falls nicht bereits vorhanden)
* uhr.js
* Binde mindestens eine der folgenden Javascript-Dateien im HTML ein, je nach dem, welche Sprachen deine Uhr unterstützen soll:
* uhr-de_CH.js
* uhr-de.js
* uhr-en.js
* Binde folgende CSS-Dateien im HTML-Dokument ein:
* uhr.css
* uhr-black.css
* uhr-blue.css
* uhr-green.css
* uhr-red.css
* uhr-white.css
* Die möglichen Themes (Farbschemata) sind im Moment noch hartcodiert, deshalb sollten alle Dateien eingebunden werden.
## 1. Benötigte Dateien einbinden
* Binde folgende CSS-Datei im HTML-Dokument ein:
* dist/uhr.min.css
* Binde zusätzlich mindestens eine der folgenden CSS-Dateien im HTML ein, je nach dem, welche Farben deine Uhr unterstützen soll:
* dist/uhr-black.min.css
* dist/uhr-white.min.css
* dist/uhr-red.min.css
* dist/uhr-yellow.min.css
* dist/uhr-green.min.css
* dist/uhr-blue.min.css
* dist/uhr-pink.min.css
2. Uhr-Element im HTML-Dokument einfügen
----------------------------------------
Beim Einbinden muss das attribut `data-class` angegeben werden, welches die CSS-Klasse des Themes definiert. Optional kann mit `data-name` ein im Dropdown anzuzeigender Name angegeben werden. Beispiel:
```html
<link rel="stylesheet" type="text/css" href="dist/uhr-black.min.css" data-class="black" data-name="Schwarz" />
```
* Binde nach den CSS-Dateien (wichtig!) folgende Javascript-Dateien im HTML-Dokument ein:
* dist/libs.min.js: Dies enthält die minifizierten Versionen von jQuery, jQuery-UI (mit den Komponenten `code` und `widget`) und jQuery-Cookie.
Alternativ kannst Du auch direkt die benötigten Bibliotheken einbinden:
* jquery (getestet mit Version 3.4.1)
* jquery-ui (getestet mit Version 1.12.1)
* Von jquery-ui wird die Komponente 'widget' benötigt.
* jquery-cookie (getestet mit Version 1.4.1)
Je nach dem, in welchen Sprachen du die Uhr verwenden willst, noch eine der folgenden Dateien:
* dist/jquery.uhr.complete.min.js: Enthält die Hauptdatei sowie alle unterstützten Sprachdateien
* dist/jquery.uhr.base.min.js: Enthält die Hauptdatei sowie Bärndütsch (de_CH)
* dist/jquery.uhr.main.min.js: Enthält ausschliesslich die Hauptdatei. Zusätzlich muss noch mindestens eine Sprachdatei eingebunden werden (siehe unten).
* Je nach dem, welche der obigen Dateien du eingebunden hast, kannst du noch individuelle Sprachdateien einbinden. Im Einstellungsfenster der Uhr werden diese Sprachen dann in der Reihenfolge zur Auswahl angeboten, in welcher du sie eingebunden hast.
* dist/jquery.uhr.langs.min.js: Enthält alle Sprachen
* dist/jquery.uhr.baselangs.min.js: Enthält alle Sprachen bis auf Bärndütsch (de_CH), welche bereits in dist/jquery.uhr.base.min.js enthalten ist.
* src/uhr-de_CH.js (Bärndütsch)
* src/uhr-de_CH_genau.js (Bärndütsch, siehe unten)
* src/uhr-de.js (Deutsch)
* src/uhr-dk.js (Dänisch)
* src/uhr-en.js (Englisch)
* src/uhr-es.js (Spanisch)
* src/uhr-fr.js (Französisch)
* src/uhr-it.js (Italienisch)
* src/uhr-nl.js (Niederländisch)
* src/uhr-pt.js (Portugiesisch)
`src/uhr-de_CH_genau.js` ist eine Variante von Bärndütsch, bei der zur vollen Stunde zusätzlich das Wort "genau" angezeigt wird (also z.B. um 15:00 Uhr "ES ISCH GENAU DRÜ" anstelle von "ES ISCH DRÜ").
## 2. Uhr-Element im HTML-Dokument einfügen
Erstelle ein leeres `<div>` mit einer ID:
<div id="uhrcontainer"></div>
3. Uhr per Javascript konfigurieren
-----------------------------------
```html
<div id="uhrcontainer"></div>
```
## 3. Uhr per Javascript konfigurieren
Initialisiere die Uhr mit einer einzigen Zeile Javascript:
jQuery('#uhrcontainer').uhr();
```javascript
jQuery('#uhrcontainer').uhr();
```
Damit wird eine Uhr in der Standardkonfiguration erzeugt. Das heisst:
* Breite ist 100% des Eltenelements
* Farbe ist Schwarz
* Breite ist 100% des Elternelements
* Farbe ist diejenige des ersten eingebundenen Theme-Stylesheets.
* Sprache ist Bärndütsch
* Die Uhr ist eingeschaltet
* Die Bedienelemente werden angezeigt
* Die Uhr passt sich in der Grösse an, wenn das Elternelement seine Grösse ändert
* Die Uhr zeigt die aktuelle Stunde und Minute
Wie du diese Optionen ändern kannst, verrät der nächte Abschnitt.
Mit den Bedienelementen kannst du die Uhr ein- und ausschalten, zwischen Stunden/Minuten- oder Sekundenanzeige wechseln sowie Sprache und Farbe einstellen.
Wie du diese Optionen bereits in der Konfiguration ändern kannst, verrät der nächste Abschnitt.
Es kann natürlich auch eine Collection von Elementen übergeben werden. Mit
jQuery('div').uhr();
```javascript
jQuery('div').uhr();
```
würde also jedes `<div>`-Element der Seite in eine Uhr umgewandelt
würde also jedes `<div>`-Element der Seite in eine Uhr umgewandelt.
4. Weitere Optionen
-------------------
## 4. Weitere Optionen
Der uhr()-Methode kann ein Options-Objekt mitgegeben werden:
jQuery('#uhrcontainer').uhr({
status: 'on', // 'on' (default) oder 'off'
theme: 'black', // 'black' (default), 'red', 'blue', 'green' oder 'white'
language: 'de_CH', // 'de_CH' (default), 'de' oder 'en' (je nach eingebundenen Sprachdateien)
width: '100%', // eine CSS-Grössenangabe (default: 100%)
force: false, // false (default): Falls ein Cookie im Browser besteht, werden dessen Konfigurationswerte übernommen;
// true: immer die angegebene Konfiguration verwenden
controls: true // true (default): Die Bedienelemente (Ein-/Ausschalter, Theme- und Sprachwähler) werden angezeigt
// false: Die Bedienelemente werden nicht angezeigt
});
```javascript
jQuery('#uhrcontainer').uhr({
status: 'on', // 'on' (default) oder 'off'
theme: 'black', // 'black' (default), 'white', 'red', 'yellow', 'green', 'blue' oder 'pink' (je nach eingebundenen Theme-Stylesheets)
language: 'de_CH', // 'de_CH' (default), 'de_CH_genau', 'de', 'dk', 'en', 'es', 'fr', 'it', 'nl' oder 'pt' (je nach eingebundenen Sprachdateien)
mode: 'normal', // 'normal' (default): Die Uhr zeigt die aktuelle Zeit (Stunden und Minuten) in Worten an
// 'seconds': Die Uhr zeigt die aktuellen Sekunden als grosse Ziffern an
width: '100%', // Eine CSS-Grössenangabe (default: 100%)
force: false, // false (default): Falls ein Cookie im Browser besteht, werden dessen Konfigurationswerte übernommen;
// true: immer die angegebene Konfiguration verwenden
controls: true, // true (default): Die Bedienelemente (Ein-/Ausschalter, Theme-, Zeitmodus- und Sprachwähler) werden angezeigt
// false: Die Bedienelemente werden nicht angezeigt
autoresize: true, // true (default): Die Uhr passt ihre Grösse dynamisch an
// false: Die Uhr behält ihre anfängliche Grösse
cookiePath: undefined // Gibt den Cookie-Pfad an. Ist normalerweise nicht definiert; in diesem Fall wird der Pfad der Datei benutzt, welche die Uhr anzeigt. Kann für spezielle Zwecke aber explizit gesetzt werden.
});
```
5. Sonderfunktionen
-------------------
Es gibt noch einen zusätzlichen Konfigurationsparameter. Mit
## 5. Sonderfunktionen
Es gibt noch einen zusätzlichen Konfigurationsparameter. Mittels
{
time: new Date()
}
```javascript
{
time: new Date()
}
```
kann die Uhr auf eine fixe Zeit eingestellt werden. Sie bleibt dann statisch und aktualisiert sich nicht, sondern zeigt immer diese Zeit an. Beim Klick auf den On/Off-Schalter oder beim Wechsel der Sprache wird dies allerdings rückgängig gemacht und die Uhr nimmt das Standardverhalten mit der aktuellen Systemzeit an.
Die Zeit kann auch über einen Methodenaufruf dynamisch eingestellt werden:
jQuery('#uhrcontainer').uhr("time", new Date());
```javascript
jQuery('#uhrcontainer').uhr("time", new Date());
```
## 6. Konfiguration über die URL
Es ist möglich, die Uhr durch den Aufruf mit URL-Parametern zu konfigurieren. Dies übersteuert auch allfällig bereits in einem Cookie gespeicherte Einstellungen. Die Einstellungen werden für alle Uhr-Elemente übernommen, welche sich auf der Seite befinden. Folgende Parameter werden unterstützt, wenn du sie mit einem Hash (`#`) an die URL anhängst:
* `l` oder `language`: Bestimmt die Sprache. Der Wert ist der Sprach-Code (abhängig von den eingebundenen Sprachdateien):
* de_CH: Bärndütsch
* de_CH_genau: Bärndütsch (mit "genau")
* de: Deutsch
* dk: Dänisch
* en: Englisch
* es: Spanisch
* fr: Französisch
* it: Italienisch
* nl: Niederländisch
* pt: Portugiesisch
* `t` oder `theme`: Bestimmt die Farbe der Uhr. Der Wert ist der Farb-Code (abhängig von den eingebundenen CSS-Dateien):
* black: Schwarz
* white: Weiss
* red: Rot
* yellow: Gelb
* green: Grün
* blue: Blau
* pink: Pink
* `m` oder `mode`: Bestimmt den Modus der Uhr. Mögliche Werte sind:
* normal: Die Uhr zeit Stunde und Minute an
* seconds: Die Uhr zeigt die Sekunden an
* `s` oder `status`: Bestimmt den anfänglichen Zustand der Uhr.
* on: Die Uhr ist eingeschaltet
* off: Die Uhr ist ausgeschaltet
Eine URL kann also beispielsweise so aussehen:
http://example.com/uhr.html#l=fr&t=red&m=seconds&s=on
Dies zeigt dann die Uhr auf Französisch in Rot, im Sekunden-Modus und eingeschaltet.
Viel Spass!
A. Lizenzbestimmungen
=====================
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
# A. Lizenzbestimmungen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

1
VERSION Normal file
View file

@ -0,0 +1 @@
9.0.0-dev.0

View file

@ -0,0 +1 @@
import '../../css/uhr.css';

View file

@ -0,0 +1 @@
import '../../css/uhr-black.css';

View file

@ -0,0 +1 @@
import '../../css/uhr-blue.css';

View file

@ -0,0 +1 @@
import '../../css/uhr-green.css';

View file

@ -0,0 +1 @@
import '../../css/uhr-pink.css';

View file

@ -0,0 +1 @@
import '../../css/uhr-red.css';

View file

@ -0,0 +1 @@
import '../../css/uhr-white.css';

View file

@ -0,0 +1 @@
import '../../css/uhr-yellow.css';

View file

@ -0,0 +1 @@
import '../../src/uhr';

View file

@ -0,0 +1,2 @@
import '../../src/uhr';
import '../../src/uhr-de_CH';

View file

@ -0,0 +1,9 @@
import '../../src/uhr-de';
import '../../src/uhr-de_CH_genau';
import '../../src/uhr-dk';
import '../../src/uhr-en';
import '../../src/uhr-es';
import '../../src/uhr-fr';
import '../../src/uhr-it';
import '../../src/uhr-nl';
import '../../src/uhr-pt';

View file

@ -0,0 +1,11 @@
import '../../src/uhr';
import '../../src/uhr-de';
import '../../src/uhr-de_CH';
import '../../src/uhr-de_CH_genau';
import '../../src/uhr-dk';
import '../../src/uhr-en';
import '../../src/uhr-es';
import '../../src/uhr-fr';
import '../../src/uhr-it';
import '../../src/uhr-nl';
import '../../src/uhr-pt';

View file

@ -0,0 +1,10 @@
import '../../src/uhr-de';
import '../../src/uhr-de_CH';
import '../../src/uhr-de_CH_genau';
import '../../src/uhr-dk';
import '../../src/uhr-en';
import '../../src/uhr-es';
import '../../src/uhr-fr';
import '../../src/uhr-it';
import '../../src/uhr-nl';
import '../../src/uhr-pt';

View file

@ -0,0 +1,3 @@
import 'jquery';
import 'jquery-ui';
import 'jquery.cookie';

View file

@ -0,0 +1,11 @@
import cssbundle from 'rollup-plugin-css-bundle';
import postcss from "postcss";
import cssnano from "cssnano";
export default {
input: 'build-config/entrypoints/css-app.js',
plugins: [cssbundle({
transform: code => postcss([cssnano]).process(code),
output: 'dist/uhr.min.css'
})]
}

View file

@ -0,0 +1,11 @@
import cssbundle from 'rollup-plugin-css-bundle';
import postcss from 'postcss';
import cssnano from 'cssnano';
export default {
input: 'build-config/entrypoints/css-black.js',
plugins: [cssbundle({
transform: code => postcss([cssnano]).process(code),
output: 'dist/uhr-black.min.css'
})]
}

View file

@ -0,0 +1,11 @@
import cssbundle from 'rollup-plugin-css-bundle';
import postcss from 'postcss';
import cssnano from 'cssnano';
export default {
input: 'build-config/entrypoints/css-blue.js',
plugins: [cssbundle({
transform: code => postcss([cssnano]).process(code),
output: 'dist/uhr-blue.min.css'
})]
}

View file

@ -0,0 +1,11 @@
import cssbundle from 'rollup-plugin-css-bundle';
import postcss from 'postcss';
import cssnano from 'cssnano';
export default {
input: 'build-config/entrypoints/css-green.js',
plugins: [cssbundle({
transform: code => postcss([cssnano]).process(code),
output: 'dist/uhr-green.min.css'
})]
}

View file

@ -0,0 +1,11 @@
import cssbundle from 'rollup-plugin-css-bundle';
import postcss from 'postcss';
import cssnano from 'cssnano';
export default {
input: 'build-config/entrypoints/css-pink.js',
plugins: [cssbundle({
transform: code => postcss([cssnano]).process(code),
output: 'dist/uhr-pink.min.css'
})]
}

View file

@ -0,0 +1,11 @@
import cssbundle from 'rollup-plugin-css-bundle';
import postcss from 'postcss';
import cssnano from 'cssnano';
export default {
input: 'build-config/entrypoints/css-red.js',
plugins: [cssbundle({
transform: code => postcss([cssnano]).process(code),
output: 'dist/uhr-red.min.css'
})]
}

View file

@ -0,0 +1,11 @@
import cssbundle from 'rollup-plugin-css-bundle';
import postcss from 'postcss';
import cssnano from 'cssnano';
export default {
input: 'build-config/entrypoints/css-white.js',
plugins: [cssbundle({
transform: code => postcss([cssnano]).process(code),
output: 'dist/uhr-white.min.css'
})]
}

View file

@ -0,0 +1,11 @@
import cssbundle from 'rollup-plugin-css-bundle';
import postcss from 'postcss';
import cssnano from 'cssnano';
export default {
input: 'build-config/entrypoints/css-yellow.js',
plugins: [cssbundle({
transform: code => postcss([cssnano]).process(code),
output: 'dist/uhr-yellow.min.css'
})]
}

View file

@ -0,0 +1,23 @@
import {terser} from 'rollup-plugin-terser';
export default {
external: [
'jquery',
'jquery-ui',
'jquery.cookie'
],
input: 'build-config/entrypoints/js-app.js',
output: [
{
dir: 'dist',
entryFileNames: 'jquery.uhr.main.js',
format: 'cjs'
},
{
dir: 'dist',
entryFileNames: 'jquery.uhr.main.min.js',
format: 'cjs',
plugins: [terser()]
}
]
}

View file

@ -0,0 +1,23 @@
import {terser} from 'rollup-plugin-terser';
export default {
external: [
'jquery',
'jquery-ui',
'jquery.cookie'
],
input: 'build-config/entrypoints/js-base.js',
output: [
{
dir: 'dist',
entryFileNames: 'jquery.uhr.base.js',
format: 'cjs'
},
{
dir: 'dist',
entryFileNames: 'jquery.uhr.base.min.js',
format: 'cjs',
plugins: [terser()]
}
]
}

View file

@ -0,0 +1,23 @@
import {terser} from 'rollup-plugin-terser';
export default {
external: [
'jquery',
'jquery-ui',
'jquery.cookie'
],
input: 'build-config/entrypoints/js-baselangs.js',
output: [
{
dir: 'dist',
entryFileNames: 'jquery.uhr.baselangs.js',
format: 'cjs'
},
{
dir: 'dist',
entryFileNames: 'jquery.uhr.baselangs.min.js',
format: 'cjs',
plugins: [terser()]
}
]
}

View file

@ -0,0 +1,23 @@
import {terser} from 'rollup-plugin-terser';
export default {
external: [
'jquery',
'jquery-ui',
'jquery.cookie'
],
input: 'build-config/entrypoints/js-complete.js',
output: [
{
dir: 'dist',
entryFileNames: 'jquery.uhr.complete.js',
format: 'cjs'
},
{
dir: 'dist',
entryFileNames: 'jquery.uhr.complete.min.js',
format: 'cjs',
plugins: [terser()]
}
]
}

View file

@ -0,0 +1,23 @@
import {terser} from 'rollup-plugin-terser';
export default {
external: [
'jquery',
'jquery-ui',
'jquery.cookie'
],
input: 'build-config/entrypoints/js-langs.js',
output: [
{
dir: 'dist',
entryFileNames: 'jquery.uhr.langs.js',
format: 'cjs'
},
{
dir: 'dist',
entryFileNames: 'jquery.uhr.langs.min.js',
format: 'cjs',
plugins: [terser()]
}
]
}

View file

@ -0,0 +1,21 @@
import {terser} from 'rollup-plugin-terser';
import {nodeResolve} from '@rollup/plugin-node-resolve';
export default {
input: 'build-config/entrypoints/js-libs.js',
output: [
{
dir: 'dist',
entryFileNames: 'libs.js',
format: 'cjs'
},
{
dir: 'dist',
entryFileNames: 'libs.min.js',
format: 'cjs',
plugins: [terser()]
}
],
context: 'this',
plugins: [nodeResolve()]
}

View file

@ -13,16 +13,19 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
.uhr.black {
background-color: #111;
background-color: #111;
}
.black .onoffswitch-inner:before {
background-color: #111;
background-color: #111;
}
.uhr.black .dot:not(.active) {
border-color: rgba(255,255,255,0.1);
box-shadow: 0 0 0.1em rgba(255,255,255,0.1);
border-color: rgba(255, 255, 255, 0.1);
box-shadow: 0 0 0.1em rgba(255, 255, 255, 0.1);
}
.uhr.black .letter:not(.active) {
color: rgba(255,255,255,0.1);
text-shadow: 0 0 0.1em rgba(255,255,255,0.1);
color: rgba(255, 255, 255, 0.1);
text-shadow: 0 0 0.1em rgba(255, 255, 255, 0.1);
}

View file

@ -13,16 +13,19 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
.uhr.blue {
background-color: #00a;
background-color: #00a;
}
.blue .onoffswitch-inner:before {
background-color: #00a;
background-color: #00a;
}
.uhr.blue .dot:not(.active) {
border-color: rgba(255,255,255,0.1);
box-shadow: 0 0 0.1em rgba(255,255,255,0.1);
border-color: rgba(255, 255, 255, 0.1);
box-shadow: 0 0 0.1em rgba(255, 255, 255, 0.1);
}
.uhr.blue .letter:not(.active) {
color: rgba(255,255,255,0.1);
text-shadow: 0 0 0.1em rgba(255,255,255,0.1);
color: rgba(255, 255, 255, 0.1);
text-shadow: 0 0 0.1em rgba(255, 255, 255, 0.1);
}

View file

@ -13,16 +13,19 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
.uhr.green {
background-color: #0c0;
background-color: #0c0;
}
.green .onoffswitch-inner:before {
background-color: #0c0;
background-color: #0c0;
}
.uhr.green .dot:not(.active) {
border-color: rgba(0,0,0,0.1);
box-shadow: 0 0 0.1em rgba(0,0,0,0.1);
border-color: rgba(0, 0, 0, 0.1);
box-shadow: 0 0 0.1em rgba(0, 0, 0, 0.1);
}
.uhr.green .letter:not(.active) {
color: rgba(0,0,0,0.1);
text-shadow: 0 0 0.1em rgba(0,0,0,0.1);
color: rgba(0, 0, 0, 0.1);
text-shadow: 0 0 0.1em rgba(0, 0, 0, 0.1);
}

41
css/uhr-pink.css Normal file
View file

@ -0,0 +1,41 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
.uhr.pink {
background-color: #f0a;
}
.uhr.pink .dot.active {
border-color: #fff;
box-shadow: 0 0 0.1em #fff;
}
.uhr.pink .letter.active {
color: #fff;
text-shadow: 0 0 0.1em #fff;
}
.pink .onoffswitch-inner:before {
background-color: #f0a;
}
.uhr.pink .dot:not(.active) {
border-color: rgba(255, 255, 255, 0.1);
box-shadow: 0 0 0.1em rgba(255, 255, 255, 0.1);
}
.uhr.pink .letter:not(.active) {
color: rgba(255, 255, 255, 0.1);
text-shadow: 0 0 0.1em rgba(255, 255, 255, 0.1);
}

View file

@ -13,16 +13,19 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
.uhr.red {
background-color: #700;
background-color: #700;
}
.red .onoffswitch-inner:before {
background-color: #700;
background-color: #700;
}
.uhr.red .dot:not(.active){
border-color: rgba(255,255,255,0.1);
box-shadow: 0 0 0.1em rgba(255,255,255,0.1);
.uhr.red .dot:not(.active) {
border-color: rgba(255, 255, 255, 0.1);
box-shadow: 0 0 0.1em rgba(255, 255, 255, 0.1);
}
.uhr.red .letter:not(.active) {
color: rgba(255,255,255,0.1);
text-shadow: 0 0 0.1em rgba(255,255,255,0.1);
color: rgba(255, 255, 255, 0.1);
text-shadow: 0 0 0.1em rgba(255, 255, 255, 0.1);
}

View file

@ -13,24 +13,29 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
.uhr.white {
background-color: #ccc;
background-color: #ccc;
}
.uhr.white .dot.active{
border-color: #fff;
box-shadow: 0 0 0.1em #fff;
.uhr.white .dot.active {
border-color: #fff;
box-shadow: 0 0 0.1em #fff;
}
.uhr.white .letter.active{
color: #fff;
text-shadow: 0 0 0.1em #fff;
.uhr.white .letter.active {
color: #fff;
text-shadow: 0 0 0.1em #fff;
}
.white .onoffswitch-inner:before {
background-color: #ccc;
background-color: #ccc;
}
.uhr.white .dot:not(.active) {
border-color: rgba(0,0,0,0.1);
box-shadow: 0 0 0.1em rgba(0,0,0,0.1);
border-color: rgba(0, 0, 0, 0.1);
box-shadow: 0 0 0.1em rgba(0, 0, 0, 0.1);
}
.uhr.white .letter:not(.active) {
color: rgba(0,0,0,0.1);
text-shadow: 0 0 0.1em rgba(0,0,0,0.1);
color: rgba(0, 0, 0, 0.1);
text-shadow: 0 0 0.1em rgba(0, 0, 0, 0.1);
}

41
css/uhr-yellow.css Normal file
View file

@ -0,0 +1,41 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
.uhr.yellow {
background-color: #fd0;
}
.uhr.yellow .dot.active {
border-color: #fff;
box-shadow: 0 0 0.1em #fff;
}
.uhr.yellow .letter.active {
color: #fff;
text-shadow: 0 0 0.1em #fff;
}
.yellow .onoffswitch-inner:before {
background-color: #fd0;
}
.uhr.yellow .dot:not(.active) {
border-color: rgba(0, 0, 0, 0.05);
box-shadow: 0 0 0.1em rgba(0, 0, 0, 0.05);
}
.uhr.yellow .letter:not(.active) {
color: rgba(0, 0, 0, 0.05);
text-shadow: 0 0 0.1em rgba(0, 0, 0, 0.05);
}

249
css/uhr.css Normal file
View file

@ -0,0 +1,249 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
@font-face {
font-family: 'Uhrenfont';
src: url('../resources/uhr.woff') format('woff');
}
body {
font-family: 'Uhrenfont', sans-serif;
}
.uhr {
position: relative;
margin: 0;
transition: background-color 0.5s;
}
.uhr .reflection {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: radial-gradient(225em 45em at 160% 0, rgba(255, 255, 255, 0.4) 0, rgba(255, 255, 255, 0.05) 40%, rgba(255, 255, 255, 0) 40%) no-repeat scroll;
display: block;
margin: 0.15em;
}
#themeswitcher {
}
.uhr .letterarea {
display: block;
position: absolute;
top: 12%;
bottom: 12%;
left: 12%;
right: 12%;
overflow: hidden;
font-size: 200%;
}
.item {
transition: box-shadow 0.5s, text-shadow 0.5s, border-color 0.5s, color 0.5s;
}
.dot {
position: absolute;
display: block;
height: 0;
width: 0;
border: 0.2em solid;
border-radius: 1em;
}
.dot.active {
border-color: #eee;
box-shadow: 0 0 0.2em #eee;
}
.dot1 {
top: 3.75%;
left: 3.75%;
}
.dot2 {
top: 3.75%;
right: 3.75%;
}
.dot3 {
bottom: 3.75%;
right: 3.75%;
}
.dot4 {
bottom: 3.75%;
left: 3.75%;
}
.letter {
height: 10%;
width: 9.0909%;
padding: 0;
margin: 0;
display: inline-block;
text-align: center;
line-height: 160%;
}
.letter.active {
color: #eee;
text-shadow: 0 0 0.2em #eee;
}
.onoffswitch {
position: relative;
width: 86px;
margin: 1em;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
.onoffswitch-checkbox {
display: none;
}
.onoffswitch-label {
display: block;
overflow: hidden;
cursor: pointer;
border: 2px solid #999;
border-radius: 50px;
}
.onoffswitch-inner, .modeswitch-inner {
width: 200%;
margin-left: -100%;
-moz-transition: margin 0.3s ease-in 0s;
-webkit-transition: margin 0.3s ease-in 0s;
-o-transition: margin 0.3s ease-in 0s;
transition: margin 0.3s ease-in 0s;
}
.onoffswitch-inner:before, .onoffswitch-inner:after, .modeswitch-inner:before, .modeswitch-inner:after {
float: left;
width: 50%;
height: 24px;
padding: 0;
line-height: 24px;
font-size: 18px;
color: white;
font-weight: bold;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.onoffswitch-inner:before {
content: "EIN";
padding-left: 12px;
color: #eee;
transition: background-color 0.5s;
}
.onoffswitch-inner:after {
content: "AUS";
padding-right: 12px;
background-color: #eee;
color: #999;
text-align: right;
}
.onoffswitch-switch {
width: 30px;
margin: -3px;
background: #fff;
border: 2px solid #999;
border-radius: 50px;
position: absolute;
top: 0;
bottom: 0;
right: 58px;
-moz-transition: all 0.3s ease-in 0s;
-webkit-transition: all 0.3s ease-in 0s;
-o-transition: all 0.3s ease-in 0s;
transition: all 0.3s ease-in 0s;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner,
.onoffswitch-checkbox:checked + .onoffswitch-label .modeswitch-inner {
margin-left: 0;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
right: 0;
}
.modeswitch-inner:before {
content: "MIN";
padding-left: 12px;
background-color: #fff;
color: #000;
}
.modeswitch-inner:after {
content: "SEC";
padding-right: 12px;
background-color: #fff;
color: #000;
text-align: right;
}
a.uhr-configlink {
cursor: pointer;
background: url("../resources/settings.png") no-repeat;
width: 24px;
height: 24px;
display: inline-block;
margin: 2px;
vertical-align: top;
}
.uhr-controlpanel {
border-radius: 0.5em;
box-shadow: 0 0 1em black;
background-color: #fff;
display: inline-block;
padding: 0.5em;
position: sticky;
bottom: 0;
margin-left: 1em;
}
.uhr-controlpanel .content {
position: relative;
}
a.uhr-closecontrolpanel {
cursor: pointer;
display: inline-block;
position: absolute;
right: 0;
top: -1em;
width: 24px;
height: 24px;
background: url("../resources/close.png") no-repeat;
}
#disclaimer {
font-size: 0.5em;
}
#disclaimer a {
color: #444;
text-decoration: underline;
}

914
dist/jquery.uhr.base.js vendored Normal file
View file

@ -0,0 +1,914 @@
'use strict';
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function ($) {
var uhrGlobals = {
"id": 0,
"languages": [],
"themes": [],
registerLanguage: function registerLanguage(code, language) {
var alreadyExists = uhrGlobals.languages.some(function (element) {
if (code === element.code) {
console.error("Error: Language code '" + code + "' cannot be registered for language '" + language.language +
"' because it is already registered for language '" + element.language + "'!");
return true;
}
return false;
});
if (!alreadyExists) {
language.code = code;
uhrGlobals.languages.push(language);
}
}
};
// auto-detect themes
$('link[rel=stylesheet]').each(function (index, item) {
var styleSheet = $(item);
var styleClass = styleSheet.attr('data-class');
if (styleClass !== undefined) {
var name = styleSheet.attr('data-name');
if (name === undefined) {
name = styleClass;
}
uhrGlobals.themes.push({'styleClass': styleClass, 'name': name});
}
});
// fall-back if no theme was included
if (uhrGlobals.themes.length === 0) {
uhrGlobals.themes.push({});
}
// public interface methods (exported later)
var setCookie;
var isOn;
var update;
var start = function start() {
if (!isOn.bind(this)()) {
this.timer = window.setInterval(function () {
this.options.time = new Date();
update.bind(this)();
}.bind(this), 1000);
update.bind(this)();
setCookie.bind(this)('uhr-status', 'on');
}
};
var stop = function stop() {
if (isOn.bind(this)()) {
window.clearInterval(this.timer);
this.timer = null;
update.bind(this)();
setCookie.bind(this)('uhr-status', 'off');
}
};
var toggle = function toggle() {
if (isOn.bind(this)()) {
this.stop();
} else {
this.start();
}
};
var language;
/**
* Ein Buchstabe. Hilfsklasse für den Renderer und Inhalt der Layout-Arrays.
* @param value Der Buchstabe, der Dargestellt werden soll.
* @param style Die CSS-Styleklassen des Buchstabens.
*/
function Letter(value, style) {
var myValue = value;
var myStyle = style || '';
this.addStyle = function (style) {
if (myStyle === '') {
myStyle = style;
} else {
myStyle += ' ' + style;
}
};
this.toString = function () {
return '<span class="item letter ' + myStyle + '">' + myValue + '</span>';
};
}
function UhrRendererV2Delegate(layout) {
var vorne0 = {
3: [2, 3, 4],
4: [1, 5],
5: [1, 4, 5],
6: [1, 3, 5],
7: [1, 2, 5],
8: [1, 5],
9: [2, 3, 4]
};
var hinten0 = {
3: [8, 9, 10],
4: [7, 11],
5: [7, 10, 11],
6: [7, 9, 11],
7: [7, 8, 11],
8: [7, 11],
9: [8, 9, 10]
};
var vorne1 = {
3: [3],
4: [2, 3],
5: [3],
6: [3],
7: [3],
8: [3],
9: [2, 3, 4]
};
var hinten1 = {
3: [9],
4: [8, 9],
5: [9],
6: [9],
7: [9],
8: [9],
9: [8, 9, 10]
};
var vorne2 = {
3: [2, 3, 4],
4: [1, 5],
5: [5],
6: [4],
7: [3],
8: [2],
9: [1, 2, 3, 4, 5]
};
var hinten2 = {
3: [8, 9, 10],
4: [7, 11],
5: [11],
6: [10],
7: [9],
8: [8],
9: [7, 8, 9, 10, 11]
};
var vorne3 = {
3: [1, 2, 3, 4, 5],
4: [4],
5: [3],
6: [4],
7: [5],
8: [1, 5],
9: [2, 3, 4]
};
var hinten3 = {
3: [7, 8, 9, 10, 11],
4: [10],
5: [9],
6: [10],
7: [11],
8: [7, 11],
9: [8, 9, 10]
};
var vorne4 = {
3: [4],
4: [3, 4],
5: [2, 4],
6: [1, 4],
7: [1, 2, 3, 4, 5],
8: [4],
9: [4]
};
var hinten4 = {
3: [10],
4: [9, 10],
5: [8, 10],
6: [7, 10],
7: [7, 8, 9, 10, 11],
8: [10],
9: [10]
};
var vorne5 = {
3: [1, 2, 3, 4, 5],
4: [1],
5: [1, 2, 3, 4],
6: [5],
7: [5],
8: [1, 5],
9: [2, 3, 4]
};
var hinten5 = {
3: [7, 8, 9, 10, 11],
4: [7],
5: [7, 8, 9, 10],
6: [11],
7: [11],
8: [7, 11],
9: [8, 9, 10]
};
var hinten6 = {
3: [9, 10],
4: [8],
5: [7],
6: [7, 8, 9, 10],
7: [7, 11],
8: [7, 11],
9: [8, 9, 10]
};
var hinten7 = {
3: [7, 8, 9, 10, 11],
4: [11],
5: [10],
6: [9],
7: [8],
8: [8],
9: [8]
};
var hinten8 = {
3: [8, 9, 10],
4: [7, 11],
5: [7, 11],
6: [8, 9, 10],
7: [7, 11],
8: [7, 11],
9: [8, 9, 10]
};
var hinten9 = {
3: [8, 9, 10],
4: [7, 11],
5: [7, 11],
6: [8, 9, 10, 11],
7: [11],
8: [10],
9: [8, 9]
};
var seconds = {
"0": [vorne0, hinten0],
"1": [vorne0, hinten1],
"2": [vorne0, hinten2],
"3": [vorne0, hinten3],
"4": [vorne0, hinten4],
"5": [vorne0, hinten5],
"6": [vorne0, hinten6],
"7": [vorne0, hinten7],
"8": [vorne0, hinten8],
"9": [vorne0, hinten9],
"10": [vorne1, hinten0],
"11": [vorne1, hinten1],
"12": [vorne1, hinten2],
"13": [vorne1, hinten3],
"14": [vorne1, hinten4],
"15": [vorne1, hinten5],
"16": [vorne1, hinten6],
"17": [vorne1, hinten7],
"18": [vorne1, hinten8],
"19": [vorne1, hinten9],
"20": [vorne2, hinten0],
"21": [vorne2, hinten1],
"22": [vorne2, hinten2],
"23": [vorne2, hinten3],
"24": [vorne2, hinten4],
"25": [vorne2, hinten5],
"26": [vorne2, hinten6],
"27": [vorne2, hinten7],
"28": [vorne2, hinten8],
"29": [vorne2, hinten9],
"30": [vorne3, hinten0],
"31": [vorne3, hinten1],
"32": [vorne3, hinten2],
"33": [vorne3, hinten3],
"34": [vorne3, hinten4],
"35": [vorne3, hinten5],
"36": [vorne3, hinten6],
"37": [vorne3, hinten7],
"38": [vorne3, hinten8],
"39": [vorne3, hinten9],
"40": [vorne4, hinten0],
"41": [vorne4, hinten1],
"42": [vorne4, hinten2],
"43": [vorne4, hinten3],
"44": [vorne4, hinten4],
"45": [vorne4, hinten5],
"46": [vorne4, hinten6],
"47": [vorne4, hinten7],
"48": [vorne4, hinten8],
"49": [vorne4, hinten9],
"50": [vorne5, hinten0],
"51": [vorne5, hinten1],
"52": [vorne5, hinten2],
"53": [vorne5, hinten3],
"54": [vorne5, hinten4],
"55": [vorne5, hinten5],
"56": [vorne5, hinten6],
"57": [vorne5, hinten7],
"58": [vorne5, hinten8],
"59": [vorne5, hinten9]
};
function parseObject(letters, styleClass, object) {
if (typeof object !== 'undefined' && object !== null) {
Object.keys(object).forEach(function (y) {
var highlightLetters = object[y];
highlightLetters.forEach(function (x) {
letters[y - 1][x - 1].addStyle(styleClass);
});
});
}
}
function parseArrayOrObject(letters, styleClass, input) {
if (typeof input !== 'undefined' && input !== null) {
if (Array.isArray(input)) {
input.forEach(function (item) {
parseObject(letters, styleClass, item);
});
} else {
parseObject(letters, styleClass, input);
}
}
}
function parseTimeDefinition(letters, styleClass, definition) {
if (typeof definition !== 'undefined' && definition !== null) {
Object.keys(definition).forEach(function (listString) {
var array = listString.split(',');
var highlightLetters = definition[listString];
array.forEach(function (item) {
parseArrayOrObject(letters, styleClass + item, highlightLetters);
});
});
}
}
this.parse = function parse() {
var letters = [];
layout.letters.forEach(function (string) {
var line = [];
for (var c = 0; c < string.length; c++) {
var character = new Letter(string[c]);
line.push(character);
}
letters.push(line);
});
parseArrayOrObject(letters, 'on', layout.permanent);
if (typeof layout.seconds !== 'undefined' && layout.seconds !== null) {
parseTimeDefinition(letters, 'second', layout.seconds);
} else {
parseTimeDefinition(letters, 'second', seconds);
}
parseTimeDefinition(letters, 'minute', layout.minutes);
parseTimeDefinition(letters, 'hour', layout.hours);
return letters;
};
}
/**
* Hilfsklasse zum Rendern der Uhr.
* @param layout Layout-Objekt, das gerendert werden soll.
* @param renderarea Das jQuery-gewrappte HTML-Element, auf dem gerendert werden soll.
*/
function UhrRenderer(layout, renderarea) {
this.render = function render(beforeshow) {
if (layout.parsed === undefined) {
switch (layout.version) {
case 2:
var delegate = new UhrRendererV2Delegate(layout);
var parsedLayout = delegate.parse();
Object.defineProperty(layout, "parsed", {
"value": parsedLayout,
"writable": false,
"configurable": false
});
break;
default:
console.warn("Unknown layout version: '" + layout.version + "'");
return;
}
}
var letters = layout.parsed;
renderarea.fadeOut('fast', function () {
renderarea.empty();
letters.forEach(function (line, index, array) {
line.forEach(function (letter) {
renderarea.append(letter.toString());
});
if (index < array.length - 1) {
renderarea.append('<br/>');
}
});
if (typeof beforeshow === 'function') {
beforeshow();
}
renderarea.fadeIn('fast');
});
};
}
var setLanguage = function setLanguage(languageKey) {
if (languageKey !== this.options.language) {
this.options.language = languageKey;
var renderer = new UhrRenderer(language.bind(this)(), this.element.find('.letterarea'));
renderer.render.bind(this)(function () {
this.currentMinute = -1;
update.bind(this)();
}.bind(this));
setCookie.bind(this)('uhr-language', languageKey);
update.bind(this)();
}
};
var setTheme = function setTheme(theme) {
if (theme !== this.options.theme) {
this.element.removeClass(this.options.theme).addClass(theme);
$('#uhr-onoffswitch' + this.id).removeClass(this.options.theme).addClass(theme);
this.options.theme = theme;
setCookie.bind(this)('uhr-theme', theme);
}
};
var setTime = function setTime(time) {
this.currentMinute = -1;
if (time === null) {
this.options.time = new Date();
} else {
if (this.timer !== null) {
window.clearInterval(this.timer);
}
this.options.time = time;
}
update.bind(this)();
};
var setMode = function (mode) {
this.options.mode = mode;
this.currentMinute = -1;
update.bind(this)();
setCookie.bind(this)('uhr-mode', mode);
};
var setWidth = function setWidth(width) {
var e = this.element;
e.css('width', width);
var realWidth = e.width();
e.width(realWidth);
e.height(realWidth);
e.css('font-size', (realWidth / 40) + 'px');
};
// private interface methods
var setupHTML;
var wireFunctionality;
var create = function create() {
this.id = uhrGlobals.id++;
this.timer = null;
this.currentMinute = -1;
var userTime = this.options.time;
var hash, params;
if (this.options.time === undefined) {
this.options.time = new Date();
}
// parse the URL params
hash = window.location.hash;
if (hash !== undefined && typeof hash === 'string' && hash.charAt(0) === '#') {
hash = hash.substring(1);
hash = decodeURIComponent(hash);
params = hash.split('&');
params.forEach(function (element) {
var pair = element.split('=');
var key = pair[0];
var value = pair[1];
switch (key) {
case 'l':
case 'language':
this.options.language = value;
this.options.force = true;
break;
case 't':
case 'theme':
this.options.theme = value;
this.options.force = true;
break;
case 'm':
case 'mode':
this.options.mode = value;
this.options.force = true;
break;
case 's':
case 'status':
this.options.status = value;
this.options.force = true;
break;
}
}.bind(this));
}
// end parse the URL params
setupHTML.bind(this)();
wireFunctionality.bind(this)();
if (userTime !== undefined) {
this.time(userTime);
}
};
// private helper methods (not exported)
var toggleConfigScreen = function toggleConfigScreen() {
$('#uhr-controlpanel' + this.id).toggle('fast');
};
// set up
setupHTML = function setupHTML() {
var e = this.element;
// Base clock area
e.addClass('uhr');
e.empty();
e.append('<span class="item dot dot1"></span>');
e.append('<span class="item dot dot2"></span>');
e.append('<span class="item dot dot3"></span>');
e.append('<span class="item dot dot4"></span>');
e.append('<div class="letterarea"></div>');
e.append('<div class="reflection"></div>');
setWidth.bind(this)(this.options.width);
if (this.options.controls) {
var controlpanel = $('<div class="uhr-controlpanel" id="uhr-controlpanel' + this.id + '"></div>');
var content = $('<div class="content"></div>');
controlpanel.append(content);
// on/off switch
var toggleSwitch = $('<div class="onoffswitch" id="uhr-onoffswitch' + this.id + '"></div>');
toggleSwitch.append('<input type="checkbox" class="onoffswitch-checkbox" id="uhr-onoffswitch-checkbox' + this.id +
'" checked="checked" />');
toggleSwitch.append('<label class="onoffswitch-label" for="uhr-onoffswitch-checkbox' + this.id + '">' +
'<div class="onoffswitch-inner"></div>' + '<div class="onoffswitch-switch"></div>' + '</label>');
content.append(toggleSwitch);
// time mode switch
var modeSwitch = $('<div class="onoffswitch" id="uhr-modeswitch' + this.id + '"></div>');
modeSwitch.append('<input type="checkbox" class="onoffswitch-checkbox" id="uhr-modeswitch-checkbox' + this.id +
'" checked="checked" />');
modeSwitch.append('<label class="onoffswitch-label" for="uhr-modeswitch-checkbox' + this.id + '">' +
'<div class="modeswitch-inner"></div>' + '<div class="onoffswitch-switch"></div>' +
'</label>');
content.append(modeSwitch);
// language chooser
if (uhrGlobals.languages.length > 1) {
var languageChooser = $('<select id="uhr-languagechooser' + this.id + '"></select>');
uhrGlobals.languages.forEach(function (item) {
languageChooser.append('<option value="' + item.code + '">' + item.language + '</option>');
});
content.append(languageChooser);
}
// theme chooser
if (uhrGlobals.themes.length > 1) {
var themeChooser = $('<select id="uhr-themechooser' + this.id + '"></select>');
uhrGlobals.themes.forEach(function (item) {
themeChooser.append('<option value="' + item.styleClass + '">' + item.name + '</option>');
});
content.append(themeChooser);
}
var closebutton = $('<a class="uhr-closecontrolpanel" id="uhr-closecontrolpanel' + this.id + '"></a>');
closebutton.on('click', function () {
$('#uhr-controlpanel' + this.id).hide('fast');
}.bind(this));
content.append(closebutton);
e.after(controlpanel);
controlpanel.hide();
var configlink = $('<a class="uhr-configlink" id="uhr-configlink' + this.id + '"></a>');
configlink.on('click', function () {
toggleConfigScreen.bind(this)();
}.bind(this));
e.after(configlink);
}
};
wireFunctionality = function wireFunctionality() {
// on/off switch
var toggleSwitch = $('#uhr-onoffswitch-checkbox' + this.id);
toggleSwitch.on('click', function () {
this.toggle();
}.bind(this));
var status = $.cookie('uhr-status' + this.id);
if (status === undefined || this.options.force) {
status = this.options.status;
}
toggleSwitch.prop('checked', status === 'on');
if (status === 'on') {
this.start();
} else {
this.stop();
}
// time mode switch
var modeSwitch = $('#uhr-modeswitch-checkbox' + this.id);
modeSwitch.on('click', function () {
if (this.options.mode === 'seconds') {
setMode.bind(this)('normal');
} else {
setMode.bind(this)('seconds');
}
}.bind(this));
var mode = $.cookie('uhr-mode' + this.id);
if (mode === undefined || this.options.force) {
mode = this.options.mode;
}
modeSwitch.prop('checked', mode !== 'seconds');
if (mode === 'seconds') {
setMode.bind(this)('seconds');
} else {
setMode.bind(this)('normal');
}
// language chooser
var languageChooser = $('#uhr-languagechooser' + this.id);
languageChooser.on('change', function () {
var languageKey = $('#uhr-languagechooser' + this.id).val();
this.language(languageKey);
}.bind(this));
var selectedLanguage = $.cookie('uhr-language' + this.id);
if (selectedLanguage === undefined || this.options.force) {
selectedLanguage = this.options.language;
}
var found = uhrGlobals.languages.some(function (item) {
return selectedLanguage === item.code;
});
if (!found) {
var fallbackLanguage;
if (uhrGlobals.languages.length > 0) {
fallbackLanguage = uhrGlobals.languages[0].code;
} else {
fallbackLanguage = '';
}
console.warn("Language '" + selectedLanguage + "' not found! Using fallback '" + fallbackLanguage + "'");
selectedLanguage = fallbackLanguage;
}
languageChooser.val(selectedLanguage);
this.options.language = "";
this.language(selectedLanguage);
// theme chooser
var themeChooser = $('#uhr-themechooser' + this.id);
themeChooser.on('change', function () {
var themeKey = $('#uhr-themechooser' + this.id).val();
this.theme(themeKey);
}.bind(this));
var selectedTheme = $.cookie('uhr-theme' + this.id);
if (selectedTheme === undefined || this.options.force) {
selectedTheme = this.options.theme;
}
found = uhrGlobals.themes.some(function (item) {
return selectedTheme === item.styleClass;
});
if (!found) {
var fallbackTheme = uhrGlobals.themes[0].styleClass;
console.warn("Theme '" + selectedTheme + "' not found! Using fallback '" + fallbackTheme + "'");
selectedTheme = fallbackTheme;
}
themeChooser.val(selectedTheme);
this.options.theme = "";
this.theme(selectedTheme);
if (this.options.autoresize) {
$(window).on('resize', function () {
var $e = this.element;
var $parent = $e.parent();
var $window = $(window);
var parentWidth = $parent.width();
var parentHeight = $parent.height();
var windowWidth = $window.width();
var windowHeight = $window.height();
var size = Math.min(parentWidth, parentHeight, windowWidth, windowHeight) + 'px';
setWidth.bind(this)(size);
}.bind(this));
}
};
var destroy = function destroy() {
this.timer = null;
$(this.element)
.removeAttr('style')
.removeAttr('class')
.empty();
$('#uhr-configlink' + this.id).remove();
$('#uhr-controlpanel' + this.id).remove();
};
setCookie = function setCookie(cookieName, cookieValue) {
var options = {};
if (this.options.cookiePath !== undefined) {
options = {expires: 365, path: this.options.cookiePath};
} else {
options = {expires: 365};
}
$.cookie(cookieName + this.id, cookieValue, options);
};
// business logic
isOn = function isOn() {
return this.timer !== null;
};
var show;
var clear;
update = function update() {
if (isOn.bind(this)()) {
var time = this.options.time;
if (!language.bind(this)().hasOwnProperty('seconds') && this.options.mode !== 'seconds') {
if (time.getMinutes() === this.currentMinute) {
return;
}
this.currentMinute = time.getMinutes();
}
show.bind(this)(time);
} else {
clear.bind(this)();
this.currentMinute = -1;
}
};
var highlight;
var getSecond;
var getDotMinute;
var getCoarseMinute;
var getHour;
show = function show(time) {
var second = getSecond.bind(this)(time);
var dotMinute = getDotMinute.bind(this)(time);
var hour = getHour.bind(this)(time);
var coarseMinute = getCoarseMinute.bind(this)(time);
clear.bind(this)();
if (this.options.mode === 'seconds') {
highlight.bind(this)('second' + second);
} else {
highlight.bind(this)('on');
for (var i = 1; i <= dotMinute; i++) {
highlight.bind(this)('dot' + i);
}
highlight.bind(this)('minute' + coarseMinute);
highlight.bind(this)('hour' + hour);
}
};
highlight = function highlight(itemClass) {
this.element.find('.item.' + itemClass).addClass('active');
};
clear = function clear() {
this.element.find('.item').removeClass('active');
};
getSecond = function getSecond(date) {
if (typeof language.bind(this)().getSeconds === 'function') {
return language.bind(this)().getSeconds(date);
}
return date.getSeconds();
};
getDotMinute = function getDotMinute(date) {
if (typeof language.bind(this)().getDotMinute === 'function') {
return language.bind(this)().getDotMinute(date);
}
var minutes = date.getMinutes();
return minutes % 5;
};
getCoarseMinute = function getCoarseMinute(date) {
if (typeof language.bind(this)().getCoarseMinute === 'function') {
return language.bind(this)().getCoarseMinute(date);
}
return date.getMinutes();
};
getHour = function getHour(date) {
if (typeof language.bind(this)().getHour === 'function') {
return language.bind(this)().getHour(date);
}
var hour = date.getHours();
if (date.getMinutes() >= 25) {
return (hour + 1) % 24;
}
return hour;
};
language = function language() {
var matchingLanguages = uhrGlobals.languages.filter(function (element) {
return (element.code === this.options.language);
}, this);
if (matchingLanguages.length > 0) {
return matchingLanguages[0];
}
// fallback: return empty object
return {};
};
$.widget("fritteli.uhr", {
"options": {
width: '100%',
status: 'on',
language: 'de_CH',
theme: uhrGlobals.themes[0].styleClass,
force: false,
controls: true,
cookiePath: undefined,
autoresize: true,
mode: 'normal'
},
"start": start,
"stop": stop,
"toggle": toggle,
"language": setLanguage,
"theme": setTheme,
"time": setTime,
"mode": setMode,
"width": setWidth,
// constructor method
"_create": create,
// destructor method
"_destroy": destroy
});
$.fritteli.uhr.register = uhrGlobals.registerLanguage;
})(jQuery);
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
// hilfsvariablen
var es_isch = {1: [1, 2, 4, 5, 6, 7]};
var ab = {4: [1, 2]};
var vor = {3: [9, 10, 11]};
var haubi = {4: [4, 5, 6, 7, 8]};
var fuef = {1: [9, 10, 11]};
var zae = {2: [9, 10, 11]};
var viertu = {2: [1, 2, 3, 4, 5, 6]};
var zwaenzg = {3: [1, 2, 3, 4, 5, 6]};
var layout = {
// version: zur Zeit immer 2 (Pflichtattribut)
"version": 2,
// Sprechender Name der Sprache
"language": 'Bärndütsch',
// Buchstabenfeld als Array von Strings.
"letters": [
'ESKISCHAFÜF',
'VIERTUBFZÄÄ',
'ZWÄNZGSIVOR',
'ABOHAUBIEGE',
'EISZWÖISDRÜ',
'VIERIFÜFIQT',
'SÄCHSISIBNI',
'ACHTINÜNIEL',
'ZÄNIERBEUFI',
'ZWÖUFINAUHR'
],
// Permanent aktive Buchstaben. <array-or-object>, vgl. ausführliche Beschreibung bei "minutes".
"permanent": es_isch,
/*
* Minuten: Objekt im folgenden Format:
* {
* <minuten>: <array-or-object>,
* ...
* }
* <minuten>: String von Komma-separierten Minutenwerten, zu welchem die in <array-or-object> angegebenen Buchstaben aktiv sein sollen
* <array-or-object> : [ <object>, ...] | <object>
* <object>: { <zeile> : [ <spalte>, ... ] }
* <zeile>: Die Zeile, in welcher die Buchstaben liegen; von oben gezählt, oben ist 1.
* <spalte>: Die Spalte, in der ein einzelner Buchstabe liegt; von links gezählt, links ist 1.
* Beispiel:
* "minutes": {
* "0,1": {1: [6, 7, 9]},
* "5": [ {3: [1, 2]}, {4: [10, 11]} ]
* }
* Erklärung:
* Bei Minuten 0 und 1 sind die Buchstaben 6, 7 und 9 der ersten Zeile aktiv.
* Bei Minute 5 sind die Buchstaben 1 und 2 der Zeile 3 sowie die Buchstaben 10 und 11 der Zeile 4 aktiv.
*/
"minutes": {
"5,6,7,8,9": [fuef, ab],
"10,11,12,13,14": [zae, ab],
"15,16,17,18,19": [viertu, ab],
"20,21,22,23,24": [zwaenzg, ab],
"25,26,27,28,29": [fuef, vor, haubi],
"30,31,32,33,34": haubi,
"35,36,37,38,39": [fuef, ab, haubi],
"40,41,42,43,44": [zwaenzg, vor],
"45,46,47,48,49": [viertu, vor],
"50,51,52,53,54": [zae, vor],
"55,56,57,58,59": [fuef, vor]
},
// Die Stunden; gleiches Format wie bei den Minuten
"hours": {
"0,12": {10: [1, 2, 3, 4, 5, 6]},
"1,13": {5: [1, 2, 3]},
"2,14": {5: [4, 5, 6, 7]},
"3,15": {5: [9, 10, 11]},
"4,16": {6: [1, 2, 3, 4, 5]},
"5,17": {6: [6, 7, 8, 9]},
"6,18": {7: [1, 2, 3, 4, 5, 6]},
"7,19": {7: [7, 8, 9, 10, 11]},
"8,20": {8: [1, 2, 3, 4, 5]},
"9,21": {8: [6, 7, 8, 9]},
"10,22": {9: [1, 2, 3, 4]},
"11,23": {9: [8, 9, 10, 11]}
}
};
// Das Layout bei der Uhr unter dem Code "de_CH" registrieren.
$.fritteli.uhr.register('de_CH', layout);
}(jQuery));

1
dist/jquery.uhr.base.min.js vendored Normal file

File diff suppressed because one or more lines are too long

743
dist/jquery.uhr.baselangs.js vendored Normal file
View file

@ -0,0 +1,743 @@
'use strict';
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var es_ist = {1: [1, 2, 4, 5, 6]};
var uhr = {10: [9, 10, 11]};
var nach = {4: [8, 9, 10, 11]};
var vor = {4: [1, 2, 3]};
var halb = {5: [1, 2, 3, 4]};
var fuenf = {1: [8, 9, 10, 11]};
var zehn = {2: [1, 2, 3, 4]};
var viertel = {3: [5, 6, 7, 8, 9, 10, 11]};
var zwanzig = {2: [5, 6, 7, 8, 9, 10, 11]};
var dreiviertel = {3: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Deutsch',
"letters": [
'ESKISTAFÜNF',
'ZEHNZWANZIG',
'DREIVIERTEL',
'VORFUNKNACH',
'HALBAELFÜNF',
'EINSXAMZWEI',
'DREIPMJVIER',
'SECHSNLACHT',
'SIEBENZWÖLF',
'ZEHNEUNKUHR'
],
"permanent": es_ist,
"minutes": {
"0,1,2,3,4": uhr,
"5,6,7,8,9": [fuenf, nach],
"10,11,12,13,14": [zehn, nach],
"15,16,17,18,19": [viertel, nach],
"20,21,22,23,24": [zwanzig, nach],
"25,26,27,28,29": [fuenf, vor, halb],
"30,31,32,33,34": halb,
"35,36,37,38,39": [fuenf, nach, halb],
"40,41,42,43,44": [zwanzig, vor],
"45,46,47,48,49": dreiviertel,
"50,51,52,53,54": [zehn, vor],
"55,56,57,58,59": [fuenf, vor]
},
"hours": {
"0,12": {9: [7, 8, 9, 10, 11]},
"1,13": {6: [1, 2, 3, 4]},
"2,14": {6: [8, 9, 10, 11]},
"3,15": {7: [1, 2, 3, 4]},
"4,16": {7: [8, 9, 10, 11]},
"5,17": {5: [8, 9, 10, 11]},
"6,18": {8: [1, 2, 3, 4, 5]},
"7,19": {9: [1, 2, 3, 4, 5, 6]},
"8,20": {8: [8, 9, 10, 11]},
"9,21": {10: [4, 5, 6, 7]},
"10,22": {10: [1, 2, 3, 4]},
"11,23": {5: [6, 7, 8]}
}
};
$.fritteli.uhr.register('de', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var es_isch = {1: [1, 2, 4, 5, 6, 7]};
var genau = {3: [7, 8, 9, 10, 11]};
var ab = {4: [4, 5]};
var vor = {4: [1, 2, 3]};
var haubi = {4: [7, 8, 9, 10, 11]};
var fuef = {1: [9, 10, 11]};
var zae = {2: [9, 10, 11]};
var viertu = {2: [1, 2, 3, 4, 5, 6]};
var zwaenzg = {3: [1, 2, 3, 4, 5, 6]};
var layout = {
"version": 2,
"language": 'Bärndütsch (genau)',
"letters": [
'ESKISCHAFÜF',
'VIERTUBFZÄÄ',
'ZWÄNZGGENAU',
'VORABOHAUBI',
'EISZWÖISDRÜ',
'VIERIFÜFIQT',
'SÄCHSISIBNI',
'ACHTINÜNIEL',
'ZÄNIERBEUFI',
'ZWÖUFINAUHR'
],
"permanent": es_isch,
"minutes": {
"0": genau,
"5,6,7,8,9": [fuef, ab],
"10,11,12,13,14": [zae, ab],
"15,16,17,18,19": [viertu, ab],
"20,21,22,23,24": [zwaenzg, ab],
"25,26,27,28,29": [fuef, vor, haubi],
"30,31,32,33,34": haubi,
"35,36,37,38,39": [fuef, ab, haubi],
"40,41,42,43,44": [zwaenzg, vor],
"45,46,47,48,49": [viertu, vor],
"50,51,52,53,54": [zae, vor],
"55,56,57,58,59": [fuef, vor]
},
"hours": {
"0,12": {10: [1, 2, 3, 4, 5, 6]},
"1,13": {5: [1, 2, 3]},
"2,14": {5: [4, 5, 6, 7]},
"3,15": {5: [9, 10, 11]},
"4,16": {6: [1, 2, 3, 4, 5]},
"5,17": {6: [6, 7, 8, 9]},
"6,18": {7: [1, 2, 3, 4, 5, 6]},
"7,19": {7: [7, 8, 9, 10, 11]},
"8,20": {8: [1, 2, 3, 4, 5]},
"9,21": {8: [6, 7, 8, 9]},
"10,22": {9: [1, 2, 3, 4]},
"11,23": {9: [8, 9, 10, 11]}
}
};
$.fritteli.uhr.register('de_CH_genau', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var klokken_er = {1: [1, 2, 3, 4, 5, 6, 7, 9, 10]};
var minutter = {4: [4, 5, 6, 7, 8, 9, 10, 11]};
var i = {5: [8]};
var over = {5: [4, 5, 6, 7]};
var fem = {2: [1, 2, 3]};
var ti = {4: [1, 2]};
var kvart = {3: [4, 5, 6, 7, 8]};
var tyve = {2: [4, 5, 6, 7]};
var halv = {6: [8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Dansk',
"letters": [
'KLOKKENVERO',
'FEMTYVESKLA',
'OJEKVARTVAT',
'TIAMINUTTER',
'VEMOVERILMF',
'MONALISHALV',
'ETTOTREFIRE',
'FEMSEKSRSYV',
'OTTERNIMETI',
'ELLEVEATOLV'
],
"permanent": klokken_er,
"minutes": {
"5,6,7,8,9": [fem, minutter, over],
"10,11,12,13,14": [ti, minutter, over],
"15,16,17,18,19": [kvart, over],
"20,21,22,23,24": [tyve, minutter, over],
"25,26,27,28,29": [fem, minutter, i, halv],
"30,31,32,33,34": [halv],
"35,36,37,38,39": [fem, minutter, over, halv],
"40,41,42,43,44": [tyve, minutter, i],
"45,46,47,48,49": [kvart, i],
"50,51,52,53,54": [ti, minutter, i],
"55,56,57,58,59": [fem, minutter, i]
},
"hours": {
"0,12": {10: [8, 9, 10, 11]},
"1,13": {7: [1, 2]},
"2,14": {7: [3, 4]},
"3,15": {7: [5, 6, 7]},
"4,16": {7: [8, 9, 10, 11]},
"5,17": {8: [1, 2, 3]},
"6,18": {8: [4, 5, 6, 7]},
"7,19": {8: [9, 10, 11]},
"8,20": {9: [1, 2, 3, 4]},
"9,21": {9: [6, 7]},
"10,22": {9: [10, 11]},
"11,23": {10: [1, 2, 3, 4, 5, 6]}
},
"getHour": function (date) {
var hour = date.getHours();
if (date.getMinutes() >= 25) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('dk', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var it_is = {1: [1, 2, 4, 5]};
var half = {4: [1, 2, 3, 4]};
var to = {4: [10, 11]};
var past = {5: [1, 2, 3, 4]};
var o_clock = {10: [5, 6, 7, 8, 9, 10, 11]};
var five = {3: [7, 8, 9, 10]};
var ten = {4: [6, 7, 8]};
var a_quarter = {2: [1, 3, 4, 5, 6, 7, 8, 9]};
var twenty = {3: [1, 2, 3, 4, 5, 6]};
var twentyfive = {3: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]};
var layout = {
"version": 2,
"language": 'English',
"letters": [
'ITLISBFAMPM',
'ACQUARTERDC',
'TWENTYFIVEX',
'HALFBTENFTO',
'PASTERUNINE',
'ONESIXTHREE',
'FOURFIVETWO',
'EIGHTELEVEN',
'SEVENTWELVE',
'TENSO\'CLOCK'
],
"permanent": it_is,
"minutes": {
"0,1,2,3,4": o_clock,
"5,6,7,8,9": [five, past],
"10,11,12,13,14": [ten, past],
"15,16,17,18,19": [a_quarter, past],
"20,21,22,23,24": [twenty, past],
"25,26,27,28,29": [twentyfive, past],
"30,31,32,33,34": [half, past],
"35,36,37,38,39": [twentyfive, to],
"40,41,42,43,44": [twenty, to],
"45,46,47,48,49": [a_quarter, to],
"50,51,52,53,54": [ten, to],
"55,56,57,58,59": [five, to]
},
"hours": {
"0,12": {9: [6, 7, 8, 9, 10, 11]},
"1,13": {6: [1, 2, 3]},
"2,14": {7: [9, 10, 11]},
"3,15": {6: [7, 8, 9, 10, 11]},
"4,16": {7: [1, 2, 3, 4]},
"5,17": {7: [5, 6, 7, 8]},
"6,18": {6: [4, 5, 6]},
"7,19": {9: [1, 2, 3, 4, 5]},
"8,20": {8: [1, 2, 3, 4, 5]},
"9,21": {5: [8, 9, 10, 11]},
"10,22": {10: [1, 2, 3]},
"11,23": {8: [6, 7, 8, 9, 10, 11]}
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('en', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var es_la = {1: [1, 2, 6, 7]};
var son_las = {1: [2, 3, 4, 6, 7, 8]};
var y = {7: [6]};
var menos = {7: [7, 8, 9, 10, 11]};
var media = {10: [1, 2, 3, 4, 5]};
var cinco = {9: [7, 8, 9, 10, 11]};
var diez = {8: [8, 9, 10, 11]};
var cuarto = {10: [6, 7, 8, 9, 10, 11]};
var veinte = {8: [2, 3, 4, 5, 6, 7]};
var veinticinco = {9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Español',
"letters": [
'ESONELASUNA',
'DOSITRESORE',
'CUATROCINCO',
'SEISASIETEN',
'OCHONUEVEYO',
'LADIEZSONCE',
'DOCELYMENOS',
'OVEINTEDIEZ',
'VEINTICINCO',
'MEDIACUARTO'
],
"permanent": [],
"minutes": {
"5,6,7,8,9": [y, cinco],
"10,11,12,13,14": [y, diez],
"15,16,17,18,19": [y, cuarto],
"20,21,22,23,24": [y, veinte],
"25,26,27,28,29": [y, veinticinco],
"30,31,32,33,34": [y, media],
"35,36,37,38,39": [menos, veinticinco],
"40,41,42,43,44": [menos, veinte],
"45,46,47,48,49": [menos, cuarto],
"50,51,52,53,54": [menos, diez],
"55,56,57,58,59": [menos, cinco]
},
"hours": {
"0,12": [son_las, {7: [1, 2, 3, 4]}],
"1,13": [es_la, {1: [9, 10, 11]}],
"2,14": [son_las, {2: [1, 2, 3]}],
"3,15": [son_las, {2: [5, 6, 7, 8]}],
"4,16": [son_las, {3: [1, 2, 3, 4, 5, 6]}],
"5,17": [son_las, {3: [7, 8, 9, 10, 11]}],
"6,18": [son_las, {4: [1, 2, 3, 4]}],
"7,19": [son_las, {4: [6, 7, 8, 9, 10]}],
"8,20": [son_las, {5: [1, 2, 3, 4]}],
"9,21": [son_las, {5: [5, 6, 7, 8, 9]}],
"10,22": [son_las, {6: [3, 4, 5, 6]}],
"11,23": [son_las, {6: [8, 9, 10, 11]}]
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('es', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var il_est = {1: [1, 2, 4, 5, 6]};
var et = {8: [1, 2]};
var moins = {7: [1, 2, 3, 4, 5]};
var demie = {10: [4, 5, 6, 7, 8]};
var heures = {6: [6, 7, 8, 9, 10, 11]};
var le = {7: [7, 8]};
var cinq = {9: [7, 8, 9, 10]};
var dix = {7: [9, 10, 11]};
var quart = {8: [4, 5, 6, 7, 8]};
var vingt = {9: [1, 2, 3, 4, 5]};
var vingtcinq = {9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]};
var layout = {
"version": 2,
"language": 'Français',
"letters": [
'ILNESTODEUX',
'QUATRETROIS',
'NEUFUNESEPT',
'HUITSIXCINQ',
'MIDIXMINUIT',
'ONZERHEURES',
'MOINSOLEDIX',
'ETRQUARTPMD',
'VINGT-CINQU',
'ETSDEMIEPAM'
],
"permanent": il_est,
"minutes": {
"5,6,7,8,9": cinq,
"10,11,12,13,14": dix,
"15,16,17,18,19": [et, quart],
"20,21,22,23,24": vingt,
"25,26,27,28,29": vingtcinq,
"30,31,32,33,34": [et, demie],
"35,36,37,38,39": [moins, vingtcinq],
"40,41,42,43,44": [moins, vingt],
"45,46,47,48,49": [moins, le, quart],
"50,51,52,53,54": [moins, dix],
"55,56,57,58,59": [moins, cinq]
},
"hours": {
"0": {5: [6, 7, 8, 9, 10, 11]},
"1,13": [
{3: [5, 6, 7]},
heures
],
"2,14": [
{1: [8, 9, 10, 11]},
heures
],
"3,15": [
{2: [7, 8, 9, 10, 11]},
heures
],
"4,16": [
{2: [1, 2, 3, 4, 5, 6]},
heures
],
"5,17": [
{4: [8, 9, 10, 11]},
heures
],
"6,18": [
{4: [5, 6, 7]},
heures
],
"7,19": [
{3: [8, 9, 10, 11]},
heures
],
"8,20": [
{4: [1, 2, 3, 4]},
heures
],
"9,21": [
{3: [1, 2, 3, 4]},
heures
],
"10,22": [
{5: [3, 4, 5]},
heures
],
"11,23": [
{6: [1, 2, 3, 4]},
heures
],
"12": {5: [1, 2, 3, 4]}
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('fr', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var sono_le = {1: [1, 2, 3, 4, 6, 7]};
var e_l = {2: [1, 3, 4]};
var e = {8: [1]};
var meno = {7: [8, 9, 10, 11]};
var mezza = {10: [7, 8, 9, 10, 11]};
var cinque = {9: [6, 7, 8, 9, 10, 11]};
var dieci = {10: [1, 2, 3, 4, 5]};
var un_quarto = {8: [3, 4, 6, 7, 8, 9, 10, 11]};
var venti = {9: [1, 2, 3, 4, 5]};
var venticinque = {9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Italiano',
"letters": [
'SONORLEBORE',
'ÈRL\'UNASDUE',
'TREOTTONOVE',
'DIECIUNDICI',
'DODICISETTE',
'QUATTROCSEI',
'CINQUEAMENO',
'ECUNOQUARTO',
'VENTICINQUE',
'DIECIPMEZZA'
],
"permanent": [],
"minutes": {
"5,6,7,8,9": [e, cinque],
"10,11,12,13,14": [e, dieci],
"15,16,17,18,19": [e, un_quarto],
"20,21,22,23,24": [e, venti],
"25,26,27,28,29": [e, venticinque],
"30,31,32,33,34": [e, mezza],
"35,36,37,38,39": [meno, venticinque],
"40,41,42,43,44": [meno, venti],
"45,46,47,48,49": [meno, un_quarto],
"50,51,52,53,54": [meno, dieci],
"55,56,57,58,59": [meno, cinque]
},
"hours": {
"0,12": [sono_le, {5: [1, 2, 3, 4, 5, 6]}],
"1,13": [e_l, {2: [5, 6, 7]}],
"2,14": [sono_le, {2: [9, 10, 11]}],
"3,15": [sono_le, {3: [1, 2, 3]}],
"4,16": [sono_le, {6: [1, 2, 3, 4, 5, 6, 7]}],
"5,17": [sono_le, {7: [1, 2, 3, 4, 5, 6]}],
"6,18": [sono_le, {6: [9, 10, 11]}],
"7,19": [sono_le, {5: [7, 8, 9, 10, 11]}],
"8,20": [sono_le, {3: [4, 5, 6, 7]}],
"9,21": [sono_le, {3: [8, 9, 10, 11]}],
"10,22": [sono_le, {4: [1, 2, 3, 4, 5]}],
"11,23": [sono_le, {4: [6, 7, 8, 9, 10, 11]}]
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('it', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var het_is = {1: [1, 2, 3, 5, 6]};
var over1 = {3: [1, 2, 3, 4]};
var voor1 = {2: [8, 9, 10, 11]};
var over2 = {4: [8, 9, 10, 11]};
var voor2 = {5: [1, 2, 3, 4]};
var half = {4: [1, 2, 3, 4]};
var vijf = {1: [8, 9, 10, 11]};
var tien = {2: [1, 2, 3, 4]};
var kwart = {3: [7, 8, 9, 10, 11]};
var uur = {10: [9, 10, 11]};
var layout = {
"version": 2,
"language": 'Nederlands',
"letters": [
'HETKISAVIJF',
'TIENBTZVOOR',
'OVERMEKWART',
'HALFSPWOVER',
'VOORTHGEENS',
'TWEEPVCDRIE',
'VIERVIJFZES',
'ZEVENONEGEN',
'ACHTTIENELF',
'TWAALFBFUUR'
],
"permanent": het_is,
"minutes": {
"0,1,2,3,4": uur,
"5,6,7,8,9": [vijf, over1],
"10,11,12,13,14": [tien, over1],
"15,16,17,18,19": [kwart, over2],
"20,21,22,23,24": [tien, voor1, half],
"25,26,27,28,29": [vijf, voor1, half],
"30,31,32,33,34": half,
"35,36,37,38,39": [vijf, over1, half],
"40,41,42,43,44": [tien, over1, half],
"45,46,47,48,49": [kwart, voor2],
"50,51,52,53,54": [tien, voor1],
"55,56,57,58,59": [vijf, voor1]
},
"hours": {
"0,12": {10: [1, 2, 3, 4, 5, 6]},
"1,13": {5: [8, 9, 10]},
"2,14": {6: [1, 2, 3, 4]},
"3,15": {6: [8, 9, 10, 11]},
"4,16": {7: [1, 2, 3, 4]},
"5,17": {7: [5, 6, 7, 8]},
"6,18": {7: [9, 10, 11]},
"7,19": {8: [1, 2, 3, 4, 5]},
"8,20": {9: [1, 2, 3, 4]},
"9,21": {8: [7, 8, 9, 10, 11]},
"10,22": {9: [5, 6, 7, 8]},
"11,23": {9: [9, 10, 11]}
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 20) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('nl', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function ($) {
var e_ = {1: [1]};
var sao = {1: [2, 3, 4]};
var e1 = {7: [8]};
var e2 = {10: [5]};
var menos = {7: [7, 8, 9, 10, 11]};
var meia = {8: [8, 9, 10, 11]};
var cinco = {10: [7, 8, 9, 10, 11]};
var dez = {10: [1, 2, 3]};
var um_quarto = {9: [1, 2, 4, 5, 6, 7, 8, 9]};
var vinte = {8: [1, 2, 3, 4, 5]};
var layout = {
"version": 2,
"language": 'Português',
"letters": [
'ÉSÃOUMATRÊS',
'MEIOLDIADEZ',
'DUASEISETEY',
'QUATROHNOVE',
'CINCOITONZE',
'ZMEIALNOITE',
'HORASYMENOS',
'VINTECAMEIA',
'UMVQUARTOPM',
'DEZOEYCINCO'
],
"minutes": {
"5,6,7,8,9": [e1, cinco],
"10,11,12,13,14": [e1, dez],
"15,16,17,18,19": [e1, um_quarto],
"20,21,22,23,24": [e1, vinte],
"25,26,27,28,29": [e1, vinte, e2, cinco],
"30,31,32,33,34": [e1, meia],
"35,36,37,38,39": [menos, vinte, e2, cinco],
"40,41,42,43,44": [menos, vinte],
"45,46,47,48,49": [menos, um_quarto],
"50,51,52,53,54": [menos, dez],
"55,56,57,58,59": [menos, cinco]
},
"hours": {
"0": [e_, {"6": [2, 3, 4, 5, 7, 8, 9, 10, 11]}],
"12": [e_, {"2": [1, 2, 3, 4, 6, 7, 8]}],
"1,13": [e_, {"1": [5, 6, 7]}],
"2,14": [sao, {"3": [1, 2, 3, 4]}],
"3,15": [sao, {"1": [8, 9, 10, 11]}],
"4,16": [sao, {"4": [1, 2, 3, 4, 5, 6]}],
"5,17": [sao, {"5": [1, 2, 3, 4, 5]}],
"6,18": [sao, {"3": [4, 5, 6, 7]}],
"7,19": [sao, {"3": [7, 8, 9, 10]}],
"8,20": [sao, {"5": [5, 6, 7, 8]}],
"9,21": [sao, {"4": [8, 9, 10, 11]}],
"10,22": [sao, {"2": [9, 10, 11]}],
"11,23": [sao, {"5": [8, 9, 10, 11]}]
},
"getHour": function (date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('pt', layout);
}(jQuery));

1
dist/jquery.uhr.baselangs.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1656
dist/jquery.uhr.complete.js vendored Normal file

File diff suppressed because it is too large Load diff

1
dist/jquery.uhr.complete.min.js vendored Normal file

File diff suppressed because one or more lines are too long

840
dist/jquery.uhr.langs.js vendored Normal file
View file

@ -0,0 +1,840 @@
'use strict';
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var es_ist = {1: [1, 2, 4, 5, 6]};
var uhr = {10: [9, 10, 11]};
var nach = {4: [8, 9, 10, 11]};
var vor = {4: [1, 2, 3]};
var halb = {5: [1, 2, 3, 4]};
var fuenf = {1: [8, 9, 10, 11]};
var zehn = {2: [1, 2, 3, 4]};
var viertel = {3: [5, 6, 7, 8, 9, 10, 11]};
var zwanzig = {2: [5, 6, 7, 8, 9, 10, 11]};
var dreiviertel = {3: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Deutsch',
"letters": [
'ESKISTAFÜNF',
'ZEHNZWANZIG',
'DREIVIERTEL',
'VORFUNKNACH',
'HALBAELFÜNF',
'EINSXAMZWEI',
'DREIPMJVIER',
'SECHSNLACHT',
'SIEBENZWÖLF',
'ZEHNEUNKUHR'
],
"permanent": es_ist,
"minutes": {
"0,1,2,3,4": uhr,
"5,6,7,8,9": [fuenf, nach],
"10,11,12,13,14": [zehn, nach],
"15,16,17,18,19": [viertel, nach],
"20,21,22,23,24": [zwanzig, nach],
"25,26,27,28,29": [fuenf, vor, halb],
"30,31,32,33,34": halb,
"35,36,37,38,39": [fuenf, nach, halb],
"40,41,42,43,44": [zwanzig, vor],
"45,46,47,48,49": dreiviertel,
"50,51,52,53,54": [zehn, vor],
"55,56,57,58,59": [fuenf, vor]
},
"hours": {
"0,12": {9: [7, 8, 9, 10, 11]},
"1,13": {6: [1, 2, 3, 4]},
"2,14": {6: [8, 9, 10, 11]},
"3,15": {7: [1, 2, 3, 4]},
"4,16": {7: [8, 9, 10, 11]},
"5,17": {5: [8, 9, 10, 11]},
"6,18": {8: [1, 2, 3, 4, 5]},
"7,19": {9: [1, 2, 3, 4, 5, 6]},
"8,20": {8: [8, 9, 10, 11]},
"9,21": {10: [4, 5, 6, 7]},
"10,22": {10: [1, 2, 3, 4]},
"11,23": {5: [6, 7, 8]}
}
};
$.fritteli.uhr.register('de', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
// hilfsvariablen
var es_isch = {1: [1, 2, 4, 5, 6, 7]};
var ab = {4: [1, 2]};
var vor = {3: [9, 10, 11]};
var haubi = {4: [4, 5, 6, 7, 8]};
var fuef = {1: [9, 10, 11]};
var zae = {2: [9, 10, 11]};
var viertu = {2: [1, 2, 3, 4, 5, 6]};
var zwaenzg = {3: [1, 2, 3, 4, 5, 6]};
var layout = {
// version: zur Zeit immer 2 (Pflichtattribut)
"version": 2,
// Sprechender Name der Sprache
"language": 'Bärndütsch',
// Buchstabenfeld als Array von Strings.
"letters": [
'ESKISCHAFÜF',
'VIERTUBFZÄÄ',
'ZWÄNZGSIVOR',
'ABOHAUBIEGE',
'EISZWÖISDRÜ',
'VIERIFÜFIQT',
'SÄCHSISIBNI',
'ACHTINÜNIEL',
'ZÄNIERBEUFI',
'ZWÖUFINAUHR'
],
// Permanent aktive Buchstaben. <array-or-object>, vgl. ausführliche Beschreibung bei "minutes".
"permanent": es_isch,
/*
* Minuten: Objekt im folgenden Format:
* {
* <minuten>: <array-or-object>,
* ...
* }
* <minuten>: String von Komma-separierten Minutenwerten, zu welchem die in <array-or-object> angegebenen Buchstaben aktiv sein sollen
* <array-or-object> : [ <object>, ...] | <object>
* <object>: { <zeile> : [ <spalte>, ... ] }
* <zeile>: Die Zeile, in welcher die Buchstaben liegen; von oben gezählt, oben ist 1.
* <spalte>: Die Spalte, in der ein einzelner Buchstabe liegt; von links gezählt, links ist 1.
* Beispiel:
* "minutes": {
* "0,1": {1: [6, 7, 9]},
* "5": [ {3: [1, 2]}, {4: [10, 11]} ]
* }
* Erklärung:
* Bei Minuten 0 und 1 sind die Buchstaben 6, 7 und 9 der ersten Zeile aktiv.
* Bei Minute 5 sind die Buchstaben 1 und 2 der Zeile 3 sowie die Buchstaben 10 und 11 der Zeile 4 aktiv.
*/
"minutes": {
"5,6,7,8,9": [fuef, ab],
"10,11,12,13,14": [zae, ab],
"15,16,17,18,19": [viertu, ab],
"20,21,22,23,24": [zwaenzg, ab],
"25,26,27,28,29": [fuef, vor, haubi],
"30,31,32,33,34": haubi,
"35,36,37,38,39": [fuef, ab, haubi],
"40,41,42,43,44": [zwaenzg, vor],
"45,46,47,48,49": [viertu, vor],
"50,51,52,53,54": [zae, vor],
"55,56,57,58,59": [fuef, vor]
},
// Die Stunden; gleiches Format wie bei den Minuten
"hours": {
"0,12": {10: [1, 2, 3, 4, 5, 6]},
"1,13": {5: [1, 2, 3]},
"2,14": {5: [4, 5, 6, 7]},
"3,15": {5: [9, 10, 11]},
"4,16": {6: [1, 2, 3, 4, 5]},
"5,17": {6: [6, 7, 8, 9]},
"6,18": {7: [1, 2, 3, 4, 5, 6]},
"7,19": {7: [7, 8, 9, 10, 11]},
"8,20": {8: [1, 2, 3, 4, 5]},
"9,21": {8: [6, 7, 8, 9]},
"10,22": {9: [1, 2, 3, 4]},
"11,23": {9: [8, 9, 10, 11]}
}
};
// Das Layout bei der Uhr unter dem Code "de_CH" registrieren.
$.fritteli.uhr.register('de_CH', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var es_isch = {1: [1, 2, 4, 5, 6, 7]};
var genau = {3: [7, 8, 9, 10, 11]};
var ab = {4: [4, 5]};
var vor = {4: [1, 2, 3]};
var haubi = {4: [7, 8, 9, 10, 11]};
var fuef = {1: [9, 10, 11]};
var zae = {2: [9, 10, 11]};
var viertu = {2: [1, 2, 3, 4, 5, 6]};
var zwaenzg = {3: [1, 2, 3, 4, 5, 6]};
var layout = {
"version": 2,
"language": 'Bärndütsch (genau)',
"letters": [
'ESKISCHAFÜF',
'VIERTUBFZÄÄ',
'ZWÄNZGGENAU',
'VORABOHAUBI',
'EISZWÖISDRÜ',
'VIERIFÜFIQT',
'SÄCHSISIBNI',
'ACHTINÜNIEL',
'ZÄNIERBEUFI',
'ZWÖUFINAUHR'
],
"permanent": es_isch,
"minutes": {
"0": genau,
"5,6,7,8,9": [fuef, ab],
"10,11,12,13,14": [zae, ab],
"15,16,17,18,19": [viertu, ab],
"20,21,22,23,24": [zwaenzg, ab],
"25,26,27,28,29": [fuef, vor, haubi],
"30,31,32,33,34": haubi,
"35,36,37,38,39": [fuef, ab, haubi],
"40,41,42,43,44": [zwaenzg, vor],
"45,46,47,48,49": [viertu, vor],
"50,51,52,53,54": [zae, vor],
"55,56,57,58,59": [fuef, vor]
},
"hours": {
"0,12": {10: [1, 2, 3, 4, 5, 6]},
"1,13": {5: [1, 2, 3]},
"2,14": {5: [4, 5, 6, 7]},
"3,15": {5: [9, 10, 11]},
"4,16": {6: [1, 2, 3, 4, 5]},
"5,17": {6: [6, 7, 8, 9]},
"6,18": {7: [1, 2, 3, 4, 5, 6]},
"7,19": {7: [7, 8, 9, 10, 11]},
"8,20": {8: [1, 2, 3, 4, 5]},
"9,21": {8: [6, 7, 8, 9]},
"10,22": {9: [1, 2, 3, 4]},
"11,23": {9: [8, 9, 10, 11]}
}
};
$.fritteli.uhr.register('de_CH_genau', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var klokken_er = {1: [1, 2, 3, 4, 5, 6, 7, 9, 10]};
var minutter = {4: [4, 5, 6, 7, 8, 9, 10, 11]};
var i = {5: [8]};
var over = {5: [4, 5, 6, 7]};
var fem = {2: [1, 2, 3]};
var ti = {4: [1, 2]};
var kvart = {3: [4, 5, 6, 7, 8]};
var tyve = {2: [4, 5, 6, 7]};
var halv = {6: [8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Dansk',
"letters": [
'KLOKKENVERO',
'FEMTYVESKLA',
'OJEKVARTVAT',
'TIAMINUTTER',
'VEMOVERILMF',
'MONALISHALV',
'ETTOTREFIRE',
'FEMSEKSRSYV',
'OTTERNIMETI',
'ELLEVEATOLV'
],
"permanent": klokken_er,
"minutes": {
"5,6,7,8,9": [fem, minutter, over],
"10,11,12,13,14": [ti, minutter, over],
"15,16,17,18,19": [kvart, over],
"20,21,22,23,24": [tyve, minutter, over],
"25,26,27,28,29": [fem, minutter, i, halv],
"30,31,32,33,34": [halv],
"35,36,37,38,39": [fem, minutter, over, halv],
"40,41,42,43,44": [tyve, minutter, i],
"45,46,47,48,49": [kvart, i],
"50,51,52,53,54": [ti, minutter, i],
"55,56,57,58,59": [fem, minutter, i]
},
"hours": {
"0,12": {10: [8, 9, 10, 11]},
"1,13": {7: [1, 2]},
"2,14": {7: [3, 4]},
"3,15": {7: [5, 6, 7]},
"4,16": {7: [8, 9, 10, 11]},
"5,17": {8: [1, 2, 3]},
"6,18": {8: [4, 5, 6, 7]},
"7,19": {8: [9, 10, 11]},
"8,20": {9: [1, 2, 3, 4]},
"9,21": {9: [6, 7]},
"10,22": {9: [10, 11]},
"11,23": {10: [1, 2, 3, 4, 5, 6]}
},
"getHour": function (date) {
var hour = date.getHours();
if (date.getMinutes() >= 25) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('dk', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var it_is = {1: [1, 2, 4, 5]};
var half = {4: [1, 2, 3, 4]};
var to = {4: [10, 11]};
var past = {5: [1, 2, 3, 4]};
var o_clock = {10: [5, 6, 7, 8, 9, 10, 11]};
var five = {3: [7, 8, 9, 10]};
var ten = {4: [6, 7, 8]};
var a_quarter = {2: [1, 3, 4, 5, 6, 7, 8, 9]};
var twenty = {3: [1, 2, 3, 4, 5, 6]};
var twentyfive = {3: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]};
var layout = {
"version": 2,
"language": 'English',
"letters": [
'ITLISBFAMPM',
'ACQUARTERDC',
'TWENTYFIVEX',
'HALFBTENFTO',
'PASTERUNINE',
'ONESIXTHREE',
'FOURFIVETWO',
'EIGHTELEVEN',
'SEVENTWELVE',
'TENSO\'CLOCK'
],
"permanent": it_is,
"minutes": {
"0,1,2,3,4": o_clock,
"5,6,7,8,9": [five, past],
"10,11,12,13,14": [ten, past],
"15,16,17,18,19": [a_quarter, past],
"20,21,22,23,24": [twenty, past],
"25,26,27,28,29": [twentyfive, past],
"30,31,32,33,34": [half, past],
"35,36,37,38,39": [twentyfive, to],
"40,41,42,43,44": [twenty, to],
"45,46,47,48,49": [a_quarter, to],
"50,51,52,53,54": [ten, to],
"55,56,57,58,59": [five, to]
},
"hours": {
"0,12": {9: [6, 7, 8, 9, 10, 11]},
"1,13": {6: [1, 2, 3]},
"2,14": {7: [9, 10, 11]},
"3,15": {6: [7, 8, 9, 10, 11]},
"4,16": {7: [1, 2, 3, 4]},
"5,17": {7: [5, 6, 7, 8]},
"6,18": {6: [4, 5, 6]},
"7,19": {9: [1, 2, 3, 4, 5]},
"8,20": {8: [1, 2, 3, 4, 5]},
"9,21": {5: [8, 9, 10, 11]},
"10,22": {10: [1, 2, 3]},
"11,23": {8: [6, 7, 8, 9, 10, 11]}
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('en', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var es_la = {1: [1, 2, 6, 7]};
var son_las = {1: [2, 3, 4, 6, 7, 8]};
var y = {7: [6]};
var menos = {7: [7, 8, 9, 10, 11]};
var media = {10: [1, 2, 3, 4, 5]};
var cinco = {9: [7, 8, 9, 10, 11]};
var diez = {8: [8, 9, 10, 11]};
var cuarto = {10: [6, 7, 8, 9, 10, 11]};
var veinte = {8: [2, 3, 4, 5, 6, 7]};
var veinticinco = {9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Español',
"letters": [
'ESONELASUNA',
'DOSITRESORE',
'CUATROCINCO',
'SEISASIETEN',
'OCHONUEVEYO',
'LADIEZSONCE',
'DOCELYMENOS',
'OVEINTEDIEZ',
'VEINTICINCO',
'MEDIACUARTO'
],
"permanent": [],
"minutes": {
"5,6,7,8,9": [y, cinco],
"10,11,12,13,14": [y, diez],
"15,16,17,18,19": [y, cuarto],
"20,21,22,23,24": [y, veinte],
"25,26,27,28,29": [y, veinticinco],
"30,31,32,33,34": [y, media],
"35,36,37,38,39": [menos, veinticinco],
"40,41,42,43,44": [menos, veinte],
"45,46,47,48,49": [menos, cuarto],
"50,51,52,53,54": [menos, diez],
"55,56,57,58,59": [menos, cinco]
},
"hours": {
"0,12": [son_las, {7: [1, 2, 3, 4]}],
"1,13": [es_la, {1: [9, 10, 11]}],
"2,14": [son_las, {2: [1, 2, 3]}],
"3,15": [son_las, {2: [5, 6, 7, 8]}],
"4,16": [son_las, {3: [1, 2, 3, 4, 5, 6]}],
"5,17": [son_las, {3: [7, 8, 9, 10, 11]}],
"6,18": [son_las, {4: [1, 2, 3, 4]}],
"7,19": [son_las, {4: [6, 7, 8, 9, 10]}],
"8,20": [son_las, {5: [1, 2, 3, 4]}],
"9,21": [son_las, {5: [5, 6, 7, 8, 9]}],
"10,22": [son_las, {6: [3, 4, 5, 6]}],
"11,23": [son_las, {6: [8, 9, 10, 11]}]
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('es', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var il_est = {1: [1, 2, 4, 5, 6]};
var et = {8: [1, 2]};
var moins = {7: [1, 2, 3, 4, 5]};
var demie = {10: [4, 5, 6, 7, 8]};
var heures = {6: [6, 7, 8, 9, 10, 11]};
var le = {7: [7, 8]};
var cinq = {9: [7, 8, 9, 10]};
var dix = {7: [9, 10, 11]};
var quart = {8: [4, 5, 6, 7, 8]};
var vingt = {9: [1, 2, 3, 4, 5]};
var vingtcinq = {9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]};
var layout = {
"version": 2,
"language": 'Français',
"letters": [
'ILNESTODEUX',
'QUATRETROIS',
'NEUFUNESEPT',
'HUITSIXCINQ',
'MIDIXMINUIT',
'ONZERHEURES',
'MOINSOLEDIX',
'ETRQUARTPMD',
'VINGT-CINQU',
'ETSDEMIEPAM'
],
"permanent": il_est,
"minutes": {
"5,6,7,8,9": cinq,
"10,11,12,13,14": dix,
"15,16,17,18,19": [et, quart],
"20,21,22,23,24": vingt,
"25,26,27,28,29": vingtcinq,
"30,31,32,33,34": [et, demie],
"35,36,37,38,39": [moins, vingtcinq],
"40,41,42,43,44": [moins, vingt],
"45,46,47,48,49": [moins, le, quart],
"50,51,52,53,54": [moins, dix],
"55,56,57,58,59": [moins, cinq]
},
"hours": {
"0": {5: [6, 7, 8, 9, 10, 11]},
"1,13": [
{3: [5, 6, 7]},
heures
],
"2,14": [
{1: [8, 9, 10, 11]},
heures
],
"3,15": [
{2: [7, 8, 9, 10, 11]},
heures
],
"4,16": [
{2: [1, 2, 3, 4, 5, 6]},
heures
],
"5,17": [
{4: [8, 9, 10, 11]},
heures
],
"6,18": [
{4: [5, 6, 7]},
heures
],
"7,19": [
{3: [8, 9, 10, 11]},
heures
],
"8,20": [
{4: [1, 2, 3, 4]},
heures
],
"9,21": [
{3: [1, 2, 3, 4]},
heures
],
"10,22": [
{5: [3, 4, 5]},
heures
],
"11,23": [
{6: [1, 2, 3, 4]},
heures
],
"12": {5: [1, 2, 3, 4]}
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('fr', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var sono_le = {1: [1, 2, 3, 4, 6, 7]};
var e_l = {2: [1, 3, 4]};
var e = {8: [1]};
var meno = {7: [8, 9, 10, 11]};
var mezza = {10: [7, 8, 9, 10, 11]};
var cinque = {9: [6, 7, 8, 9, 10, 11]};
var dieci = {10: [1, 2, 3, 4, 5]};
var un_quarto = {8: [3, 4, 6, 7, 8, 9, 10, 11]};
var venti = {9: [1, 2, 3, 4, 5]};
var venticinque = {9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Italiano',
"letters": [
'SONORLEBORE',
'ÈRL\'UNASDUE',
'TREOTTONOVE',
'DIECIUNDICI',
'DODICISETTE',
'QUATTROCSEI',
'CINQUEAMENO',
'ECUNOQUARTO',
'VENTICINQUE',
'DIECIPMEZZA'
],
"permanent": [],
"minutes": {
"5,6,7,8,9": [e, cinque],
"10,11,12,13,14": [e, dieci],
"15,16,17,18,19": [e, un_quarto],
"20,21,22,23,24": [e, venti],
"25,26,27,28,29": [e, venticinque],
"30,31,32,33,34": [e, mezza],
"35,36,37,38,39": [meno, venticinque],
"40,41,42,43,44": [meno, venti],
"45,46,47,48,49": [meno, un_quarto],
"50,51,52,53,54": [meno, dieci],
"55,56,57,58,59": [meno, cinque]
},
"hours": {
"0,12": [sono_le, {5: [1, 2, 3, 4, 5, 6]}],
"1,13": [e_l, {2: [5, 6, 7]}],
"2,14": [sono_le, {2: [9, 10, 11]}],
"3,15": [sono_le, {3: [1, 2, 3]}],
"4,16": [sono_le, {6: [1, 2, 3, 4, 5, 6, 7]}],
"5,17": [sono_le, {7: [1, 2, 3, 4, 5, 6]}],
"6,18": [sono_le, {6: [9, 10, 11]}],
"7,19": [sono_le, {5: [7, 8, 9, 10, 11]}],
"8,20": [sono_le, {3: [4, 5, 6, 7]}],
"9,21": [sono_le, {3: [8, 9, 10, 11]}],
"10,22": [sono_le, {4: [1, 2, 3, 4, 5]}],
"11,23": [sono_le, {4: [6, 7, 8, 9, 10, 11]}]
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('it', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
var het_is = {1: [1, 2, 3, 5, 6]};
var over1 = {3: [1, 2, 3, 4]};
var voor1 = {2: [8, 9, 10, 11]};
var over2 = {4: [8, 9, 10, 11]};
var voor2 = {5: [1, 2, 3, 4]};
var half = {4: [1, 2, 3, 4]};
var vijf = {1: [8, 9, 10, 11]};
var tien = {2: [1, 2, 3, 4]};
var kwart = {3: [7, 8, 9, 10, 11]};
var uur = {10: [9, 10, 11]};
var layout = {
"version": 2,
"language": 'Nederlands',
"letters": [
'HETKISAVIJF',
'TIENBTZVOOR',
'OVERMEKWART',
'HALFSPWOVER',
'VOORTHGEENS',
'TWEEPVCDRIE',
'VIERVIJFZES',
'ZEVENONEGEN',
'ACHTTIENELF',
'TWAALFBFUUR'
],
"permanent": het_is,
"minutes": {
"0,1,2,3,4": uur,
"5,6,7,8,9": [vijf, over1],
"10,11,12,13,14": [tien, over1],
"15,16,17,18,19": [kwart, over2],
"20,21,22,23,24": [tien, voor1, half],
"25,26,27,28,29": [vijf, voor1, half],
"30,31,32,33,34": half,
"35,36,37,38,39": [vijf, over1, half],
"40,41,42,43,44": [tien, over1, half],
"45,46,47,48,49": [kwart, voor2],
"50,51,52,53,54": [tien, voor1],
"55,56,57,58,59": [vijf, voor1]
},
"hours": {
"0,12": {10: [1, 2, 3, 4, 5, 6]},
"1,13": {5: [8, 9, 10]},
"2,14": {6: [1, 2, 3, 4]},
"3,15": {6: [8, 9, 10, 11]},
"4,16": {7: [1, 2, 3, 4]},
"5,17": {7: [5, 6, 7, 8]},
"6,18": {7: [9, 10, 11]},
"7,19": {8: [1, 2, 3, 4, 5]},
"8,20": {9: [1, 2, 3, 4]},
"9,21": {8: [7, 8, 9, 10, 11]},
"10,22": {9: [5, 6, 7, 8]},
"11,23": {9: [9, 10, 11]}
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 20) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('nl', layout);
}(jQuery));
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function ($) {
var e_ = {1: [1]};
var sao = {1: [2, 3, 4]};
var e1 = {7: [8]};
var e2 = {10: [5]};
var menos = {7: [7, 8, 9, 10, 11]};
var meia = {8: [8, 9, 10, 11]};
var cinco = {10: [7, 8, 9, 10, 11]};
var dez = {10: [1, 2, 3]};
var um_quarto = {9: [1, 2, 4, 5, 6, 7, 8, 9]};
var vinte = {8: [1, 2, 3, 4, 5]};
var layout = {
"version": 2,
"language": 'Português',
"letters": [
'ÉSÃOUMATRÊS',
'MEIOLDIADEZ',
'DUASEISETEY',
'QUATROHNOVE',
'CINCOITONZE',
'ZMEIALNOITE',
'HORASYMENOS',
'VINTECAMEIA',
'UMVQUARTOPM',
'DEZOEYCINCO'
],
"minutes": {
"5,6,7,8,9": [e1, cinco],
"10,11,12,13,14": [e1, dez],
"15,16,17,18,19": [e1, um_quarto],
"20,21,22,23,24": [e1, vinte],
"25,26,27,28,29": [e1, vinte, e2, cinco],
"30,31,32,33,34": [e1, meia],
"35,36,37,38,39": [menos, vinte, e2, cinco],
"40,41,42,43,44": [menos, vinte],
"45,46,47,48,49": [menos, um_quarto],
"50,51,52,53,54": [menos, dez],
"55,56,57,58,59": [menos, cinco]
},
"hours": {
"0": [e_, {"6": [2, 3, 4, 5, 7, 8, 9, 10, 11]}],
"12": [e_, {"2": [1, 2, 3, 4, 6, 7, 8]}],
"1,13": [e_, {"1": [5, 6, 7]}],
"2,14": [sao, {"3": [1, 2, 3, 4]}],
"3,15": [sao, {"1": [8, 9, 10, 11]}],
"4,16": [sao, {"4": [1, 2, 3, 4, 5, 6]}],
"5,17": [sao, {"5": [1, 2, 3, 4, 5]}],
"6,18": [sao, {"3": [4, 5, 6, 7]}],
"7,19": [sao, {"3": [7, 8, 9, 10]}],
"8,20": [sao, {"5": [5, 6, 7, 8]}],
"9,21": [sao, {"4": [8, 9, 10, 11]}],
"10,22": [sao, {"2": [9, 10, 11]}],
"11,23": [sao, {"5": [8, 9, 10, 11]}]
},
"getHour": function (date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('pt', layout);
}(jQuery));

1
dist/jquery.uhr.langs.min.js vendored Normal file

File diff suppressed because one or more lines are too long

817
dist/jquery.uhr.main.js vendored Normal file
View file

@ -0,0 +1,817 @@
'use strict';
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function ($) {
var uhrGlobals = {
"id": 0,
"languages": [],
"themes": [],
registerLanguage: function registerLanguage(code, language) {
var alreadyExists = uhrGlobals.languages.some(function (element) {
if (code === element.code) {
console.error("Error: Language code '" + code + "' cannot be registered for language '" + language.language +
"' because it is already registered for language '" + element.language + "'!");
return true;
}
return false;
});
if (!alreadyExists) {
language.code = code;
uhrGlobals.languages.push(language);
}
}
};
// auto-detect themes
$('link[rel=stylesheet]').each(function (index, item) {
var styleSheet = $(item);
var styleClass = styleSheet.attr('data-class');
if (styleClass !== undefined) {
var name = styleSheet.attr('data-name');
if (name === undefined) {
name = styleClass;
}
uhrGlobals.themes.push({'styleClass': styleClass, 'name': name});
}
});
// fall-back if no theme was included
if (uhrGlobals.themes.length === 0) {
uhrGlobals.themes.push({});
}
// public interface methods (exported later)
var setCookie;
var isOn;
var update;
var start = function start() {
if (!isOn.bind(this)()) {
this.timer = window.setInterval(function () {
this.options.time = new Date();
update.bind(this)();
}.bind(this), 1000);
update.bind(this)();
setCookie.bind(this)('uhr-status', 'on');
}
};
var stop = function stop() {
if (isOn.bind(this)()) {
window.clearInterval(this.timer);
this.timer = null;
update.bind(this)();
setCookie.bind(this)('uhr-status', 'off');
}
};
var toggle = function toggle() {
if (isOn.bind(this)()) {
this.stop();
} else {
this.start();
}
};
var language;
/**
* Ein Buchstabe. Hilfsklasse für den Renderer und Inhalt der Layout-Arrays.
* @param value Der Buchstabe, der Dargestellt werden soll.
* @param style Die CSS-Styleklassen des Buchstabens.
*/
function Letter(value, style) {
var myValue = value;
var myStyle = style || '';
this.addStyle = function (style) {
if (myStyle === '') {
myStyle = style;
} else {
myStyle += ' ' + style;
}
};
this.toString = function () {
return '<span class="item letter ' + myStyle + '">' + myValue + '</span>';
};
}
function UhrRendererV2Delegate(layout) {
var vorne0 = {
3: [2, 3, 4],
4: [1, 5],
5: [1, 4, 5],
6: [1, 3, 5],
7: [1, 2, 5],
8: [1, 5],
9: [2, 3, 4]
};
var hinten0 = {
3: [8, 9, 10],
4: [7, 11],
5: [7, 10, 11],
6: [7, 9, 11],
7: [7, 8, 11],
8: [7, 11],
9: [8, 9, 10]
};
var vorne1 = {
3: [3],
4: [2, 3],
5: [3],
6: [3],
7: [3],
8: [3],
9: [2, 3, 4]
};
var hinten1 = {
3: [9],
4: [8, 9],
5: [9],
6: [9],
7: [9],
8: [9],
9: [8, 9, 10]
};
var vorne2 = {
3: [2, 3, 4],
4: [1, 5],
5: [5],
6: [4],
7: [3],
8: [2],
9: [1, 2, 3, 4, 5]
};
var hinten2 = {
3: [8, 9, 10],
4: [7, 11],
5: [11],
6: [10],
7: [9],
8: [8],
9: [7, 8, 9, 10, 11]
};
var vorne3 = {
3: [1, 2, 3, 4, 5],
4: [4],
5: [3],
6: [4],
7: [5],
8: [1, 5],
9: [2, 3, 4]
};
var hinten3 = {
3: [7, 8, 9, 10, 11],
4: [10],
5: [9],
6: [10],
7: [11],
8: [7, 11],
9: [8, 9, 10]
};
var vorne4 = {
3: [4],
4: [3, 4],
5: [2, 4],
6: [1, 4],
7: [1, 2, 3, 4, 5],
8: [4],
9: [4]
};
var hinten4 = {
3: [10],
4: [9, 10],
5: [8, 10],
6: [7, 10],
7: [7, 8, 9, 10, 11],
8: [10],
9: [10]
};
var vorne5 = {
3: [1, 2, 3, 4, 5],
4: [1],
5: [1, 2, 3, 4],
6: [5],
7: [5],
8: [1, 5],
9: [2, 3, 4]
};
var hinten5 = {
3: [7, 8, 9, 10, 11],
4: [7],
5: [7, 8, 9, 10],
6: [11],
7: [11],
8: [7, 11],
9: [8, 9, 10]
};
var hinten6 = {
3: [9, 10],
4: [8],
5: [7],
6: [7, 8, 9, 10],
7: [7, 11],
8: [7, 11],
9: [8, 9, 10]
};
var hinten7 = {
3: [7, 8, 9, 10, 11],
4: [11],
5: [10],
6: [9],
7: [8],
8: [8],
9: [8]
};
var hinten8 = {
3: [8, 9, 10],
4: [7, 11],
5: [7, 11],
6: [8, 9, 10],
7: [7, 11],
8: [7, 11],
9: [8, 9, 10]
};
var hinten9 = {
3: [8, 9, 10],
4: [7, 11],
5: [7, 11],
6: [8, 9, 10, 11],
7: [11],
8: [10],
9: [8, 9]
};
var seconds = {
"0": [vorne0, hinten0],
"1": [vorne0, hinten1],
"2": [vorne0, hinten2],
"3": [vorne0, hinten3],
"4": [vorne0, hinten4],
"5": [vorne0, hinten5],
"6": [vorne0, hinten6],
"7": [vorne0, hinten7],
"8": [vorne0, hinten8],
"9": [vorne0, hinten9],
"10": [vorne1, hinten0],
"11": [vorne1, hinten1],
"12": [vorne1, hinten2],
"13": [vorne1, hinten3],
"14": [vorne1, hinten4],
"15": [vorne1, hinten5],
"16": [vorne1, hinten6],
"17": [vorne1, hinten7],
"18": [vorne1, hinten8],
"19": [vorne1, hinten9],
"20": [vorne2, hinten0],
"21": [vorne2, hinten1],
"22": [vorne2, hinten2],
"23": [vorne2, hinten3],
"24": [vorne2, hinten4],
"25": [vorne2, hinten5],
"26": [vorne2, hinten6],
"27": [vorne2, hinten7],
"28": [vorne2, hinten8],
"29": [vorne2, hinten9],
"30": [vorne3, hinten0],
"31": [vorne3, hinten1],
"32": [vorne3, hinten2],
"33": [vorne3, hinten3],
"34": [vorne3, hinten4],
"35": [vorne3, hinten5],
"36": [vorne3, hinten6],
"37": [vorne3, hinten7],
"38": [vorne3, hinten8],
"39": [vorne3, hinten9],
"40": [vorne4, hinten0],
"41": [vorne4, hinten1],
"42": [vorne4, hinten2],
"43": [vorne4, hinten3],
"44": [vorne4, hinten4],
"45": [vorne4, hinten5],
"46": [vorne4, hinten6],
"47": [vorne4, hinten7],
"48": [vorne4, hinten8],
"49": [vorne4, hinten9],
"50": [vorne5, hinten0],
"51": [vorne5, hinten1],
"52": [vorne5, hinten2],
"53": [vorne5, hinten3],
"54": [vorne5, hinten4],
"55": [vorne5, hinten5],
"56": [vorne5, hinten6],
"57": [vorne5, hinten7],
"58": [vorne5, hinten8],
"59": [vorne5, hinten9]
};
function parseObject(letters, styleClass, object) {
if (typeof object !== 'undefined' && object !== null) {
Object.keys(object).forEach(function (y) {
var highlightLetters = object[y];
highlightLetters.forEach(function (x) {
letters[y - 1][x - 1].addStyle(styleClass);
});
});
}
}
function parseArrayOrObject(letters, styleClass, input) {
if (typeof input !== 'undefined' && input !== null) {
if (Array.isArray(input)) {
input.forEach(function (item) {
parseObject(letters, styleClass, item);
});
} else {
parseObject(letters, styleClass, input);
}
}
}
function parseTimeDefinition(letters, styleClass, definition) {
if (typeof definition !== 'undefined' && definition !== null) {
Object.keys(definition).forEach(function (listString) {
var array = listString.split(',');
var highlightLetters = definition[listString];
array.forEach(function (item) {
parseArrayOrObject(letters, styleClass + item, highlightLetters);
});
});
}
}
this.parse = function parse() {
var letters = [];
layout.letters.forEach(function (string) {
var line = [];
for (var c = 0; c < string.length; c++) {
var character = new Letter(string[c]);
line.push(character);
}
letters.push(line);
});
parseArrayOrObject(letters, 'on', layout.permanent);
if (typeof layout.seconds !== 'undefined' && layout.seconds !== null) {
parseTimeDefinition(letters, 'second', layout.seconds);
} else {
parseTimeDefinition(letters, 'second', seconds);
}
parseTimeDefinition(letters, 'minute', layout.minutes);
parseTimeDefinition(letters, 'hour', layout.hours);
return letters;
};
}
/**
* Hilfsklasse zum Rendern der Uhr.
* @param layout Layout-Objekt, das gerendert werden soll.
* @param renderarea Das jQuery-gewrappte HTML-Element, auf dem gerendert werden soll.
*/
function UhrRenderer(layout, renderarea) {
this.render = function render(beforeshow) {
if (layout.parsed === undefined) {
switch (layout.version) {
case 2:
var delegate = new UhrRendererV2Delegate(layout);
var parsedLayout = delegate.parse();
Object.defineProperty(layout, "parsed", {
"value": parsedLayout,
"writable": false,
"configurable": false
});
break;
default:
console.warn("Unknown layout version: '" + layout.version + "'");
return;
}
}
var letters = layout.parsed;
renderarea.fadeOut('fast', function () {
renderarea.empty();
letters.forEach(function (line, index, array) {
line.forEach(function (letter) {
renderarea.append(letter.toString());
});
if (index < array.length - 1) {
renderarea.append('<br/>');
}
});
if (typeof beforeshow === 'function') {
beforeshow();
}
renderarea.fadeIn('fast');
});
};
}
var setLanguage = function setLanguage(languageKey) {
if (languageKey !== this.options.language) {
this.options.language = languageKey;
var renderer = new UhrRenderer(language.bind(this)(), this.element.find('.letterarea'));
renderer.render.bind(this)(function () {
this.currentMinute = -1;
update.bind(this)();
}.bind(this));
setCookie.bind(this)('uhr-language', languageKey);
update.bind(this)();
}
};
var setTheme = function setTheme(theme) {
if (theme !== this.options.theme) {
this.element.removeClass(this.options.theme).addClass(theme);
$('#uhr-onoffswitch' + this.id).removeClass(this.options.theme).addClass(theme);
this.options.theme = theme;
setCookie.bind(this)('uhr-theme', theme);
}
};
var setTime = function setTime(time) {
this.currentMinute = -1;
if (time === null) {
this.options.time = new Date();
} else {
if (this.timer !== null) {
window.clearInterval(this.timer);
}
this.options.time = time;
}
update.bind(this)();
};
var setMode = function (mode) {
this.options.mode = mode;
this.currentMinute = -1;
update.bind(this)();
setCookie.bind(this)('uhr-mode', mode);
};
var setWidth = function setWidth(width) {
var e = this.element;
e.css('width', width);
var realWidth = e.width();
e.width(realWidth);
e.height(realWidth);
e.css('font-size', (realWidth / 40) + 'px');
};
// private interface methods
var setupHTML;
var wireFunctionality;
var create = function create() {
this.id = uhrGlobals.id++;
this.timer = null;
this.currentMinute = -1;
var userTime = this.options.time;
var hash, params;
if (this.options.time === undefined) {
this.options.time = new Date();
}
// parse the URL params
hash = window.location.hash;
if (hash !== undefined && typeof hash === 'string' && hash.charAt(0) === '#') {
hash = hash.substring(1);
hash = decodeURIComponent(hash);
params = hash.split('&');
params.forEach(function (element) {
var pair = element.split('=');
var key = pair[0];
var value = pair[1];
switch (key) {
case 'l':
case 'language':
this.options.language = value;
this.options.force = true;
break;
case 't':
case 'theme':
this.options.theme = value;
this.options.force = true;
break;
case 'm':
case 'mode':
this.options.mode = value;
this.options.force = true;
break;
case 's':
case 'status':
this.options.status = value;
this.options.force = true;
break;
}
}.bind(this));
}
// end parse the URL params
setupHTML.bind(this)();
wireFunctionality.bind(this)();
if (userTime !== undefined) {
this.time(userTime);
}
};
// private helper methods (not exported)
var toggleConfigScreen = function toggleConfigScreen() {
$('#uhr-controlpanel' + this.id).toggle('fast');
};
// set up
setupHTML = function setupHTML() {
var e = this.element;
// Base clock area
e.addClass('uhr');
e.empty();
e.append('<span class="item dot dot1"></span>');
e.append('<span class="item dot dot2"></span>');
e.append('<span class="item dot dot3"></span>');
e.append('<span class="item dot dot4"></span>');
e.append('<div class="letterarea"></div>');
e.append('<div class="reflection"></div>');
setWidth.bind(this)(this.options.width);
if (this.options.controls) {
var controlpanel = $('<div class="uhr-controlpanel" id="uhr-controlpanel' + this.id + '"></div>');
var content = $('<div class="content"></div>');
controlpanel.append(content);
// on/off switch
var toggleSwitch = $('<div class="onoffswitch" id="uhr-onoffswitch' + this.id + '"></div>');
toggleSwitch.append('<input type="checkbox" class="onoffswitch-checkbox" id="uhr-onoffswitch-checkbox' + this.id +
'" checked="checked" />');
toggleSwitch.append('<label class="onoffswitch-label" for="uhr-onoffswitch-checkbox' + this.id + '">' +
'<div class="onoffswitch-inner"></div>' + '<div class="onoffswitch-switch"></div>' + '</label>');
content.append(toggleSwitch);
// time mode switch
var modeSwitch = $('<div class="onoffswitch" id="uhr-modeswitch' + this.id + '"></div>');
modeSwitch.append('<input type="checkbox" class="onoffswitch-checkbox" id="uhr-modeswitch-checkbox' + this.id +
'" checked="checked" />');
modeSwitch.append('<label class="onoffswitch-label" for="uhr-modeswitch-checkbox' + this.id + '">' +
'<div class="modeswitch-inner"></div>' + '<div class="onoffswitch-switch"></div>' +
'</label>');
content.append(modeSwitch);
// language chooser
if (uhrGlobals.languages.length > 1) {
var languageChooser = $('<select id="uhr-languagechooser' + this.id + '"></select>');
uhrGlobals.languages.forEach(function (item) {
languageChooser.append('<option value="' + item.code + '">' + item.language + '</option>');
});
content.append(languageChooser);
}
// theme chooser
if (uhrGlobals.themes.length > 1) {
var themeChooser = $('<select id="uhr-themechooser' + this.id + '"></select>');
uhrGlobals.themes.forEach(function (item) {
themeChooser.append('<option value="' + item.styleClass + '">' + item.name + '</option>');
});
content.append(themeChooser);
}
var closebutton = $('<a class="uhr-closecontrolpanel" id="uhr-closecontrolpanel' + this.id + '"></a>');
closebutton.on('click', function () {
$('#uhr-controlpanel' + this.id).hide('fast');
}.bind(this));
content.append(closebutton);
e.after(controlpanel);
controlpanel.hide();
var configlink = $('<a class="uhr-configlink" id="uhr-configlink' + this.id + '"></a>');
configlink.on('click', function () {
toggleConfigScreen.bind(this)();
}.bind(this));
e.after(configlink);
}
};
wireFunctionality = function wireFunctionality() {
// on/off switch
var toggleSwitch = $('#uhr-onoffswitch-checkbox' + this.id);
toggleSwitch.on('click', function () {
this.toggle();
}.bind(this));
var status = $.cookie('uhr-status' + this.id);
if (status === undefined || this.options.force) {
status = this.options.status;
}
toggleSwitch.prop('checked', status === 'on');
if (status === 'on') {
this.start();
} else {
this.stop();
}
// time mode switch
var modeSwitch = $('#uhr-modeswitch-checkbox' + this.id);
modeSwitch.on('click', function () {
if (this.options.mode === 'seconds') {
setMode.bind(this)('normal');
} else {
setMode.bind(this)('seconds');
}
}.bind(this));
var mode = $.cookie('uhr-mode' + this.id);
if (mode === undefined || this.options.force) {
mode = this.options.mode;
}
modeSwitch.prop('checked', mode !== 'seconds');
if (mode === 'seconds') {
setMode.bind(this)('seconds');
} else {
setMode.bind(this)('normal');
}
// language chooser
var languageChooser = $('#uhr-languagechooser' + this.id);
languageChooser.on('change', function () {
var languageKey = $('#uhr-languagechooser' + this.id).val();
this.language(languageKey);
}.bind(this));
var selectedLanguage = $.cookie('uhr-language' + this.id);
if (selectedLanguage === undefined || this.options.force) {
selectedLanguage = this.options.language;
}
var found = uhrGlobals.languages.some(function (item) {
return selectedLanguage === item.code;
});
if (!found) {
var fallbackLanguage;
if (uhrGlobals.languages.length > 0) {
fallbackLanguage = uhrGlobals.languages[0].code;
} else {
fallbackLanguage = '';
}
console.warn("Language '" + selectedLanguage + "' not found! Using fallback '" + fallbackLanguage + "'");
selectedLanguage = fallbackLanguage;
}
languageChooser.val(selectedLanguage);
this.options.language = "";
this.language(selectedLanguage);
// theme chooser
var themeChooser = $('#uhr-themechooser' + this.id);
themeChooser.on('change', function () {
var themeKey = $('#uhr-themechooser' + this.id).val();
this.theme(themeKey);
}.bind(this));
var selectedTheme = $.cookie('uhr-theme' + this.id);
if (selectedTheme === undefined || this.options.force) {
selectedTheme = this.options.theme;
}
found = uhrGlobals.themes.some(function (item) {
return selectedTheme === item.styleClass;
});
if (!found) {
var fallbackTheme = uhrGlobals.themes[0].styleClass;
console.warn("Theme '" + selectedTheme + "' not found! Using fallback '" + fallbackTheme + "'");
selectedTheme = fallbackTheme;
}
themeChooser.val(selectedTheme);
this.options.theme = "";
this.theme(selectedTheme);
if (this.options.autoresize) {
$(window).on('resize', function () {
var $e = this.element;
var $parent = $e.parent();
var $window = $(window);
var parentWidth = $parent.width();
var parentHeight = $parent.height();
var windowWidth = $window.width();
var windowHeight = $window.height();
var size = Math.min(parentWidth, parentHeight, windowWidth, windowHeight) + 'px';
setWidth.bind(this)(size);
}.bind(this));
}
};
var destroy = function destroy() {
this.timer = null;
$(this.element)
.removeAttr('style')
.removeAttr('class')
.empty();
$('#uhr-configlink' + this.id).remove();
$('#uhr-controlpanel' + this.id).remove();
};
setCookie = function setCookie(cookieName, cookieValue) {
var options = {};
if (this.options.cookiePath !== undefined) {
options = {expires: 365, path: this.options.cookiePath};
} else {
options = {expires: 365};
}
$.cookie(cookieName + this.id, cookieValue, options);
};
// business logic
isOn = function isOn() {
return this.timer !== null;
};
var show;
var clear;
update = function update() {
if (isOn.bind(this)()) {
var time = this.options.time;
if (!language.bind(this)().hasOwnProperty('seconds') && this.options.mode !== 'seconds') {
if (time.getMinutes() === this.currentMinute) {
return;
}
this.currentMinute = time.getMinutes();
}
show.bind(this)(time);
} else {
clear.bind(this)();
this.currentMinute = -1;
}
};
var highlight;
var getSecond;
var getDotMinute;
var getCoarseMinute;
var getHour;
show = function show(time) {
var second = getSecond.bind(this)(time);
var dotMinute = getDotMinute.bind(this)(time);
var hour = getHour.bind(this)(time);
var coarseMinute = getCoarseMinute.bind(this)(time);
clear.bind(this)();
if (this.options.mode === 'seconds') {
highlight.bind(this)('second' + second);
} else {
highlight.bind(this)('on');
for (var i = 1; i <= dotMinute; i++) {
highlight.bind(this)('dot' + i);
}
highlight.bind(this)('minute' + coarseMinute);
highlight.bind(this)('hour' + hour);
}
};
highlight = function highlight(itemClass) {
this.element.find('.item.' + itemClass).addClass('active');
};
clear = function clear() {
this.element.find('.item').removeClass('active');
};
getSecond = function getSecond(date) {
if (typeof language.bind(this)().getSeconds === 'function') {
return language.bind(this)().getSeconds(date);
}
return date.getSeconds();
};
getDotMinute = function getDotMinute(date) {
if (typeof language.bind(this)().getDotMinute === 'function') {
return language.bind(this)().getDotMinute(date);
}
var minutes = date.getMinutes();
return minutes % 5;
};
getCoarseMinute = function getCoarseMinute(date) {
if (typeof language.bind(this)().getCoarseMinute === 'function') {
return language.bind(this)().getCoarseMinute(date);
}
return date.getMinutes();
};
getHour = function getHour(date) {
if (typeof language.bind(this)().getHour === 'function') {
return language.bind(this)().getHour(date);
}
var hour = date.getHours();
if (date.getMinutes() >= 25) {
return (hour + 1) % 24;
}
return hour;
};
language = function language() {
var matchingLanguages = uhrGlobals.languages.filter(function (element) {
return (element.code === this.options.language);
}, this);
if (matchingLanguages.length > 0) {
return matchingLanguages[0];
}
// fallback: return empty object
return {};
};
$.widget("fritteli.uhr", {
"options": {
width: '100%',
status: 'on',
language: 'de_CH',
theme: uhrGlobals.themes[0].styleClass,
force: false,
controls: true,
cookiePath: undefined,
autoresize: true,
mode: 'normal'
},
"start": start,
"stop": stop,
"toggle": toggle,
"language": setLanguage,
"theme": setTheme,
"time": setTime,
"mode": setMode,
"width": setWidth,
// constructor method
"_create": create,
// destructor method
"_destroy": destroy
});
$.fritteli.uhr.register = uhrGlobals.registerLanguage;
})(jQuery);

1
dist/jquery.uhr.main.min.js vendored Normal file

File diff suppressed because one or more lines are too long

11717
dist/libs.js vendored Normal file

File diff suppressed because it is too large Load diff

42
dist/libs.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/uhr-black.min.css vendored Normal file
View file

@ -0,0 +1 @@
.black .onoffswitch-inner:before,.uhr.black{background-color:#111}.uhr.black .dot:not(.active){border-color:hsla(0,0%,100%,.1);box-shadow:0 0 .1em hsla(0,0%,100%,.1)}.uhr.black .letter:not(.active){color:hsla(0,0%,100%,.1);text-shadow:0 0 .1em hsla(0,0%,100%,.1)}

1
dist/uhr-blue.min.css vendored Normal file
View file

@ -0,0 +1 @@
.blue .onoffswitch-inner:before,.uhr.blue{background-color:#00a}.uhr.blue .dot:not(.active){border-color:hsla(0,0%,100%,.1);box-shadow:0 0 .1em hsla(0,0%,100%,.1)}.uhr.blue .letter:not(.active){color:hsla(0,0%,100%,.1);text-shadow:0 0 .1em hsla(0,0%,100%,.1)}

1
dist/uhr-green.min.css vendored Normal file
View file

@ -0,0 +1 @@
.green .onoffswitch-inner:before,.uhr.green{background-color:#0c0}.uhr.green .dot:not(.active){border-color:rgba(0,0,0,.1);box-shadow:0 0 .1em rgba(0,0,0,.1)}.uhr.green .letter:not(.active){color:rgba(0,0,0,.1);text-shadow:0 0 .1em rgba(0,0,0,.1)}

1
dist/uhr-pink.min.css vendored Normal file
View file

@ -0,0 +1 @@
.uhr.pink{background-color:#f0a}.uhr.pink .dot.active{border-color:#fff;box-shadow:0 0 .1em #fff}.uhr.pink .letter.active{color:#fff;text-shadow:0 0 .1em #fff}.pink .onoffswitch-inner:before{background-color:#f0a}.uhr.pink .dot:not(.active){border-color:hsla(0,0%,100%,.1);box-shadow:0 0 .1em hsla(0,0%,100%,.1)}.uhr.pink .letter:not(.active){color:hsla(0,0%,100%,.1);text-shadow:0 0 .1em hsla(0,0%,100%,.1)}

1
dist/uhr-red.min.css vendored Normal file
View file

@ -0,0 +1 @@
.red .onoffswitch-inner:before,.uhr.red{background-color:#700}.uhr.red .dot:not(.active){border-color:hsla(0,0%,100%,.1);box-shadow:0 0 .1em hsla(0,0%,100%,.1)}.uhr.red .letter:not(.active){color:hsla(0,0%,100%,.1);text-shadow:0 0 .1em hsla(0,0%,100%,.1)}

1
dist/uhr-white.min.css vendored Normal file
View file

@ -0,0 +1 @@
.uhr.white{background-color:#ccc}.uhr.white .dot.active{border-color:#fff;box-shadow:0 0 .1em #fff}.uhr.white .letter.active{color:#fff;text-shadow:0 0 .1em #fff}.white .onoffswitch-inner:before{background-color:#ccc}.uhr.white .dot:not(.active){border-color:rgba(0,0,0,.1);box-shadow:0 0 .1em rgba(0,0,0,.1)}.uhr.white .letter:not(.active){color:rgba(0,0,0,.1);text-shadow:0 0 .1em rgba(0,0,0,.1)}

1
dist/uhr-yellow.min.css vendored Normal file
View file

@ -0,0 +1 @@
.uhr.yellow{background-color:#fd0}.uhr.yellow .dot.active{border-color:#fff;box-shadow:0 0 .1em #fff}.uhr.yellow .letter.active{color:#fff;text-shadow:0 0 .1em #fff}.yellow .onoffswitch-inner:before{background-color:#fd0}.uhr.yellow .dot:not(.active){border-color:rgba(0,0,0,.05);box-shadow:0 0 .1em rgba(0,0,0,.05)}.uhr.yellow .letter:not(.active){color:rgba(0,0,0,.05);text-shadow:0 0 .1em rgba(0,0,0,.05)}

1
dist/uhr.min.css vendored Normal file
View file

@ -0,0 +1 @@
@font-face{font-family:Uhrenfont;src:url(../resources/uhr.woff) format("woff")}body{font-family:Uhrenfont,sans-serif}.uhr{position:relative;margin:0;transition:background-color .5s}.uhr .reflection{position:absolute;top:0;bottom:0;left:0;right:0;background:radial-gradient(225em 45em at 160% 0,hsla(0,0%,100%,.4) 0,hsla(0,0%,100%,.05) 40%,hsla(0,0%,100%,0) 0) no-repeat scroll;display:block;margin:.15em}.uhr .letterarea{display:block;position:absolute;top:12%;bottom:12%;left:12%;right:12%;overflow:hidden;font-size:200%}.item{transition:box-shadow .5s,text-shadow .5s,border-color .5s,color .5s}.dot{position:absolute;display:block;height:0;width:0;border:.2em solid;border-radius:1em}.dot.active{border-color:#eee;box-shadow:0 0 .2em #eee}.dot1{top:3.75%;left:3.75%}.dot2{top:3.75%;right:3.75%}.dot3{right:3.75%}.dot3,.dot4{bottom:3.75%}.dot4{left:3.75%}.letter{height:10%;width:9.0909%;padding:0;margin:0;display:inline-block;text-align:center;line-height:160%}.letter.active{color:#eee;text-shadow:0 0 .2em #eee}.onoffswitch{position:relative;width:86px;margin:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.onoffswitch-checkbox{display:none}.onoffswitch-label{display:block;overflow:hidden;cursor:pointer;border:2px solid #999;border-radius:50px}.modeswitch-inner,.onoffswitch-inner{width:200%;margin-left:-100%;-moz-transition:margin .3s ease-in 0s;-webkit-transition:margin .3s ease-in 0s;-o-transition:margin .3s ease-in 0s;transition:margin .3s ease-in 0s}.modeswitch-inner:after,.modeswitch-inner:before,.onoffswitch-inner:after,.onoffswitch-inner:before{float:left;width:50%;height:24px;padding:0;line-height:24px;font-size:18px;color:#fff;font-weight:700;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.onoffswitch-inner:before{content:"EIN";padding-left:12px;color:#eee;transition:background-color .5s}.onoffswitch-inner:after{content:"AUS";padding-right:12px;background-color:#eee;color:#999;text-align:right}.onoffswitch-switch{width:30px;margin:-3px;background:#fff;border:2px solid #999;border-radius:50px;position:absolute;top:0;bottom:0;right:58px;-moz-transition:all .3s ease-in 0s;-webkit-transition:all .3s ease-in 0s;-o-transition:all .3s ease-in 0s;transition:all .3s ease-in 0s}.onoffswitch-checkbox:checked+.onoffswitch-label .modeswitch-inner,.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-inner{margin-left:0}.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch{right:0}.modeswitch-inner:before{content:"MIN";padding-left:12px;background-color:#fff;color:#000}.modeswitch-inner:after{content:"SEC";padding-right:12px;background-color:#fff;color:#000;text-align:right}a.uhr-configlink{cursor:pointer;background:url(../resources/settings.png) no-repeat;width:24px;height:24px;display:inline-block;margin:2px;vertical-align:top}.uhr-controlpanel{border-radius:.5em;box-shadow:0 0 1em #000;background-color:#fff;display:inline-block;padding:.5em;position:sticky;bottom:0;margin-left:1em}.uhr-controlpanel .content{position:relative}a.uhr-closecontrolpanel{cursor:pointer;display:inline-block;position:absolute;right:0;top:-1em;width:24px;height:24px;background:url(../resources/close.png) no-repeat}#disclaimer{font-size:.5em}#disclaimer a{color:#444;text-decoration:underline}

View file

@ -13,41 +13,46 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<html manifest="manifest.appcache">
<html lang="de" manifest="manifest.appcache">
<head>
<title>Die Zeit im Wort</title>
<script type="text/javascript" src="jquery-2.1.0.min.js"></script>
<script type="text/javascript" src="jquery-ui-1.10.4.custom.min.js"></script>
<script type="text/javascript" src="jquery-cookie-1.4.0.js"></script>
<script type="text/javascript" src="uhr.js"></script>
<link rel="stylesheet" type="text/css" href="uhr.css" />
<link rel="stylesheet" type="text/css" href="uhr-black.css" />
<link rel="stylesheet" type="text/css" href="uhr-blue.css" />
<link rel="stylesheet" type="text/css" href="uhr-green.css" />
<link rel="stylesheet" type="text/css" href="uhr-red.css" />
<link rel="stylesheet" type="text/css" href="uhr-white.css" />
<link rel="shortcut icon" type="image/png" href="favicon.png" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Bärneruhr - Die Zeit im Wort</title>
<meta charset="utf-8"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="apple-mobile-web-app-title" content="Bärneruhr"/>
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1"/>
<link rel="stylesheet" type="text/css" href="dist/uhr.min.css"/>
<link rel="stylesheet" type="text/css" href="dist/uhr-black.min.css" data-class="black" data-name="Schwarz"/>
<link rel="stylesheet" type="text/css" href="dist/uhr-white.min.css" data-class="white" data-name="Weiss"/>
<link rel="stylesheet" type="text/css" href="dist/uhr-red.min.css" data-class="red" data-name="Rot"/>
<link rel="stylesheet" type="text/css" href="dist/uhr-yellow.min.css" data-class="yellow" data-name="Gelb"/>
<link rel="stylesheet" type="text/css" href="dist/uhr-green.min.css" data-class="green" data-name="Grün"/>
<link rel="stylesheet" type="text/css" href="dist/uhr-blue.min.css" data-class="blue" data-name="Blau"/>
<link rel="stylesheet" type="text/css" href="dist/uhr-pink.min.css" data-class="pink" data-name="Pink"/>
<link rel="shortcut icon" type="image/png" href="resources/favicon.png"/>
<link rel="apple-touch-icon-precomposed" href="resources/apple-touch-icon-precomposed.png"/>
<script type="text/javascript" src="dist/libs.min.js"></script>
<script type="text/javascript" src="dist/jquery.uhr.complete.min.js"></script>
<script type="text/javascript">
function go(url) {
window.location = url;
return true;
}
</script>
</head>
<body style="padding:0;margin:0;">
<a href="info/">
<div id="uhr"></div>
</a>
<p id="disclaimer">Created by <a href="http://www.fritteli.ch/">fritteli</a>, inspired by <a href="http://www.qlocktwo.com/">QLOCKTWO</a>.
<script type="text/javascript" src="uhr-de_CH.js"></script>
<script type="text/javascript">
(function($) {
var width = $(window).width();
var height = $(window).height();
var size = (width < height ? width : height) + 'px';
$('#uhr').uhr({
width: size,
color: 'black',
language: 'de_CH',
force: true,
controls: false
});
})(jQuery);
</script>
<div id="uhr"></div>
<p id="disclaimer">Created by <a href="http://www.fritteli.ch/">fritteli</a>, inspired by <a href="http://www.qlocktwo.com/">QLOCKTWO</a>. <a
onclick="go('info/index.html')" href="#">Read more!</a></p>
<script type="text/javascript">
(function($) {
var width = $(window).width();
var height = $(window).height();
var size = Math.min(width, height) + 'px';
$('#uhr').uhr({
width: size
});
})(jQuery);
</script>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -1,14 +1,48 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
body {
font-size: 120%;
}
code {
white-space: pre;
white-space: pre-line;
display: inline-block;
}
code.inline {
display: inline;
}
ol {
counter-reset: item;
padding-left: 1em;
counter-reset: item;
padding-left: 1em;
}
ol li {
display: block;
display: block;
}
ol li:before {
content: counters(item, ".") ". ";
counter-increment: item;
content: counters(item, ".") ". ";
counter-increment: item;
}
a.toclink {
font-size: 25%;
}
a.toclink:before {
content: "▲ ";
}

4
jquery-2.1.0.min.js vendored

File diff suppressed because one or more lines are too long

View file

@ -1,117 +0,0 @@
/*!
* jQuery Cookie Plugin v1.4.0
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2013 Klaus Hartl
* Released under the MIT license
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as anonymous module.
define(['jquery'], factory);
} else {
// Browser globals.
factory(jQuery);
}
}(function ($) {
var pluses = /\+/g;
function encode(s) {
return config.raw ? s : encodeURIComponent(s);
}
function decode(s) {
return config.raw ? s : decodeURIComponent(s);
}
function stringifyCookieValue(value) {
return encode(config.json ? JSON.stringify(value) : String(value));
}
function parseCookieValue(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape...
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
try {
// Replace server-side written pluses with spaces.
// If we can't decode the cookie, ignore it, it's unusable.
s = decodeURIComponent(s.replace(pluses, ' '));
} catch(e) {
return;
}
try {
// If we can't parse the cookie, ignore it, it's unusable.
return config.json ? JSON.parse(s) : s;
} catch(e) {}
}
function read(s, converter) {
var value = config.raw ? s : parseCookieValue(s);
return $.isFunction(converter) ? converter(value) : value;
}
var config = $.cookie = function (key, value, options) {
// Write
if (value !== undefined && !$.isFunction(value)) {
options = $.extend({}, config.defaults, options);
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setDate(t.getDate() + days);
}
return (document.cookie = [
encode(key), '=', stringifyCookieValue(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''));
}
// Read
var result = key ? undefined : {};
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all. Also prevents odd result when
// calling $.cookie().
var cookies = document.cookie ? document.cookie.split('; ') : [];
for (var i = 0, l = cookies.length; i < l; i++) {
var parts = cookies[i].split('=');
var name = decode(parts.shift());
var cookie = parts.join('=');
if (key && key === name) {
// If second argument (value) is a function it's a converter...
result = read(cookie, value);
break;
}
// Prevent storing a cookie that we couldn't decode.
if (!key && (cookie = read(cookie)) !== undefined) {
result[name] = cookie;
}
}
return result;
};
config.defaults = {};
$.removeCookie = function (key, options) {
if ($.cookie(key) !== undefined) {
// Must not alter options, thus extending a fresh object...
$.cookie(key, '', $.extend({}, options, { expires: -1 }));
return true;
}
return false;
};
}));

File diff suppressed because one or more lines are too long

View file

@ -1,20 +1,25 @@
CACHE MANIFEST
# 4.1
# Version 9.0.0-dev.0
COPYING
favicon.png
/
dist/jquery.uhr.base.min.js
dist/jquery.uhr.complete.min.js
dist/libs.min.js
dist/uhr.min.css
dist/uhr-black.min.css
dist/uhr-blue.min.css
dist/uhr-green.min.css
dist/uhr-pink.min.css
dist/uhr-red.min.css
dist/uhr-white.min.css
dist/uhr-yellow.min.css
info/
info/index.html
info/info.css
resources/apple-touch-icon-precomposed.png
resources/close.png
resources/favicon.png
resources/settings.png
resources/uhr.woff
index.html
jquery-2.0.3.min.js
jquery-cookie-1.4.0.js
jquery-ui-1.10.3.custom.min.js
uhr-black.css
uhr-blue.css
uhr-de.js
uhr-de_CH.js
uhr-en.js
uhr-green.css
uhr-red.css
uhr-white.css
uhr.css
uhr.js
uhr.woff
README.md

3953
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

63
package.json Normal file
View file

@ -0,0 +1,63 @@
{
"name": "uhr",
"version": "9.0.0-dev.0",
"description": "jQuery QLOCKTWO plugin",
"keywords": [
"jquery-plugin",
"qlocktwo"
],
"scripts": {
"prebuild": "npm run clean",
"build": "npm-run-all --parallel rollup:js:* rollup:css:*",
"clean": "rimraf dist",
"rollup:js:app": "rollup --config build-config/rollup.config.js-app.js",
"rollup:js:base": "rollup --config build-config/rollup.config.js-base.js",
"rollup:js:baselangs": "rollup --config build-config/rollup.config.js-baselangs.js",
"rollup:js:complete": "rollup --config build-config/rollup.config.js-complete.js",
"rollup:js:langs": "rollup --config build-config/rollup.config.js-langs.js",
"rollup:js:libs": "rollup --config build-config/rollup.config.js-libs.js",
"rollup:css:app": "rollup --config build-config/rollup.config.css-app.js",
"rollup:css:black": "rollup --config build-config/rollup.config.css-black.js",
"rollup:css:blue": "rollup --config build-config/rollup.config.css-blue.js",
"rollup:css:green": "rollup --config build-config/rollup.config.css-green.js",
"rollup:css:pink": "rollup --config build-config/rollup.config.css-pink.js",
"rollup:css:red": "rollup --config build-config/rollup.config.css-red.js",
"rollup:css:white": "rollup --config build-config/rollup.config.css-white.js",
"rollup:css:yellow": "rollup --config build-config/rollup.config.css-yellow.js"
},
"homepage": "http://bärneruhr.ch/",
"author": {
"name": "Manuel Friedli",
"email": "manuel@fritteli.ch",
"url": "http://www.fritteli.ch/"
},
"repository": {
"type": "git",
"url": "https://gittr.ch/manuel/uhr"
},
"licenses": [
{
"type": "GPL-3.0"
}
],
"license": "GPL-3.0",
"dependencies": {
"jquery": "^3.5.0",
"jquery-ui": "1.12.1",
"jquery.cookie": "1.4.1"
},
"devDependencies": {
"@rollup/plugin-node-resolve": "^11.2.0",
"chai": "4.2.0",
"cssnano": "^4.1.10",
"jshint-stylish": "2.2.1",
"mocha": "^8.3.0",
"npm-run-all": "^4.1.5",
"phantomjs-prebuilt": "2.1.16",
"postcss": "^8.2.6",
"rimraf": "^3.0.2",
"rollup": "^2.39.1",
"rollup-plugin-css-bundle": "^1.0.4",
"rollup-plugin-terser": "^7.0.2"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
resources/close.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 B

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

BIN
resources/settings.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

74
src/uhr-de.js Normal file
View file

@ -0,0 +1,74 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
'use strict';
var es_ist = {1: [1, 2, 4, 5, 6]};
var uhr = {10: [9, 10, 11]};
var nach = {4: [8, 9, 10, 11]};
var vor = {4: [1, 2, 3]};
var halb = {5: [1, 2, 3, 4]};
var fuenf = {1: [8, 9, 10, 11]};
var zehn = {2: [1, 2, 3, 4]};
var viertel = {3: [5, 6, 7, 8, 9, 10, 11]};
var zwanzig = {2: [5, 6, 7, 8, 9, 10, 11]};
var dreiviertel = {3: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Deutsch',
"letters": [
'ESKISTAFÜNF',
'ZEHNZWANZIG',
'DREIVIERTEL',
'VORFUNKNACH',
'HALBAELFÜNF',
'EINSXAMZWEI',
'DREIPMJVIER',
'SECHSNLACHT',
'SIEBENZWÖLF',
'ZEHNEUNKUHR'
],
"permanent": es_ist,
"minutes": {
"0,1,2,3,4": uhr,
"5,6,7,8,9": [fuenf, nach],
"10,11,12,13,14": [zehn, nach],
"15,16,17,18,19": [viertel, nach],
"20,21,22,23,24": [zwanzig, nach],
"25,26,27,28,29": [fuenf, vor, halb],
"30,31,32,33,34": halb,
"35,36,37,38,39": [fuenf, nach, halb],
"40,41,42,43,44": [zwanzig, vor],
"45,46,47,48,49": dreiviertel,
"50,51,52,53,54": [zehn, vor],
"55,56,57,58,59": [fuenf, vor]
},
"hours": {
"0,12": {9: [7, 8, 9, 10, 11]},
"1,13": {6: [1, 2, 3, 4]},
"2,14": {6: [8, 9, 10, 11]},
"3,15": {7: [1, 2, 3, 4]},
"4,16": {7: [8, 9, 10, 11]},
"5,17": {5: [8, 9, 10, 11]},
"6,18": {8: [1, 2, 3, 4, 5]},
"7,19": {9: [1, 2, 3, 4, 5, 6]},
"8,20": {8: [8, 9, 10, 11]},
"9,21": {10: [4, 5, 6, 7]},
"10,22": {10: [1, 2, 3, 4]},
"11,23": {5: [6, 7, 8]}
}
};
$.fritteli.uhr.register('de', layout);
}(jQuery));

97
src/uhr-de_CH.js Normal file
View file

@ -0,0 +1,97 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
'use strict';
// hilfsvariablen
var es_isch = {1: [1, 2, 4, 5, 6, 7]};
var ab = {4: [1, 2]};
var vor = {3: [9, 10, 11]};
var haubi = {4: [4, 5, 6, 7, 8]};
var fuef = {1: [9, 10, 11]};
var zae = {2: [9, 10, 11]};
var viertu = {2: [1, 2, 3, 4, 5, 6]};
var zwaenzg = {3: [1, 2, 3, 4, 5, 6]};
var layout = {
// version: zur Zeit immer 2 (Pflichtattribut)
"version": 2,
// Sprechender Name der Sprache
"language": 'Bärndütsch',
// Buchstabenfeld als Array von Strings.
"letters": [
'ESKISCHAFÜF',
'VIERTUBFZÄÄ',
'ZWÄNZGSIVOR',
'ABOHAUBIEGE',
'EISZWÖISDRÜ',
'VIERIFÜFIQT',
'SÄCHSISIBNI',
'ACHTINÜNIEL',
'ZÄNIERBEUFI',
'ZWÖUFINAUHR'
],
// Permanent aktive Buchstaben. <array-or-object>, vgl. ausführliche Beschreibung bei "minutes".
"permanent": es_isch,
/*
* Minuten: Objekt im folgenden Format:
* {
* <minuten>: <array-or-object>,
* ...
* }
* <minuten>: String von Komma-separierten Minutenwerten, zu welchem die in <array-or-object> angegebenen Buchstaben aktiv sein sollen
* <array-or-object> : [ <object>, ...] | <object>
* <object>: { <zeile> : [ <spalte>, ... ] }
* <zeile>: Die Zeile, in welcher die Buchstaben liegen; von oben gezählt, oben ist 1.
* <spalte>: Die Spalte, in der ein einzelner Buchstabe liegt; von links gezählt, links ist 1.
* Beispiel:
* "minutes": {
* "0,1": {1: [6, 7, 9]},
* "5": [ {3: [1, 2]}, {4: [10, 11]} ]
* }
* Erklärung:
* Bei Minuten 0 und 1 sind die Buchstaben 6, 7 und 9 der ersten Zeile aktiv.
* Bei Minute 5 sind die Buchstaben 1 und 2 der Zeile 3 sowie die Buchstaben 10 und 11 der Zeile 4 aktiv.
*/
"minutes": {
"5,6,7,8,9": [fuef, ab],
"10,11,12,13,14": [zae, ab],
"15,16,17,18,19": [viertu, ab],
"20,21,22,23,24": [zwaenzg, ab],
"25,26,27,28,29": [fuef, vor, haubi],
"30,31,32,33,34": haubi,
"35,36,37,38,39": [fuef, ab, haubi],
"40,41,42,43,44": [zwaenzg, vor],
"45,46,47,48,49": [viertu, vor],
"50,51,52,53,54": [zae, vor],
"55,56,57,58,59": [fuef, vor]
},
// Die Stunden; gleiches Format wie bei den Minuten
"hours": {
"0,12": {10: [1, 2, 3, 4, 5, 6]},
"1,13": {5: [1, 2, 3]},
"2,14": {5: [4, 5, 6, 7]},
"3,15": {5: [9, 10, 11]},
"4,16": {6: [1, 2, 3, 4, 5]},
"5,17": {6: [6, 7, 8, 9]},
"6,18": {7: [1, 2, 3, 4, 5, 6]},
"7,19": {7: [7, 8, 9, 10, 11]},
"8,20": {8: [1, 2, 3, 4, 5]},
"9,21": {8: [6, 7, 8, 9]},
"10,22": {9: [1, 2, 3, 4]},
"11,23": {9: [8, 9, 10, 11]}
}
};
// Das Layout bei der Uhr unter dem Code "de_CH" registrieren.
$.fritteli.uhr.register('de_CH', layout);
}(jQuery));

72
src/uhr-de_CH_genau.js Normal file
View file

@ -0,0 +1,72 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
'use strict';
var es_isch = {1: [1, 2, 4, 5, 6, 7]};
var genau = {3: [7, 8, 9, 10, 11]};
var ab = {4: [4, 5]};
var vor = {4: [1, 2, 3]};
var haubi = {4: [7, 8, 9, 10, 11]};
var fuef = {1: [9, 10, 11]};
var zae = {2: [9, 10, 11]};
var viertu = {2: [1, 2, 3, 4, 5, 6]};
var zwaenzg = {3: [1, 2, 3, 4, 5, 6]};
var layout = {
"version": 2,
"language": 'Bärndütsch (genau)',
"letters": [
'ESKISCHAFÜF',
'VIERTUBFZÄÄ',
'ZWÄNZGGENAU',
'VORABOHAUBI',
'EISZWÖISDRÜ',
'VIERIFÜFIQT',
'SÄCHSISIBNI',
'ACHTINÜNIEL',
'ZÄNIERBEUFI',
'ZWÖUFINAUHR'
],
"permanent": es_isch,
"minutes": {
"0": genau,
"5,6,7,8,9": [fuef, ab],
"10,11,12,13,14": [zae, ab],
"15,16,17,18,19": [viertu, ab],
"20,21,22,23,24": [zwaenzg, ab],
"25,26,27,28,29": [fuef, vor, haubi],
"30,31,32,33,34": haubi,
"35,36,37,38,39": [fuef, ab, haubi],
"40,41,42,43,44": [zwaenzg, vor],
"45,46,47,48,49": [viertu, vor],
"50,51,52,53,54": [zae, vor],
"55,56,57,58,59": [fuef, vor]
},
"hours": {
"0,12": {10: [1, 2, 3, 4, 5, 6]},
"1,13": {5: [1, 2, 3]},
"2,14": {5: [4, 5, 6, 7]},
"3,15": {5: [9, 10, 11]},
"4,16": {6: [1, 2, 3, 4, 5]},
"5,17": {6: [6, 7, 8, 9]},
"6,18": {7: [1, 2, 3, 4, 5, 6]},
"7,19": {7: [7, 8, 9, 10, 11]},
"8,20": {8: [1, 2, 3, 4, 5]},
"9,21": {8: [6, 7, 8, 9]},
"10,22": {9: [1, 2, 3, 4]},
"11,23": {9: [8, 9, 10, 11]}
}
};
$.fritteli.uhr.register('de_CH_genau', layout);
}(jQuery));

80
src/uhr-dk.js Normal file
View file

@ -0,0 +1,80 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
'use strict';
var klokken_er = {1: [1, 2, 3, 4, 5, 6, 7, 9, 10]};
var minutter = {4: [4, 5, 6, 7, 8, 9, 10, 11]};
var i = {5: [8]};
var over = {5: [4, 5, 6, 7]};
var fem = {2: [1, 2, 3]};
var ti = {4: [1, 2]};
var kvart = {3: [4, 5, 6, 7, 8]};
var tyve = {2: [4, 5, 6, 7]};
var halv = {6: [8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Dansk',
"letters": [
'KLOKKENVERO',
'FEMTYVESKLA',
'OJEKVARTVAT',
'TIAMINUTTER',
'VEMOVERILMF',
'MONALISHALV',
'ETTOTREFIRE',
'FEMSEKSRSYV',
'OTTERNIMETI',
'ELLEVEATOLV'
],
"permanent": klokken_er,
"minutes": {
"5,6,7,8,9": [fem, minutter, over],
"10,11,12,13,14": [ti, minutter, over],
"15,16,17,18,19": [kvart, over],
"20,21,22,23,24": [tyve, minutter, over],
"25,26,27,28,29": [fem, minutter, i, halv],
"30,31,32,33,34": [halv],
"35,36,37,38,39": [fem, minutter, over, halv],
"40,41,42,43,44": [tyve, minutter, i],
"45,46,47,48,49": [kvart, i],
"50,51,52,53,54": [ti, minutter, i],
"55,56,57,58,59": [fem, minutter, i]
},
"hours": {
"0,12": {10: [8, 9, 10, 11]},
"1,13": {7: [1, 2]},
"2,14": {7: [3, 4]},
"3,15": {7: [5, 6, 7]},
"4,16": {7: [8, 9, 10, 11]},
"5,17": {8: [1, 2, 3]},
"6,18": {8: [4, 5, 6, 7]},
"7,19": {8: [9, 10, 11]},
"8,20": {9: [1, 2, 3, 4]},
"9,21": {9: [6, 7]},
"10,22": {9: [10, 11]},
"11,23": {10: [1, 2, 3, 4, 5, 6]}
},
"getHour": function (date) {
var hour = date.getHours();
if (date.getMinutes() >= 25) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('dk', layout);
}(jQuery));

81
src/uhr-en.js Normal file
View file

@ -0,0 +1,81 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
'use strict';
var it_is = {1: [1, 2, 4, 5]};
var half = {4: [1, 2, 3, 4]};
var to = {4: [10, 11]};
var past = {5: [1, 2, 3, 4]};
var o_clock = {10: [5, 6, 7, 8, 9, 10, 11]};
var five = {3: [7, 8, 9, 10]};
var ten = {4: [6, 7, 8]};
var a_quarter = {2: [1, 3, 4, 5, 6, 7, 8, 9]};
var twenty = {3: [1, 2, 3, 4, 5, 6]};
var twentyfive = {3: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]};
var layout = {
"version": 2,
"language": 'English',
"letters": [
'ITLISBFAMPM',
'ACQUARTERDC',
'TWENTYFIVEX',
'HALFBTENFTO',
'PASTERUNINE',
'ONESIXTHREE',
'FOURFIVETWO',
'EIGHTELEVEN',
'SEVENTWELVE',
'TENSO\'CLOCK'
],
"permanent": it_is,
"minutes": {
"0,1,2,3,4": o_clock,
"5,6,7,8,9": [five, past],
"10,11,12,13,14": [ten, past],
"15,16,17,18,19": [a_quarter, past],
"20,21,22,23,24": [twenty, past],
"25,26,27,28,29": [twentyfive, past],
"30,31,32,33,34": [half, past],
"35,36,37,38,39": [twentyfive, to],
"40,41,42,43,44": [twenty, to],
"45,46,47,48,49": [a_quarter, to],
"50,51,52,53,54": [ten, to],
"55,56,57,58,59": [five, to]
},
"hours": {
"0,12": {9: [6, 7, 8, 9, 10, 11]},
"1,13": {6: [1, 2, 3]},
"2,14": {7: [9, 10, 11]},
"3,15": {6: [7, 8, 9, 10, 11]},
"4,16": {7: [1, 2, 3, 4]},
"5,17": {7: [5, 6, 7, 8]},
"6,18": {6: [4, 5, 6]},
"7,19": {9: [1, 2, 3, 4, 5]},
"8,20": {8: [1, 2, 3, 4, 5]},
"9,21": {5: [8, 9, 10, 11]},
"10,22": {10: [1, 2, 3]},
"11,23": {8: [6, 7, 8, 9, 10, 11]}
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('en', layout);
}(jQuery));

80
src/uhr-es.js Normal file
View file

@ -0,0 +1,80 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
'use strict';
var es_la = {1: [1, 2, 6, 7]};
var son_las = {1: [2, 3, 4, 6, 7, 8]};
var y = {7: [6]};
var menos = {7: [7, 8, 9, 10, 11]};
var media = {10: [1, 2, 3, 4, 5]};
var cinco = {9: [7, 8, 9, 10, 11]};
var diez = {8: [8, 9, 10, 11]};
var cuarto = {10: [6, 7, 8, 9, 10, 11]};
var veinte = {8: [2, 3, 4, 5, 6, 7]};
var veinticinco = {9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Español',
"letters": [
'ESONELASUNA',
'DOSITRESORE',
'CUATROCINCO',
'SEISASIETEN',
'OCHONUEVEYO',
'LADIEZSONCE',
'DOCELYMENOS',
'OVEINTEDIEZ',
'VEINTICINCO',
'MEDIACUARTO'
],
"permanent": [],
"minutes": {
"5,6,7,8,9": [y, cinco],
"10,11,12,13,14": [y, diez],
"15,16,17,18,19": [y, cuarto],
"20,21,22,23,24": [y, veinte],
"25,26,27,28,29": [y, veinticinco],
"30,31,32,33,34": [y, media],
"35,36,37,38,39": [menos, veinticinco],
"40,41,42,43,44": [menos, veinte],
"45,46,47,48,49": [menos, cuarto],
"50,51,52,53,54": [menos, diez],
"55,56,57,58,59": [menos, cinco]
},
"hours": {
"0,12": [son_las, {7: [1, 2, 3, 4]}],
"1,13": [es_la, {1: [9, 10, 11]}],
"2,14": [son_las, {2: [1, 2, 3]}],
"3,15": [son_las, {2: [5, 6, 7, 8]}],
"4,16": [son_las, {3: [1, 2, 3, 4, 5, 6]}],
"5,17": [son_las, {3: [7, 8, 9, 10, 11]}],
"6,18": [son_las, {4: [1, 2, 3, 4]}],
"7,19": [son_las, {4: [6, 7, 8, 9, 10]}],
"8,20": [son_las, {5: [1, 2, 3, 4]}],
"9,21": [son_las, {5: [5, 6, 7, 8, 9]}],
"10,22": [son_las, {6: [3, 4, 5, 6]}],
"11,23": [son_las, {6: [8, 9, 10, 11]}]
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('es', layout);
}(jQuery));

115
src/uhr-fr.js Normal file
View file

@ -0,0 +1,115 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
'use strict';
var il_est = {1: [1, 2, 4, 5, 6]};
var et = {8: [1, 2]};
var moins = {7: [1, 2, 3, 4, 5]};
var demie = {10: [4, 5, 6, 7, 8]};
var heures = {6: [6, 7, 8, 9, 10, 11]};
var le = {7: [7, 8]};
var cinq = {9: [7, 8, 9, 10]};
var dix = {7: [9, 10, 11]};
var quart = {8: [4, 5, 6, 7, 8]};
var vingt = {9: [1, 2, 3, 4, 5]};
var vingtcinq = {9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]};
var layout = {
"version": 2,
"language": 'Français',
"letters": [
'ILNESTODEUX',
'QUATRETROIS',
'NEUFUNESEPT',
'HUITSIXCINQ',
'MIDIXMINUIT',
'ONZERHEURES',
'MOINSOLEDIX',
'ETRQUARTPMD',
'VINGT-CINQU',
'ETSDEMIEPAM'
],
"permanent": il_est,
"minutes": {
"5,6,7,8,9": cinq,
"10,11,12,13,14": dix,
"15,16,17,18,19": [et, quart],
"20,21,22,23,24": vingt,
"25,26,27,28,29": vingtcinq,
"30,31,32,33,34": [et, demie],
"35,36,37,38,39": [moins, vingtcinq],
"40,41,42,43,44": [moins, vingt],
"45,46,47,48,49": [moins, le, quart],
"50,51,52,53,54": [moins, dix],
"55,56,57,58,59": [moins, cinq]
},
"hours": {
"0": {5: [6, 7, 8, 9, 10, 11]},
"1,13": [
{3: [5, 6, 7]},
heures
],
"2,14": [
{1: [8, 9, 10, 11]},
heures
],
"3,15": [
{2: [7, 8, 9, 10, 11]},
heures
],
"4,16": [
{2: [1, 2, 3, 4, 5, 6]},
heures
],
"5,17": [
{4: [8, 9, 10, 11]},
heures
],
"6,18": [
{4: [5, 6, 7]},
heures
],
"7,19": [
{3: [8, 9, 10, 11]},
heures
],
"8,20": [
{4: [1, 2, 3, 4]},
heures
],
"9,21": [
{3: [1, 2, 3, 4]},
heures
],
"10,22": [
{5: [3, 4, 5]},
heures
],
"11,23": [
{6: [1, 2, 3, 4]},
heures
],
"12": {5: [1, 2, 3, 4]}
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('fr', layout);
}(jQuery));

80
src/uhr-it.js Normal file
View file

@ -0,0 +1,80 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
'use strict';
var sono_le = {1: [1, 2, 3, 4, 6, 7]};
var e_l = {2: [1, 3, 4]};
var e = {8: [1]};
var meno = {7: [8, 9, 10, 11]};
var mezza = {10: [7, 8, 9, 10, 11]};
var cinque = {9: [6, 7, 8, 9, 10, 11]};
var dieci = {10: [1, 2, 3, 4, 5]};
var un_quarto = {8: [3, 4, 6, 7, 8, 9, 10, 11]};
var venti = {9: [1, 2, 3, 4, 5]};
var venticinque = {9: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]};
var layout = {
"version": 2,
"language": 'Italiano',
"letters": [
'SONORLEBORE',
'ÈRL\'UNASDUE',
'TREOTTONOVE',
'DIECIUNDICI',
'DODICISETTE',
'QUATTROCSEI',
'CINQUEAMENO',
'ECUNOQUARTO',
'VENTICINQUE',
'DIECIPMEZZA'
],
"permanent": [],
"minutes": {
"5,6,7,8,9": [e, cinque],
"10,11,12,13,14": [e, dieci],
"15,16,17,18,19": [e, un_quarto],
"20,21,22,23,24": [e, venti],
"25,26,27,28,29": [e, venticinque],
"30,31,32,33,34": [e, mezza],
"35,36,37,38,39": [meno, venticinque],
"40,41,42,43,44": [meno, venti],
"45,46,47,48,49": [meno, un_quarto],
"50,51,52,53,54": [meno, dieci],
"55,56,57,58,59": [meno, cinque]
},
"hours": {
"0,12": [sono_le, {5: [1, 2, 3, 4, 5, 6]}],
"1,13": [e_l, {2: [5, 6, 7]}],
"2,14": [sono_le, {2: [9, 10, 11]}],
"3,15": [sono_le, {3: [1, 2, 3]}],
"4,16": [sono_le, {6: [1, 2, 3, 4, 5, 6, 7]}],
"5,17": [sono_le, {7: [1, 2, 3, 4, 5, 6]}],
"6,18": [sono_le, {6: [9, 10, 11]}],
"7,19": [sono_le, {5: [7, 8, 9, 10, 11]}],
"8,20": [sono_le, {3: [4, 5, 6, 7]}],
"9,21": [sono_le, {3: [8, 9, 10, 11]}],
"10,22": [sono_le, {4: [1, 2, 3, 4, 5]}],
"11,23": [sono_le, {4: [6, 7, 8, 9, 10, 11]}]
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('it', layout);
}(jQuery));

81
src/uhr-nl.js Normal file
View file

@ -0,0 +1,81 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
'use strict';
var het_is = {1: [1, 2, 3, 5, 6]};
var over1 = {3: [1, 2, 3, 4]};
var voor1 = {2: [8, 9, 10, 11]};
var over2 = {4: [8, 9, 10, 11]};
var voor2 = {5: [1, 2, 3, 4]};
var half = {4: [1, 2, 3, 4]};
var vijf = {1: [8, 9, 10, 11]};
var tien = {2: [1, 2, 3, 4]};
var kwart = {3: [7, 8, 9, 10, 11]};
var uur = {10: [9, 10, 11]};
var layout = {
"version": 2,
"language": 'Nederlands',
"letters": [
'HETKISAVIJF',
'TIENBTZVOOR',
'OVERMEKWART',
'HALFSPWOVER',
'VOORTHGEENS',
'TWEEPVCDRIE',
'VIERVIJFZES',
'ZEVENONEGEN',
'ACHTTIENELF',
'TWAALFBFUUR'
],
"permanent": het_is,
"minutes": {
"0,1,2,3,4": uur,
"5,6,7,8,9": [vijf, over1],
"10,11,12,13,14": [tien, over1],
"15,16,17,18,19": [kwart, over2],
"20,21,22,23,24": [tien, voor1, half],
"25,26,27,28,29": [vijf, voor1, half],
"30,31,32,33,34": half,
"35,36,37,38,39": [vijf, over1, half],
"40,41,42,43,44": [tien, over1, half],
"45,46,47,48,49": [kwart, voor2],
"50,51,52,53,54": [tien, voor1],
"55,56,57,58,59": [vijf, voor1]
},
"hours": {
"0,12": {10: [1, 2, 3, 4, 5, 6]},
"1,13": {5: [8, 9, 10]},
"2,14": {6: [1, 2, 3, 4]},
"3,15": {6: [8, 9, 10, 11]},
"4,16": {7: [1, 2, 3, 4]},
"5,17": {7: [5, 6, 7, 8]},
"6,18": {7: [9, 10, 11]},
"7,19": {8: [1, 2, 3, 4, 5]},
"8,20": {9: [1, 2, 3, 4]},
"9,21": {8: [7, 8, 9, 10, 11]},
"10,22": {9: [5, 6, 7, 8]},
"11,23": {9: [9, 10, 11]}
},
"getHour": function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 20) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('nl', layout);
}(jQuery));

79
src/uhr-pt.js Normal file
View file

@ -0,0 +1,79 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function ($) {
'use strict';
var e_ = {1: [1]};
var sao = {1: [2, 3, 4]};
var e1 = {7: [8]};
var e2 = {10: [5]};
var menos = {7: [7, 8, 9, 10, 11]};
var meia = {8: [8, 9, 10, 11]};
var cinco = {10: [7, 8, 9, 10, 11]};
var dez = {10: [1, 2, 3]};
var um_quarto = {9: [1, 2, 4, 5, 6, 7, 8, 9]};
var vinte = {8: [1, 2, 3, 4, 5]};
var layout = {
"version": 2,
"language": 'Português',
"letters": [
'ÉSÃOUMATRÊS',
'MEIOLDIADEZ',
'DUASEISETEY',
'QUATROHNOVE',
'CINCOITONZE',
'ZMEIALNOITE',
'HORASYMENOS',
'VINTECAMEIA',
'UMVQUARTOPM',
'DEZOEYCINCO'
],
"minutes": {
"5,6,7,8,9": [e1, cinco],
"10,11,12,13,14": [e1, dez],
"15,16,17,18,19": [e1, um_quarto],
"20,21,22,23,24": [e1, vinte],
"25,26,27,28,29": [e1, vinte, e2, cinco],
"30,31,32,33,34": [e1, meia],
"35,36,37,38,39": [menos, vinte, e2, cinco],
"40,41,42,43,44": [menos, vinte],
"45,46,47,48,49": [menos, um_quarto],
"50,51,52,53,54": [menos, dez],
"55,56,57,58,59": [menos, cinco]
},
"hours": {
"0": [e_, {"6": [2, 3, 4, 5, 7, 8, 9, 10, 11]}],
"12": [e_, {"2": [1, 2, 3, 4, 6, 7, 8]}],
"1,13": [e_, {"1": [5, 6, 7]}],
"2,14": [sao, {"3": [1, 2, 3, 4]}],
"3,15": [sao, {"1": [8, 9, 10, 11]}],
"4,16": [sao, {"4": [1, 2, 3, 4, 5, 6]}],
"5,17": [sao, {"5": [1, 2, 3, 4, 5]}],
"6,18": [sao, {"3": [4, 5, 6, 7]}],
"7,19": [sao, {"3": [7, 8, 9, 10]}],
"8,20": [sao, {"5": [5, 6, 7, 8]}],
"9,21": [sao, {"4": [8, 9, 10, 11]}],
"10,22": [sao, {"2": [9, 10, 11]}],
"11,23": [sao, {"5": [8, 9, 10, 11]}]
},
"getHour": function (date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return (hour + 1) % 24;
}
return hour;
}
};
$.fritteli.uhr.register('pt', layout);
}(jQuery));

816
src/uhr.js Normal file
View file

@ -0,0 +1,816 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function ($) {
'use strict';
var uhrGlobals = {
"id": 0,
"languages": [],
"themes": [],
registerLanguage: function registerLanguage(code, language) {
var alreadyExists = uhrGlobals.languages.some(function (element) {
if (code === element.code) {
console.error("Error: Language code '" + code + "' cannot be registered for language '" + language.language +
"' because it is already registered for language '" + element.language + "'!");
return true;
}
return false;
});
if (!alreadyExists) {
language.code = code;
uhrGlobals.languages.push(language);
}
}
};
// auto-detect themes
$('link[rel=stylesheet]').each(function (index, item) {
var styleSheet = $(item);
var styleClass = styleSheet.attr('data-class');
if (styleClass !== undefined) {
var name = styleSheet.attr('data-name');
if (name === undefined) {
name = styleClass;
}
uhrGlobals.themes.push({'styleClass': styleClass, 'name': name});
}
});
// fall-back if no theme was included
if (uhrGlobals.themes.length === 0) {
uhrGlobals.themes.push({});
}
// public interface methods (exported later)
var setCookie;
var isOn;
var update;
var start = function start() {
if (!isOn.bind(this)()) {
this.timer = window.setInterval(function () {
this.options.time = new Date();
update.bind(this)();
}.bind(this), 1000);
update.bind(this)();
setCookie.bind(this)('uhr-status', 'on');
}
};
var stop = function stop() {
if (isOn.bind(this)()) {
window.clearInterval(this.timer);
this.timer = null;
update.bind(this)();
setCookie.bind(this)('uhr-status', 'off');
}
};
var toggle = function toggle() {
if (isOn.bind(this)()) {
this.stop();
} else {
this.start();
}
};
var language;
/**
* Ein Buchstabe. Hilfsklasse für den Renderer und Inhalt der Layout-Arrays.
* @param value Der Buchstabe, der Dargestellt werden soll.
* @param style Die CSS-Styleklassen des Buchstabens.
*/
function Letter(value, style) {
var myValue = value;
var myStyle = style || '';
this.addStyle = function (style) {
if (myStyle === '') {
myStyle = style;
} else {
myStyle += ' ' + style;
}
};
this.toString = function () {
return '<span class="item letter ' + myStyle + '">' + myValue + '</span>';
};
}
function UhrRendererV2Delegate(layout) {
var vorne0 = {
3: [2, 3, 4],
4: [1, 5],
5: [1, 4, 5],
6: [1, 3, 5],
7: [1, 2, 5],
8: [1, 5],
9: [2, 3, 4]
};
var hinten0 = {
3: [8, 9, 10],
4: [7, 11],
5: [7, 10, 11],
6: [7, 9, 11],
7: [7, 8, 11],
8: [7, 11],
9: [8, 9, 10]
};
var vorne1 = {
3: [3],
4: [2, 3],
5: [3],
6: [3],
7: [3],
8: [3],
9: [2, 3, 4]
};
var hinten1 = {
3: [9],
4: [8, 9],
5: [9],
6: [9],
7: [9],
8: [9],
9: [8, 9, 10]
};
var vorne2 = {
3: [2, 3, 4],
4: [1, 5],
5: [5],
6: [4],
7: [3],
8: [2],
9: [1, 2, 3, 4, 5]
};
var hinten2 = {
3: [8, 9, 10],
4: [7, 11],
5: [11],
6: [10],
7: [9],
8: [8],
9: [7, 8, 9, 10, 11]
};
var vorne3 = {
3: [1, 2, 3, 4, 5],
4: [4],
5: [3],
6: [4],
7: [5],
8: [1, 5],
9: [2, 3, 4]
};
var hinten3 = {
3: [7, 8, 9, 10, 11],
4: [10],
5: [9],
6: [10],
7: [11],
8: [7, 11],
9: [8, 9, 10]
};
var vorne4 = {
3: [4],
4: [3, 4],
5: [2, 4],
6: [1, 4],
7: [1, 2, 3, 4, 5],
8: [4],
9: [4]
};
var hinten4 = {
3: [10],
4: [9, 10],
5: [8, 10],
6: [7, 10],
7: [7, 8, 9, 10, 11],
8: [10],
9: [10]
};
var vorne5 = {
3: [1, 2, 3, 4, 5],
4: [1],
5: [1, 2, 3, 4],
6: [5],
7: [5],
8: [1, 5],
9: [2, 3, 4]
};
var hinten5 = {
3: [7, 8, 9, 10, 11],
4: [7],
5: [7, 8, 9, 10],
6: [11],
7: [11],
8: [7, 11],
9: [8, 9, 10]
};
var hinten6 = {
3: [9, 10],
4: [8],
5: [7],
6: [7, 8, 9, 10],
7: [7, 11],
8: [7, 11],
9: [8, 9, 10]
};
var hinten7 = {
3: [7, 8, 9, 10, 11],
4: [11],
5: [10],
6: [9],
7: [8],
8: [8],
9: [8]
};
var hinten8 = {
3: [8, 9, 10],
4: [7, 11],
5: [7, 11],
6: [8, 9, 10],
7: [7, 11],
8: [7, 11],
9: [8, 9, 10]
};
var hinten9 = {
3: [8, 9, 10],
4: [7, 11],
5: [7, 11],
6: [8, 9, 10, 11],
7: [11],
8: [10],
9: [8, 9]
};
var seconds = {
"0": [vorne0, hinten0],
"1": [vorne0, hinten1],
"2": [vorne0, hinten2],
"3": [vorne0, hinten3],
"4": [vorne0, hinten4],
"5": [vorne0, hinten5],
"6": [vorne0, hinten6],
"7": [vorne0, hinten7],
"8": [vorne0, hinten8],
"9": [vorne0, hinten9],
"10": [vorne1, hinten0],
"11": [vorne1, hinten1],
"12": [vorne1, hinten2],
"13": [vorne1, hinten3],
"14": [vorne1, hinten4],
"15": [vorne1, hinten5],
"16": [vorne1, hinten6],
"17": [vorne1, hinten7],
"18": [vorne1, hinten8],
"19": [vorne1, hinten9],
"20": [vorne2, hinten0],
"21": [vorne2, hinten1],
"22": [vorne2, hinten2],
"23": [vorne2, hinten3],
"24": [vorne2, hinten4],
"25": [vorne2, hinten5],
"26": [vorne2, hinten6],
"27": [vorne2, hinten7],
"28": [vorne2, hinten8],
"29": [vorne2, hinten9],
"30": [vorne3, hinten0],
"31": [vorne3, hinten1],
"32": [vorne3, hinten2],
"33": [vorne3, hinten3],
"34": [vorne3, hinten4],
"35": [vorne3, hinten5],
"36": [vorne3, hinten6],
"37": [vorne3, hinten7],
"38": [vorne3, hinten8],
"39": [vorne3, hinten9],
"40": [vorne4, hinten0],
"41": [vorne4, hinten1],
"42": [vorne4, hinten2],
"43": [vorne4, hinten3],
"44": [vorne4, hinten4],
"45": [vorne4, hinten5],
"46": [vorne4, hinten6],
"47": [vorne4, hinten7],
"48": [vorne4, hinten8],
"49": [vorne4, hinten9],
"50": [vorne5, hinten0],
"51": [vorne5, hinten1],
"52": [vorne5, hinten2],
"53": [vorne5, hinten3],
"54": [vorne5, hinten4],
"55": [vorne5, hinten5],
"56": [vorne5, hinten6],
"57": [vorne5, hinten7],
"58": [vorne5, hinten8],
"59": [vorne5, hinten9]
};
function parseObject(letters, styleClass, object) {
if (typeof object !== 'undefined' && object !== null) {
Object.keys(object).forEach(function (y) {
var highlightLetters = object[y];
highlightLetters.forEach(function (x) {
letters[y - 1][x - 1].addStyle(styleClass);
});
});
}
}
function parseArrayOrObject(letters, styleClass, input) {
if (typeof input !== 'undefined' && input !== null) {
if (Array.isArray(input)) {
input.forEach(function (item) {
parseObject(letters, styleClass, item);
});
} else {
parseObject(letters, styleClass, input);
}
}
}
function parseTimeDefinition(letters, styleClass, definition) {
if (typeof definition !== 'undefined' && definition !== null) {
Object.keys(definition).forEach(function (listString) {
var array = listString.split(',');
var highlightLetters = definition[listString];
array.forEach(function (item) {
parseArrayOrObject(letters, styleClass + item, highlightLetters);
});
});
}
}
this.parse = function parse() {
var letters = [];
layout.letters.forEach(function (string) {
var line = [];
for (var c = 0; c < string.length; c++) {
var character = new Letter(string[c]);
line.push(character);
}
letters.push(line);
});
parseArrayOrObject(letters, 'on', layout.permanent);
if (typeof layout.seconds !== 'undefined' && layout.seconds !== null) {
parseTimeDefinition(letters, 'second', layout.seconds);
} else {
parseTimeDefinition(letters, 'second', seconds);
}
parseTimeDefinition(letters, 'minute', layout.minutes);
parseTimeDefinition(letters, 'hour', layout.hours);
return letters;
};
}
/**
* Hilfsklasse zum Rendern der Uhr.
* @param layout Layout-Objekt, das gerendert werden soll.
* @param renderarea Das jQuery-gewrappte HTML-Element, auf dem gerendert werden soll.
*/
function UhrRenderer(layout, renderarea) {
this.render = function render(beforeshow) {
if (layout.parsed === undefined) {
switch (layout.version) {
case 2:
var delegate = new UhrRendererV2Delegate(layout);
var parsedLayout = delegate.parse();
Object.defineProperty(layout, "parsed", {
"value": parsedLayout,
"writable": false,
"configurable": false
});
break;
default:
console.warn("Unknown layout version: '" + layout.version + "'");
return;
}
}
var letters = layout.parsed;
renderarea.fadeOut('fast', function () {
renderarea.empty();
letters.forEach(function (line, index, array) {
line.forEach(function (letter) {
renderarea.append(letter.toString());
});
if (index < array.length - 1) {
renderarea.append('<br/>');
}
});
if (typeof beforeshow === 'function') {
beforeshow();
}
renderarea.fadeIn('fast');
});
};
}
var setLanguage = function setLanguage(languageKey) {
if (languageKey !== this.options.language) {
this.options.language = languageKey;
var renderer = new UhrRenderer(language.bind(this)(), this.element.find('.letterarea'));
renderer.render.bind(this)(function () {
this.currentMinute = -1;
update.bind(this)();
}.bind(this));
setCookie.bind(this)('uhr-language', languageKey);
update.bind(this)();
}
};
var setTheme = function setTheme(theme) {
if (theme !== this.options.theme) {
this.element.removeClass(this.options.theme).addClass(theme);
$('#uhr-onoffswitch' + this.id).removeClass(this.options.theme).addClass(theme);
this.options.theme = theme;
setCookie.bind(this)('uhr-theme', theme);
}
};
var setTime = function setTime(time) {
this.currentMinute = -1;
if (time === null) {
this.options.time = new Date();
} else {
if (this.timer !== null) {
window.clearInterval(this.timer);
}
this.options.time = time;
}
update.bind(this)();
};
var setMode = function (mode) {
this.options.mode = mode;
this.currentMinute = -1;
update.bind(this)();
setCookie.bind(this)('uhr-mode', mode);
};
var setWidth = function setWidth(width) {
var e = this.element;
e.css('width', width);
var realWidth = e.width();
e.width(realWidth);
e.height(realWidth);
e.css('font-size', (realWidth / 40) + 'px');
};
// private interface methods
var setupHTML;
var wireFunctionality;
var create = function create() {
this.id = uhrGlobals.id++;
this.timer = null;
this.currentMinute = -1;
var userTime = this.options.time;
var hash, params;
if (this.options.time === undefined) {
this.options.time = new Date();
}
// parse the URL params
hash = window.location.hash;
if (hash !== undefined && typeof hash === 'string' && hash.charAt(0) === '#') {
hash = hash.substring(1);
hash = decodeURIComponent(hash);
params = hash.split('&');
params.forEach(function (element) {
var pair = element.split('=');
var key = pair[0];
var value = pair[1];
switch (key) {
case 'l':
case 'language':
this.options.language = value;
this.options.force = true;
break;
case 't':
case 'theme':
this.options.theme = value;
this.options.force = true;
break;
case 'm':
case 'mode':
this.options.mode = value;
this.options.force = true;
break;
case 's':
case 'status':
this.options.status = value;
this.options.force = true;
break;
}
}.bind(this));
}
// end parse the URL params
setupHTML.bind(this)();
wireFunctionality.bind(this)();
if (userTime !== undefined) {
this.time(userTime);
}
};
// private helper methods (not exported)
var toggleConfigScreen = function toggleConfigScreen() {
$('#uhr-controlpanel' + this.id).toggle('fast');
};
// set up
setupHTML = function setupHTML() {
var e = this.element;
// Base clock area
e.addClass('uhr');
e.empty();
e.append('<span class="item dot dot1"></span>');
e.append('<span class="item dot dot2"></span>');
e.append('<span class="item dot dot3"></span>');
e.append('<span class="item dot dot4"></span>');
e.append('<div class="letterarea"></div>');
e.append('<div class="reflection"></div>');
setWidth.bind(this)(this.options.width);
if (this.options.controls) {
var controlpanel = $('<div class="uhr-controlpanel" id="uhr-controlpanel' + this.id + '"></div>');
var content = $('<div class="content"></div>');
controlpanel.append(content);
// on/off switch
var toggleSwitch = $('<div class="onoffswitch" id="uhr-onoffswitch' + this.id + '"></div>');
toggleSwitch.append('<input type="checkbox" class="onoffswitch-checkbox" id="uhr-onoffswitch-checkbox' + this.id +
'" checked="checked" />');
toggleSwitch.append('<label class="onoffswitch-label" for="uhr-onoffswitch-checkbox' + this.id + '">' +
'<div class="onoffswitch-inner"></div>' + '<div class="onoffswitch-switch"></div>' + '</label>');
content.append(toggleSwitch);
// time mode switch
var modeSwitch = $('<div class="onoffswitch" id="uhr-modeswitch' + this.id + '"></div>');
modeSwitch.append('<input type="checkbox" class="onoffswitch-checkbox" id="uhr-modeswitch-checkbox' + this.id +
'" checked="checked" />');
modeSwitch.append('<label class="onoffswitch-label" for="uhr-modeswitch-checkbox' + this.id + '">' +
'<div class="modeswitch-inner"></div>' + '<div class="onoffswitch-switch"></div>' +
'</label>');
content.append(modeSwitch);
// language chooser
if (uhrGlobals.languages.length > 1) {
var languageChooser = $('<select id="uhr-languagechooser' + this.id + '"></select>');
uhrGlobals.languages.forEach(function (item) {
languageChooser.append('<option value="' + item.code + '">' + item.language + '</option>');
});
content.append(languageChooser);
}
// theme chooser
if (uhrGlobals.themes.length > 1) {
var themeChooser = $('<select id="uhr-themechooser' + this.id + '"></select>');
uhrGlobals.themes.forEach(function (item) {
themeChooser.append('<option value="' + item.styleClass + '">' + item.name + '</option>');
});
content.append(themeChooser);
}
var closebutton = $('<a class="uhr-closecontrolpanel" id="uhr-closecontrolpanel' + this.id + '"></a>');
closebutton.on('click', function () {
$('#uhr-controlpanel' + this.id).hide('fast');
}.bind(this));
content.append(closebutton);
e.after(controlpanel);
controlpanel.hide();
var configlink = $('<a class="uhr-configlink" id="uhr-configlink' + this.id + '"></a>');
configlink.on('click', function () {
toggleConfigScreen.bind(this)();
}.bind(this));
e.after(configlink);
}
};
wireFunctionality = function wireFunctionality() {
// on/off switch
var toggleSwitch = $('#uhr-onoffswitch-checkbox' + this.id);
toggleSwitch.on('click', function () {
this.toggle();
}.bind(this));
var status = $.cookie('uhr-status' + this.id);
if (status === undefined || this.options.force) {
status = this.options.status;
}
toggleSwitch.prop('checked', status === 'on');
if (status === 'on') {
this.start();
} else {
this.stop();
}
// time mode switch
var modeSwitch = $('#uhr-modeswitch-checkbox' + this.id);
modeSwitch.on('click', function () {
if (this.options.mode === 'seconds') {
setMode.bind(this)('normal');
} else {
setMode.bind(this)('seconds');
}
}.bind(this));
var mode = $.cookie('uhr-mode' + this.id);
if (mode === undefined || this.options.force) {
mode = this.options.mode;
}
modeSwitch.prop('checked', mode !== 'seconds');
if (mode === 'seconds') {
setMode.bind(this)('seconds');
} else {
setMode.bind(this)('normal');
}
// language chooser
var languageChooser = $('#uhr-languagechooser' + this.id);
languageChooser.on('change', function () {
var languageKey = $('#uhr-languagechooser' + this.id).val();
this.language(languageKey);
}.bind(this));
var selectedLanguage = $.cookie('uhr-language' + this.id);
if (selectedLanguage === undefined || this.options.force) {
selectedLanguage = this.options.language;
}
var found = uhrGlobals.languages.some(function (item) {
return selectedLanguage === item.code;
});
if (!found) {
var fallbackLanguage;
if (uhrGlobals.languages.length > 0) {
fallbackLanguage = uhrGlobals.languages[0].code;
} else {
fallbackLanguage = '';
}
console.warn("Language '" + selectedLanguage + "' not found! Using fallback '" + fallbackLanguage + "'");
selectedLanguage = fallbackLanguage;
}
languageChooser.val(selectedLanguage);
this.options.language = "";
this.language(selectedLanguage);
// theme chooser
var themeChooser = $('#uhr-themechooser' + this.id);
themeChooser.on('change', function () {
var themeKey = $('#uhr-themechooser' + this.id).val();
this.theme(themeKey);
}.bind(this));
var selectedTheme = $.cookie('uhr-theme' + this.id);
if (selectedTheme === undefined || this.options.force) {
selectedTheme = this.options.theme;
}
found = uhrGlobals.themes.some(function (item) {
return selectedTheme === item.styleClass;
});
if (!found) {
var fallbackTheme = uhrGlobals.themes[0].styleClass;
console.warn("Theme '" + selectedTheme + "' not found! Using fallback '" + fallbackTheme + "'");
selectedTheme = fallbackTheme;
}
themeChooser.val(selectedTheme);
this.options.theme = "";
this.theme(selectedTheme);
if (this.options.autoresize) {
$(window).on('resize', function () {
var $e = this.element;
var $parent = $e.parent();
var $window = $(window);
var parentWidth = $parent.width();
var parentHeight = $parent.height();
var windowWidth = $window.width();
var windowHeight = $window.height();
var size = Math.min(parentWidth, parentHeight, windowWidth, windowHeight) + 'px';
setWidth.bind(this)(size);
}.bind(this));
}
};
var destroy = function destroy() {
this.timer = null;
$(this.element)
.removeAttr('style')
.removeAttr('class')
.empty();
$('#uhr-configlink' + this.id).remove();
$('#uhr-controlpanel' + this.id).remove();
};
setCookie = function setCookie(cookieName, cookieValue) {
var options = {};
if (this.options.cookiePath !== undefined) {
options = {expires: 365, path: this.options.cookiePath};
} else {
options = {expires: 365};
}
$.cookie(cookieName + this.id, cookieValue, options);
};
// business logic
isOn = function isOn() {
return this.timer !== null;
};
var show;
var clear;
update = function update() {
if (isOn.bind(this)()) {
var time = this.options.time;
if (!language.bind(this)().hasOwnProperty('seconds') && this.options.mode !== 'seconds') {
if (time.getMinutes() === this.currentMinute) {
return;
}
this.currentMinute = time.getMinutes();
}
show.bind(this)(time);
} else {
clear.bind(this)();
this.currentMinute = -1;
}
};
var highlight;
var getSecond;
var getDotMinute;
var getCoarseMinute;
var getHour;
show = function show(time) {
var second = getSecond.bind(this)(time);
var dotMinute = getDotMinute.bind(this)(time);
var hour = getHour.bind(this)(time);
var coarseMinute = getCoarseMinute.bind(this)(time);
clear.bind(this)();
if (this.options.mode === 'seconds') {
highlight.bind(this)('second' + second);
} else {
highlight.bind(this)('on');
for (var i = 1; i <= dotMinute; i++) {
highlight.bind(this)('dot' + i);
}
highlight.bind(this)('minute' + coarseMinute);
highlight.bind(this)('hour' + hour);
}
};
highlight = function highlight(itemClass) {
this.element.find('.item.' + itemClass).addClass('active');
};
clear = function clear() {
this.element.find('.item').removeClass('active');
};
getSecond = function getSecond(date) {
if (typeof language.bind(this)().getSeconds === 'function') {
return language.bind(this)().getSeconds(date);
}
return date.getSeconds();
};
getDotMinute = function getDotMinute(date) {
if (typeof language.bind(this)().getDotMinute === 'function') {
return language.bind(this)().getDotMinute(date);
}
var minutes = date.getMinutes();
return minutes % 5;
};
getCoarseMinute = function getCoarseMinute(date) {
if (typeof language.bind(this)().getCoarseMinute === 'function') {
return language.bind(this)().getCoarseMinute(date);
}
return date.getMinutes();
};
getHour = function getHour(date) {
if (typeof language.bind(this)().getHour === 'function') {
return language.bind(this)().getHour(date);
}
var hour = date.getHours();
if (date.getMinutes() >= 25) {
return (hour + 1) % 24;
}
return hour;
};
language = function language() {
var matchingLanguages = uhrGlobals.languages.filter(function (element) {
return (element.code === this.options.language);
}, this);
if (matchingLanguages.length > 0) {
return matchingLanguages[0];
}
// fallback: return empty object
return {};
};
$.widget("fritteli.uhr", {
"options": {
width: '100%',
status: 'on',
language: 'de_CH',
theme: uhrGlobals.themes[0].styleClass,
force: false,
controls: true,
cookiePath: undefined,
autoresize: true,
mode: 'normal'
},
"start": start,
"stop": stop,
"toggle": toggle,
"language": setLanguage,
"theme": setTheme,
"time": setTime,
"mode": setMode,
"width": setWidth,
// constructor method
"_create": create,
// destructor method
"_destroy": destroy
});
$.fritteli.uhr.register = uhrGlobals.registerLanguage;
})(jQuery);

60
test/.jshintrc Normal file
View file

@ -0,0 +1,60 @@
{
// Settings
"passfail" : false, // Stop on first error.
"maxerr" : 100, // Maximum error before stopping.
// Predefined globals whom JSHint will ignore.
"browser" : true, // Standard browser globals e.g. `window`, `document`.
"node" : true,
"jquery" : true,
"predef" : [
"suite",
"chai",
"setup",
"teardown",
"test"
],
// Development.
"debug" : false, // Allow debugger statements e.g. browser breakpoints.
"devel" : true, // Allow developments statements e.g. `console.log();`.
"strict" : true, // Require `use strict` pragma in every file.
"globalstrict" : false, // Allow global "use strict" (also enables 'strict').
// The Good Parts.
"asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons).
"laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons.
"bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.).
"boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments.
"curly" : true, // Require {} for every new block or scope.
"eqeqeq" : true, // Require triple equals i.e. `===`.
"eqnull" : false, // Tolerate use of `== null`.
"evil" : false, // Tolerate use of `eval`.
"expr" : false, // Tolerate `ExpressionStatement` as Programs.
"forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`.
"immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );`
"latedef" : true, // Prohipit variable use before definition.
"loopfunc" : false, // Allow functions to be defined within loops.
"noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`.
"scripturl" : true, // Tolerate script-targeted URLs.
"shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`.
"supernew" : false, // Tolerate `new function () { ... };` and `new Object;`.
"undef" : true, // Require all non-global variables be declared before they are used.
// Personal styling preferences.
"newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`.
"noempty" : true, // Prohibit use of empty blocks.
"nonew" : true, // Prohibit use of constructors for side-effects.
"nomen" : true, // Prohibit use of initial or trailing underbars in names.
"onevar" : false, // Allow only one `var` statement per function.
"plusplus" : false, // Prohibit use of `++` & `--`.
"sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`.
"trailing" : true, // Prohibit trailing whitespaces.
"white" : true, // Check against strict whitespace and indentation rules.
"indent" : 0 // Specify indentation spacing
}

270
test/css/mocha.css Normal file
View file

@ -0,0 +1,270 @@
@charset "utf-8";
body {
margin:0;
}
#mocha {
font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
margin: 60px 50px;
}
#mocha ul,
#mocha li {
margin: 0;
padding: 0;
}
#mocha ul {
list-style: none;
}
#mocha h1,
#mocha h2 {
margin: 0;
}
#mocha h1 {
margin-top: 15px;
font-size: 1em;
font-weight: 200;
}
#mocha h1 a {
text-decoration: none;
color: inherit;
}
#mocha h1 a:hover {
text-decoration: underline;
}
#mocha .suite .suite h1 {
margin-top: 0;
font-size: .8em;
}
#mocha .hidden {
display: none;
}
#mocha h2 {
font-size: 12px;
font-weight: normal;
cursor: pointer;
}
#mocha .suite {
margin-left: 15px;
}
#mocha .test {
margin-left: 15px;
overflow: hidden;
}
#mocha .test.pending:hover h2::after {
content: '(pending)';
font-family: arial, sans-serif;
}
#mocha .test.pass.medium .duration {
background: #c09853;
}
#mocha .test.pass.slow .duration {
background: #b94a48;
}
#mocha .test.pass::before {
content: '✓';
font-size: 12px;
display: block;
float: left;
margin-right: 5px;
color: #00d6b2;
}
#mocha .test.pass .duration {
font-size: 9px;
margin-left: 5px;
padding: 2px 5px;
color: #fff;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
border-radius: 5px;
}
#mocha .test.pass.fast .duration {
display: none;
}
#mocha .test.pending {
color: #0b97c4;
}
#mocha .test.pending::before {
content: '◦';
color: #0b97c4;
}
#mocha .test.fail {
color: #c00;
}
#mocha .test.fail pre {
color: black;
}
#mocha .test.fail::before {
content: '✖';
font-size: 12px;
display: block;
float: left;
margin-right: 5px;
color: #c00;
}
#mocha .test pre.error {
color: #c00;
max-height: 300px;
overflow: auto;
}
/**
* (1): approximate for browsers not supporting calc
* (2): 42 = 2*15 + 2*10 + 2*1 (padding + margin + border)
* ^^ seriously
*/
#mocha .test pre {
display: block;
float: left;
clear: left;
font: 12px/1.5 monaco, monospace;
margin: 5px;
padding: 15px;
border: 1px solid #eee;
max-width: 85%; /*(1)*/
max-width: calc(100% - 42px); /*(2)*/
word-wrap: break-word;
border-bottom-color: #ddd;
-webkit-border-radius: 3px;
-webkit-box-shadow: 0 1px 3px #eee;
-moz-border-radius: 3px;
-moz-box-shadow: 0 1px 3px #eee;
border-radius: 3px;
}
#mocha .test h2 {
position: relative;
}
#mocha .test a.replay {
position: absolute;
top: 3px;
right: 0;
text-decoration: none;
vertical-align: middle;
display: block;
width: 15px;
height: 15px;
line-height: 15px;
text-align: center;
background: #eee;
font-size: 15px;
-moz-border-radius: 15px;
border-radius: 15px;
-webkit-transition: opacity 200ms;
-moz-transition: opacity 200ms;
transition: opacity 200ms;
opacity: 0.3;
color: #888;
}
#mocha .test:hover a.replay {
opacity: 1;
}
#mocha-report.pass .test.fail {
display: none;
}
#mocha-report.fail .test.pass {
display: none;
}
#mocha-report.pending .test.pass,
#mocha-report.pending .test.fail {
display: none;
}
#mocha-report.pending .test.pass.pending {
display: block;
}
#mocha-error {
color: #c00;
font-size: 1.5em;
font-weight: 100;
letter-spacing: 1px;
}
#mocha-stats {
position: fixed;
top: 15px;
right: 10px;
font-size: 12px;
margin: 0;
color: #888;
z-index: 1;
}
#mocha-stats .progress {
float: right;
padding-top: 0;
}
#mocha-stats em {
color: black;
}
#mocha-stats a {
text-decoration: none;
color: inherit;
}
#mocha-stats a:hover {
border-bottom: 1px solid #eee;
}
#mocha-stats li {
display: inline-block;
margin: 0 5px;
list-style: none;
padding-top: 11px;
}
#mocha-stats canvas {
width: 40px;
height: 40px;
}
#mocha code .comment { color: #ddd; }
#mocha code .init { color: #2f6fad; }
#mocha code .string { color: #5890ad; }
#mocha code .keyword { color: #8a6343; }
#mocha code .number { color: #2f6fad; }
@media screen and (max-device-width: 480px) {
#mocha {
margin: 60px 0px;
}
#mocha #stats {
position: absolute;
}
}

76
test/fastforward.html Normal file
View file

@ -0,0 +1,76 @@
<!DOCTYPE html>
<!--
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<html lang="de" manifest="manifest.appcache">
<head>
<title>Fastforward bärneruhr.ch</title>
<meta charset="utf-8"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="apple-mobile-web-app-title" content="Bärneruhr"/>
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1"/>
<link rel="stylesheet" type="text/css" href="../dist/uhr.min.css"/>
<link rel="stylesheet" type="text/css" href="../dist/uhr-black.min.css" data-class="black" data-name="Schwarz"/>
<link rel="stylesheet" type="text/css" href="../dist/uhr-white.min.css" data-class="white" data-name="Weiss"/>
<link rel="stylesheet" type="text/css" href="../dist/uhr-red.min.css" data-class="red" data-name="Rot"/>
<link rel="stylesheet" type="text/css" href="../dist/uhr-yellow.min.css" data-class="yellow" data-name="Gelb"/>
<link rel="stylesheet" type="text/css" href="../dist/uhr-green.min.css" data-class="green" data-name="Grün"/>
<link rel="stylesheet" type="text/css" href="../dist/uhr-blue.min.css" data-class="blue" data-name="Blau"/>
<link rel="stylesheet" type="text/css" href="../dist/uhr-pink.min.css" data-class="pink" data-name="Pink"/>
<link rel="shortcut icon" type="image/png" href="../resources/favicon.png"/>
<link rel="apple-touch-icon-precomposed" href="../resources/apple-touch-icon-precomposed.png"/>
<script type="text/javascript" src="../dist/libs.min.js"></script>
<script type="text/javascript" src="../dist/jquery.uhr.complete.min.js"></script>
</head>
<body>
<div id="uhr"></div>
<button id="timer">Start</button>
<button id="reset">Reset</button>
<script type="text/javascript">
(function ($) {
var time = new Date(2000, 0, 1, 0, 0, 0, 0);
var timer = null;
$('#timer').on('click', function () {
if (timer == null) {
timer = window.setInterval(function () {
var minutes = time.getMinutes();
var hours = time.getHours();
minutes = (minutes + 1) % 60;
if (minutes == 0) {
hours = (hours + 1) % 24;
time.setHours(hours);
}
time.setMinutes(minutes);
$('#uhr').uhr('time', time);
}, 200);
$('#timer').html('Pause');
} else {
window.clearInterval(timer);
timer = null;
$('#timer').html('Start');
}
});
$('#reset').on('click', function () {
time = new Date(2000, 0, 1, 0, 0, 0, 0);
$('#uhr').uhr('time', time);
});
$('#uhr').uhr({
width: '200px',
time: time
});
})(jQuery);
</script>
</body>
</html>

4782
test/lib/chai.js Normal file

File diff suppressed because it is too large Load diff

5842
test/lib/mocha.js Normal file

File diff suppressed because it is too large Load diff

48
test/test.html Normal file
View file

@ -0,0 +1,48 @@
<!DOCTYPE html>
<!--
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Test bärneruhr.ch</title>
<link rel="stylesheet" type="text/css" href="css/mocha.css"/>
<link rel="stylesheet" type="text/css" href="../css/uhr.css"/>
<link rel="stylesheet" type="text/css" href="../css/uhr-black.css" data-class="black"/>
<link rel="stylesheet" type="text/css" href="../css/uhr-red.css" data-class="red"/>
<link rel="stylesheet" type="text/css" href="../css/uhr-pink.css" data-class="pink"/>
</head>
<body>
<div id="u"></div>
<div id="mocha"></div>
<script type="text/javascript" src="lib/mocha.js"></script>
<script type="text/javascript" src="lib/chai.js"></script>
<script type="text/javascript" src="../dist/libs.js"></script>
<script type="text/javascript" src="../dist/jquery.uhr.complete.js"></script>
<script type="text/javascript">
mocha.setup('tdd');
</script>
<script type="text/javascript" src="test.js"></script>
<script type="text/javascript">
// mocha.checkLeaks();
// mocha.globals(['jQuery*']);
if (window.mochaPhantomJS) {
mochaPhantomJS.run();
}
else {
mocha.run();
}
</script>
</body>
</html>

141
test/test.js Normal file
View file

@ -0,0 +1,141 @@
suite('Bärneruhr', function () {
'use strict';
var assert = chai.assert;
var $ = jQuery;
var elem;
setup(function () {
elem = $('#u');
});
function cleanupCookies(id) {
$.removeCookie('uhr-language' + id);
$.removeCookie('uhr-mode' + id);
$.removeCookie('uhr-status' + id);
$.removeCookie('uhr-theme' + id);
}
teardown(function () {
var uhr = elem.uhr('instance');
if (uhr !== undefined) {
cleanupCookies(uhr.id);
}
try {
elem.uhr('destroy');
} catch (e) {
// just TRY to clean up, but don't DIE trying.
}
window.location.hash = '';
});
test('create and destroy widget', function () {
var uhr = elem.uhr('instance');
var id;
assert.isUndefined(uhr);
elem.uhr();
uhr = elem.uhr('instance');
assert.isNotNull(uhr);
assert.isDefined(uhr);
id = uhr.id;
elem.uhr('destroy');
uhr = elem.uhr('instance');
assert.isUndefined(uhr);
// cookies need to be cleaned up separately in this case, because in teardown(), the uhr widget doesn't exist anymore
cleanupCookies(id);
});
test('default config', function () {
var options;
elem.uhr();
options = elem.uhr('instance').options;
assert.isTrue(options.autoresize);
assert.isTrue(options.controls);
assert.isUndefined(options.cookiePath);
assert.isFalse(options.force);
assert.equal(options.language, 'de_CH');
assert.equal(options.mode, 'normal');
assert.equal(options.status, 'on');
assert.equal(options.theme, 'black');
});
test('custom config', function () {
var options;
var realWidth;
var myWidth = 100;
var myOptions = {
autoresize: false,
controls: false,
cookiePath: '/foo/bar',
force: true,
language: 'de',
mode: 'seconds',
status: 'off',
theme: 'red',
width: myWidth + 'px'
};
elem.uhr(myOptions);
options = elem.uhr('instance').options;
assert.equal(options.autoresize, myOptions.autoresize);
assert.equal(options.controls, myOptions.controls);
assert.equal(options.cookiePath, myOptions.cookiePath);
assert.equal(options.force, myOptions.force);
assert.equal(options.language, myOptions.language);
assert.equal(options.mode, myOptions.mode);
assert.equal(options.status, myOptions.status);
assert.equal(options.theme, myOptions.theme);
assert.equal(options.width, myOptions.width);
realWidth = elem.width();
assert.equal(myWidth, realWidth);
});
test('unknown language', function () {
var uhr;
elem.uhr({
language: 'klingon'
});
uhr = elem.uhr('instance');
// The 'uhr' element must be created, and a fall-back language must have been selected
assert.isTrue(!!uhr);
assert.isTrue(!!uhr.options.language);
assert.notEqual(uhr.options.language, 'klingon');
});
test('unknown theme', function () {
var uhr;
elem.uhr({
theme: 'klingon'
});
uhr = elem.uhr('instance');
// NB: 'black' is the first theme that is included in the test page.
assert.equal(uhr.options.theme, 'black');
});
test('URL params, short', function () {
var options;
window.location.hash = '#t=red&l=dk&m=seconds&s=on';
elem.uhr();
options = elem.uhr('instance').options;
assert.isTrue(options.force);
assert.equal(options.language, 'dk');
assert.equal(options.mode, 'seconds');
assert.equal(options.status, 'on');
assert.equal(options.theme, 'red');
});
test('URL params, long', function () {
var options;
window.location.hash = '#theme=pink&language=de_CH&mode=normal&status=off';
elem.uhr();
options = elem.uhr('instance').options;
assert.isTrue(options.force);
assert.equal(options.language, 'de_CH');
assert.equal(options.mode, 'normal');
assert.equal(options.status, 'off');
assert.equal(options.theme, 'pink');
});
});

View file

@ -1,30 +0,0 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
var layout = {
language: 'Deutsch',
values: [
[l('E', 'on'), l('S', 'on'),l('K'),l('I', 'on'),l('S', 'on'),l('T', 'on'),l('A'),m('F', 5, 25, 35, 55),m('Ü', 5, 25, 35, 55),m('N', 5, 25, 35, 55),m('F', 5, 25, 35, 55)],
[m('Z', 10, 50), m('E', 10, 50),m('H', 10, 50),m('N', 10, 50),m('Z', 20, 40),m('W', 20, 40),m('A', 20, 40),m('N', 20, 40),m('Z', 20, 40),m('I', 20, 40),m('G', 20, 40)],
[m('D', 45), m('R', 45),m('E', 45),m('I', 45),m('V', 15, 45),m('I', 15, 45),m('E', 15, 45),m('R', 15, 45),m('T', 15, 45),m('E', 15, 45),m('L', 15, 45)],
[m('V', 25, 40, 50, 55), m('O', 25, 40, 50, 55),m('R', 25, 40, 50, 55),l('F'),l('U'),l('N'),l('K'),m('N', 5, 10, 15, 20, 35),m('A', 5, 10, 15, 20, 35),m('C', 5, 10, 15, 20, 35),m('H', 5, 10, 15, 20, 35)],
[m('H', 25, 30, 35),m('A', 25, 30, 35),m('L', 25, 30, 35),m('B', 25, 30, 35),l('A'),h('E', 11),h('L', 11),h('F', 5, 11),h('Ü', 5),h('N', 5),h('F', 5)],
[h('E', 1), h('I', 1),h('N', 1),h('S', 1),l('X'),l('A'),l('M'),h('Z', 2),h('W', 2),h('E', 2),h('I', 2)],
[h('D', 3), h('R', 3),h('E', 3),h('I', 3),l('P'),l('M'),l('J'),h('V', 4),h('I', 4),h('E', 4),h('R', 4)],
[h('S', 6), h('E', 6),h('C', 6),h('H', 6),h('S', 6),l('N'),l('L'),h('A', 8),h('C', 8),h('H', 8),h('T', 8)],
[h('S', 7), h('I', 7),h('E', 7),h('B', 7),h('E', 7),h('N', 7),h('Z', 12),h('W', 12),h('Ö', 12),h('L', 12),h('F', 12)],
[h('Z', 10), h('E', 10),h('H', 10),h('N', 9, 10),h('E', 9),h('U', 9),h('N', 9),l('K'),l('U'),l('H'),l('R')]
]
};
window._uhr.languages['de'] = layout;

View file

@ -1,30 +0,0 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
var layout = {
language: 'Bärndütsch',
values: [
[l('E', 'on'), l('S', 'on'),l('K'),l('I', 'on'),l('S', 'on'),l('C', 'on'),l('H', 'on'),l('A'),m('F', 5, 25, 35, 55),m('Ü', 5, 25, 35, 55),m('F', 5, 25, 35, 55)],
[m('V', 15, 45), m('I', 15, 45),m('E', 15, 45),m('R', 15, 45),m('T', 15, 45),m('U', 15, 45),l('B'),l('F'),m('Z', 10, 50),m('Ä', 10, 50),m('Ä', 10, 50)],
[m('Z', 20, 40), m('W', 20, 40),m('Ä', 20, 40),m('N', 20, 40),m('Z', 20, 40),m('G', 20, 40),l('S'),l('I'),m('V', 25, 40, 45, 50, 55),m('O', 25, 40, 45, 50, 55),m('R', 25, 40, 45, 50, 55)],
[m('A', 5, 10, 15, 20, 35), m('B', 5, 10, 15, 20, 35),l('O'),m('H', 25, 30, 35),m('A', 25, 30, 35),m('U', 25, 30, 35),m('B', 25, 30, 35),m('I', 25, 30, 35),l('E'),l('G'),l('E')],
[h('E', 1), h('I', 1),h('S', 1),h('Z', 2),h('W', 2),h('Ö', 2),h('I', 2),l('S'),h('D', 3),h('R', 3),h('Ü', 3)],
[h('V', 4), h('I', 4),h('E', 4),h('R', 4),h('I', 4),h('F', 5),h('Ü', 5),h('F', 5),h('I', 5),l('Q'),l('T')],
[h('S', 6), h('Ä', 6),h('C', 6),h('H', 6),h('S', 6),h('I', 6),h('S', 7),h('I', 7),h('B', 7),h('N', 7),h('I', 7)],
[h('A', 8), h('C', 8),h('H', 8),h('T', 8),h('I', 8),h('N', 9),h('Ü', 9),h('N', 9),h('I', 9),l('E'),l('L')],
[h('Z', 10), h('Ä', 10),h('N', 10),h('I', 10),l('E'),l('R'),l('B'),h('E', 11),h('U', 11),h('F', 11),h('I', 11)],
[h('Z', 12), h('W', 12),h('Ö', 12),h('U', 12),h('F', 12),h('I', 12),l('N'),l('A'),l('U'),l('H'),l('R')]
]
};
window._uhr.languages['de_CH'] = layout;

View file

@ -1,37 +0,0 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
var layout = {
language: 'English',
values: [
[l('I', 'on'), l('T', 'on'),l('L'),l('I', 'on'),l('S', 'on'),l('B'),l('F'),l('A'),l('M'),l('P'),l('M')],
[m('A', 15, 45), l('C'),m('Q', 15, 45),m('U', 15, 45),m('A', 15, 45),m('R', 15, 45),m('T', 15, 45),m('E', 15, 45),m('R', 15, 45),l('D'),l('C')],
[m('T', 20, 25, 35, 40), m('W', 20, 25, 35, 40),m('E', 20, 25, 35, 40),m('N', 20, 25, 35, 40),m('T', 20, 25, 35, 40),m('Y', 20, 25, 35, 40),m('F', 5, 25, 35, 55),m('I', 5, 25, 35, 55),m('V', 5, 25, 35, 55),m('E', 5, 25, 35, 55),l('X')],
[m('H', 30), m('A', 30),m('L', 30),m('F', 30),l('B'),m('T', 10, 50),m('E', 10, 50),m('N', 10, 50),l('F'),m('T', 35, 40, 45, 50, 55),m('O', 35, 40, 45, 50, 55)],
[m('P', 5, 10, 15, 20, 25, 30),m('A', 5, 10, 15, 20, 25, 30),m('S', 5, 10, 15, 20, 25, 30),m('T', 5, 10, 15, 20, 25, 30),l('E'),l('R'),l('U'),h('N', 9),h('I', 9),h('N', 9),h('E', 9)],
[h('O', 1), h('N', 1),h('E', 1),h('S', 6),h('I', 6),h('X', 6),h('T', 3),h('H', 3),h('R', 3),h('E', 3),h('E', 3)],
[h('F', 4), h('O', 4),h('U', 4),h('R', 4),h('F', 5),h('I', 5),h('V', 5),h('E', 5),h('T', 2),h('W', 2),h('O', 2)],
[h('E', 8), h('I', 8),h('G', 8),h('H', 8),h('T', 8),h('E', 11),h('L', 11),h('E', 11),h('V', 11),h('E', 11),h('N', 11)],
[h('S', 7), h('E', 7),h('V', 7),h('E', 7),h('N', 7),h('T', 12),h('W', 12),h('E', 12),h('L', 12),h('V', 12),h('E', 12)],
[h('T', 10), h('E', 10),h('N', 10),l('S'),l('E'),l('O', 'sharphour'),l('C', 'sharphour'),l('L', 'sharphour'),l('O', 'sharphour'),l('C', 'sharphour'),l('K', 'sharphour')]
],
getHour: function(date) {
var hour = date.getHours();
if (date.getMinutes() >= 35) {
return hour + 1;
}
return hour;
}
};
window._uhr.languages['en'] = layout;

175
uhr.css
View file

@ -1,175 +0,0 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
@font-face {
font-family: 'Uhrenfont';
src: url('uhr.woff') format('woff');
}
body {
font-family: 'Uhrenfont', sans-serif;
}
.uhr {
position: relative;
margin: 0;
transition: background-color 0.5s;
}
.uhr .reflection {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: radial-gradient(225em 45em at 160% 0, rgba(255, 255, 255, 0.4) 0, rgba(255, 255, 255, 0.05) 40%, rgba(255, 255, 255, 0) 40%) no-repeat scroll;
display: block;
margin: 0.15em;
}
#themeswitcher {
}
.uhr .letterarea {
display: block;
position: absolute;
top: 12%;
bottom: 12%;
left: 12%;
right: 12%;
overflow: hidden;
font-size: 200%;
}
.item {
transition: box-shadow 0.5s, text-shadow 0.5s, border-color 0.5s, color 0.5s;
}
.dot {
position: absolute;
display: block;
height: 0;
width: 0;
border: 0.2em solid;
border-radius: 1em;
}
.dot.active {
border-color: #eee;
box-shadow: 0 0 0.2em #eee;
}
.dot1 {
top: 3.75%;
left: 3.75%;
}
.dot2 {
top: 3.75%;
right: 3.75%;
}
.dot3 {
bottom: 3.75%;
right: 3.75%;
}
.dot4 {
bottom: 3.75%;
left: 3.75%;
}
.letter {
height: 10%;
width: 9.0909%;
padding: 0;
margin: 0;
display: inline-block;
text-align: center;
line-height: 160%;
}
.letter.active {
color: #eee;
text-shadow: 0 0 0.2em #eee;
}
.onoffswitch {
position: relative;
width: 86px;
margin: 1em;
-webkit-user-select:none;
-moz-user-select:none;
-ms-user-select: none;
}
.onoffswitch-checkbox {
display: none;
}
.onoffswitch-label {
display: block;
overflow: hidden;
cursor: pointer;
border: 2px solid #999;
border-radius: 50px;
}
.onoffswitch-inner {
width: 200%;
margin-left: -100%;
-moz-transition: margin 0.3s ease-in 0s;
-webkit-transition: margin 0.3s ease-in 0s;
-o-transition: margin 0.3s ease-in 0s;
transition: margin 0.3s ease-in 0s;
}
.onoffswitch-inner:before, .onoffswitch-inner:after {
float: left;
width: 50%;
height: 24px;
padding: 0;
line-height: 24px;
font-size: 18px;
color: white;
font-weight: bold;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.onoffswitch-inner:before {
content: "EIN";
padding-left: 12px;
color: #eee;
transition: background-color 0.5s;
}
.onoffswitch-inner:after {
content: "AUS";
padding-right: 12px;
background-color: #eee;
color: #999;
text-align: right;
}
.onoffswitch-switch {
width: 30px;
margin: -3px;
background: #fff;
border: 2px solid #999;
border-radius: 50px;
position: absolute;
top: 0;
bottom: 0;
right: 58px;
-moz-transition: all 0.3s ease-in 0s;
-webkit-transition: all 0.3s ease-in 0s;
-o-transition: all 0.3s ease-in 0s;
transition: all 0.3s ease-in 0s;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
margin-left: 0;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
right: 0px;
}
#disclaimer {
font-size: 0.5em;
}
#disclaimer a {
color: #444;
text-decoration: underline;
}

364
uhr.js
View file

@ -1,364 +0,0 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function($) {
"use strict";
if (window._uhr !== undefined) {
return;
}
window._uhr = {
id: 0,
languages: new Array()
};
$.widget("fritteli.uhr", {
options: {
width: '100%',
status: 'on',
language: 'de_CH',
theme: 'black',
force: false,
controls: true
},
start: function() {
if (!this._isOn()) {
var uhr = this;
this._timer = window.setInterval(function() {
uhr._update();
}, 1000);
this._update();
$.cookie('uhr-status' + this._id, 'on', {expires: 365, path: '/'});
} else {
}
},
stop: function() {
if(this._isOn()) {
window.clearInterval(this._timer);
this._timer = null;
this._update();
$.cookie('uhr-status' + this._id, 'off', {expires: 365, path: '/'});
}
},
toggle: function() {
if(this._isOn()) {
this.stop();
} else {
this.start();
}
},
language: function(languageKey) {
if (languageKey !== this.options.language) {
this.options.language = languageKey;
var renderer = new UhrRenderer(this._language(), this.element.find('.letterarea'));
var uhr = this;
renderer.render(this, function() {
uhr._currentMinute = -1;
uhr._update();
});
$.cookie('uhr-language' + this._id, languageKey, {expires: 365, path: '/'});
this._update();
}
},
theme: function(theme) {
if (theme != this.options.theme) {
this.element.removeClass(this.options.theme).addClass(theme);
$('#uhr-onoffswitch' + this._id).removeClass(this.options.theme).addClass(theme);
this.options.theme = theme;
$.cookie('uhr-theme' + this._id, theme, {expires: 365, path: '/'});
}
},
time: function(time) {
this.options.time = time;
if (time == null) {
this._currentMinute = -1;
this._update();
} else {
if (this._timer != null) {
window.clearInterval(this._timer);
}
var renderer = new UhrRenderer(this._language(), this.element.find('.letterarea'));
var uhr = this;
renderer.render(this, function() {
uhr._show(time);
});
}
},
// private variables
_id: -1,
_timer: null,
_currentMinute: -1,
// private methods
_isOn: function() {
return this._timer !== null;
},
_update: function() {
if (this._isOn()) {
var time = new Date();
if (time.getMinutes() == this._currentMinute) {
return;
}
this._currentMinute = time.getMinutes();
this._show(time);
} else {
this._clear();
this._currentMinute = -1;
}
},
_show: function(time) {
var dotMinute = this._getDotMinute(time);
var hour = this._getHour(time);
var coarseMinute = this._getCoarseMinute(time);
this._clear();
this._highlight('on');
for (var i = 1; i <= dotMinute; i++) {
this._highlight('dot' + i);
}
this._highlight('minute' + coarseMinute);
hour = this._normalizeHour(hour);
this._highlight('hour' + hour);
if (coarseMinute == 0) {
this._highlight('sharphour');
}
},
_language: function() {
return window._uhr.languages[this.options.language];
},
_highlight: function(itemClass) {
this.element.find('.item.' + itemClass).addClass('active');
},
_clear: function() {
this.element.find('.item').removeClass('active');
},
_getHour: function(date) {
if (typeof this._language().getHour === 'function') {
return this._language().getHour(date);
}
var hour = date.getHours();
if (date.getMinutes() >= 25) {
return hour + 1;
}
return hour;
},
_getCoarseMinute: function(date) {
if (typeof this._language().getCoarseMinute === 'function') {
return this._language().getCoarseMinute(date);
}
var minutes = date.getMinutes();
return minutes - this._getDotMinute(date);
},
_getDotMinute: function(date) {
if (typeof this._language().getDotMinute === 'function') {
return this._language().getDotMinute(date);
}
var minutes = date.getMinutes();
return minutes % 5;
},
_normalizeHour: function(hour) {
if (hour > 12) {
hour %= 12;
}
if (hour == 0) {
return 12;
}
return hour;
},
_create: function() {
this._id = window._uhr.id++;
this._setupHTML();
this._wireFunctionality();
if (this.options.time !== undefined) {
this.time(this.options.time);
}
},
_setupHTML: function() {
var e = this.element;
// Base clock area
e.addClass('uhr');
e.empty();
e.append('<span class="item dot dot1"></span>');
e.append('<span class="item dot dot2"></span>');
e.append('<span class="item dot dot3"></span>');
e.append('<span class="item dot dot4"></span>');
e.append('<div class="letterarea"></div>');
e.append('<div class="reflection"></div>');
e.css('width', this.options.width);
var realWidth = e.width()
e.width(realWidth);
e.height(realWidth);
e.css('font-size', (realWidth / 40) + 'px');
if (this.options.controls) {
// on/off switch
var toggleSwitch = $('<div class="onoffswitch" id="uhr-onoffswitch' + this._id + '"></div>');
toggleSwitch.append('<input type="checkbox" class="onoffswitch-checkbox" id="uhr-onoffswitch-checkbox' + this._id + '" checked="checked" />');
toggleSwitch.append('<label class="onoffswitch-label" for="uhr-onoffswitch-checkbox' + this._id + '">'
+ '<div class="onoffswitch-inner"></div>'
+ '<div class="onoffswitch-switch"></div>'
+ '</label>');
e.after(toggleSwitch);
// language chooser
var languageChooser = $('<select id="uhr-languagechooser' + this._id + '"></select>')
for (var code in window._uhr.languages) {
if (window._uhr.languages.hasOwnProperty(code)) {
var language = window._uhr.languages[code];
languageChooser.append('<option value="' + code + '">' + language.language + '</option>');
}
}
e.after(languageChooser);
// theme chooser
var themeChooser = $('<select id="uhr-themechooser' + this._id + '"></select>');
themeChooser.append('<option value="black">Schwarz</option>');
themeChooser.append('<option value="red">Rot</option>');
themeChooser.append('<option value="blue">Blau</option>');
themeChooser.append('<option value="green">Grün</option>');
themeChooser.append('<option value="white">Weiss</option>');
e.after(themeChooser);
}
},
_wireFunctionality: function() {
var e = this.element;
var uhr = this;
// on/off switch
var toggleSwitch = $('#uhr-onoffswitch-checkbox' + this._id);
toggleSwitch.on('click', function() {
uhr.toggle();
});
var status = $.cookie('uhr-status' + this._id);
if (status == undefined || this.options.force) {
status = this.options.status;
}
toggleSwitch.prop('checked', status == 'on');
if (status == 'on') {
this.start();
} else {
this.stop();
}
// language chooser
var languageChooser = $('#uhr-languagechooser' + this._id);
languageChooser.on('change', function() {
uhr.language(this.value);
});
var selectedLanguage = $.cookie('uhr-language' + this._id);
if (selectedLanguage == undefined || this.options.force) {
selectedLanguage = this.options.language;
}
languageChooser.val(selectedLanguage);
this.options.language = "";
this.language(selectedLanguage);
// theme chooser
var themeChooser = $('#uhr-themechooser' + this._id);
themeChooser.on('change', function() {
uhr.theme(this.value);
});
var selectedTheme = $.cookie('uhr-theme' + this._id);
if (selectedTheme == undefined || this.options.force) {
selectedTheme = this.options.theme;
}
themeChooser.val(selectedTheme);
this.options.theme = "";
this.theme(selectedTheme);
}
});
})(jQuery);
/**
* Hilfsklasse zum Rendern der Uhr.
* @param layout Layout-Objekt, das gerendert werden soll.
* @param renderarea Das jQuery-gewrappte HTML-Element, auf dem gerendert werden soll.
*/
function UhrRenderer(layout, renderarea) {
this.layout = layout;
this.renderarea = renderarea;
}
UhrRenderer.prototype.render = function(uhr, beforeshow) {
var renderer = this;
this.renderarea.fadeOut('fast', function() {
renderer.renderarea.empty();
for (var y = 0; y < renderer.layout.values.length; y++) {
for (var x = 0; x < renderer.layout.values[y].length; x++) {
var letter = renderer.layout.values[y][x];
renderer.renderarea.append(letter.toString());
}
if (y < renderer.layout.values.length - 1) {
renderer.renderarea.append('<br/>');
}
}
if (typeof beforeshow === 'function') {
beforeshow();
}
renderer.renderarea.fadeIn('fast');
});
}
/**
* Ein Buchstabe. Hilfsklasse für den Renderer und Inhalt der Layout-Arrays.
* @param value Der Buchstabe, der Dargestellt werden soll.
* @param style Die CSS-Styleklassen des Buchstabens.
*/
function Letter(value, style) {
this.value = value;
this.style = style || '';
this.getStyle = function() {
return 'item letter ' + style;
}
this.getValue = function() {
return value;
}
}
Letter.prototype.toString = function letterToString() {
return '<span class="' + this.getStyle() + '">' + this.getValue() + '</span>';
}
/**
* Hilfsfunktion, um einen Buchstaben zu erzeugen.
*
* @param letter string: Der Buchstabe, der angezeigt werden soll
* @example l('I', 'is') erzeugt den Buchstaben 'I' mit der CSS-Styleklasse 'is'
*/
function l(letter, style) {
return new Letter(letter, style);
}
/**
* Hilfsfunktion, um einen Buchstaben zu erzeugen, der zu einem Stunden-Wort gehört.
*
* @param letter string: Der Buchstabe, der angezeigt werden soll
* @param hours... integer: Eine Aufzählung von Stundenwerten, zu welchen der Buchstabe als aktiv angezeigt werden soll
* @example h('Z', 2, 11) erzeugt den Buchstaben 'Z', der um 2:xx, 11:xx, 14:xx und 23:xx aktiv angezeigt wird
*/
function h(letter) {
var style = '';
for (var i = 1; i < arguments.length; i++) {
style += ' hour' + arguments[i];
}
return l(letter, style);
}
/**
* Hilfsfunktion, um einen Buchstaben zu erzeugen, der zu einem Minuten-Wort gehört.
*
* @param letter string: Der Buchstabe, der angezeigt werden soll
* @param minutes... integer: Eine Aufzählung von Minutenwerten, zu welchen der Buchstabe als aktiv angezeigt werden soll
* @example m('A', 5, 10, 15, 20, 35) erzeugt den Buchstaben 'A' der um :05, :10, :15, :20 und :35 aktiv angezeigt wird
*/
function m(letter) {
var style = '';
for (var i = 1; i < arguments.length; i++) {
style += ' minute' + arguments[i];
}
return l(letter, style);
}