Compare commits

...

148 Commits

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



See merge request !49
2016-06-27 20:49:58 +02:00
Manuel Friedli 9f63969eff revert tests to previous state 2016-06-27 20:44:55 +02:00
Manuel Friedli fc8dc28fb7 final clean up 2016-06-27 20:34:43 +02:00
Manuel Friedli bb0dab5434 the build runs! 2016-06-27 20:26:20 +02:00
Manuel Friedli c5bc72c0ad update .gitlab-ci.yml 2016-06-27 19:49:06 +02:00
Manuel Friedli 909e263d41 moved stuff from bower to npm, adapted gruntfile. tests fail for now. 2016-06-27 18:07:24 +02:00
Manuel Friedli 852ff910f0 update version to next dev (8.0.4-dev.0) 2016-06-27 01:49:37 +02:00
Manuel Friedli 61d180fcfd release version 8.0.3, as 8.0.2 is utterly unusable. sorry. 2016-06-27 01:48:21 +02:00
Manuel Friedli eec51682ac Merge branch 'master' into develop
Conflicts:
	dist/libs.js
	dist/libs.min.js
2016-06-27 01:45:28 +02:00
Manuel Friedli cf27fa9d04 release version 8.0.2 2016-06-27 01:42:40 +02:00
Manuel Friedli 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
Manuel Friedli cdb30e405f make sure we're using a javascript-enabled runner for the builds 2016-06-27 01:19:34 +02:00
Manuel Friedli 1c2015b41b obviously, we don't want to print the destination path in the build
output
2016-06-27 01:13:09 +02:00
Manuel Friedli 7d774e6f6a also relete hidden files and directories 2016-06-27 01:12:12 +02:00
Manuel Friedli f6a24858d0 making progress: the deploy script seems somewhat useful now. 2016-06-27 01:10:08 +02:00
Manuel Friedli 1163a6e357 perhaps use switch-statement? 2016-06-27 00:58:36 +02:00
Manuel Friedli 36a94a07a7 some testing 2016-06-27 00:54:38 +02:00
Manuel Friedli 9cb3b60335 ... and do it properly 2016-06-27 00:49:00 +02:00
Manuel Friedli c218052556 try to simplify stuff 2016-06-27 00:47:59 +02:00
Manuel Friedli c7dc93e092 fixed CD. 2016-06-27 00:28:31 +02:00
Manuel Friedli 65c113913f first attempt at CD! 2016-06-27 00:23:08 +02:00
Manuel Friedli 7448563449 use job template to prevent copy&pasting 2016-06-27 00:11:18 +02:00
Manuel Friedli 491a130991 fixed path to deploy.sh (hopefully) 2016-06-27 00:03:40 +02:00
Manuel Friedli 9a2c22ec64 added new environment for deploying branch builds 2016-06-27 00:00:20 +02:00
Manuel Friedli 12838e31ee only include minified files in artifact 2016-06-26 23:56:15 +02:00
Manuel Friedli c942c42bf6 reverted ALL unintended changes now 2016-06-26 23:50:54 +02:00
Manuel Friedli 5206457484 Revert "even the tests are linted!"
This reverts commit c666ee8022.
2016-06-26 23:46:44 +02:00
Manuel Friedli 797088c988 Revert "... and more linting"
This reverts commit 6f7a77e355.
2016-06-26 23:46:33 +02:00
Manuel Friedli 49b4fc4dfe Revert "get rid of more linting errors"
This reverts commit 0035264f27.
2016-06-26 23:46:20 +02:00
Manuel Friedli 9e4a00e4bc Revert "get rid of linting errors, hopefully"
This reverts commit 0b26225c87.
2016-06-26 23:46:02 +02:00
Manuel Friedli bc835598a4 these files were committes accidentally 2016-06-26 23:41:41 +02:00
Manuel Friedli f810da8f0e force-removing the directories might prevent the cleanup builds from
failing all the time.
2016-06-26 23:36:56 +02:00
Manuel Friedli c666ee8022 even the tests are linted! 2016-06-26 23:35:04 +02:00
Manuel Friedli 6f7a77e355 ... and more linting 2016-06-26 23:29:50 +02:00
Manuel Friedli 0035264f27 get rid of more linting errors 2016-06-26 23:26:45 +02:00
Manuel Friedli 0b26225c87 get rid of linting errors, hopefully 2016-06-26 23:22:05 +02:00
Manuel Friedli 63cbc1da3c define cleanup jobs 2016-06-26 23:02:18 +02:00
Manuel Friedli a64b1d02e7 clean up after we're done 2016-06-26 22:53:54 +02:00
Manuel Friedli b919bc2243 perhaps a new variable fixes it 2016-06-26 22:51:03 +02:00
Manuel Friedli 574d3ad271 tried to fix setting of PATH 2016-06-26 22:44:26 +02:00
Manuel Friedli 306b54c3e9 try and use locally installed node packages of bower and grunt 2016-06-26 22:42:49 +02:00
Manuel Friedli dc93de27e5 fixed YAML, again 2016-06-26 22:28:07 +02:00
Manuel Friedli 3e2a37f3e7 fixed YAML 2016-06-26 22:22:09 +02:00
Manuel Friedli 2394301b10 first attempt at creating environments and some sophisticated CI stuff. 2016-06-26 22:20:30 +02:00
Manuel Friedli 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
Manuel Friedli 6075d74022 fixed typo 2016-05-28 21:24:30 +02:00
Manuel Friedli 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
Manuel Friedli 4ff55d967e updated README.md to use syntax highlighting in the markdown 2016-05-17 22:16:39 +02:00
Manuel Friedli 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
Manuel Friedli 2daf130c68 updated all dependencies to the latest available versions and re-generated some files in dist/ 2015-10-07 19:43:41 +02:00
Manuel Friedli 04afcad428 okay, so deleting these dirs is not required 2015-10-07 19:16:03 +02:00
Manuel Friedli 3b2fcbe16e tried to fix .gitlab-ci.yml 2015-10-07 19:14:09 +02:00
Manuel Friedli fcf16cc80e renamed COPYING to LICENSE 2015-10-07 19:00:37 +02:00
Manuel Friedli 2bc132b76b incremented version to next dev: 8.0.2-dev.0 2015-07-15 20:02:05 +02:00
Manuel Friedli f07ccb9918 updated version to next release, 8.0.1 2015-07-15 17:51:13 +02:00
Manuel Friedli 5db6f042cf Merge branch 'feature/language-pt' into 'develop'
Feature/language pt

See merge request !44
2015-07-15 17:47:54 +02:00
Manuel Friedli b98913ccf8 added dist-files 2015-07-15 17:43:35 +02:00
Manuel Friedli 5944c3d487 added "fast forward" test page and added license header to the existing
test file
2015-07-15 17:36:17 +02:00
Manuel Friedli 250a5beb73 Merge branch 'develop' into feature/language-pt 2015-07-14 00:53:31 +02:00
Manuel Friedli 672c453b90 added dist-files for portuguese 2015-07-14 00:39:34 +02:00
Manuel Friedli 7c227ef572 corrected language string 2015-07-14 00:39:08 +02:00
Manuel Friedli 2ab2e36349 added dist-files for portuguese language 2015-07-14 00:38:07 +02:00
Manuel Friedli 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
Manuel Friedli 9ead720de6 added .gitlab-ci.yml build descriptor 2015-07-14 00:06:29 +02:00
Manuel Friedli e19e11e4d6 added portuguese translation 2015-07-13 23:53:44 +02:00
Manuel Friedli 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
Manuel Friedli 11495c1cca fixed paragraph 6 in the README.md. this fixes #28 2015-06-17 00:05:30 +02:00
Manuel Friedli e104df7aa9 increment version number to next dev cycle 2015-01-19 01:57:40 +01:00
Manuel Friedli 76a97046c8 incremented version to 8.0.0 2015-01-19 01:54:29 +01:00
Manuel Friedli 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
Manuel Friedli 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
Manuel Friedli 80857bd69a Merge branch 'feature/update-toolchain' into feature/unify-versioninfo 2015-01-19 01:14:29 +01:00
Manuel Friedli 2bc3298628 fixed typo 2015-01-19 01:11:41 +01:00
Manuel Friedli 055cb6aca6 fixed path to the main uhr.css in the README.md 2015-01-19 01:09:38 +01:00
Manuel Friedli b8fbffdf3e also invoke the version task on `grunt buildonly`. 2015-01-19 01:07:09 +01:00
Manuel Friedli 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
Manuel Friedli 6692d2d6d9 Merge branch 'feature/update-toolchain' into feature/unify-versioninfo
Conflicts:
	Gruntfile.js
2015-01-19 00:51:15 +01:00
Manuel Friedli 316e045770 also minify the CSS files and store them in dist/ 2015-01-19 00:42:16 +01:00
Manuel Friedli 959e4a41aa Merge branch 'feature/update-toolchain' into feature/unify-versioninfo 2015-01-18 22:39:58 +01:00
Manuel Friedli 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
Manuel Friedli 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
Manuel Friedli 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
Manuel Friedli 2295283ba4 Merge branch 'feature/update-toolchain' into feature/unify-versioninfo 2015-01-18 18:54:18 +01:00
Manuel Friedli 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
Manuel Friedli 5e85458936 added a manifest.appcache file; first draft. 2015-01-18 18:03:49 +01:00
Manuel Friedli 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
Manuel Friedli dfac2ae47a executed grunt in order to update the version info in the dist/* files 2015-01-18 17:17:17 +01:00
Manuel Friedli 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
Manuel Friedli 3c193c5472 Merge branch 'feature/update-toolchain' into feature/update-docs 2015-01-18 17:01:37 +01:00
Manuel Friedli 9218b331f9 Merge branch 'develop' into feature/update-toolchain
Conflicts:
	VERSION
2015-01-18 16:53:58 +01:00
Manuel Friedli c1a17a315d Merge branch 'release' into develop
Conflicts:
	manifest.appcache
2015-01-18 16:52:08 +01:00
Manuel Friedli 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
Manuel Friedli 684f502cfd updated info/index.html 2015-01-18 16:44:28 +01:00
Manuel Friedli 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
Manuel Friedli 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
Manuel Friedli 0c7aebc200 added the first two test methods that actually work! 2015-01-16 17:50:23 +01:00
Manuel Friedli 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
Manuel Friedli d0a28a0097 Merge branch 'develop' into feature/update-toolchain 2015-01-15 17:23:26 +01:00
Manuel Friedli 9848cc4961 Merge branch 'feature/updatecharsetmetatag' into 'develop'
Feature/updatecharsetmetatag

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

See merge request !39
2015-01-15 17:15:48 +01:00
Manuel Friedli 5932eba348 also updated the info/index.html file 2015-01-15 15:07:53 +01:00
Manuel Friedli 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
Manuel Friedli 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
Manuel Friedli 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
Manuel Friedli fa79447259 fixed name of minified main js file 2015-01-13 20:16:32 +01:00
Manuel Friedli 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
Manuel Friedli 351d9b6534 fixed the path in the HTML file 2015-01-13 19:52:04 +01:00
Manuel Friedli c990752abc corrected absolutely silly syntax error in Gruntfile.js and added /dist
directory
2015-01-13 19:50:48 +01:00
Manuel Friedli 018367f1ce first step of gruntifying/nodifying/bowerifying the whole thing 2015-01-12 18:49:30 +01:00
Manuel Friedli 589751be5f increased version to next development cycle 2014-12-07 23:50:39 +01:00
Manuel Friedli b431a46dfb updated version to 7.0 2014-12-07 23:48:48 +01:00
Manuel Friedli 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
Manuel Friedli 3b497435ae support long named parameters 2014-12-07 23:45:33 +01:00
Manuel Friedli f952690dd1 added parameters for mode and status 2014-12-07 13:03:34 +01:00
Manuel Friedli a444094779 first version of URL parameters. l=language, t=theme. 2014-12-07 12:59:33 +01:00
Manuel Friedli 04b8fa02a8 updated version to 6.7-next for next dev cycle 2014-12-05 22:36:59 +01:00
Manuel Friedli 4c867f50a7 updated version to 6.7 2014-12-05 22:35:31 +01:00
Manuel Friedli 9669f25312 Merge branch 'develop' into release 2014-12-05 22:34:46 +01:00
Manuel Friedli 3deaafaebe Merge branch 'bugfix/#14' into 'develop'
Bugfix/#14

See merge request !36
2014-12-05 22:30:11 +01:00
Manuel Friedli 7dda927326 removed unnecessary variable; fixes #14 2014-12-05 22:29:01 +01:00
Manuel Friedli 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
Manuel Friedli 80864851eb minor re-formatting 2014-12-05 22:25:14 +01:00
Manuel Friedli 6690ea4978 added danish translation and updated documentation accordingly 2014-12-05 22:15:09 +01:00
78 changed files with 22299 additions and 764 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

3
.gitignore vendored
View File

@ -2,4 +2,5 @@
.idea
*.iml
atlassian-ide-plugin.xml
/node_modules/
/bower_components/

View File

@ -6,15 +6,9 @@
// Predefined globals whom JSHint will ignore.
"browser" : true, // Standard browser globals e.g. `window`, `document`.
"node" : true,
"jquery" : true,
"predef" : [
"suite",
"test"
],
// Development.
"debug" : false, // Allow debugger statements e.g. browser breakpoints.
"devel" : true, // Allow developments statements e.g. `console.log();`.
@ -25,7 +19,7 @@
// The Good Parts.
"asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons).
"laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without 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.
@ -53,6 +47,6 @@
"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" : false, // Check against strict whitespace and indentation rules.
"white" : true, // Check against strict whitespace and indentation rules.
"indent" : 0 // Specify indentation spacing
}
}

View File

176
README.md
View File

@ -1,58 +1,69 @@
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
------------------------------
## 1. Benötigte Dateien einbinden
* Binde folgende CSS-Datei im HTML-Dokument ein:
* uhr.css
* 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:
* uhr-black.css
* uhr-white.css
* uhr-red.css
* uhr-yellow.css
* uhr-green.css
* uhr-blue.css
* uhr-pink.css
* 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
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:
<link rel="stylesheet" type="text/css" href="uhr-black.css" data-class="black" data-name="Schwarz" />
```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:
* jquery-2.1.0.min.js (Falls nicht bereits vorhanden)
* jquery-ui-1.10.4.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 nach uhr.js ein, je nach dem, welche Sprachen deine Uhr unterstützen soll:
* uhr-de_CH.js
* uhr-de_CH_genau.js
* uhr-de.js
* uhr-en.js
* uhr-es.js
* uhr-fr.js
* uhr-it.js
* uhr-nl.js
* 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).
`uhr-de_CH_genau.js` ist eine Variante von Berndeutsch, bei der zur vollen Stunde zusätzlich das Wort "genau" angezeigt wird (also z.B. um 15:00 Uhr "ES ISCH GENAU DRÜ").
* 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)
2. Uhr-Element im HTML-Dokument einfügen
----------------------------------------
`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>
```html
<div id="uhrcontainer"></div>
```
3. Uhr per Javascript konfigurieren
-----------------------------------
## 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
* Breite ist 100% des Elternelements
* Farbe ist diejenige des ersten eingebundenen Theme-Stylesheets.
* Sprache ist Bärndütsch
* Die Uhr ist eingeschaltet
@ -62,50 +73,91 @@ Damit wird eine Uhr in der Standardkonfiguration erzeugt. Das heisst:
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 ändern kannst, verrät der nächste Abschnitt.
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.
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), 'white', 'red', 'yellow', 'green', 'blue' oder 'pink' (je nach eingebundenen Theme-Stylesheets)
language: 'de_CH', // 'de_CH' (default), 'de_CH_genau', 'de', 'en', 'es', 'fr', 'it' oder 'nl' (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
});
```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
-------------------
## 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
=====================
# 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

View File

@ -1 +1 @@
6.6
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()]
}

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,36 +13,26 @@ 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>Bärneruhr - Die Zeit im Wort</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<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="css/uhr.css"/>
<link rel="stylesheet" type="text/css" href="css/uhr-black.css" data-class="black" data-name="Schwarz"/>
<link rel="stylesheet" type="text/css" href="css/uhr-white.css" data-class="white" data-name="Weiss"/>
<link rel="stylesheet" type="text/css" href="css/uhr-red.css" data-class="red" data-name="Rot"/>
<link rel="stylesheet" type="text/css" href="css/uhr-yellow.css" data-class="yellow" data-name="Gelb"/>
<link rel="stylesheet" type="text/css" href="css/uhr-green.css" data-class="green" data-name="Grün"/>
<link rel="stylesheet" type="text/css" href="css/uhr-blue.css" data-class="blue" data-name="Blau"/>
<link rel="stylesheet" type="text/css" href="css/uhr-pink.css" data-class="pink" data-name="Pink"/>
<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="lib/jquery-2.1.0.min.js"></script>
<script type="text/javascript" src="lib/jquery-ui-1.10.4.custom.min.js"></script>
<script type="text/javascript" src="lib/jquery-cookie-1.4.0.js"></script>
<script type="text/javascript" src="js/uhr.js"></script>
<script type="text/javascript" src="js/uhr-de_CH.js"></script>
<script type="text/javascript" src="js/uhr-de_CH_genau.js"></script>
<script type="text/javascript" src="js/uhr-de.js"></script>
<script type="text/javascript" src="js/uhr-en.js"></script>
<script type="text/javascript" src="js/uhr-fr.js"></script>
<script type="text/javascript" src="js/uhr-it.js"></script>
<script type="text/javascript" src="js/uhr-es.js"></script>
<script type="text/javascript" src="js/uhr-nl.js"></script>
<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;
@ -53,7 +43,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<body style="padding:0;margin:0;">
<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/')" href="#">Read more!</a></p>
onclick="go('info/index.html')" href="#">Read more!</a></p>
<script type="text/javascript">
(function($) {
var width = $(window).width();

View File

@ -13,21 +13,18 @@ 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 - Informationen</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,user-scalable=yes,initial-scale=1"/>
<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="../dist/uhr.min.css"/>
<link rel="stylesheet" type="text/css" href="../dist/uhr-black.min.css" data-class="black"/>
<link rel="stylesheet" type="text/css" href="../dist/uhr-red.min.css" data-class="red"/>
<link rel="stylesheet" type="text/css" href="info.css"/>
<link rel="shortcut icon" type="image/png" href="../resources/favicon.png"/>
<script type="text/javascript" src="../lib/jquery-2.1.0.min.js"></script>
<script type="text/javascript" src="../lib/jquery-ui-1.10.4.custom.min.js"></script>
<script type="text/javascript" src="../lib/jquery-cookie-1.4.0.js"></script>
<script type="text/javascript" src="../js/uhr.js"></script>
<script type="text/javascript" src="../js/uhr-de_CH.js"></script>
<script type="text/javascript" src="../dist/libs.min.js"></script>
<script type="text/javascript" src="../dist/jquery.uhr.base.min.js"></script>
<script type="text/javascript">
function go(url) {
window.location = url;
@ -45,13 +42,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<li><a href="#requirements">Benötigte Bibliotheken</a></li>
<li><a href="#include-in-html">Einbinden in HTML</a>
<ol>
<li><a href="#js-and-css-in-head">Javascript- und CSS-Dateien im <code class="inline">&lt;head&gt;</code></a>
<li><a href="#js-and-css-in-head">Javascript- und CSS-Dateien im
<code class="inline">&lt;head&gt;</code></a>
</li>
<li><a href="#clock-element">Uhr-Element auf der Seite</a></li>
<li><a href="#initialize">Uhr initialisieren</a></li>
</ol>
</li>
<li><a href="#configuration">Konfiguration</a></li>
<li><a href="#urlparams">Konfiguration über die URL</a></li>
</ol>
</li>
<li><a href="#information">Informationen</a></li>
@ -62,14 +61,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<p>Hallo, Besucher!</p>
<p>Hier gibt's vertiefte Informationen über diese Uhr, die dir sagt, wie spät es ist. Hier erfährt du, wie du sie selber
auf deiner Website einbauen kannst. Denn das darfst du gerne tun, solange du dich dabei an die Regeln der <a
href="#license">Lizenz</a> hältst.</p>
<p>Hier gibt's vertiefte Informationen über diese Uhr, die dir sagt, wie spät es ist. Hier erfährt du, wie du
sie selber auf deiner Website einbauen kannst. Denn das darfst du gerne tun, solange du dich dabei an die
Regeln der <a href="#license">Lizenz</a> hältst.</p>
<p><a onclick="go('../')" href="#">Das interessiert mich nicht, ich will zurück zur grossen Uhr!</a></p>
<h2 id="the-clock">Die Uhr<a href="#toc" class="toclink">Zum Inhalt</a></h2>
<a onclick="go('../')" href="#">
<a onclick="go('../index.html')" href="#">
<div id="uhr1" style="display:inline-block"></div>
<div id="uhr2" style="display:inline-block"></div>
</a>
@ -77,60 +76,51 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<h3 id="requirements">Benötigte Bibliotheken<a href="#toc" class="toclink">Zum Inhalt</a></h3>
<ul>
<li><a href="http://jquery.com/download/">jQuery</a> (getestet mit Version 2.1.0)</li>
<li><a href="http://jqueryui.com/download/">jQuery-UI</a> (getestet mit Version 1.10.4) mit folgenden Komponenten:
<li><a href="http://jqueryui.com/download/">jQuery-UI</a> (getestet mit Version 1.10.4) mit folgenden
Komponenten:
<ul>
<li>core</li>
<li>widget</li>
</ul>
</li>
<li><a href="https://github.com/carhartl/jquery-cookie/releases">jQuery-cookie</a> (getestet mit Version 1.4.0)</li>
<li><a href="https://github.com/carhartl/jquery-cookie/releases">jQuery-cookie</a> (getestet mit Version
1.4.0)
</li>
</ul>
<h3 id="include-in-html">Einbinden in HTML<a href="#toc" class="toclink">Zum Inhalt</a></h3>
<h4 id="js-and-css-in-head">Javascript- und CSS-Dateien im <code>&lt;head&gt;</code><a href="#toc" class="toclink">Zum
<h4 id="js-and-css-in-head">Javascript- und CSS-Dateien im <code>&lt;head&gt;</code><a href="#toc"
class="toclink">Zum
Inhalt</a></h4>
<p>Füge folgende Zeilen im <code>&lt;head&gt;</code>-Tag deines HTML-Dokumentes ein. <strong>Beachte dabei, dass die
CSS-Dateien <em>vor</em> den
Javascript eingebunden werden</strong>.<br/>
<code>&lt;link rel="stylesheet" type="text/css" href="uhr.css" /&gt;
&lt;link rel="stylesheet" type="text/css" href="uhr-black.css" data-class="black" data-name="Schwarz" /&gt;
&lt;link rel="stylesheet" type="text/css" href="uhr-white.css" data-class="white" data-name="Weiss" /&gt;
&lt;link rel="stylesheet" type="text/css" href="uhr-red.css" data-class="red" data-name="Rot" /&gt;
&lt;link rel="stylesheet" type="text/css" href="uhr-yellow.css" data-class="yellow" data-name="Gelb" /&gt;
&lt;link rel="stylesheet" type="text/css" href="uhr-green.css" data-class="green" data-name="Grün" /&gt;
&lt;link rel="stylesheet" type="text/css" href="uhr-blue.css" data-class="blue" data-name="Blau" /&gt;
&lt;link rel="stylesheet" type="text/css" href="uhr-pink.css" data-class="pink" data-name="Pink" /&gt;
&lt;script type="text/javascript" src="jquery-2.1.0.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery-ui-1.10.4.custom.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery-cookie-1.4.0.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="uhr.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="uhr-de_CH.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="uhr-de_CH_genau.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="uhr-de.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="uhr-en.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="uhr-es.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="uhr-fr.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="uhr-it.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="uhr-nl.js"&gt;&lt;/script&gt;</code>
<p>Füge folgende Zeilen im <code>&lt;head&gt;</code>-Tag deines HTML-Dokumentes ein. <strong>Beachte dabei,
dass die CSS-Dateien <em>vor</em> den Javascript eingebunden werden</strong>.<br/>
<code>&lt;link rel="stylesheet" type="text/css" href="dist/uhr.min.css" /&gt;
&lt;link rel="stylesheet" type="text/css" href="dist/uhr-black.min.css" data-class="black" data-name="Schwarz" /&gt;
&lt;link rel="stylesheet" type="text/css" href="dist/uhr-white.min.css" data-class="white" data-name="Weiss" /&gt;
&lt;link rel="stylesheet" type="text/css" href="dist/uhr-red.min.css" data-class="red" data-name="Rot" /&gt;
&lt;link rel="stylesheet" type="text/css" href="dist/uhr-yellow.min.css" data-class="yellow" data-name="Gelb" /&gt;
&lt;link rel="stylesheet" type="text/css" href="dist/uhr-green.min.css" data-class="green" data-name="Grün" /&gt;
&lt;link rel="stylesheet" type="text/css" href="dist/uhr-blue.min.css" data-class="blue" data-name="Blau" /&gt;
&lt;link rel="stylesheet" type="text/css" href="dist/uhr-pink.min.css" data-class="pink" data-name="Pink" /&gt;
&lt;script type="text/javascript" src="dist/libs.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="dist/jquery.uhr.complete.min.js"&gt;&lt;/script&gt;</code>
</p>
<p>Von den Stylesheets zwingend ist <code>uhr.css</code> und mindestens eines der Farbschema-Stylesheets. Die
Attribute <code>data-class</code> bzw. <code>data-name</code> definieren dabei die im Stylesheet deklarierte
Klasse bzw. den im Auswahlmenu anzuzeigenden Namen. Der Name kann frei gewählt werden, die Style-Klasse muss mit
der im Stylesheet definierten übereinstimmen.</p>
Attribute <code>data-class</code> bzw. <code>data-name</code> definieren dabei die im Stylesheet
deklarierte Klasse bzw. den im Auswahlmenu anzuzeigenden Namen. Der Name kann frei gewählt werden, die
Style-Klasse muss mit der im Stylesheet definierten übereinstimmen.</p>
<p><code>uhr-de_CH_genau.js</code> ist eine Variante von Berndeutsch, bei der zur vollen Stunde zusätlich das Wort <code
class="inline">genau</code> angezeigt wird (also z.B. um 15:00 Uhr <code class="inline">ES ISCH GENAU
DRÜ</code>).</p>
<h4 id="clock-element">Uhr-Element auf der Seite<a href="#toc" class="toclink">Zum Inhalt</a></h4>
<p>Definiere an der Stelle, wo die Uhr angezeigt werden soll, ein leeres <code>&lt;div&gt;</code>-Element:<br/>
<p>Definiere an der Stelle, wo die Uhr angezeigt werden soll, ein leeres
<code>&lt;div&gt;</code>-Element:<br/>
<code>&lt;div id="meine-uhr"&gt;&lt;/div&gt;</code>
</p>
<h4 id="initialize">Uhr initialisieren<a href="#toc" class="toclink">Zum Inhalt</a></h4>
<p>Definiere im HTML-Dokument (<code>&lt;head&gt;</code> oder <code>&lt;body&gt;</code>) ein Javascript-Snippet, um die
Uhr zu initialisieren:<br/>
<p>Definiere im HTML-Dokument (<code>&lt;head&gt;</code> oder <code>&lt;body&gt;</code>) ein
Javascript-Snippet, um die Uhr zu initialisieren:<br/>
<code>&lt;script type="text/javascript"&gt;
jQuery(document).ready(function() {
jQuery('#meine-uhr').uhr();
@ -138,11 +128,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
&lt;/script&gt;</code>
</p>
<p>Die Uhr wird so in der Standardkonfiguration angezeigt, das heisst: Berndeutsche Sprache, in der Farbe der ersten
eingebundenen CSS-Datei (im Beispiel also Schwarz), eingeschaltet, Breite 100% des Elternelementes. Wenn dies
nicht deinen Bedürfnissen entspricht, lässt sich die Uhr wie im folgenden Abschnitt beschrieben konfigurieren.
Die Konfiguration wird der <code>.uhr()</code>-Methode als JSON-Objekt übergeben, beispielsweise so:<br/>
<code>jQuery('#uhr').uhr({
<p>Die Uhr wird so in der Standardkonfiguration angezeigt, das heisst: Berndeutsche Sprache, in der Farbe der
ersten eingebundenen CSS-Datei (im Beispiel also Schwarz), eingeschaltet, Stunden/Minuten-Modus, Breite
100% des Elternelementes. Wenn dies nicht deinen Bedürfnissen entspricht, lässt sich die Uhr wie im
folgenden Abschnitt beschrieben konfigurieren. Die Konfiguration wird der <code>.uhr()</code>-Methode als
JSON-Objekt übergeben, beispielsweise so:<br/>
<code>jQuery('#meine-uhr').uhr({
width: '200px',
theme: 'red'
});</code>
@ -153,29 +144,40 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<p>Es existieren die folgenden Konfigurationsoptionen:</p>
<dl>
<dt><code>autoresize</code></dt>
<dd>Gibt an, ob die Uhr ihre Grösse dynamisch anpassen soll, wenn das Elternelement seine Grösse ändert, oder ob
sie immer die anfängliche Grösse behält. Mögliche Werte sind <code>true</code> oder <code>false</code>.
<dd>Gibt an, ob die Uhr ihre Grösse dynamisch anpassen soll, wenn das Elternelement seine Grösse ändert,
oder ob sie immer die anfängliche Grösse behält. Mögliche Werte sind <code>true</code> oder <code>false</code>.
<br/>Typ: boolean
<br/>Default: <code>true</code></dd>
<dt><code>controls</code></dt>
<dd>Gibt an, ob die Steuerelemente zur Auswahl von Farbe und Sprache und der Ein-/Ausschalter angezeigt werden
sollen. Mögliche Werte sind <code>true</code> oder <code>false</code>.
<dd>Gibt an, ob die Steuerelemente zur Auswahl von Farbe und Sprache und der Ein-/Ausschalter angezeigt
werden sollen. Mögliche Werte sind <code>true</code> oder <code>false</code>.
<br/>Typ: boolean
<br/>Default: <code>true</code></dd>
<dt><code>force</code></dt>
<dd>Legt fest, ob die in der Konfiguration angegebenen Werte allfällig in einem Browser-Cookie gespeicherte
Einstellungen überschreiben sollen oder nicht. Mögliche Werte sind <code>true</code> (Konfiguration
überschreibt Cookie-Werte) oder <code>false</code> (Cookie-Werte haben Vorrang).
<dd>Legt fest, ob die in der Konfiguration angegebenen Werte allfällig in einem Browser-Cookie
gespeicherte Einstellungen überschreiben sollen oder nicht. Mögliche Werte sind <code>true</code>
(Konfiguration überschreibt Cookie-Werte) oder <code>false</code> (Cookie-Werte haben Vorrang).
<br/>Typ: boolean
<br/>Default: <code>false</code></dd>
<dt><code>language</code></dt>
<dd>Die anfänglich ausgewählte Sprache als String. Welche Sprachen unterstützt werden, hängt davon ab, welche
Sprachdateien eingebunden werden.
<dd>Die anfänglich ausgewählte Sprache als String. Mögliche Werte sind:
<ul>
<li>de_CH</li>
<li>de_CH_genau</li>
<li>de</li>
<li>dk</li>
<li>en</li>
<li>es</li>
<li>fr</li>
<li>it</li>
<li>nl</li>
<li>pt</li>
</ul>
<br/>Typ: String
<br/>Default: <code>'de_CH'</code></dd>
<dt><code>mode</code></dt>
<dd>Der Zeit-Anzeigemodus, entweder <code>'normal'</code> (aktuelle Zeit in Worten anzeigen als "ES IST VIER
UHR") oder <code>'seconds'</code> (aktuelle Sekunden als grosse Ziffern anzeigen).
<dd>Der Zeit-Anzeigemodus, entweder <code>'normal'</code> (aktuelle Zeit in Worten anzeigen als "ES IST
VIER UHR") oder <code>'seconds'</code> (aktuelle Sekunden als grosse Ziffern anzeigen).
<br/>Typ: String
<br/>Default: <code>'normal'</code></dd>
<dt><code>status</code></dt>
@ -183,14 +185,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<br/>Typ: String
<br/> Default: <code>'on'</code></dd>
<dt><code>theme</code></dt>
<dd>Die anfänglich ausgewählte Farbe der Uhr. Welche Farben unterstützt werden, hängt davon ab, welche
CSS-Dateien eingebunden werden.
<dd>Die anfänglich ausgewählte Farbe der Uhr. Abhängig davon, welche CSS-Dateien eingebunden wurden,
werden folgende Werte unterstützt:
<ul>
<li>black</li>
<li>white</li>
<li>red</li>
<li>yellow</li>
<li>green</li>
<li>blue</li>
<li>pink</li>
</ul>
<br/>Typ: String
<br/>Default: Farbe der ersten eingebundenen CSS-Datei
</dd>
<dt><code>width</code></dt>
<dd>Die Breite der Uhr als CSS-String, z.B. <code>'50%'</code>, <code>'120px'</code> oder <code>'2.8em'</code>.
Die Höhe passt sich automatisch der Breite an, so dass die Uhr immer quadratisch ist.
<dd>Die Breite der Uhr als CSS-String, z.B. <code>'50%'</code>, <code>'120px'</code> oder
<code>'2.8em'</code>. Die Höhe passt sich automatisch der Breite an, so dass die Uhr immer quadratisch
ist.
<br/>Typ: String
<br/>Default: <code>'100%'</code></dd>
</dl>
@ -215,25 +227,76 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
mode: 'seconds'
});
})(jQuery);
</script>
<h2 id="urlparams">Konfiguration über die URL<a href="#toc" class="toclink">Zum Inhalt</a></h2>
<p>Es ist möglich, die Uhr über URL-Parameter zu konfigurieren. Der Parameterstring wird mit einem #
abgetrennt an die URL angehängt, einzelne Parameter trennst du mit &amp;. Folgende Parameter werden
unterstützt:</p>
<dl>
<dt><code>l</code> oder <code>language</code></dt>
<dd>Gibt die Sprache an, in welcher die Uhr angezeigt werden soll. Mögliche Werte sind:
<ul>
<li>de_CH</li>
<li>de_CH_genau</li>
<li>de</li>
<li>dk</li>
<li>en</li>
<li>es</li>
<li>fr</li>
<li>it</li>
<li>nl</li>
<li>pt</li>
</ul>
</dd>
<dt><code>t</code> oder <code>theme</code></dt>
<dd>Gibt die Farbe an, in welcher die Uhr angezeigt werden soll. Abhängig davon, welche CSS-Dateien
eingebunden wurden, werden folgende Werte unterstützt:
<ul>
<li>black</li>
<li>white</li>
<li>red</li>
<li>yellow</li>
<li>green</li>
<li>blue</li>
<li>pink</li>
</ul>
</dd>
<dt><code>m</code> oder <code>mode</code></dt>
<dd>Legt fest, ob die Uhr Stunden/Minuten oder Sekunden anzeigt. Mögliche Werte sind <code>normal</code>
für Stunden/Minutenmodus und <code>seconds</code> für den Sekundenmodus.
</dd>
<dt><code>s</code> oder <code>status</code></dt>
<dd>Bestimmt, ob die Uhr eingeschaltet oder ausgeschaltet sein soll. Mögliche Werte sind <code>on</code>
(eingeschaltet) oder <code>off</code> (ausgeschaltet).
</dd>
</dl>
<p>Eine URL kann beispielsweise so aussehen, um eine gelbe Uhr in italienischer Sprache, Stunden/Minutenmodus
und eingeschaltet anzuzeigen:<br/>
<a href="http://bärneruhr.ch#l=it&t=yellow&m=normal&s=on">http://bärneruhr.ch#l=it&t=yellow&m=normal&s=on</a>
</p>
<h2 id="information">Informationen<a href="#toc" class="toclink">Zum Inhalt</a></h2>
<p>Programmiert von <a href="mailto:manuel@fritteli.ch">Manuel Friedli</a> mit Inspiration von <a
href="http://www.qlocktwo.com/">QLOCKTWO</a>.<br/>
Diese Uhr ist aus Freude am Programmieren und am Konzept einer die Zeit in Worten ausdrückenden Uhr entstanden.
Sollte daraus jemandem Schaden oder ein gravierender Nachteil erwachsen, so soll sich diese Person bei mir melden
und wir werden bestimmt eine Lösung finden, die für alle beteiligten angemessen ist. Allen anderen Personen
wünsche ich viel Freude mit der Zeit im Wort.</p>
href="http://www.qlocktwo.com/">QLOCKTWO</a>.<br/>
Diese Uhr ist aus Freude am Programmieren und am Konzept einer die Zeit in Worten ausdrückenden Uhr
entstanden. Sollte daraus jemandem Schaden oder ein gravierender Nachteil erwachsen, so soll sich diese
Person bei mir melden und wir werden bestimmt eine Lösung finden, die für alle beteiligten angemessen ist.
Allen anderen Personen wünsche ich viel Freude mit der Zeit im Wort.</p>
<p>Der Quellcode ist frei zugänglich unter <a href="https://gittr.ch/manuel/uhr">https://gittr.ch/manuel/uhr</a>.</p>
<p>Der Quellcode ist frei zugänglich unter <a
href="https://gittr.ch/manuel/uhr">https://gittr.ch/manuel/uhr</a>.</p>
<p>Detaillierte Informationen zur Verwendung und Konfiguration findest du in der <a href="../README.md">README.md</a>.
</p>
<h2 id="license">Lizenzbestimmungen<a href="#toc" class="toclink">Zum Inhalt</a></h2>
<p>Der komplette Sourcecode ist unter der GNU GPL 3.0 lizenziert und darf nach deren Vorgaben verwendet, kopiert,
weitergegeben und verändert werden. Die GNU GPL 3.0 findest Du unter folgendem Link: <a
href="https://www.gnu.org/licenses/gpl-3.0">GNU GPL 3.0</a>. Und direkt hier:</p>
<p>Der komplette Sourcecode ist unter der GNU GPL 3.0 lizenziert und darf nach deren Vorgaben verwendet,
kopiert, weitergegeben und verändert werden. Die GNU GPL 3.0 findest du unter folgendem Link: <a
href="https://www.gnu.org/licenses/gpl-3.0">GNU GPL 3.0</a>. Und direkt hier:</p>
<h3 id="gpl-v3" style="text-align: center;">GNU GENERAL PUBLIC LICENSE</h3>

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,34 +1,25 @@
CACHE MANIFEST
# 6.6
# Version 9.0.0-dev.0
css/uhr.css
css/uhr-black.css
css/uhr-blue.css
css/uhr-green.css
css/uhr-pink.css
css/uhr-red.css
css/uhr-white.css
css/uhr-yellow.css
/
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
js/uhr.js
js/uhr-de.js
js/uhr-de_CH.js
js/uhr-de_CH_genau.js
js/uhr-en.js
js/uhr-es.js
js/uhr-fr.js
js/uhr-it.js
js/uhr-nl.js
lib/jquery-2.1.0.min.js
lib/jquery-cookie-1.4.0.js
lib/jquery-ui-1.10.4.custom.min.js
resources/apple-touch-icon-precomposed.png
resources/close.png
resources/favicon.png
resources/settings.png
resources/uhr.woff
COPYING
README.md
VERSION
index.html
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"
}
}

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));

View File

@ -23,7 +23,6 @@
var vijf = {1: [8, 9, 10, 11]};
var tien = {2: [1, 2, 3, 4]};
var kwart = {3: [7, 8, 9, 10, 11]};
var vijftien = [vijf, tien];
var uur = {10: [9, 10, 11]};
var layout = {

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));

View File

@ -12,17 +12,17 @@
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($) {
(function ($) {
'use strict';
var uhrGlobals = {
"id": 0,
"languages": [],
"themes": [],
registerLanguage: function registerLanguage(code, language) {
var alreadyExists = uhrGlobals.languages.some(function(element) {
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 + "'!");
"' because it is already registered for language '" + element.language + "'!");
return true;
}
return false;
@ -35,7 +35,7 @@
};
// auto-detect themes
$('link[rel=stylesheet]').each(function(index, item) {
$('link[rel=stylesheet]').each(function (index, item) {
var styleSheet = $(item);
var styleClass = styleSheet.attr('data-class');
if (styleClass !== undefined) {
@ -52,9 +52,12 @@
}
// 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.timer = window.setInterval(function () {
this.options.time = new Date();
update.bind(this)();
}.bind(this), 1000);
@ -77,388 +80,25 @@
this.start();
}
};
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');
};
var language;
// private interface methods
var create = function create() {
this.id = uhrGlobals.id++;
this.timer = null;
this.currentMinute = -1;
var userTime = this.options.time;
if (this.options.time === undefined) {
this.options.time = new Date();
}
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
var 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);
}
};
var 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 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
var isOn = function isOn() {
return this.timer !== null;
};
var 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 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);
}
};
var highlight = function highlight(itemClass) {
this.element.find('.item.' + itemClass).addClass('active');
};
var clear = function clear() {
this.element.find('.item').removeClass('active');
};
var getSecond = function getSecond(date) {
if (typeof language.bind(this)().getSeconds === 'function') {
return language.bind(this)().getSeconds(date);
}
return date.getSeconds();
};
var getDotMinute = function getDotMinute(date) {
if (typeof language.bind(this)().getDotMinute === 'function') {
return language.bind(this)().getDotMinute(date);
}
var minutes = date.getMinutes();
return minutes % 5;
};
var getCoarseMinute = function getCoarseMinute(date) {
if (typeof language.bind(this)().getCoarseMinute === 'function') {
return language.bind(this)().getCoarseMinute(date);
}
return date.getMinutes();
};
var 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;
};
var 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
});
$.fritteli.uhr.register = uhrGlobals.registerLanguage;
/**
* 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.
* 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 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;
}
function Letter(value, style) {
var myValue = value;
var myStyle = style || '';
this.addStyle = function (style) {
if (myStyle === '') {
myStyle = style;
} else {
myStyle += ' ' + style;
}
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');
});
};
this.toString = function () {
return '<span class="item letter ' + myStyle + '">' + myValue + '</span>';
};
}
@ -607,7 +247,7 @@
8: [10],
9: [8, 9]
};
var seconds= {
var seconds = {
"0": [vorne0, hinten0],
"1": [vorne0, hinten1],
"2": [vorne0, hinten2],
@ -670,10 +310,21 @@
"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) {
input.forEach(function (item) {
parseObject(letters, styleClass, item);
});
} else {
@ -682,23 +333,12 @@
}
}
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 parseTimeDefinition(letters, styleClass, definition) {
if (typeof definition !== 'undefined' && definition !== null) {
Object.keys(definition).forEach(function(listString) {
Object.keys(definition).forEach(function (listString) {
var array = listString.split(',');
var highlightLetters = definition[listString];
array.forEach(function(item) {
array.forEach(function (item) {
parseArrayOrObject(letters, styleClass + item, highlightLetters);
});
});
@ -707,7 +347,7 @@
this.parse = function parse() {
var letters = [];
layout.letters.forEach(function(string) {
layout.letters.forEach(function (string) {
var line = [];
for (var c = 0; c < string.length; c++) {
var character = new Letter(string[c]);
@ -719,7 +359,7 @@
if (typeof layout.seconds !== 'undefined' && layout.seconds !== null) {
parseTimeDefinition(letters, 'second', layout.seconds);
} else {
parseTimeDefinition(letters, 'second', seconds)
parseTimeDefinition(letters, 'second', seconds);
}
parseTimeDefinition(letters, 'minute', layout.minutes);
parseTimeDefinition(letters, 'hour', layout.hours);
@ -728,22 +368,449 @@
}
/**
* 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.
* 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 Letter(value, style) {
var myValue = value;
var myStyle = style || '';
this.addStyle = function(style) {
if (myStyle === '') {
myStyle = style;
} else {
myStyle += ' ' + style;
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;
}
}
};
this.toString = function() {
return '<span class="item letter ' + myStyle + '">' + myValue + '</span>';
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
}

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>

View File

@ -1,28 +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</title>
<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="mocha"></div>
<script src="lib/mocha.js"></script>
<script src="lib/chai.js"></script>
<script>mocha.setup('tdd');</script>
<script src="../lib/jquery-2.1.0.min.js"></script>
<script src="../lib/jquery-ui-1.10.4.custom.min.js"></script>
<script src="../lib/jquery-cookie-1.4.0.js"></script>
<script src="../js/uhr.js"></script>
<script src="../js/uhr-de_CH.js"></script>
<script src="test.js"></script>
<div id="u"></div>
<script>
mocha.checkLeaks();
mocha.run();
// $('#u').uhr({'width':'200px'});
<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>
</html>

View File

@ -1,5 +1,141 @@
suite('Bärneruhr', function() {
"use strict";
test('dummy', function() {
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');
});
});