From 31b4446eff4f8f5b38e01d0fbae7efa2d753cbd9 Mon Sep 17 00:00:00 2001 From: Sanjay B Date: Mon, 23 Sep 2013 00:33:33 +0530 Subject: [PATCH] input type date polyfill --- itf/static/js/html5Forms.js/.DS_Store | Bin 0 -> 6148 bytes itf/static/js/html5Forms.js/.git/HEAD | 1 + itf/static/js/html5Forms.js/.git/config | 11 + itf/static/js/html5Forms.js/.git/description | 1 + .../.git/hooks/applypatch-msg.sample | 15 + .../.git/hooks/commit-msg.sample | 24 + .../.git/hooks/post-update.sample | 8 + .../.git/hooks/pre-applypatch.sample | 14 + .../.git/hooks/pre-commit.sample | 50 + .../.git/hooks/pre-rebase.sample | 169 + .../.git/hooks/prepare-commit-msg.sample | 36 + .../js/html5Forms.js/.git/hooks/update.sample | 128 + itf/static/js/html5Forms.js/.git/index | Bin 0 -> 33184 bytes itf/static/js/html5Forms.js/.git/info/exclude | 6 + itf/static/js/html5Forms.js/.git/logs/HEAD | 1 + .../html5Forms.js/.git/logs/refs/heads/master | 1 + ...b57022db6c94f63505fcfcd8f857463e5998fe.idx | Bin 0 -> 18208 bytes ...57022db6c94f63505fcfcd8f857463e5998fe.pack | Bin 0 -> 808102 bytes itf/static/js/html5Forms.js/.git/packed-refs | 2 + .../js/html5Forms.js/.git/refs/heads/master | 1 + .../.git/refs/remotes/origin/HEAD | 1 + itf/static/js/html5Forms.js/.project | 11 + itf/static/js/html5Forms.js/README.txt | 43 + itf/static/js/html5Forms.js/shared/.DS_Store | Bin 0 -> 6148 bytes .../js/html5Forms.js/shared/css/number.css | 35 + .../js/html5Forms.js/shared/css/slider.css | 169 + .../js/html5Forms.js/shared/css/slider_ie.css | 41 + .../shared/css/useragentmanExample.css | 114 + .../js/html5Forms.js/shared/css/visibleIf.css | 23 + .../shared/images/slider/slider-1.png | Bin 0 -> 1098 bytes .../images/slider/slider-disabled-1.png | Bin 0 -> 935 bytes .../shared/images/slider/slider-disabled.png | Bin 0 -> 704 bytes .../shared/images/slider/slider.png | Bin 0 -> 780 bytes .../js/html5Forms.js/shared/js/.DS_Store | Bin 0 -> 6148 bytes .../html5Forms.js/shared/js/EventHelpers.js | 486 +++ .../js/html5Forms.js/shared/js/Timer.js | 137 + .../shared/js/autocomplete/CVS/Entries | 3 + .../shared/js/autocomplete/CVS/Repository | 1 + .../shared/js/autocomplete/CVS/Root | 1 + .../shared/js/autocomplete/autocomplete.js | 387 ++ .../shared/js/autocomplete/index.html | 34 + .../turnOffInExplorer/CVS/Entries | 1 + .../turnOffInExplorer/CVS/Repository | 1 + .../autocomplete/turnOffInExplorer/CVS/Root | 1 + .../autocomplete/turnOffInExplorer/index.html | 30 + .../shared/js/autocomplete/xml/CVS/Entries | 1 + .../shared/js/autocomplete/xml/CVS/Repository | 1 + .../shared/js/autocomplete/xml/CVS/Root | 1 + .../shared/js/autocomplete/xml/config.xml | 29 + .../js/html5Forms.js/shared/js/cssQuery-p.js | 6 + .../shared/js/frequency-decoder.com/slider.js | 797 ++++ .../js/html5Forms.js/shared/js/html5.js | 121 + .../js/html5Forms.js/shared/js/html5Forms.js | 892 +++++ .../html5Forms.js/shared/js/html5Widgets.js | 1417 +++++++ .../shared/js/jscalendar-1.0/.DS_Store | Bin 0 -> 6148 bytes .../shared/js/jscalendar-1.0/ChangeLog | 761 ++++ .../shared/js/jscalendar-1.0/README | 33 + .../shared/js/jscalendar-1.0/altblue.html | 23 + .../bugtest-hidden-selects.html | 108 + .../js/jscalendar-1.0/calendar-blue.css | 232 ++ .../js/jscalendar-1.0/calendar-blue2.css | 236 ++ .../js/jscalendar-1.0/calendar-brown.css | 225 ++ .../js/jscalendar-1.0/calendar-green.css | 229 ++ .../js/jscalendar-1.0/calendar-handler.js | 42 + .../calendar-handler_stripped.js | 1 + .../shared/js/jscalendar-1.0/calendar-old.js | 1843 +++++++++ .../js/jscalendar-1.0/calendar-setup.js | 203 + .../jscalendar-1.0/calendar-setup_stripped.js | 21 + .../js/jscalendar-1.0/calendar-system.css | 251 ++ .../shared/js/jscalendar-1.0/calendar-tas.css | 239 ++ .../js/jscalendar-1.0/calendar-win2k-1.css | 271 ++ .../js/jscalendar-1.0/calendar-win2k-2.css | 271 ++ .../jscalendar-1.0/calendar-win2k-cold-1.css | 265 ++ .../jscalendar-1.0/calendar-win2k-cold-2.css | 271 ++ .../shared/js/jscalendar-1.0/calendar.js | 1853 +++++++++ .../shared/js/jscalendar-1.0/calendar.php | 124 + .../js/jscalendar-1.0/calendar_stripped.js | 14 + .../shared/js/jscalendar-1.0/dayinfo.html | 109 + .../jscalendar-1.0/doc/html/field-button.jpg | Bin 0 -> 2509 bytes .../jscalendar-1.0/doc/html/reference-Z-S.css | 195 + .../js/jscalendar-1.0/doc/html/reference.css | 34 + .../js/jscalendar-1.0/doc/html/reference.html | 1739 +++++++++ .../js/jscalendar-1.0/doc/reference.pdf | Bin 0 -> 265125 bytes .../shared/js/jscalendar-1.0/img.gif | Bin 0 -> 223 bytes .../shared/js/jscalendar-1.0/index.html | 333 ++ .../js/jscalendar-1.0/lang/calendar-af.js | 39 + .../js/jscalendar-1.0/lang/calendar-al.js | 101 + .../js/jscalendar-1.0/lang/calendar-bg.js | 124 + .../jscalendar-1.0/lang/calendar-big5-utf8.js | 123 + .../js/jscalendar-1.0/lang/calendar-big5.js | 123 + .../js/jscalendar-1.0/lang/calendar-br.js | 108 + .../js/jscalendar-1.0/lang/calendar-ca.js | 123 + .../js/jscalendar-1.0/lang/calendar-cn.js | 123 + .../jscalendar-1.0/lang/calendar-cs-utf8.js | 65 + .../js/jscalendar-1.0/lang/calendar-cs-win.js | 65 + .../js/jscalendar-1.0/lang/calendar-cs.js | 65 + .../js/jscalendar-1.0/lang/calendar-da.js | 123 + .../js/jscalendar-1.0/lang/calendar-de.js | 124 + .../js/jscalendar-1.0/lang/calendar-du.js | 45 + .../js/jscalendar-1.0/lang/calendar-el.js | 89 + .../js/jscalendar-1.0/lang/calendar-en.js | 129 + .../js/jscalendar-1.0/lang/calendar-es.js | 129 + .../js/jscalendar-1.0/lang/calendar-fi.js | 98 + .../js/jscalendar-1.0/lang/calendar-fr.js | 129 + .../jscalendar-1.0/lang/calendar-he-utf8.js | 123 + .../js/jscalendar-1.0/lang/calendar-he.js | 123 + .../js/jscalendar-1.0/lang/calendar-hr-old.js | Bin 0 -> 3088 bytes .../jscalendar-1.0/lang/calendar-hr-utf8.js | 49 + .../js/jscalendar-1.0/lang/calendar-hr.js | 49 + .../js/jscalendar-1.0/lang/calendar-hu.js | 124 + .../js/jscalendar-1.0/lang/calendar-it.js | 124 + .../js/jscalendar-1.0/lang/calendar-jp.js | 45 + .../jscalendar-1.0/lang/calendar-ko-utf8.js | 120 + .../js/jscalendar-1.0/lang/calendar-ko.js | 120 + .../js/jscalendar-1.0/lang/calendar-ko.old.js | 120 + .../jscalendar-1.0/lang/calendar-lt-utf8.js | 114 + .../js/jscalendar-1.0/lang/calendar-lt.js | 114 + .../js/jscalendar-1.0/lang/calendar-lt.old.js | 114 + .../js/jscalendar-1.0/lang/calendar-lv.js | 123 + .../js/jscalendar-1.0/lang/calendar-nl.js | 73 + .../js/jscalendar-1.0/lang/calendar-no.js | 114 + .../jscalendar-1.0/lang/calendar-pl-utf8.js | 93 + .../js/jscalendar-1.0/lang/calendar-pl.js | 93 + .../js/jscalendar-1.0/lang/calendar-pl.old.js | 56 + .../js/jscalendar-1.0/lang/calendar-pt.js | 123 + .../js/jscalendar-1.0/lang/calendar-ro.js | 66 + .../js/jscalendar-1.0/lang/calendar-ru.js | 123 + .../jscalendar-1.0/lang/calendar-ru_win_.js | 123 + .../js/jscalendar-1.0/lang/calendar-si.js | 94 + .../js/jscalendar-1.0/lang/calendar-sk.js | 99 + .../js/jscalendar-1.0/lang/calendar-sp.js | 110 + .../js/jscalendar-1.0/lang/calendar-sv.js | 93 + .../js/jscalendar-1.0/lang/calendar-tr.js | 58 + .../js/jscalendar-1.0/lang/calendar-zh.js | 119 + .../shared/js/jscalendar-1.0/lang/cn_utf8.js | 123 + .../shared/js/jscalendar-1.0/menuarrow.gif | Bin 0 -> 68 bytes .../shared/js/jscalendar-1.0/menuarrow2.gif | Bin 0 -> 49 bytes .../js/jscalendar-1.0/multiple-dates.html | 82 + .../js/jscalendar-1.0/release-notes.html | 435 +++ .../shared/js/jscalendar-1.0/simple-1.html | 244 ++ .../shared/js/jscalendar-1.0/simple-2.html | 108 + .../shared/js/jscalendar-1.0/simple-3.html | 130 + .../jscalendar-1.0/skins/aqua/active-bg.gif | Bin 0 -> 89 bytes .../js/jscalendar-1.0/skins/aqua/dark-bg.gif | Bin 0 -> 85 bytes .../js/jscalendar-1.0/skins/aqua/hover-bg.gif | Bin 0 -> 89 bytes .../jscalendar-1.0/skins/aqua/menuarrow.gif | Bin 0 -> 49 bytes .../jscalendar-1.0/skins/aqua/normal-bg.gif | Bin 0 -> 110 bytes .../jscalendar-1.0/skins/aqua/rowhover-bg.gif | Bin 0 -> 110 bytes .../jscalendar-1.0/skins/aqua/status-bg.gif | Bin 0 -> 116 bytes .../js/jscalendar-1.0/skins/aqua/theme.css | 236 ++ .../js/jscalendar-1.0/skins/aqua/title-bg.gif | Bin 0 -> 116 bytes .../js/jscalendar-1.0/skins/aqua/today-bg.gif | Bin 0 -> 1122 bytes .../jscalendar-1.0/skins/tiger/active-bg.gif | Bin 0 -> 50 bytes .../js/jscalendar-1.0/skins/tiger/dark-bg.gif | Bin 0 -> 50 bytes .../jscalendar-1.0/skins/tiger/hover-bg.gif | Bin 0 -> 50 bytes .../jscalendar-1.0/skins/tiger/menuarrow.gif | Bin 0 -> 49 bytes .../jscalendar-1.0/skins/tiger/normal-bg.gif | Bin 0 -> 50 bytes .../skins/tiger/rowhover-bg.gif | Bin 0 -> 50 bytes .../jscalendar-1.0/skins/tiger/status-bg.gif | Bin 0 -> 149 bytes .../js/jscalendar-1.0/skins/tiger/theme.css | 242 ++ .../jscalendar-1.0/skins/tiger/title-bg.gif | Bin 0 -> 149 bytes .../js/jscalendar-1.0/test-position.html | 40 + .../shared/js/jscalendar-1.0/test.php | 116 + .../html5Forms.js/shared/js/jscolor/arrow.gif | Bin 0 -> 66 bytes .../html5Forms.js/shared/js/jscolor/cross.gif | Bin 0 -> 83 bytes .../html5Forms.js/shared/js/jscolor/demo.html | 12 + .../js/html5Forms.js/shared/js/jscolor/hs.png | Bin 0 -> 2684 bytes .../js/html5Forms.js/shared/js/jscolor/hv.png | Bin 0 -> 2865 bytes .../shared/js/jscolor/jscolor.js | 840 ++++ .../js/modernizr.com/Modernizr-2.5.3.forms.js | 4 + .../js/modernizr.com/modernizr-1.5.min.js | 28 + .../js/html5Forms.js/shared/js/visibleIf.js | 1100 ++++++ .../shared/js/weston.ruter.net/.DS_Store | Bin 0 -> 6148 bytes .../js/weston.ruter.net/webforms2/.classpath | 7 + .../js/weston.ruter.net/webforms2/.mymetadata | 13 + .../js/weston.ruter.net/webforms2/.project | 38 + .../webforms2/DTD/xhtml1-strict-wf2.dtd | 1075 ++++++ .../webforms2/DTD/xhtml1-transitional-wf2.dtd | 1294 +++++++ .../webforms2/WebRoot/META-INF/MANIFEST.MF | 3 + .../webforms2/WebRoot/WEB-INF/web.xml | 10 + .../webforms2/WebRoot/index.jsp | 26 + .../js/weston.ruter.net/webforms2/pack.pl | 269 ++ .../js/weston.ruter.net/webforms2/project.kpf | 7 + .../wf2-validation-msie_init.js | 4 + .../wf2-validation-testcases/001.html | 114 + .../wf2-validation-testcases/002.html | 12 + .../wf2-validation-testcases/003.html | 115 + .../wf2-validation-testcases/demo.css | 44 + .../wf2-validation-testcases/jsUnitCore.js | 422 +++ .../proto-validation/wf2-validation.css | 60 + .../proto-validation/wf2-validation.js | 659 ++++ .../js/weston.ruter.net/webforms2/readme.txt | 3 + .../webforms2/task-queue.html | 198 + .../webforms2/testsuite/001.html | 64 + .../webforms2/testsuite/002.html | 71 + .../webforms2/testsuite/003.html | 65 + .../webforms2/testsuite/004.html | 310 ++ .../webforms2/testsuite/005.html | 259 ++ .../webforms2/testsuite/006.html | 228 ++ .../webforms2/testsuite/007.html | 153 + .../webforms2/testsuite/008.html | 82 + .../webforms2/testsuite/009.html | 79 + .../webforms2/testsuite/010.html | 73 + .../webforms2/testsuite/011.html | 121 + .../webforms2/testsuite/012.html | 102 + .../webforms2/testsuite/013.html | 116 + .../webforms2/testsuite/013/0.gif | Bin 0 -> 5123 bytes .../webforms2/testsuite/013/1.gif | Bin 0 -> 4187 bytes .../webforms2/testsuite/013/10.gif | Bin 0 -> 4295 bytes .../webforms2/testsuite/013/11.gif | Bin 0 -> 6372 bytes .../webforms2/testsuite/013/12.gif | Bin 0 -> 5762 bytes .../webforms2/testsuite/013/13.gif | Bin 0 -> 7221 bytes .../webforms2/testsuite/013/14.gif | Bin 0 -> 6733 bytes .../webforms2/testsuite/013/15.gif | Bin 0 -> 7294 bytes .../webforms2/testsuite/013/16.gif | Bin 0 -> 3479 bytes .../webforms2/testsuite/013/2.gif | Bin 0 -> 4846 bytes .../webforms2/testsuite/013/3.gif | Bin 0 -> 4460 bytes .../webforms2/testsuite/013/4.gif | Bin 0 -> 4882 bytes .../webforms2/testsuite/013/5.gif | Bin 0 -> 5113 bytes .../webforms2/testsuite/013/6.gif | Bin 0 -> 5259 bytes .../webforms2/testsuite/013/7.gif | Bin 0 -> 5219 bytes .../webforms2/testsuite/013/8.gif | Bin 0 -> 5759 bytes .../webforms2/testsuite/013/9.gif | Bin 0 -> 4813 bytes .../webforms2/testsuite/014.html | 69 + .../webforms2/testsuite/015.html | 78 + .../webforms2/testsuite/016.html | 57 + .../webforms2/testsuite/017.html | 324 ++ .../webforms2/testsuite/018.html | 115 + .../webforms2/testsuite/019-colors.xml | 7 + .../webforms2/testsuite/019-formdata.xml | 16 + .../testsuite/019-statesAndProvinces.xml | 11 + .../webforms2/testsuite/019.html | 405 ++ .../webforms2/testsuite/020.html | 84 + .../webforms2/testsuite/021.html | 79 + .../webforms2/testsuite/index.html | 45 + .../webforms2/testsuite/testcase.css | 38 + .../webforms2/testsuite/~testcases/001.html | 38 + .../webforms2/testsuite/~testcases/002.html | 53 + .../webforms2/testsuite/~testcases/003.html | 46 + .../webforms2/testsuite/~testcases/004.html | 285 ++ .../webforms2/testsuite/~testcases/005.html | 245 ++ .../webforms2/testsuite/~testcases/006.html | 203 + .../webforms2/testsuite/~testcases/007.html | 129 + .../webforms2/testsuite/~testcases/008.html | 56 + .../webforms2/testsuite/~testcases/009.html | 64 + .../webforms2/testsuite/~testcases/010.html | 50 + .../webforms2/testsuite/~testcases/011.html | 99 + .../webforms2/testsuite/~testcases/012.html | 79 + .../webforms2/testsuite/~testcases/013.html | 92 + .../webforms2/testsuite/~testcases/014.html | 44 + .../webforms2/testsuite/~testcases/015.html | 54 + .../webforms2/testsuite/~testcases/016.html | 33 + .../webforms2/testsuite/~testcases/017.html | 301 ++ .../webforms2/testsuite/~testcases/018.html | 92 + .../testsuite/~testcases/019-colors.xml | 7 + .../testsuite/~testcases/019-formdata.xml | 16 + .../~testcases/019-statesAndProvinces.xml | 11 + .../webforms2/testsuite/~testcases/019.html | 388 ++ .../webforms2/testsuite/~testcases/020.html | 69 + .../webforms2/testsuite/~testcases/021.html | 82 + .../webforms2/testsuite/~testcases/compile.pl | 141 + .../testsuite/~testcases/index.template.html | 24 + .../~testcases/testcase.template.html | 43 + .../webforms2/validationPointer.png | Bin 0 -> 688 bytes .../webforms2/webforms2-loader.js | 33 + .../webforms2/webforms2-msie.js | 1 + .../weston.ruter.net/webforms2/webforms2-p.js | 56 + .../weston.ruter.net/webforms2/webforms2.css | 209 + .../weston.ruter.net/webforms2/webforms2.htc | 0 .../weston.ruter.net/webforms2/webforms2.js | 103 + .../webforms2/webforms2.user.js | 27 + .../weston.ruter.net/webforms2/webforms2.xbl | 0 .../webforms2/webforms2_src.js | 2573 +++++++++++++ .../webforms2/webforms2_withRep_src.js | 3376 +++++++++++++++++ .../js/weston.ruter.net/webforms2/~topack.js | 1896 +++++++++ itf/templates/test/person_form.html | 7 +- 276 files changed, 42190 insertions(+), 1 deletion(-) create mode 100644 itf/static/js/html5Forms.js/.DS_Store create mode 100644 itf/static/js/html5Forms.js/.git/HEAD create mode 100644 itf/static/js/html5Forms.js/.git/config create mode 100644 itf/static/js/html5Forms.js/.git/description create mode 100755 itf/static/js/html5Forms.js/.git/hooks/applypatch-msg.sample create mode 100755 itf/static/js/html5Forms.js/.git/hooks/commit-msg.sample create mode 100755 itf/static/js/html5Forms.js/.git/hooks/post-update.sample create mode 100755 itf/static/js/html5Forms.js/.git/hooks/pre-applypatch.sample create mode 100755 itf/static/js/html5Forms.js/.git/hooks/pre-commit.sample create mode 100755 itf/static/js/html5Forms.js/.git/hooks/pre-rebase.sample create mode 100755 itf/static/js/html5Forms.js/.git/hooks/prepare-commit-msg.sample create mode 100755 itf/static/js/html5Forms.js/.git/hooks/update.sample create mode 100644 itf/static/js/html5Forms.js/.git/index create mode 100644 itf/static/js/html5Forms.js/.git/info/exclude create mode 100644 itf/static/js/html5Forms.js/.git/logs/HEAD create mode 100644 itf/static/js/html5Forms.js/.git/logs/refs/heads/master create mode 100644 itf/static/js/html5Forms.js/.git/objects/pack/pack-deb57022db6c94f63505fcfcd8f857463e5998fe.idx create mode 100644 itf/static/js/html5Forms.js/.git/objects/pack/pack-deb57022db6c94f63505fcfcd8f857463e5998fe.pack create mode 100644 itf/static/js/html5Forms.js/.git/packed-refs create mode 100644 itf/static/js/html5Forms.js/.git/refs/heads/master create mode 100644 itf/static/js/html5Forms.js/.git/refs/remotes/origin/HEAD create mode 100644 itf/static/js/html5Forms.js/.project create mode 100644 itf/static/js/html5Forms.js/README.txt create mode 100644 itf/static/js/html5Forms.js/shared/.DS_Store create mode 100644 itf/static/js/html5Forms.js/shared/css/number.css create mode 100644 itf/static/js/html5Forms.js/shared/css/slider.css create mode 100644 itf/static/js/html5Forms.js/shared/css/slider_ie.css create mode 100644 itf/static/js/html5Forms.js/shared/css/useragentmanExample.css create mode 100644 itf/static/js/html5Forms.js/shared/css/visibleIf.css create mode 100644 itf/static/js/html5Forms.js/shared/images/slider/slider-1.png create mode 100644 itf/static/js/html5Forms.js/shared/images/slider/slider-disabled-1.png create mode 100644 itf/static/js/html5Forms.js/shared/images/slider/slider-disabled.png create mode 100644 itf/static/js/html5Forms.js/shared/images/slider/slider.png create mode 100644 itf/static/js/html5Forms.js/shared/js/.DS_Store create mode 100644 itf/static/js/html5Forms.js/shared/js/EventHelpers.js create mode 100644 itf/static/js/html5Forms.js/shared/js/Timer.js create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/CVS/Entries create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/CVS/Repository create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/CVS/Root create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/autocomplete.js create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/index.html create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Entries create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Repository create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Root create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/index.html create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Entries create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Repository create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Root create mode 100644 itf/static/js/html5Forms.js/shared/js/autocomplete/xml/config.xml create mode 100644 itf/static/js/html5Forms.js/shared/js/cssQuery-p.js create mode 100644 itf/static/js/html5Forms.js/shared/js/frequency-decoder.com/slider.js create mode 100644 itf/static/js/html5Forms.js/shared/js/html5.js create mode 100644 itf/static/js/html5Forms.js/shared/js/html5Forms.js create mode 100644 itf/static/js/html5Forms.js/shared/js/html5Widgets.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/.DS_Store create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/ChangeLog create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/README create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/altblue.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/bugtest-hidden-selects.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-blue.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-blue2.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-brown.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-green.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-handler.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-handler_stripped.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-old.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-setup.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-setup_stripped.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-system.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-tas.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-1.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-2.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-cold-1.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-cold-2.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar.php create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar_stripped.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/dayinfo.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/field-button.jpg create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference-Z-S.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/reference.pdf create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/img.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/index.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-af.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-al.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-bg.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-big5-utf8.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-big5.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-br.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ca.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cn.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs-utf8.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs-win.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-da.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-de.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-du.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-el.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-en.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-es.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-fi.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-fr.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-he-utf8.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-he.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hr-old.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hr-utf8.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hr.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hu.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-it.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-jp.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko-utf8.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko.old.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt-utf8.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt.old.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lv.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-nl.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-no.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl-utf8.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl.old.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pt.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ro.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ru.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ru_win_.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-si.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sk.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sp.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sv.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-tr.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-zh.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/cn_utf8.js create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/menuarrow.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/menuarrow2.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/multiple-dates.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/release-notes.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-1.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-2.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-3.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/active-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/dark-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/hover-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/menuarrow.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/normal-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/rowhover-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/status-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/theme.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/title-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/today-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/active-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/dark-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/hover-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/menuarrow.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/normal-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/rowhover-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/status-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/theme.css create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/title-bg.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/test-position.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/test.php create mode 100644 itf/static/js/html5Forms.js/shared/js/jscolor/arrow.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscolor/cross.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/jscolor/demo.html create mode 100644 itf/static/js/html5Forms.js/shared/js/jscolor/hs.png create mode 100644 itf/static/js/html5Forms.js/shared/js/jscolor/hv.png create mode 100644 itf/static/js/html5Forms.js/shared/js/jscolor/jscolor.js create mode 100644 itf/static/js/html5Forms.js/shared/js/modernizr.com/Modernizr-2.5.3.forms.js create mode 100644 itf/static/js/html5Forms.js/shared/js/modernizr.com/modernizr-1.5.min.js create mode 100644 itf/static/js/html5Forms.js/shared/js/visibleIf.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/.DS_Store create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/.classpath create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/.mymetadata create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/.project create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/DTD/xhtml1-strict-wf2.dtd create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/DTD/xhtml1-transitional-wf2.dtd create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/META-INF/MANIFEST.MF create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/WEB-INF/web.xml create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/index.jsp create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/pack.pl create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/project.kpf create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-msie_init.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/001.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/002.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/003.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/demo.css create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/jsUnitCore.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation.css create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/readme.txt create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/task-queue.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/001.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/002.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/003.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/004.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/005.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/006.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/007.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/008.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/009.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/010.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/011.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/012.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/0.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/1.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/10.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/11.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/12.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/13.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/14.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/15.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/16.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/2.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/3.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/4.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/5.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/6.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/7.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/8.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/9.gif create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/014.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/015.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/016.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/017.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/018.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-colors.xml create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-formdata.xml create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-statesAndProvinces.xml create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/020.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/021.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/index.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/testcase.css create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/001.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/002.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/003.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/004.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/005.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/006.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/007.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/008.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/009.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/010.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/011.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/012.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/013.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/014.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/015.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/016.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/017.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/018.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-colors.xml create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-formdata.xml create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-statesAndProvinces.xml create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/020.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/021.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/compile.pl create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/index.template.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/testcase.template.html create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/validationPointer.png create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2-loader.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2-msie.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2-p.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2.css create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2.htc create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2.user.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2.xbl create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2_src.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2_withRep_src.js create mode 100644 itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/~topack.js diff --git a/itf/static/js/html5Forms.js/.DS_Store b/itf/static/js/html5Forms.js/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2b4f49fde41c0cb1168d29a6eaeb7d3b74a772d9 GIT binary patch literal 6148 zcmeHK%}T>S5T5Oiwy4mHP&_T3gY-vR3m!tL;8AFy2P>M8LJOrSO-c_n8pZb!-#}l& z=W%9tE0)@0i^>ele3O~kP3BA3%>sa^PrM>P4gfN!go!MgAB6IxOOh}VLZRm9g6B?y zkvs6+rD_iRMh58JZ9xD%a9|9J@9)JO4f;V?D13-SGL_!i&Y6(hy=30ovf(hxodIMh>WvTEUW~ zYC*M9J}p|ZS}mJa-sY`fBaif`C@Wie)_Jzf05iZ0tcd}$kY;w)G(S(v3@`(KmjPNI zBr2h8FxIG+4m9-pNcj{Y3Ho%FAe07egRw@;pa?w_Q4ba7h#~ZFj7w8z8;mvT;ULtV zaUOGLVNNJQ-5ujnm4mP~vSkLCfkg(A`Z7oR|M}|k|KcFNVg{Ijf5m`EHJXh&wq*9! yrRHd_m8iF literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/.git/HEAD b/itf/static/js/html5Forms.js/.git/HEAD new file mode 100644 index 0000000..cb089cd --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/itf/static/js/html5Forms.js/.git/config b/itf/static/js/html5Forms.js/.git/config new file mode 100644 index 0000000..cf559c6 --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/config @@ -0,0 +1,11 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[remote "origin"] + fetch = +refs/heads/*:refs/remotes/origin/* + url = https://github.com/zoltan-dulac/html5Forms.js.git +[branch "master"] + remote = origin + merge = refs/heads/master diff --git a/itf/static/js/html5Forms.js/.git/description b/itf/static/js/html5Forms.js/.git/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/itf/static/js/html5Forms.js/.git/hooks/applypatch-msg.sample b/itf/static/js/html5Forms.js/.git/hooks/applypatch-msg.sample new file mode 100755 index 0000000..8b2a2fe --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +test -x "$GIT_DIR/hooks/commit-msg" && + exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} +: diff --git a/itf/static/js/html5Forms.js/.git/hooks/commit-msg.sample b/itf/static/js/html5Forms.js/.git/hooks/commit-msg.sample new file mode 100755 index 0000000..b58d118 --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/itf/static/js/html5Forms.js/.git/hooks/post-update.sample b/itf/static/js/html5Forms.js/.git/hooks/post-update.sample new file mode 100755 index 0000000..ec17ec1 --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/itf/static/js/html5Forms.js/.git/hooks/pre-applypatch.sample b/itf/static/js/html5Forms.js/.git/hooks/pre-applypatch.sample new file mode 100755 index 0000000..b1f187c --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} +: diff --git a/itf/static/js/html5Forms.js/.git/hooks/pre-commit.sample b/itf/static/js/html5Forms.js/.git/hooks/pre-commit.sample new file mode 100755 index 0000000..18c4829 --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/hooks/pre-commit.sample @@ -0,0 +1,50 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 +fi + +# If you want to allow non-ascii filenames set this variable to true. +allownonascii=$(git config hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ascii filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + echo "Error: Attempt to add a non-ascii file name." + echo + echo "This can cause problems if you want to work" + echo "with people on other platforms." + echo + echo "To be portable it is advisable to rename the file ..." + echo + echo "If you know what you are doing you can disable this" + echo "check using:" + echo + echo " git config hooks.allownonascii true" + echo + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/itf/static/js/html5Forms.js/.git/hooks/pre-rebase.sample b/itf/static/js/html5Forms.js/.git/hooks/pre-rebase.sample new file mode 100755 index 0000000..33730ca --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up-to-date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/itf/static/js/html5Forms.js/.git/hooks/prepare-commit-msg.sample b/itf/static/js/html5Forms.js/.git/hooks/prepare-commit-msg.sample new file mode 100755 index 0000000..f093a02 --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/hooks/prepare-commit-msg.sample @@ -0,0 +1,36 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first comments out the +# "Conflicts:" part of a merge commit. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +case "$2,$3" in + merge,) + /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; + +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$1" ;; + + *) ;; +esac + +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" diff --git a/itf/static/js/html5Forms.js/.git/hooks/update.sample b/itf/static/js/html5Forms.js/.git/hooks/update.sample new file mode 100755 index 0000000..71ab04e --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to blocks unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "Usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --bool hooks.allowunannotated) +allowdeletebranch=$(git config --bool hooks.allowdeletebranch) +denycreatebranch=$(git config --bool hooks.denycreatebranch) +allowdeletetag=$(git config --bool hooks.allowdeletetag) +allowmodifytag=$(git config --bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero="0000000000000000000000000000000000000000" +if [ "$newrev" = "$zero" ]; then + newrev_type=delete +else + newrev_type=$(git cat-file -t $newrev) +fi + +case "$refname","$newrev_type" in + refs/tags/*,commit) + # un-annotated tag + short_refname=${refname##refs/tags/} + if [ "$allowunannotated" != "true" ]; then + echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/itf/static/js/html5Forms.js/.git/index b/itf/static/js/html5Forms.js/.git/index new file mode 100644 index 0000000000000000000000000000000000000000..babd150494fea89c4a27b1b7cfade1de51b562c0 GIT binary patch literal 33184 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 1379876216 +0530 clone: from https://github.com/zoltan-dulac/html5Forms.js.git diff --git a/itf/static/js/html5Forms.js/.git/logs/refs/heads/master b/itf/static/js/html5Forms.js/.git/logs/refs/heads/master new file mode 100644 index 0000000..d1e23e9 --- /dev/null +++ b/itf/static/js/html5Forms.js/.git/logs/refs/heads/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 d390bb89714a6c7eba09f9eb29660560e07d35cb Sanjay B 1379876216 +0530 clone: from https://github.com/zoltan-dulac/html5Forms.js.git diff --git a/itf/static/js/html5Forms.js/.git/objects/pack/pack-deb57022db6c94f63505fcfcd8f857463e5998fe.idx b/itf/static/js/html5Forms.js/.git/objects/pack/pack-deb57022db6c94f63505fcfcd8f857463e5998fe.idx new file mode 100644 index 0000000000000000000000000000000000000000..cc7f3443f1a8e76c0db41d5a067ec08d1e087453 GIT binary patch literal 18208 zcmYh@WmHsc)Hm=$4KZ|gcSuNgcXvypfOLq2w19LYDcv9~NQZQHcZYNdyytn|`@`c} zzjckSnG^fJuk*#(^Xjf<2><{r=zsqF&k6w{g3v(dAiV$JgDU}u5JUnZ15tw*K};YP z5F3ac!~x<4@qh$CLLhOF6i5!F08$4TflNVWAPbN!$R6Yb^7xM@xPAipfc*aB53WI= z5K!3v@fCa>35o(mgJMB(pmUZ$Z2u zFe@0r|A>IAI7kX44Uz%Lf#mHvt zQ3_+Ct1?I(1m**)3j(u&H3FG}-hse9 z_rI)Q=C6GHOp$)W6s_@7v_P;pMcY(hUQd7n^5TEe4c`=U?523>XmDU)nQx+nX~b;E zNz+qi>Ge1(uJABmJ)WlSv_v!{p+Y;dk9M$`n&g zHON`vFv5-D6#*_r;>+mNwem43k)j)`HG~QH;cmxsfyI^mYeJ<2CRaP|7$S0(;o}7_ z<5%n?`yn;E43Yjb6-3mB(zA?DI85bN)0`_ZzL(Y621FVe@x#i3K_s?IPuIS1YIRUS z2E?P=<{j0!5ljUJo*U7$nc4uQbs{30A4&7KU{!GdLKR60-f+V~7^Ujpq@x zKTn~oDJRF`3~*Mu2CA1g_$D$J<489 zOy6LDaLd0Y6XyDm%-L&g6)4Y9rxWJ~H22O$iQ-jcLy`K)E$AmHghebJ zq3m%I9Gu@yO>1#FuxJ%c)SJeI@aX)R&2vp`QX(FRUTC%A<*VSQI^{U#UX@yRj9j$YMvkqTiyU0v{%lkx_}c50W0Mz^;5n1+x<#h z7S|l=4veO(OET(jaYsi>Mal8FLU})%@yyp8=v33!&@7%Q_C+OeH)dDQ?EMnB#SFiB z9Kb!kqnc#I6OR6t-dHNX$4U@e?}7~>-Qu9c$0|gnJg|RSM#c9y##^4wxnVoR7itIu zMyCzwXL;j)nFbqj>l|m}7x5^&3(KRm(?~FOGd_9p{!Q)1e?TrbXtBPfI`UX{AP(gg ztWN|8Z1V5pg9AjUAGF-kYZ}ss%0A%{OuGER9uhJ5DNZn%N)_m_W1*T%_-P}04-e-( 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%0D`=b0z;zZ5=AL&C-u6Q`>{PNE2?85ck$ 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 z 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 z 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 + + html5Widgets + + + + + + + + diff --git a/itf/static/js/html5Forms.js/README.txt b/itf/static/js/html5Forms.js/README.txt new file mode 100644 index 0000000..2160b78 --- /dev/null +++ b/itf/static/js/html5Forms.js/README.txt @@ -0,0 +1,43 @@ +HTML5Forms.js is a JavaScript polyfill that implements a subset of the HTML5 +Forms module in all browsers. The script will only add support for the +different parts of the module when there doesn't exist a native +implementation. HTML5Forms supports the following HTML5 input types: + +* range +* date +* datetime +* datetime-local +* week +* color + +It also supports: + +* form validation (via "required" and "pattern" attributes) +* the autofocus attribute (i.e. focusing on a particular form element onload) +* the placeholder attribute (i.e. descriptive text of what should be in a form + field) +* the output tag (solves equations of form elements) +* CSS styling of form validation states (simulates :invalid and :valid in + unsupported browsers like IE9 and lower) +* CSS styling of form elements that are not included in the CSS3 UI + specification, but I think are useful for developers: + + - .wf2_isBlank, .wf2_notBlank – these classes are applied to form field when + a form element is blank/not blank repectively. + - .wf2_lostFocus -this class is applied to a form element when a form field + loses focus. + - .wf2_submitAttempted – this class is applied to a

tag when a form + submission is attempted. + + +More information about how this works is available at: + +http://www.useragentman.com/blog/2010/07/27/cross-browser-html5-forms-using-modernizr-webforms2-and-html5widgets/ +http://www.useragentman.com/blog/2012/05/14/cross-browser-styling-of-html5-forms-even-in-older-browsers/ + +Note that this package was originally released in 2010 as html5Widgets, +and was renamed to a more accurate and descriptive name. Also note that +the version of webforms2 that is included in this package does not +include support for the depricated repetition module -- it will be +put back in as a separate module at a later date. + diff --git a/itf/static/js/html5Forms.js/shared/.DS_Store b/itf/static/js/html5Forms.js/shared/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1d5b230b5245c94d1fda82dbdbf79b75d467f555 GIT binary patch literal 6148 zcmeHK!AiqG5Z!I7MpVc}=yCB}Bo!?R9zv+#QD~tDE1D3Yk9R^E0p6P^VteQ1j+dtJP2^$E~8+hPiLf z{=wn-WjA~*o}Npip`@*n?HO3~FAK(m6<`He0akz&SVIAOp*TBh#BvBLzzX~?1?YTG zXoSAS(x5&%(CHEYSi`h7aH=IJM_KeOmImR0Ns|gRsnV7h(xhWv**M=~Y0#t#saM8x z?8=|Ti`1)QUg>ZleS_Sy0<6HY0#!3~>HfdKC$qB1Uryl>E5Hi;F$H9;-DwASDSNkm zdp){q71|vd8O4=EVBkwX0T|FZQrAx7SHuzLTPzLIQ)phN1Nlcl3&I^M@B<2b04je$ A&;S4c literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/css/number.css b/itf/static/js/html5Forms.js/shared/css/number.css new file mode 100644 index 0000000..e3bf5b9 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/css/number.css @@ -0,0 +1,35 @@ + +.html5-numberControls { + display: block; + vertical-align:top; + position: absolute; + top: 0; + right: 0em; + height: 1.5em; + border: solid 1px #666666; + border-radius: 5px; + width: 0.8em; + color: #666666; + margin-top: 0.3em; +} + +.html5-numberWrapper { + position: absolute; + height: 1em; +} + + .html5-numberControls a{ + margin: 0 0 0 0.2em; + padding:0; + border:0; + background-color:transparent; + width: 0.9em; + cursor:pointer; + position:absolute; + + font-size: 0.6em; +} + +.html5-numberControls .upbutton{top:0px;} + +.html5-numberControls .dnbutton{bottom: 0px;} \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/css/slider.css b/itf/static/js/html5Forms.js/shared/css/slider.css new file mode 100644 index 0000000..143ba2b --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/css/slider.css @@ -0,0 +1,169 @@ +/* + + Slider CSS, style as you please. + + Note: The png images used for this demo were originally located at http://www.schillmania.com/ + + Remove the -moz & -khtml styles if you want the css to validate. + + Change the image paths to suit you installation. + +*/ + +/* Styles for the horizontal slider */ +.fd-slider + { + position:relative; + width:100%; + height:20px; + text-align:center; + border:0 none; + text-decoration:none; + display:block; + -moz-user-select:none; + -khtml-user-select:none + cursor:pointer; + } +.fd-slider-inner + { + position:relative; + display:block; + z-index:1; + height:18px; + text-align:left; + background:#fcfcfc; + border:1px solid #ccc; + border-radius:5px; + -moz-border-radius:5px; + } +.fd-slider-bar + { + position:absolute; + display:block; + z-index:2; + height:2px; + border:1px solid #bbb; + border-bottom:1px solid #aaa; + border-right:1px solid #aaa; + background:#ddd; + margin:0; + padding:0; + overflow:hidden; + line-height:4px; + top:8px; + bottom:none; + left:10px; + right:10px; + border-radius:2px; + -moz-border-radius:2px; + } +/* Styles for the vertical slider */ +.fd-slider-vertical + { + position:relative; + border:0 none; + text-decoration:none; + display:block; + width:20px; + height:100%; + text-align:center; + -moz-user-select:none; + -khtml-user-select:none + cursor:pointer; + cursor:hand; + } +.fd-slider-vertical .fd-slider-inner + { + display:block; + width:18px; + height:100%; + text-align:left; + background:#fcfcfc; + border:1px solid #ccc; + } +.fd-slider-vertical .fd-slider-bar + { + width:2px; + top:10px; + bottom:10px; + left:8px; + right:none; + height:auto; + } +.fd-slider-vertical .fd-slider-handle + { + cursor:N-resize; + } +.focused .fd-slider-inner + { + background:#eee !important; + border:1px solid #aaa !important; + } +/* black handle, no glow */ +.fd-slider-handle + { + position:absolute; + display:block; + padding:0; + border:0 none; + margin:0; + z-index:3; + top:0; + left:0; + width:20px; + height:20px; + outline:0px none; + background:transparent url(../images/slider/slider-disabled.png) no-repeat 0px 0px; + cursor:W-resize; + line-height:20px; + font-size:20px; + -webkit-user-select: none; + -moz-user-select:none; + -moz-user-focus:none; + -moz-outline:0px none; + } +.fd-slider-handle:focus + { + outline:0px none; + border:0 none; + -moz-user-focus:normal; + } +button.fd-slider-handle:focus::-moz-focus-inner { border-color: transparent; } + +/* black handle, glow */ +.fd-slider-hover .fd-slider-handle + { + background:transparent url(../images/slider/slider-disabled-1.png) no-repeat 0px 0px; + } +/* blue handle, no glow */ +.focused .fd-slider-handle + { + background:transparent url(../images/slider/slider.png) no-repeat 0px 0px; + } +/* blue handle glow */ +.focused.fd-slider-hover .fd-slider-handle + { + background:transparent url(../images/slider/slider-1.png) no-repeat 0px 0px; + } +body.slider-drag-vertical + { + cursor:N-resize !important; + } +body.slider-drag-horizontal + { + cursor:W-resize !important; + } +.fd_hide_slider_input + { + display:none; + } +/* Disabled Sliders */ +.slider-disabled + { + opacity:.8; + filter:alpha(opacity=80); + } +.slider-disabled .fd-slider-handle + { + cursor:auto !important; + } \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/css/slider_ie.css b/itf/static/js/html5Forms.js/shared/css/slider_ie.css new file mode 100644 index 0000000..6bdb1ce --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/css/slider_ie.css @@ -0,0 +1,41 @@ +.fd-slider-handle + { + background:none; + filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='http://www.frequency-decoder.com/demo/slider-revisited/slider-disabled.png'); + outline:expression(hideFocus='true'); + } +.fd-slider-hover .fd-slider-handle + { + background:none; + filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='http://www.frequency-decoder.com/demo/slider-revisited/slider-disabled-1.png'); + } +.focused .fd-slider-handle + { + background:none; + filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='http://www.frequency-decoder.com/demo/slider-revisited/slider.png'); + } +.fd-fc-slider-hover .fd-slider-handle + { + background:none; + filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='http://www.frequency-decoder.com/demo/slider-revisited/slider-1.png'); + } +.fd-slider + { + cursor:hand; + } +.fd-slider-bar + { + top:8px; + bottom:none; + left:10px; + right:none; + width:expression((this.parentNode.offsetWidth - 20) + "px"); + } +.fd-slider-vertical .fd-slider-bar + { + top:10px; + bottom:none; + left:8px; + right:none; + height:expression((this.parentNode.offsetHeight - 20) + "px"); + } diff --git a/itf/static/js/html5Forms.js/shared/css/useragentmanExample.css b/itf/static/js/html5Forms.js/shared/css/useragentmanExample.css new file mode 100644 index 0000000..6c99d5e --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/css/useragentmanExample.css @@ -0,0 +1,114 @@ +body { + margin: 0px; + padding: 0px; +} + +body#myExample { + font-family: "Arial", "Helvetica", sans-serif; +} + +#exampleBlurb { + background: #2f2626 !important; + text-align: justify !important; + color: white !important; + font: 14px Georgia, Serif !important; + position: relative; + margin-top: -1em; + padding-top: 1em; + zoom: 1; + width: 100% !important; + z-index: 9999 !important; + line-height: 2.4em; + padding-bottom: 1em; +} + +#exampleBlurb p { + padding: 0 10px; + line-height: 1.7em; +} + +#exampleBlurb a { + color: #ccccff; +} + +#thirdPartyExample { + margin: 10px; +} + +#myExample fieldset { + width: 50em; + margin: 1em auto; + padding: 1em; + +} + +#myExample legend { + font-weight: bold; + +} + +.formTable { + width: 40em; + margin: 0 auto; +} + +.formTable th { + vertical-align: top; + text-align: right; + width: 20em; +} + +.formTable td, +.formTable input, +.formTable textarea { + width: 20em; +} + +.formTable td input[type="checkbox"], +.formTable td input[type="radio"] { + width: auto; +} + +.formTable textarea { + height: 8em; +} + +.formTable input.small { + width: 4em; +} + +.buttonRow { + text-align: center; +} + +#exampleIntro { + opacity: 0.7; + position: absolute; + padding: 0.7em; + top: 0; + left: 0; + background: #2f2626 !important; + text-align: justify !important; + color:white !important; + font: 14px Georgia, Serif !important; + position: relative; + zoom: 1; + + z-index: 10000 !important; +} + +#exampleIntro p { + line-height: 2.4em; +} + +#exampleIntro a { + color: #ccccff; +} + +.initiallyHidden { + display: none; +} + +ul.exampleList > li { + margin-bottom: 2em; +} \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/css/visibleIf.css b/itf/static/js/html5Forms.js/shared/css/visibleIf.css new file mode 100644 index 0000000..900283a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/css/visibleIf.css @@ -0,0 +1,23 @@ +.visibleIf, .visibleif { + display: none; +} + + +.visibleIf-visible, .visibleif-visible { + display: block; +} + +span.visibleIf-visible, span.visibleif-visible { + display: inline; +} + +tr.visibleIf-visible, tr.visibleif-visible { + display: block; + display: table-row; +} + + +.visibleIf-rule, .mandatoryIf-rule, .visibleif-rule, .mandatoryif-rule { + display: none; +} + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/images/slider/slider-1.png b/itf/static/js/html5Forms.js/shared/images/slider/slider-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ed77c36555bea58380dccbf54e4f86ceaadc83 GIT binary patch literal 1098 zcmV-Q1hxB#P)sRJ4I6NtY7 z@pmZxiDVfAKmf5oO@?_5q?!BIuV4JjpZ`!>{ejWx?jL5uHw-K?AjKjKf1W6_{5>Bk z@PA*VB*!f_HZ~@-aQz1mK#aghVT2mS0mMA--n|peN+s~grxmG^? zqIL2oZ=9+iyN(49BdZ__10&FCApXz5$;j~EmY0D|keSnH`}04{K(()vxVg`=v$Ow# z2FE{u0AfP>Vz6FZefnU~p&T;L;Rk{?GF9&p*ZoKmIcS@&Ee}3}pXfU-1OGp!SHJ!-Ff%g&4FoxZfe|@b zgIxF*g#QB7{QCpZg9HEqhy^(Z{Qmv>kHFXW?|uo0@(QsrGO_|42=p)`%tTPcfOG19 zCWfDX|1+?E{P+Q+2bu=K-T(+77NqR-2k5=867Qbee<&a-#|{+cV*z;^C<*m6B=#8p z{{g!0BQS8qKRka3(gTfQu%Q3}#DbI`e{pkjzty~d~yR332JVr2XR%oWdo z+3l{TrshMS+P5G*NJZLzfB<5I7O*JA7cgzHojrS&=jqd@e4xbs=g%Jwu0{avofEbZVY^oHn00G2;RUe8T7UpzK{E_y5GxR~K{3o=1|)-iLGf=SgTaOZ1Q4=;Oi<12-@bk0T)TFy z^7-@U-9CQ&X!i5xPX&-7c6Rm${QUf<3=Iu;1qTP;<>KP{j^sLU5C8-aBQR1>414nA z3Gc#%3vFM#c#+J(!C@pMB*eloym6DR;C-2M&!0boF_g^& zG8pJ`lUuiL`GfQzMI0kQ0I?vskoorQ+q^&<&4I20xt0+amf-MV1OhMv0vJI2fB*h5 z11T$@o;d~v1|MNA1PCCMWb^#_bKXCH{>Xj(`jzR&k01Y$41=e$|InNOG>{1>B?;1l zoB;p=2qj?y4Ppg_70584x4>pW9mjxVAQ%G;1R2Z((t|7y5J1QV{{Q~{J1FYku&}W3 z0h0*WYsiK|4FkIv7~_mU-@JwDf%^a;fLM^S(_diH_zu)?3&>Ukx{v{AFawB2b{!H8 zGW0e`4|0wH2p|@uy!aOw86SWK90A&_1@w|U$UtCZgIx(S7-#_4Kwv`u55!M_%p)K@ zPy@l{00a;dk_-O;6X{1_PB;S$!`;B-@eCL~|9}7f4GK??!3;pxFaVR%KcM(?p!_ai zPB{hA154B(g8%{u#f3IDHeVkgo?cdXQZR5I`)*c~MeQ^0$$Z(R*M(U%Pts>X#26KHLDNMM+?o@qyD7BjYDvWIY!U z5V)tUt^Ek7_9I9SQc=bL5I~Gb1uVSydhp-@%ig_vxqyk52bg#HfEIwV7Xv3J=T8w4 zkx#0ss$ZO)oxdq4DEvVy7a0Hoh!L&CrnrCw2p~pkR{;P41^|!@rY>Liad!X!002ov JPDHLkV1j1Li9rAW literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/images/slider/slider-disabled.png b/itf/static/js/html5Forms.js/shared/images/slider/slider-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a56b3b42057316929c6a801a18bca70bf2f692 GIT binary patch literal 704 zcmV;x0zdtUP)HGKZAaP`GFaZr=Q&3Q_ z`~CZO7?9r$#6Mw@00D$;*qR zzYx%+j8L!PGz{pISLosZ0fcVgua6%;UIiMc2~2y8prisa6geDW{6ByG{0AC%4WtLz z0Du5OH}K1oCr|eA^70x1lZ^^6rWt`4#UQY)zkV?Q)8V~Gj~?v>=|MICAb`*f{PyC- zi*uZuoEw4cV4$H2OiWCS92^`BpdbJylm9<{{9pj8c?eA08y`M=cm|{g*#Lk5Vnp)} zDA0I;SOu6Q?4+cmoCO61Rk*mggu%9b`}X$z`}cRAJ$ttI?c2A9fI@eG_%m|C1_&Um zSr15Y1F;k|Sx7-G0fEmz{0xX6Kp8uQzER4Wl z0h;vhKLZ;B1Ct#OBeS3qzx#|ozgXY2ttbO(xsB{nfB-`GG8==8Qjnw&zm*WvU$%F@ z85rLFV)zGA4Z@62%*DvW>LDj=zweWJ-o>VxmU86JIO_=`6>8G#o4 z=a2^LVPJR<69xz%OfUcY$MoU{m`ykf{R4*v8?q2U0AVJZS5ICD$S4T&u`n{S0;A&} z7Gs%!0r~qM1H;$n&tAVplLH7KbOV1e+_`*}K~_Uzdz{12RzzQ;yk%1W~2@2GIz!dV~_y7Oj zAKiNN`@qJ%U_D3xAb`-b-ZzHhJI{UJvUKC)%NOoH{PFkSx4-}Y^D;9sNC8tehz9YW z-MaSp@rI@A-|kp_608Ra00a<9P5~!u1_oXrR$7%Q6n@Wf+I6zqP6{n4P+<~OiZGTPN^9{W7RRNOQX17x?b3j|_6}rWvuiwS zyCRrc<;suXgoHqFLV^PlKP|@!1ggY=OND@2xgsRQi3<{McE%D_;8Y2rYM(Uoy_xsk zjOW|8`#b=E<(^vvU;toHlbD{O?jJ~iYenxN=q-)V8b z_M8{E^}ae%EpXQOQ_}Gp|a+zyvZgE<|u2?yxU@v8RjbMKC@)9 zbcP9Kz0Z8WVw*DTaBQ`w&9XV(QSPUl4p;{*W*F?EF>iN&i_>u4-lNiSew>w=dAp!> z19rgzRGW*-@+xh48Owf@CW>flQ@MtaSr$30+!ImGA`o7 zco3KH7*=r^k7E-ZY@v%B1MJ}QC@{hyp1~2G#h39Fd<|d6H}Fk-8{ffq@jZMWKg3V) zQ#^;~@dAE{U*XsI4St6|;AQ+-{lXNLoLC;$r~!W=g~5PIk$?z7DoA-cL63A!n5Qv^ zs5KBet>NQwT7N%IYr`=vg`Ybdvn?Sd-o5A84`BE*gluP|B;&W;_#(2 zBXtfOAJ5X~8pGMKa@DAJFs841rDTDGfrNo;jRE<6$WoJNYaA(zKONMiXejMziBd?H zcL|AEjkd;-Lb8yc3MEvbsIM5P!f8IM{cMdRg(@5{-kH|XJEOj#V7xocXJdCjTVc{C z3?vL($-smfGFkr*{QLd?%AjPFFpw~CO)-G!O0`m^Bk9_@;c&9nW~rT`CPn&<6viRc l>2e$^vJ}r!i-l}isSw&4M+#|%B>5u{(~xut1OF)le*uu_0!jb? literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/EventHelpers.js b/itf/static/js/html5Forms.js/shared/js/EventHelpers.js new file mode 100644 index 0000000..062900a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/EventHelpers.js @@ -0,0 +1,486 @@ +/******************************************************************************* + * This notice must be untouched at all times. + * + * This javascript library contains helper routines to assist with event + * handling consinstently among browsers + * + * EventHelpers.js v.1.4 available at http://www.useragentman.com/ + * + * released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * Chagelog: 1.4: fix fireEvent to work correctly for IE9. + * + *******************************************************************************/ +var EventHelpers = new function(){ + var me = this; + + var safariTimer; + var isSafari = /WebKit/i.test(navigator.userAgent); + var globalEvent; + + me.init = function () { + if (me.hasPageLoadHappened(arguments)) { + return; + } + + /* This is for fireEvent */ + if (document.createEvent) { + globalEvent = document.createEvent("HTMLEvents"); + } else if (document.createEventObject){ + // dispatch for IE8 and lower. + globalEvent = document.createEventObject(); + } + + me.docIsLoaded = true; + } + + /** + * Adds an event to the document. Examples of usage: + * me.addEvent(window, "load", myFunction); + * me.addEvent(docunent, "keydown", keyPressedFunc); + * me.addEvent(document, "keyup", keyPressFunc); + * + * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events + * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/ + * @param {Object} obj - a javascript object. + * @param {String} evType - an event to attach to the object. + * @param {Function} fn - the function that is attached to the event. + */ + me.addEvent = function(obj, evType, fn){ + + if (obj.addEventListener) { + obj.addEventListener(evType, fn, false); + } else if (obj.attachEvent) { + obj['e' + evType + fn] = fn; + obj[evType + fn] = function(){ + obj["e" + evType + fn](self.event); + } + obj.attachEvent("on" + evType, obj[evType + fn]); + } + } + + + /** + * Removes an event that is attached to a javascript object. + * + * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events + * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/ * @param {Object} obj - a javascript object. + * @param {String} evType - an event attached to the object. + * @param {Function} fn - the function that is called when the event fires. + */ + me.removeEvent = function(obj, evType, fn){ + + if (obj.removeEventListener) { + obj.removeEventListener(evType, fn, false); + } else if (obj.detachEvent) { + try { + obj.detachEvent("on" + evType, obj[evType + fn]); + obj[evType + fn] = null; + obj["e" + evType + fn] = null; + } + catch (ex) { + // do nothing; + } + } + } + + function removeEventAttribute(obj, beginName){ + var attributes = obj.attributes; + for (var i = 0; i < attributes.length; i++) { + var attribute = attributes[i] + var name = attribute.name + if (name.indexOf(beginName) == 0) { + //obj.removeAttributeNode(attribute); + attribute.specified = false; + } + } + } + + me.addScrollWheelEvent = function(obj, fn){ + if (obj.addEventListener) { + /** DOMMouseScroll is for mozilla. */ + obj.addEventListener('DOMMouseScroll', fn, true); + } + + /** IE/Opera. */ + if (obj.attachEvent) { + obj.attachEvent("onmousewheel", fn); + } + + } + + me.removeScrollWheelEvent = function(obj, fn){ + if (obj.removeEventListener) { + /** DOMMouseScroll is for mozilla. */ + obj.removeEventListener('DOMMouseScroll', fn, true); + } + + /** IE/Opera. */ + if (obj.detachEvent) { + obj.detatchEvent("onmousewheel", fn); + } + + } + + me.getMouseCoords = function (e) { + if (!e) { + return; + } + // IE + if (e.clientX != null) { + return { + x: e.clientX, + y: e.clientY + } + + } + // NS4 + else if (e.pageX != null) { + return { + x: e.pageX, + y: e.pageY + } + // W3C + } else if (window.event != null && window.event.clientX != null + && document.body != null && + document.body.scrollLeft != null) { + return { + x: window.event.clientX + document.body.scrollLeft, + y: window.event.clientY + document.body.scrollTop + } + + } else { + return null; + } + } + + /** + * Given a mouse event, get the mouse pointer's x-coordinate. + * + * @param {Object} e - a DOM Event object. + * @return {int} - the mouse pointer's x-coordinate. + */ + me.getMouseX = function(e){ + if (!e) { + return; + } + // NS4 + if (e.pageX != null) { + return e.pageX; + // IE + } else if (window.event != null && window.event.clientX != null && + document.body != null && + document.body.scrollLeft != null) + return window.event.clientX + document.body.scrollLeft; + // W3C + else if (e.clientX != null) + return e.clientX; + else + return null; + } + + /** + * Given a mouse event, get the mouse pointer's y-coordinate. + * @param {Object} e - a DOM Event Object. + * @return {int} - the mouse pointer's y-coordinate. + */ + me.getMouseY = function(e){ + // NS4 + if (e.pageY != null) + return e.pageY; + // IE + else if (window.event != null && window.event.clientY != null && + document.body != null && + document.body.scrollTop != null) + return window.event.clientY + document.body.scrollTop; + // W3C + else if (e.clientY != null) { + return e.clientY; + } + } + /** + * Given a mouse scroll wheel event, get the "delta" of how fast it moved. + * @param {Object} e - a DOM Event Object. + * @return {int} - the mouse wheel's delta. It is greater than 0, the + * scroll wheel was spun upwards; if less than 0, downwards. + */ + me.getScrollWheelDelta = function(e){ + var delta = 0; + if (!e) /* For IE. */ + e = window.event; + if (e.wheelDelta) { /* IE/Opera. */ + delta = e.wheelDelta / 120; + /** In Opera 9, delta differs in sign as compared to IE. + */ + if (window.opera) { + delta = -delta; + } + } else if (e.detail) { /** Mozilla case. */ + /** In Mozilla, sign of delta is different than in IE. + * Also, delta is multiple of 3. + */ + delta = -e.detail / 3; + } + return delta + } + + /** + * Sets a mouse move event of a document. + * + * @deprecated - use only if compatibility with IE4 and NS4 is necessary. Otherwise, just + * use EventHelpers.addEvent(window, 'mousemove', func) instead. Cannot be used to add + * multiple mouse move event handlers. + * + * @param {Function} func - the function that you want a mouse event to fire. + */ + me.addMouseEvent = function(func){ + + if (document.captureEvents) { + document.captureEvents(Event.MOUSEMOVE); + } + + document.onmousemove = func; + window.onmousemove = func; + window.onmouseover = func; + + } + + + + /** + * Find the HTML object that fired an Event. + * + * @param {Object} e - an HTML object + * @return {Object} - the HTML object that fired the event. + */ + me.getEventTarget = function(e){ + // first, IE method for mouse events(also supported by Safari and Opera) + if (e.toElement) { + return e.toElement; + // W3C + } else if (e.currentTarget) { + return e.currentTarget; + + // MS way + } else if (e.srcElement) { + return e.srcElement; + } else { + return null; + } + } + + + + + /** + * Given an event fired by the keyboard, find the key associated with that event. + * + * @param {Object} e - an event object. + * @return {String} - the ASCII character code representing the key associated with the event. + */ + me.getKey = function(e){ + if (e.keyCode) { + return e.keyCode; + } else if (e.event && e.event.keyCode) { + return window.event.keyCode; + } else if (e.which) { + return e.which; + } + } + + + /** + * Will execute a function when the page's DOM has fully loaded (and before all attached images, iframes, + * etc., are). + * + * Usage: + * + * EventHelpers.addPageLoadEvent('init'); + * + * where the function init() has this code at the beginning: + * + * function init() { + * + * if (EventHelpers.hasPageLoadHappened(arguments)) return; + * + * // rest of code + * .... + * } + * + * @author This code is based off of code from http://dean.edwards.name/weblog/2005/09/busted/ by Dean + * Edwards, with a modification by me. + * + * @param {String} funcName - a string containing the function to be called. + */ + me.addPageLoadEvent = function(funcName){ + + var func = eval(funcName); + + // for Internet Explorer (using conditional comments) + /*@cc_on @*/ + /*@if (@_win32) + pageLoadEventArray.push(func); + return; + /*@end @*/ + if (isSafari) { // sniff + pageLoadEventArray.push(func); + + if (!safariTimer) { + + safariTimer = setInterval(function(){ + if (/loaded|complete/.test(document.readyState)) { + clearInterval(safariTimer); + + /* + * call the onload handler + * func(); + */ + me.runPageLoadEvents(); + return; + } + set = true; + }, 10); + } + /* for Mozilla */ + } else if (document.addEventListener) { + var x = document.addEventListener("DOMContentLoaded", func, null); + + /* Others */ + } else { + me.addEvent(window, 'load', func); + } + } + + var pageLoadEventArray = new Array(); + + me.runPageLoadEvents = function(e){ + if (isSafari || e.srcElement.readyState == "complete") { + + for (var i = 0; i < pageLoadEventArray.length; i++) { + pageLoadEventArray[i](); + } + } + } + /** + * Determines if either addPageLoadEvent('funcName') or addEvent(window, 'load', funcName) + * has been executed. + * + * @see addPageLoadEvent + * @param {Function} funcArgs - the arguments of the containing. function + */ + me.hasPageLoadHappened = function(funcArgs){ + // If the function already been called, return true; + if (funcArgs.callee.done) + return true; + + // flag this function so we don't do the same thing twice + funcArgs.callee.done = true; + } + + + + /** + * Used in an event method/function to indicate that the default behaviour of the event + * should *not* happen. + * + * @param {Object} e - an event object. + * @return {Boolean} - always false + */ + me.preventDefault = function(e){ + + if (e.preventDefault) { + e.preventDefault(); + } + + try { + e.returnValue = false; + } + catch (ex) { + // do nothing + } + + } + + me.cancelBubble = function(e){ + if (e.stopPropagation) { + e.stopPropagation(); + } + + try { + e.cancelBubble = true; + } + catch (ex) { + // do nothing + } + } + + /* + * Fires an event manually. + * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events + * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/ + * @param {Object} obj - a javascript object. + * @param {String} evType - an event attached to the object. + * @param {Function} fn - the function that is called when the event fires. + * + */ + me.fireEvent = function (element,event, options){ + + if(!element) { + return; + } + + if (element.dispatchEvent) { + // dispatch for firefox + ie9 + others + globalEvent.initEvent(event, true, true); // event type,bubbling,cancelable + return !element.dispatchEvent(globalEvent); + } else if (document.createEventObject){ + return element.fireEvent('on' + event, globalEvent) + } else { + return false; + } + } + + /* + * Detects whether the event "eventName" is supported on a tag with name + * "nodeName". Based on code from + * http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + */ + me.isSupported = function (eventName, nodeName) { + var el = document.createElement(nodeName); + eventName = 'on' + eventName; + var isSupported = (eventName in el); + if (!isSupported) { + el.setAttribute(eventName, 'return;'); + isSupported = typeof el[eventName] == 'function'; + } + el = null; + return isSupported; + } + + + /* EventHelpers.init () */ + function init(){ + // Conditional comment alert: Do not remove comments. Leave intact. + // The detection if the page is secure or not is important. If + // this logic is removed, Internet Explorer will give security + // alerts. + /*@cc_on @*/ + /*@if (@_win32) + + document.write(' + + + + + + + + + + + + + + + + + +
Homing City #1:
Homing City #2:
+ + +
+ +
+ + diff --git a/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Entries b/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Entries new file mode 100644 index 0000000..f2ea187 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Entries @@ -0,0 +1 @@ +/index.html/1.1/Tue Jun 1 04:45:15 2010// diff --git a/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Repository b/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Repository new file mode 100644 index 0000000..d133da1 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Repository @@ -0,0 +1 @@ +screengenerator/htdocs/tests/autocomplete/turnOffInExplorer diff --git a/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Root b/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Root new file mode 100644 index 0000000..6c6a1d0 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/CVS/Root @@ -0,0 +1 @@ +:pserver:tv@192.168.2.25:/home/tv/cvs diff --git a/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/index.html b/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/index.html new file mode 100644 index 0000000..4ab8f72 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/autocomplete/turnOffInExplorer/index.html @@ -0,0 +1,30 @@ + + + + + Untitled Document + + + +
+ + + + + + + + + + + + + + + +
Username:
Password:
+ +
+
+ + diff --git a/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Entries b/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Entries new file mode 100644 index 0000000..4467fce --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Entries @@ -0,0 +1 @@ +/config.xml/1.1/Tue Jun 1 04:45:42 2010// diff --git a/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Repository b/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Repository new file mode 100644 index 0000000..8f4188a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Repository @@ -0,0 +1 @@ +screengenerator/htdocs/tests/autocomplete/xml diff --git a/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Root b/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Root new file mode 100644 index 0000000..6c6a1d0 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/CVS/Root @@ -0,0 +1 @@ +:pserver:tv@192.168.2.25:/home/tv/cvs diff --git a/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/config.xml b/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/config.xml new file mode 100644 index 0000000..71623e0 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/autocomplete/xml/config.xml @@ -0,0 +1,29 @@ + + + + + /bin/getList.cgi?inputValue=@inputValue&inputID=cities + /bin/getList.cgi?inputValue=@inputValue&inputID=cities + + + @listItemsHTML + ]]> + @listItem + ]]> + + Please Wait + + ]]> + + + option + select + + + 1 + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/cssQuery-p.js b/itf/static/js/html5Forms.js/shared/js/cssQuery-p.js new file mode 100644 index 0000000..4a7eb88 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/cssQuery-p.js @@ -0,0 +1,6 @@ +/* + cssQuery, version 2.0.2 (2005-08-19) + Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) + License: http://creativecommons.org/licenses/LGPL/2.1/ +*/ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('7 x=6(){7 1D="2.0.2";7 C=/\\s*,\\s*/;7 x=6(s,A){33{7 m=[];7 u=1z.32.2c&&!A;7 b=(A)?(A.31==22)?A:[A]:[1g];7 1E=18(s).1l(C),i;9(i=0;i<1E.y;i++){s=1y(1E[i]);8(U&&s.Z(0,3).2b("")==" *#"){s=s.Z(2);A=24([],b,s[1])}1A A=b;7 j=0,t,f,a,c="";H(j+~]/;7 20=/[\\s#.:>+~()@]|[^\\s#.:>+~()@]+/g;6 1y(s){8(S.l(s))s=" "+s;5 s.P(20)||[]};7 W=/\\s*([\\s>+~(),]|^|$)\\s*/g;7 I=/([\\s>+~,]|[^(]\\+|^)([#.:@])/g;7 18=6(s){5 s.O(W,"$1").O(I,"$1*$2")};7 1u={1Z:6(){5"\'"},P:/^(\'[^\']*\')|("[^"]*")$/,l:6(s){5 o.P.l(s)},1S:6(s){5 o.l(s)?s:o+s+o},1Y:6(s){5 o.l(s)?s.Z(1,-1):s}};7 1s=6(t){5 1u.1Y(t)};7 E=/([\\/()[\\]?{}|*+-])/g;6 R(s){5 s.O(E,"\\\\$1")};x.15("1j-2H",6(){D[">"]=6(r,f,t,n){7 e,i,j;9(i=0;i=c);5(c%m)==s}});x.15("1j-2m",6(){U=1i("L;/*@2l@8(@\\2k)U=K@2j@*/");8(!U){X=6(e,t,n){5 n?e.2i("*",t):e.X(t)};14=6(e,n){5!n||(n=="*")||(e.2h==n)};1h=1g.1I?6(e){5/1J/i.l(Q(e).1I)}:6(e){5 Q(e).1H.1f!="2g"};1e=6(e){5 e.2f||e.1G||1b(e)};6 1b(e){7 t="",n,i;9(i=0;(n=e.1F[i]);i++){1d(n.1c){F 11:F 1:t+=1b(n);1a;F 3:t+=n.2e;1a}}5 t}}});19=K;5 x}();',62,190,'|||||return|function|var|if|for||||||||pseudoClasses||||test|||this||AttributeSelector|||||||cssQuery|length|push|fr|id||selectors||case|nextElementSibling|while||tests|true|false|thisElement||replace|match|getDocument|regEscape||attributeSelectors|isMSIE|cache||getElementsByTagName|isNaN|slice|child||new|getAttribute|compareNamespace|addModule|previousElementSibling|compareTagName|parseSelector|loaded|break|_0|nodeType|switch|getTextContent|tagName|document|isXML|eval|css|_1|split|ch|parentNode|childElements|nthChild|disabled|firstElementChild|getText|RegExp|Quote|x22|PREFIX|lang|_2|arguments|else|all|links|version|se|childNodes|innerText|documentElement|contentType|xml|parseInt|indeterminate|checked|last|nth|lastElementChild|parse|_3|add|href|String|className|create|NS_IE|remove|toString|ST|select|Array|null|_4|mimeType|lastChild|firstChild|continue|modules|delete|join|caching|error|nodeValue|textContent|HTML|prefix|getElementsByTagNameNS|end|x5fwin32|cc_on|standard||odd|even|enabled|hash|location|target|not|only|empty|root|contains|level3|outerHTML|htmlFor|class|toLowerCase|Function|name|first|level2|prototype|item|scopeName|toUpperCase|ownerDocument|Document|XML|Boolean|URL|unknown|typeof|nextSibling|previousSibling|visited|link|valueOf|clearCache|catch|concat|constructor|callee|try'.split('|'),0,{})) diff --git a/itf/static/js/html5Forms.js/shared/js/frequency-decoder.com/slider.js b/itf/static/js/html5Forms.js/shared/js/frequency-decoder.com/slider.js new file mode 100644 index 0000000..fb1f129 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/frequency-decoder.com/slider.js @@ -0,0 +1,797 @@ +/* + Unobtrusive Slider Control by frequency decoder v2.6 (http://www.frequency-decoder.com/) + + Released under a creative commons Attribution-Share Alike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/) + + You are free: + + * to copy, distribute, display, and perform the work + * to make derivative works + * to make commercial use of the work + + Under the following conditions: + + by Attribution. + -------------- + You must attribute the work in the manner specified by the author or licensor. + + sa + -- + Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. + + * For any reuse or distribution, you must make clear to others the license terms of this work. + * Any of these conditions can be waived if you get permission from the copyright holder. +*/ + +var fdSliderController = (function() { + var sliders = {}, + uniqueid = 0, + mouseWheelEnabled = true; + + var removeMouseWheelSupport = function() { + mouseWheelEnabled = false; + }; + var addEvent = function(obj, type, fn) { + if( obj.attachEvent ) { + obj["e"+type+fn] = fn; + obj[type+fn] = function(){obj["e"+type+fn]( window.event );}; + obj.attachEvent( "on"+type, obj[type+fn] ); + } else { obj.addEventListener( type, fn, true ); } + }; + var removeEvent = function(obj, type, fn) { + if( obj.detachEvent ) { + try { + obj.detachEvent( "on"+type, obj[type+fn] ); + obj[type+fn] = null; + } catch(err) { }; + } else { obj.removeEventListener( type, fn, true ); } + }; + var stopEvent = function(e) { + if(e == null) e = document.parentWindow.event; + if(e.stopPropagation) { + e.stopPropagation(); + e.preventDefault(); + }; + + /*@cc_on@*/ + /*@if(@_win32) + e.cancelBubble = true; + e.returnValue = false; + /*@end@*/ + + return false; + }; + var joinNodeLists = function() { + if(!arguments.length) { return []; }; + var nodeList = []; + for (var i = 0; i < arguments.length; i++) { + for (var j = 0, item; item = arguments[i][j]; j++) { nodeList[nodeList.length] = item; }; + }; + return nodeList; + }; + + // Function by Artem B. with a minor change by f.d. + var parseCallbacks = function(cbs) { + if(cbs == null) { return {}; }; + var func, + type, + cbObj = {}, + parts, + obj; + for(var i = 0, fn; fn = cbs[i]; i++) { + type = fn.match(/(fd_slider_cb_(update|create|destroy|redraw|move|focus|blur|enable|disable)_)([^\s|$]+)/i)[1]; + fn = fn.replace(new RegExp("^"+type), "").replace(/-/g, "."); + type = type.replace(/^fd_slider_cb_/i, "").replace(/_$/, ""); + + try { + if(fn.indexOf(".") != -1) { + parts = fn.split('.'); + obj = window; + for (var x = 0, part; part = obj[parts[x]]; x++) { + if(part instanceof Function) { + (function() { + var method = part; + func = function (data) { method.apply(obj, [data]) }; + })(); + } else { + obj = part; + }; + }; + } else { + func = window[fn]; + }; + + if(!(func instanceof Function)) continue; + if(!(type in cbObj)) { cbObj[type] = []; }; + cbObj[type][cbObj[type].length] = func; + } catch (err) {}; + }; + return cbObj; + }; + + var parseClassNames = function(cbs) { + if(cbs == null) { return ""; }; + var cns = []; + for(var i = 0, cn; cn = cbs[i]; i++) { + cns[cns.length] = cn.replace(/^fd_slider_cn_/, ""); + }; + return cns.join(" "); + }; + var createSlider = function(options) { + if(!options || !options.inp || !options.inp.id) { return false; }; + destroySingleSlider(options.inp.id); + sliders[options.inp.id] = new fdSlider(options); + return true; + }; + var init = function( elem ) { + var ranges = /fd_range_([-]{0,1}[0-9]+(d[0-9]+){0,1}){1}_([-]{0,1}[0-9]+(d[0-9]+){0,1}){1}/i, + increment = /fd_inc_([-]{0,1}[0-9]+(d[0-9]+){0,1}){1}/, + kIncrement = /fd_maxinc_([-]{0,1}[0-9]+(d[0-9]+){0,1}){1}/, + callbacks = /((fd_slider_cb_(update|create|destroy|redraw|move|focus|blur|enable|disable)_)([^\s|$]+))/ig, + classnames = /(fd_slider_cn_([a-zA-Z0-9_\-]+))/ig, + inputs = elem && elem.tagName && elem.tagName.search(/input|select/i) != -1 ? [elem] : joinNodeLists(document.getElementsByTagName('input'), document.getElementsByTagName('select')), + range, + tmp, + options; + + for(var i = 0, inp; inp = inputs[i]; i++) { + if((inp.tagName.toLowerCase() == "input" && inp.type == "text" && (inp.className.search(ranges) != -1 || inp.className.search(/fd_slider/) != -1)) || (inp.tagName.toLowerCase() == "select" && inp.className.search(/fd_slider/) != -1)) { + // If we haven't been passed a specific id and the slider exists then continue + if(!elem && inp.id && document.getElementById("fd-slider-"+inp.id)) { continue; }; + + // Create an id if necessary + if(!inp.id) { inp.id == "sldr" + uniqueid++; }; + + options = { + inp: inp, + inc: inp.className.search(increment) != -1 ? inp.className.match(increment)[0].replace("fd_inc_", "").replace("d",".") : "1", + maxInc: inp.className.search(kIncrement) != -1 ? inp.className.match(kIncrement)[0].replace("fd_maxinc_", "").replace("d",".") : false, + range: [0,100], + callbacks: parseCallbacks(inp.className.match(callbacks)), + classNames: parseClassNames(inp.className.match(classnames)), + tween: inp.className.search(/fd_tween/i) != -1, + vertical: inp.className.search(/fd_vertical/i) != -1, + hideInput: inp.className.search(/fd_hide_input/i) != -1, + clickJump: inp.className.search(/fd_jump/i) != -1, + fullARIA: inp.className.search(/fd_full_aria/i) != -1, + noMouseWheel: inp.className.search(/fd_disable_mousewheel/i) != -1 + }; + + if(inp.tagName.toLowerCase() == "select") { + options.range = [0, inp.options.length - 1]; + } else if(inp.className.search(ranges) != -1) { + range = inp.className.match(ranges)[0].replace("fd_range_", "").replace(/d/g,".").split("_"); + options.range = [range[0], range[1]]; + }; + + createSlider(options); + }; + }; + + return true; + }; + var destroySingleSlider = function(id) { + if(id in sliders) { + sliders[id].destroy(); + delete sliders[id]; + return true; + }; + return false; + }; + var destroyAllsliders = function(e) { + for(slider in sliders) { sliders[slider].destroy(); }; + }; + var unload = function(e) { + destroyAllsliders(); + sliders = null; + removeEvent(window, "unload", unload); + removeEvent(window, "resize", resize); + removeOnloadEvent(); + }; + var resize = function(e) { + for(slider in sliders) { sliders[slider].onResize(); }; + }; + var removeOnloadEvent = function() { + removeEvent(window, "load", init); + /*@cc_on@*/ + /*@if(@_win32) + removeEvent(window, "load", function() { setTimeout(onload, 200) }); + /*@end@*/ + }; + function fdSlider(options) { + + var inp = options.inp, + disabled = false, + tagName = inp.tagName.toLowerCase(), + min = +options.range[0], + max = +options.range[1], + range = Math.abs(max - min), + inc = tagName == "select" ? 1 : +options.inc||1, + maxInc = options.maxInc && options.maxInc != 'undefined' ? options.maxInc : inc * 2; + // alert(options.maxInc + "," + maxInc) + + var precision = options.inc.search(".") != -1 ? options.inc.substr(options.inc.indexOf(".")+1, options.inc.length - 1).length : 0, + steps = Math.ceil(range / inc), + useTween = !!options.tween, + fullARIA = !!options.fullARIA, + hideInput = !!options.hideInput, + clickJump = useTween ? false : !!options.clickJump, + vertical = !!options.vertical, + callbacks = options.callbacks, + classNames = options.classNames, + noMWheel = !!options.noMouseWheel, + timer = null, + kbEnabled = true, + sliderH = 0, + sliderW = 0, + tweenX = 0, + tweenB = 0, + tweenC = 0, + tweenD = 0, + frame = 0, + x = 0, + y = 0, + maxPx = 0, + handlePos = 0, + destPos = 0, + mousePos = 0, + deltaPx = 0, + stepPx = 0, + self = this, + changeList = {}, + initVal = null, + outerWrapper, + wrapper, + handle, + bar; + + if(max < min) { + inc = -inc; + maxInc = -maxInc; + }; + + function disableSlider(noCallback) { + if(disabled && !noCallback) { return; }; + + try { + removeEvent(outerWrapper, "mouseover", onMouseOver); + removeEvent(outerWrapper, "mouseout", onMouseOut); + removeEvent(outerWrapper, "mousedown", onMouseDown); + removeEvent(handle, "focus", onFocus); + removeEvent(handle, "blur", onBlur); + if(!window.opera) { + removeEvent(handle, "keydown", onKeyDown); + removeEvent(handle, "keypress", onKeyPress); + } else { + removeEvent(handle, "keypress", onKeyDown); + }; + removeEvent(handle, "mousedown", onHandleMouseDown); + removeEvent(handle, "mouseup", onHandleMouseUp); + + if(mouseWheelEnabled && !noMWheel) { + if (window.addEventListener && !window.devicePixelRatio) window.removeEventListener('DOMMouseScroll', trackMouseWheel, false); + else { + removeEvent(document, "mousewheel", trackMouseWheel); + removeEvent(window, "mousewheel", trackMouseWheel); + }; + }; + } catch(err) {}; + + clearTimeout(timer); + outerWrapper.className = outerWrapper.className.replace("slider-disabled", "") + " slider-disabled"; + outerWrapper.setAttribute("aria-disabled", true); + inp.disabled = disabled = true; + + if(!noCallback) { + callback("disable"); + }; + }; + + function enableSlider(noCallback) { + if(!disabled && !noCallback) return; + addEvent(outerWrapper, "mouseover", onMouseOver); + addEvent(outerWrapper, "mouseout", onMouseOut); + addEvent(outerWrapper, "mousedown", onMouseDown); + if(!window.opera) { + addEvent(handle, "keydown", onKeyDown); + addEvent(handle, "keypress", onKeyPress); + } else { + addEvent(handle, "keypress", onKeyDown); + }; + addEvent(handle, "focus", onFocus); + addEvent(handle, "blur", onBlur); + addEvent(handle, "mousedown", onHandleMouseDown); + addEvent(handle, "mouseup", onHandleMouseUp); + + outerWrapper.className = outerWrapper.className.replace("slider-disabled", ""); + outerWrapper.setAttribute("aria-disabled", false); + inp.disabled = disabled = false; + + if(!noCallback) { + callback("enable"); + }; + }; + + function destroySlider() { + try { + disableSlider(); + outerWrapper.parentNode.removeChild(outerWrapper); + } catch(err) {}; + + wrapper = bar = handle = outerWrapper = timer = null; + callback("destroy"); + callbacks = null; + }; + + function redraw() { + locate(); + // Internet Explorer requires the try catch + try { + var sW = outerWrapper.offsetWidth, + sH = outerWrapper.offsetHeight, + hW = handle.offsetWidth, + hH = handle.offsetHeight, + bH = bar.offsetHeight, + bW = bar.offsetWidth; + + maxPx = vertical ? sH - hH : sW - hW; + stepPx = maxPx / steps; + deltaPx = maxPx / Math.ceil(range / maxInc); + + + sliderW = sW; + sliderH = sH; + + valueToPixels(); + } catch(err) { }; + callback("redraw"); + }; + + function callback(type) { + var cbObj = {"elem":inp, "value":tagName == "select" ? inp.options[inp.selectedIndex].value : inp.value}; + if(type in callbacks) { + for(var i = 0, func; func = callbacks[type][i]; i++) { + func(cbObj); + }; + }; + }; + + function onFocus(e) { + outerWrapper.className = outerWrapper.className.replace('focused','') + ' focused'; + if(mouseWheelEnabled && !noMWheel) { + addEvent(window, 'DOMMouseScroll', trackMouseWheel); + addEvent(document, 'mousewheel', trackMouseWheel); + if(!window.opera) addEvent(window, 'mousewheel', trackMouseWheel); + }; + callback("focus"); + }; + + function onBlur(e) { + outerWrapper.className = outerWrapper.className.replace(/focused|fd-fc-slider-hover|fd-slider-hover/g,''); + if(mouseWheelEnabled && !noMWheel) { + removeEvent(document, 'mousewheel', trackMouseWheel); + removeEvent(window, 'DOMMouseScroll', trackMouseWheel); + if(!window.opera) removeEvent(window, 'mousewheel', trackMouseWheel); + }; + callback("blur"); + }; + + function trackMouseWheel(e) { + if(!kbEnabled) return; + e = e || window.event; + var delta = 0; + + if (e.wheelDelta) { + delta = e.wheelDelta/120; + if (window.opera && window.opera.version() < 9.2) delta = -delta; + } else if(e.detail) { + delta = -e.detail/3; + }; + + if(vertical) { delta = -delta; }; + + if(delta) { + var xtmp = vertical ? handle.offsetTop : handle.offsetLeft; + xtmp = (delta < 0) ? Math.ceil(xtmp + deltaPx) : Math.floor(xtmp - deltaPx); + pixelsToValue(Math.min(Math.max(xtmp, 0), maxPx)); + } + return stopEvent(e); + }; + + function onKeyPress(e) { + e = e || document.parentWindow.event; + if ((e.keyCode >= 33 && e.keyCode <= 40) || !kbEnabled || e.keyCode == 45 || e.keyCode == 46) { + return stopEvent(e); + }; + return true; + }; + + function onKeyDown(e) { + if(!kbEnabled) return true; + + e = e || document.parentWindow.event; + var kc = e.keyCode != null ? e.keyCode : e.charCode; + + if ( kc < 33 || (kc > 40 && (kc != 45 && kc != 46))) return true; + + var value = tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex; + if(isNaN(value) || value < Math.min(min,max)) value = Math.min(min,max); + + if( kc == 37 || kc == 40 || kc == 46 || kc == 34) { + // left, down, ins, page down + value -= (e.ctrlKey || kc == 34 ? maxInc : inc) + } else if( kc == 39 || kc == 38 || kc == 45 || kc == 33) { + // right, up, del, page up + value += (e.ctrlKey || kc == 33 ? maxInc : inc) + } else if( kc == 35 ) { + // max + value = max; + } else if( kc == 36 ) { + // min + value = min; + }; + + valueToPixels(value); + callback("update"); + + // Opera doesn't let us cancel key events so the up/down arrows and home/end buttons will scroll the screen - which sucks + return stopEvent(e); + }; + + function onMouseOver( e ) { + /*@cc_on@*/ + /*@if(@_jscript_version <= 5.6) + if(this.className.search(/focused/) != -1) { + this.className = this.className.replace("fd-fc-slider-hover", "") +' fd-fc-slider-hover'; + return; + } + /*@end@*/ + this.className = this.className.replace(/fd\-slider\-hover/g,"") +' fd-slider-hover'; + }; + + function onMouseOut( e ) { + /*@cc_on@*/ + /*@if(@_jscript_version <= 5.6) + if(this.className.search(/focused/) != -1) { + this.className = this.className.replace("fd-fc-slider-hover", ""); + return; + } + /*@end@*/ + this.className = this.className.replace(/fd\-slider\-hover/g,""); + }; + + function onHandleMouseUp(e) { + e = e || window.event; + removeEvent(document, 'mousemove', trackMouse); + removeEvent(document, 'mouseup', onHandleMouseUp); + + kbEnabled = true; + + // Opera fires the blur event when the mouseup event occurs on a button, so we attept to force a focus + if(window.opera) try { setTimeout(function() { onfocus(); }, 0); } catch(err) {}; + document.body.className = document.body.className.replace(/slider-drag-vertical|slider-drag-horizontal/g, ""); + + return stopEvent(e); + }; + + function onHandleMouseDown(e) { + e = e || window.event; + mousePos = vertical ? e.clientY : e.clientX; + handlePos = parseInt(vertical ? handle.offsetTop : handle.offsetLeft)||0; + kbEnabled = false; + + clearTimeout(timer); + timer = null; + + addEvent(document, 'mousemove', trackMouse); + addEvent(document, 'mouseup', onHandleMouseUp); + + // Force a "focus" on the button on mouse events + if(window.devicePixelRatio || (document.all && !window.opera)) try { setTimeout(function() { handle.focus(); }, 0); } catch(err) {}; + + document.body.className += " slider-drag-" + (vertical ? "vertical" : "horizontal"); + }; + + function onMouseUp( e ) { + e = e || window.event; + removeEvent(document, 'mouseup', onMouseUp); + if(!useTween) { + clearTimeout(timer); + timer = null; + kbEnabled = true; + }; + return stopEvent(e); + }; + + function trackMouse( e ) { + e = e || window.event; + pixelsToValue(snapToNearestValue(handlePos + (vertical ? e.clientY - mousePos : e.clientX - mousePos))); + }; + + function onMouseDown( e ) { + e = e || window.event; + var targ; + if (e.target) targ = e.target; + else if (e.srcElement) targ = e.srcElement; + if (targ.nodeType == 3) targ = targ.parentNode; + + if(targ.className.search("fd-slider-handle") != -1) { return true; }; + + try { setTimeout(function() { handle.focus(); }, 0); } catch(err) { }; + + clearTimeout(timer); + locate(); + + timer = null; + kbEnabled = false; + + var posx = 0, + sLft = 0, + sTop = 0; + + // Internet Explorer doctype woes + if (document.documentElement && document.documentElement.scrollTop) { + sTop = document.documentElement.scrollTop; + sLft = document.documentElement.scrollLeft; + } else if (document.body) { + sTop = document.body.scrollTop; + sLft = document.body.scrollLeft; + }; + + if (e.pageX) posx = vertical ? e.pageY : e.pageX; + else if (e.clientX) posx = vertical ? e.clientY + sTop : e.clientX + sLft; + posx -= vertical ? y + Math.round(handle.offsetHeight / 2) : x + Math.round(handle.offsetWidth / 2); + posx = snapToNearestValue(posx); + + if(useTween) { + tweenTo(posx); + } else if(clickJump) { + pixelsToValue(posx); + } else { + addEvent(document, 'mouseup', onMouseUp); + destPos = posx; + onTimer(); + }; + }; + + function incrementHandle(numOfSteps) { + var value = tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex; + if(isNaN(value) || value < Math.min(min,max)) value = Math.min(min,max); + value += inc * numOfSteps; + valueToPixels(value); + }; + + function snapToNearestValue(px) { + var rem = px % stepPx; + if(rem && rem >= (stepPx / 2)) { px += (stepPx - rem); } + else { px -= rem; }; + return Math.min(Math.max(parseInt(px, 10), 0), maxPx); + }; + + function locate(){ + var curleft = 0, + curtop = 0, + obj = outerWrapper; + + // Try catch for IE's benefit + try { + while (obj.offsetParent) { + curleft += obj.offsetLeft; + curtop += obj.offsetTop; + obj = obj.offsetParent; + }; + } catch(err) {}; + x = curleft; + y = curtop; + }; + + function onTimer() { + var xtmp = vertical ? handle.offsetTop : handle.offsetLeft; + xtmp = Math.round((destPos < xtmp) ? Math.max(destPos, Math.floor(xtmp - deltaPx)) : Math.min(destPos, Math.ceil(xtmp + deltaPx))); + pixelsToValue(xtmp); + if(xtmp != destPos) timer = setTimeout(onTimer, steps > 20 ? 50 : 100); + else kbEnabled = true; + }; + + var tween = function(){ + frame++; + var c = tweenC, + d = 20, + t = frame, + b = tweenB, + x = Math.ceil((t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b); + + pixelsToValue(t == d ? tweenX : x); + callback("move"); + if(t!=d) timer = setTimeout(tween, 20); + else { + clearTimeout(timer); + timer = null; + kbEnabled = true; + }; + }; + + function tweenTo(tx){ + kbEnabled = false; + tweenX = parseInt(tx, 10); + tweenB = parseInt(vertical ? handle.style.top : handle.style.left, 10); + tweenC = tweenX - tweenB; + tweenD = 20; + frame = 0; + if(!timer) timer = setTimeout(tween, 20); + }; + + function pixelsToValue(px) { + //jslog.debug(DebugHelpers.getStackTrace()) + handle.style[vertical ? "top" : "left"] = px + "px"; + var val = min + (Math.round(px / stepPx) * inc); + setInputValue((tagName == "select" || inc == 1) ? Math.round(val) : val); + }; + + function valueToPixels(val) { + var value = isNaN(val) ? tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex : val; + if(isNaN(value) || value < Math.min(min,max)) value = Math.min(min,max); + else if(value > Math.max(min,max)) value = Math.max(min,max); + setInputValue(value); + handle.style[vertical ? "top" : "left"] = Math.round(((value - min) / inc) * stepPx) + "px"; + }; + + function setInputValue(val) { + val = isNaN(val) ? min : val; + if(tagName == "select") { + try { + val = parseInt(val, 10); + if(inp.selectedIndex == val) return; + inp.options[val].selected = true; + } catch (err) {}; + } else { + val = (min + (Math.round((val - min) / inc) * inc)).toFixed(precision); + if(inp.value == val) return; + inp.value = val; + }; + updateAriaValues(); + callback("update"); + }; + + function findLabel() { + var label; + if(inp.parentNode && inp.parentNode.tagName.toLowerCase() == "label") label = inp.parentNode; + else { + var labelList = document.getElementsByTagName('label'); + // loop through label array attempting to match each 'for' attribute to the id of the current element + for(var i = 0, lbl; lbl = labelList[i]; i++) { + // Internet Explorer requires the htmlFor test + if((lbl['htmlFor'] && lbl['htmlFor'] == inp.id) || (lbl.getAttribute('for') == inp.id)) { + label = lbl; + break; + }; + }; + }; + if(label && !label.id) { label.id = inp.id + "_label"; }; + return label; + }; + + function updateAriaValues() { + handle.setAttribute("aria-valuenow", tagName == "select" ? inp.options[inp.selectedIndex].value : inp.value); + handle.setAttribute("aria-valuetext", tagName == "select" ? inp.options[inp.selectedIndex].text : inp.value); + }; + + function onChange( e ) { + valueToPixels(); + callback("update"); + return true; + }; + + (function() { + if(hideInput) { inp.className += " fd_hide_slider_input"; } + else { addEvent(inp, 'change', onChange); }; + + outerWrapper = document.createElement('div'); + outerWrapper.className = "fd-slider" + (vertical ? "-vertical " : " ") + classNames; + outerWrapper.id = "fd-slider-" + inp.id; + + wrapper = document.createElement('span'); + wrapper.className = "fd-slider-inner"; + + bar = document.createElement('span'); + bar.className = "fd-slider-bar"; + + if(fullARIA) { + handle = document.createElement('span'); + handle.setAttribute(!/*@cc_on!@*/false ? "tabIndex" : "tabindex", "0"); + } else { + handle = document.createElement('button'); + handle.setAttribute("type", "button"); + }; + + handle.className = "fd-slider-handle"; + handle.appendChild(document.createTextNode(String.fromCharCode(160))); + + outerWrapper.appendChild(wrapper); + outerWrapper.appendChild(bar); + outerWrapper.appendChild(handle); + + inp.parentNode.insertBefore(outerWrapper, inp); + + /*@cc_on@*/ + /*@if(@_win32) + handle.unselectable = "on"; + bar.unselectable = "on"; + wrapper.unselectable = "on"; + outerWrapper.unselectable = "on"; + /*@end@*/ + + // Add ARIA accessibility info programmatically + handle.setAttribute("role", "slider"); + handle.setAttribute("aria-valuemin", min); + handle.setAttribute("aria-valuemax", max); + + var lbl = findLabel(); + if(lbl) { + handle.setAttribute("aria-labelledby", lbl.id); + handle.id = "fd-slider-handle-" + inp.id; + /*@cc_on + /*@if(@_win32) + lbl.setAttribute("htmlFor", handle.id); + @else @*/ + lbl.setAttribute("for", handle.id); + /*@end + @*/ + }; + + // Are there page instructions - the creation of the instructions has been left up to you fine reader... + if(document.getElementById("fd_slider_describedby")) { + handle.setAttribute("aria-describedby", "fd_slider_describedby"); // aaa:describedby + }; + + if(inp.getAttribute("disabled") == true) { + disableSlider(true); + } else { + enableSlider(true); + }; + + updateAriaValues(); + callback("create"); + redraw(); + })(); + + return { + onResize: function(e) { if(outerWrapper.offsetHeight != sliderH || outerWrapper.offsetWidth != sliderW) { redraw(); }; }, + destroy: function() { destroySlider(); }, + reset: function() { valueToPixels(); }, + increment: function(n) { incrementHandle(n); }, + disable: function() { disableSlider(); }, + enable: function() { enableSlider(); } + }; + }; + + addEvent(window, "load", init); + addEvent(window, "unload", unload); + addEvent(window, "resize", resize); + /*@cc_on@*/ + /*@if(@_win32) + var onload = function(e) { + for(slider in sliders) { sliders[slider].reset(); } + }; + addEvent(window, "load", function() { setTimeout(onload, 200) }); + /*@end@*/ + + return { + create: function(elem) { init(elem) }, + createSlider: function(opts) { createSlider(opts); }, + destroyAll: function() { destroyAllsliders(); }, + destroySlider: function(id) { return destroySingleSlider(id); }, + redrawAll: function() { resize(); }, + increment: function(id, numSteps) { if(!(id in sliders)) { return false; }; sliders[id].increment(numSteps); }, + addEvent: addEvent, + removeEvent: removeEvent, + stopEvent: stopEvent, + updateSlider: function(id) { if(!(id in sliders)) { return false; }; sliders[id].reset(); }, + disableMouseWheel: function() { removeMouseWheelSupport(); }, + removeOnLoadEvent: function() { removeOnloadEvent(); }, + disableSlider: function(id) { if(!(id in sliders)) { return false; }; sliders[id].disable(); }, + enableSlider: function(id) { if(!(id in sliders)) { return false; }; sliders[id].enable(); } + } +})(); + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/html5.js b/itf/static/js/html5Forms.js/shared/js/html5.js new file mode 100644 index 0000000..84e74f4 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/html5.js @@ -0,0 +1,121 @@ +// For discussion and comments, see: http://remysharp.com/2009/01/07/html5-enabling-script/ +(function(){if(!/*@cc_on!@*/0)return;var e = "abbr,article,aside,audio,canvas,datalist,details,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video".split(','),i=e.length;while(i--){document.createElement(e[i])}})() + +var html5 = new function () { + var me = this; + + /** + * Given an HTML or XML object, find the an attribute by name. + * + * @param {Object} obj - a DOM object. + * @param {String} attrName - the name of an attribute inside the DOM object. + * @return {Object} - the attribute object or null if there isn't one. + */ + me.getAttributeByName = function (obj, attrName) { + var i; + + var attributes = obj.attributes; + for (i=0; i 534, + hasBadValidationImplementation = !hasNativeBubbles; // making another var for this in case we have more criteria in the future. + + + var globalEvent = document.addEventListener?document.createEvent("HTMLEvents"):null; + + function getBrowserLanguage() { + var r = navigator.language; + if (!r) { + r = navigator.browserLanguage; + } + return r; + } + + + me.start = function () { + + var split = navigator.userAgent.split('Firefox/'); + + //Firefox 3.6 gives a wierd error when using the Twitter API + //unless you do this onload. + if (split.length>=1 && parseFloat(split[1]) <= 3.6) { + EventHelpers.addEvent(window, 'load', me.init); + } else { + me.init(); + } + } + + me.init = function () { + var scriptNodes = document.getElementsByTagName('script'); + + for (var i=0; i= 0) { + isScriptCompressed = true; + } + break; + } + } + + if (scriptNode) { + if (window.yepnope) { + var inputSupport = Modernizr.inputtypes; + /* let's load the supporting scripts according to what is in data-webforms2-support */ + var supportArray = scriptNode.getAttribute('data-webforms2-support'); + me.forceJSValidation = (scriptNode.getAttribute('data-webforms2-force-js-validation') == 'true'); + me.turnOffValidation = (scriptNode.getAttribute('data-webforms2-turn-off-validation') == 'true'); + me.forceJSDatePicker = (scriptNode.getAttribute('data-webforms2-force-js-date-picker') == 'true'); + if (!supportArray) { + return; + } else if (trim(supportArray) == 'all') { + supportArray="validation,number,color,date,ouput,range,placeholder"; + } + + supportArray = supportArray.split(','); + var toLoad = []; + var toRunAfterLoad = []; + var loadHTML5Widgets = false; + + + for (var i=0; i<\/script>'); + + var script = document.getElementById("__ie_onload"); + + me.addEvent(script, 'readystatechange', me.runPageLoadEvents); + + /*@end @*/ + + } + if (!window.html5Forms) { + init(); + } +} + +html5Forms.start(); diff --git a/itf/static/js/html5Forms.js/shared/js/html5Widgets.js b/itf/static/js/html5Forms.js/shared/js/html5Widgets.js new file mode 100644 index 0000000..0e571d5 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/html5Widgets.js @@ -0,0 +1,1417 @@ +/******************************************************************************* + * This notice must be untouched at all times. + * + * This javascript library contains helper routines to assist with event + * handling consinstently among browsers + * + * html5Widgets.js v.1.1 by Zoltan Hawryluk + * latest version and documentation available at http://www.useragentman.com/ + * + * Changelog: + * version 1.0: initial release + * version 1.1: implemented oninput method for form elements for unsupported browsers + * fix IE9 to ensure backspace and delete keys fire an oninput event. + * version 1.2: Added Number Element Widget + * + * released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + *******************************************************************************/ + +var html5Widgets = new function(){ + var me = this; + + + var delayEventTimeout = null; + + me.inputNodes = new Array(); + me.outputNodes = new Array(); + me.formElements = null; + me.placeholderNodes = new Array(); + me.dummyLink = document.createElement('input'); + var quoteRe = /\"/g; + + var dummyIDCount = 0; + var supportsNatively = new Object(); + + var isBadChrome = navigator.userAgent.indexOf('Chrome'); + var valueRe = /this\.value/g; + var varRe = /([a-zA-Z][a-zA-Z0-9]*\.value)/g; + var isDebug; + + var isIE9 = false; + + /*@cc_on + @if (@_jscript_version == 9) + isIE9 = true; + @end + @*/ + + + + me.init = function(){ + + if (EventHelpers.hasPageLoadHappened(arguments)) { + return; + } + + supportsNatively['oninput'] = EventHelpers.isSupported('input', 'form'); + + isDebug = CSSHelpers.isMemberOfClass(document.body, 'html5Widgets-debug') + + // dummy link setup + me.type = 'text' + me.dummyLink.style.position = 'absolute'; + me.dummyLink.style.top = '-200px'; + document.body.appendChild(me.dummyLink) + + var inputSupport = Modernizr.input + + if (!inputSupport['placeholder']) { + setPlaceholders(); + } + indexOutputNodes(); + insertElements(); + + me.resolveOutputs(); + + /* document.getElementById('supports').innerHTML = + DebugHelpers.getProperties(Modernizr.inputtypes, 'inputtypes') + " " + + DebugHelpers.getProperties(Modernizr.input, 'input') + " " + + DebugHelpers.getProperties(Modernizr, 'Modernizr'); */ + + } + + + + function supports_input_placeholder() { + var i = document.createElement('input'); + return 'placeholder' in i; + } + + function setPlaceholders() { + + var nodes = [document.getElementsByTagName('input'), document.getElementsByTagName('textarea')]; + + for (var i=0; i= 0, + cache : true, + inputField : me.node.id, // ID of the input field + ifFormat : formatString, // the date format + button : me.node.id // ID of the button + } + ); + + + + + + EventHelpers.addEvent(me.node, 'click', forceCalToTop); + EventHelpers.addEvent(me.node, 'focus', focusEvent) + EventHelpers.addEvent(me.node, 'keypress', openCalendar); + EventHelpers.addEvent(me.node, 'blur', closeCalendar); + + EventHelpers.addEvent(me.node, 'keypress', keydownEvent) + //me.node.type = "text"; + + // this will call submitEvent() after the form has been validated by + // webforms2.js + if (window.$wf2) { + $wf2.callBeforeValidation.push(prepareForSubmission); + $wf2.callAfterValidation.push(validationEvent); + } + + } + + function placeUTCInfo() { + + var label = document.createElement('span'); + label.innerHTML = "UTC"; + label.style.paddingLeft = "5px"; + + DOMHelpers.insertAfter(me.node, label); + + var width = label.offsetWidth; + + me.node.style.width = (me.node.offsetWidth - 5 - width) + 'px'; + + } + + function prepareForSubmission() { + var splitVals; + + switch (me.type) { + case "datetime": + case "datetime-local": + + originalVisibilityState = me.node.style.visibility; + me.node.style.visibility = 'hidden'; + if (me.node.value.match(displayDateTimeValueRe)) { + splitVals = me.node.value.split(' '); + me.node.value = splitVals[0] + "T" + splitVals[1]; + } + + switch (me.type) { + case "datetime-local": + break; + case "datetime": + if (me.node.value != "") { + me.node.value += "Z"; + } + } + + } + } + + function prepareForDisplay() { + switch(me.type) { + case "datetime": + case "datetime-local": + if ( me.node.value.match(badDateTimeValueRe)) { + me.node.value = me.node.value.replace(/T/, ' ').replace(/Z/, ''); + } + if (originalVisibilityState != null) { + me.node.style.visibility = originalVisibilityState; + } + + } + + + } + + function validationEvent(e, hasValidated) { + if (!hasValidated) { + prepareForDisplay(); + } + } + + function forceCalToTop(e) { + var cal = window.calendar; + + cal.element.style.zIndex = 100; + } + + function focusEvent(e) { + var el = EventHelpers.getEventTarget(e); + EventHelpers.fireEvent(el, 'click') + } + + function openCalendar(e) { + + var cal = window.calendar; + + cal.element.style.zIndex = 100; + if (cal.open != undefined) { + cal.open(); + } + //EventHelpers.fireEvent(this, 'blur'); + //EventHelpers.fireEvent(this, 'focus'); + } + + function closeCalendar(e){ + + var cal = window.calendar; + if (cal) { + cal.hide(); + } + } + + function keydownEvent(e) { + + var c = EventHelpers.getKey(e); + + switch(c){ + case 13: + html5Widgets.dummyLink.focus(); + this.focus(); + EventHelpers.preventDefault(e); + openCalendar(e); + break; + case 9: + closeCalendar(e); + break; + default: + EventHelpers.preventDefault(e); + break; + } + + + } + + function submitEvent(e) { + prepareForSubmission(); + } + + init(); + + } + + + + + + + + /* + * Output Element + */ + function OutputElement (node) { + var me = this; + me.node = node; + + var value; + var valueFormula; + var parentForm; + + + + function init () { + parentForm = DOMHelpers.getAncestorByTagName(node, 'form'); + if (!parentForm.id) { + parentForm.id = getNextDummyID(); + } + + valueFormula = html5Widgets.getValueFormula(DOMHelpers.getAttributeValue(me.node, 'onforminput'), parentForm); + } + + + + me.resolve = function () { + if (valueFormula == null) { + return; + } else { + eval(valueFormula); + me.node.innerHTML = value; + me.node.value = value; + } + + } + + + init(); + } + + function ColorElement (node) { + var me = this; + + /* note: color picker setPad() is what you are looking for */ + me.node = node; + + function init () { + if (!window.jscolor) { + showError('jscolor script must be included in order for the color input type to work in this browser. See documentation for more details.') + } + CSSHelpers.addClass(me.node, 'color'); + CSSHelpers.addClass(me.node, '{hash:true,caps:false}'); + me.node.type = "text"; + } + + + init(); + } + + /* + * NumberElement: refactored from http://www.kethinov.com/jsstepper.php. + */ + + function NumberElement (node) { + var me = this, + min = parseFloat(DOMHelpers.getAttributeValue(node, 'min')), + max = parseFloat(DOMHelpers.getAttributeValue(node, 'max')), + step = parseFloat(DOMHelpers.getAttributeValue(node, 'step')); + + me.node = node; + + + + if (isNaN(step)) { + // we don't have to create the up and down arraw widgets + return; + } + + EventHelpers.addEvent(node, 'keyup', keyUpEvent); + + + function keyUpEvent() { + + if (isNumeric(this.value)) { + + /* if (this.value > max) this.value = max; + else if (this.value < min) this.value = this.min; */ + + } else if (this.value != '') { + var val = parseFloat(this.value); + if (isNaN(val)) { + this.value = ''; + } else { + this.value = val; + } + } + + } + + + + function nearestValid(value, direction) { + + var n = (value - min)/step, + r; + //alert(StringHelpers.sprintf("n: %s, value: %s, min: %s, step: %s", n, value, min, step)) + if (n == parseInt(n)) { + r = value; + } else { + + if (direction < 0) { + n = Math.floor(n + 1); + } else { + n = Math.ceil(n -1); + } + + r = min + step * n; + } + + if (r > max) { + r -= step; + } else if (r < min) { + r+= step + } + + return r; + } + + function buttonMouseDownEvent(e) { + + var buttonType = this.className; + var stepMult = step; + if (buttonType == 'dnbutton') { + stepMult = -step; + } + + + var min = this.min; + var max = this.max; + if ( + (stepMult < 0 && (node.value > min || isNaN(min))) || + (stepMult > 0 && (node.value < max || isNaN(max))) + ) { + setValue(me.node, nearestValid(parseFloat(node.value) + stepMult, stepMult)); + } + + var delayedOnce = false; + var date = new Date(); + var curDate = null; + + this.interval = setInterval(function() { + if (!delayedOnce) { + curDate = new Date(); + if (curDate - date > 500) delayedOnce = true; + } + else if ( + (stepMult < 0 && (node.value > min || isNaN(min))) || + (stepMult > 0 && (node.value < max || isNaN(max))) + ) { + setValue(me.node, nearestValid(parseFloat(node.value) + stepMult, stepMult)); + } + }, 50); + EventHelpers.preventDefault(e); + } + + function setValue(node, value) { + if (isNaN(value)) { + node.value = ''; + } else { + node.value = value; + } + } + + function buttonClickEvent(e) { + clearInterval(this.interval); + EventHelpers.preventDefault(e); + } + function buttonMouseUpEvent(e) { + clearInterval(this.interval); + EventHelpers.preventDefault(e); + } + + function isNumeric(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + + function hasNativeSpinner() { + try { + return window.getComputedStyle(me.node, '-webkit-inner-spin-button').WebkitAppearance != undefined; + } catch (ex) { + return false; + } + } + + function init () { + var upbutton = document.createElement('a'); + upbutton.className = 'upbutton'; + upbutton.appendChild(document.createTextNode("\u25B2")); + upbutton.targInput = node; + upbutton.max = max; + + var dnbutton = document.createElement('a'); + dnbutton.className = 'dnbutton'; + dnbutton.appendChild(document.createTextNode("\u25BC")); + dnbutton.targInput = node; + dnbutton.min = min; + dnbutton.max = max; + + EventHelpers.addEvent(upbutton, 'mousedown', buttonMouseDownEvent); + EventHelpers.addEvent(dnbutton, 'mousedown', buttonMouseDownEvent); + + EventHelpers.addEvent(upbutton, 'click', buttonClickEvent); + EventHelpers.addEvent(upbutton, 'mouseup', buttonMouseUpEvent); + EventHelpers.addEvent(dnbutton, 'click', buttonClickEvent); + EventHelpers.addEvent(dnbutton, 'mouseup', buttonMouseUpEvent); + + + if (!hasNativeSpinner()) { + var controlsNode = document.createElement('div'); + controlsNode.className = 'html5-numberControls'; + controlsNode.appendChild(upbutton); + controlsNode.appendChild(dnbutton); + + var wrapperNode = document.createElement('div') + wrapperNode.className = 'html5-numberWrapper'; + wrapperNode.appendChild(controlsNode); + var parentNode = node.parentNode; + + + + + parentNode.insertBefore(wrapperNode, node); + + + var nodeWidth = node.offsetWidth; + var nodeStyle = CSSHelpers.getCurrentStyle(node); + + node.style.width = (nodeWidth - upbutton.offsetWidth -9) + 'px'; + wrapperNode.style.width = nodeWidth + 'px'; + wrapperNode.style.marginTop = nodeStyle.marginTop; + wrapperNode.style.height = (node.offsetHeight) + 'px'; + } + + + + } + /* Finally: if the form field has a value onload that is not a number, remove it + if (!isNumeric(node.value)) { + node.value = ''; + EventHelpers.fireEvent(node, 'change'); + }*/ + init(); + } + + function PlaceholderInput (node) { + var me = this; + + me.node = node; + + var form, defaultText; + + function init () { + defaultText = DOMHelpers.getAttributeValue(node, 'placeholder'); + form = DOMHelpers.getAncestorByTagName(node, 'form'); + + me.setPlaceholderText(true); + EventHelpers.addEvent(me.node, 'blur', blurEvent); + EventHelpers.addEvent(me.node, 'focus', focusEvent); + + if (me.node.form) { + EventHelpers.addEvent(me.node.form, 'submit', removePlaceholderText); + } + + if (window.$wf2) { + if ($wf2.callBeforeValidation != undefined) { + $wf2.callBeforeValidation.push(removePlaceholderText); + } + + if ($wf2.callAfterValidation != undefined) { + $wf2.callAfterValidation.push(postValidationEvent); + } + } + } + + me.setPlaceholderText = function (isLoadEvent) { + //jslog.debug(StringHelpers.sprintf('initiator: %s', this)); + var isAutofocus = DOMHelpers.getAttributeValue(me.node, 'autofocus') != null; + + + if (me.node.value == "" || (isLoadEvent && me.node.value == defaultText)) { + CSSHelpers.addClass(me.node, 'html5-hasPlaceholderText'); + me.node.value = defaultText; + + } + + if (isLoadEvent && isAutofocus && me.node.value == defaultText ) { + CSSHelpers.removeClass(me.node, 'html5-hasPlaceholderText'); + me.node.value = ''; + } + + + + } + + function focusEvent(e) { + + CSSHelpers.addClass(me.node, 'html5-hasFocus'); + removePlaceholderText(); + } + + function blurEvent(e) { + //jslog.debug('removed focus on ' + me.node.name) + CSSHelpers.removeClass(me.node, 'html5-hasFocus'); + me.setPlaceholderText(); + } + + function removePlaceholderText() { + //jslog.debug('removePlaceholderText() for ' + me.node.name) + if (CSSHelpers.isMemberOfClass(me.node, 'html5-hasPlaceholderText')) { + me.node.value = ""; + CSSHelpers.removeClass(me.node, 'html5-hasPlaceholderText'); + } + } + + function postValidationEvent(e, didValidate) { + ////jslog.debug(StringHelpers.sprintf('post Validation: %s, didValidate = %s, has focus = %s', me.node.name, didValidate, CSSHelpers.isMemberOfClass(me.node, 'html5-hasFocus') ) ) + if (!didValidate && !CSSHelpers.isMemberOfClass(me.node, 'html5-hasFocus')) { + me.setPlaceholderText(); + } + } + + init(); + } + + var CSSHelpers = new function () { + var me = this; + + var blankRe = new RegExp('\\s'); + + /** + * Generates a regular expression string that can be used to detect a class name + * in a tag's class attribute. It is used by a few methods, so I + * centralized it. + * + * @param {String} className - a name of a CSS class. + */ + + function getClassReString(className) { + return '\\s'+className+'\\s|^' + className + '\\s|\\s' + className + '$|' + '^' + className +'$'; + } + + function getClassPrefixReString(className) { + return '\\s'+className+'-[0-9a-zA-Z_]+\\s|^' + className + '[0-9a-zA-Z_]+\\s|\\s' + className + '[0-9a-zA-Z_]+$|' + '^' + className +'[0-9a-zA-Z_]+$'; + } + + + /** + * Make an HTML object be a member of a certain class. + * + * @param {Object} obj - an HTML object + * @param {String} className - a CSS class name. + */ + me.addClass = function (obj, className) { + + if (blankRe.test(className)) { + return; + } + + // only add class if the object is not a member of it yet. + if (!me.isMemberOfClass(obj, className)) { + obj.className += " " + className; + } + + } + + /** + * Make an HTML object *not* be a member of a certain class. + * + * @param {Object} obj - an HTML object + * @param {Object} className - a CSS class name. + */ + me.removeClass = function (obj, className) { + + if (blankRe.test(className)) { + return; + } + + + var re = new RegExp(getClassReString(className) , "g"); + + var oldClassName = obj.className; + + + if (obj.className) { + obj.className = oldClassName.replace(re, ' '); + } + + } + + /** + * Determines if an HTML object is a member of a specific class. + * @param {Object} obj - an HTML object. + * @param {Object} className - the CSS class name. + */ + me.isMemberOfClass = function (obj, className) { + + if (blankRe.test(className)) + return false; + + var re = new RegExp(getClassReString(className) , "g"); + + return (re.test(obj.className)); + + + } + + /* from http://blog.stchur.com/2006/06/21/css-computed-style/ */ + me.getCurrentStyle = function(obj) + { + var computedStyle; + if (typeof obj.currentStyle != 'undefined') + { computedStyle = obj.currentStyle; } + else + { computedStyle = document.defaultView.getComputedStyle(obj, null); } + + return computedStyle; + } + } + + + + var DOMHelpers = new function () { + var me = this; + + /** + * Given an HTML or XML object, find the an attribute by name. + * + * @param {Object} obj - a DOM object. + * @param {String} attrName - the name of an attribute inside the DOM object. + * @return {Object} - the attribute object or null if there isn't one. + */ + me.getAttributeByName = function (obj, attrName) { + var i; + + var attributes = obj.attributes; + for (i=0; i')[0].match(typeRe); + //jslog.debug(typeVal) + if (typeVal && typeVal.length >= 1) { + return typeVal[1].replace(quoteRe, ''); + } else { + return null; + } + + } + } + + me.insertAfter = function (refNode, nodeToInsert) { + var parent = refNode.parentNode; + + var nextSibling = refNode.nextSibling; + if (nextSibling) { + parent.insertBefore(nodeToInsert, nextSibling); + } else { + parent.appendChild(nodeToInsert); + } + } + + /** + * Given an tag, find the first ancestor tag of a given tag name. + * + * @param {Object} obj - a HTML or XML tag. + * @param {String} tagName - the name of the ancestor tag to find. + * @return {Object} - the ancestor tag, or null if not found. + */ + me.getAncestorByTagName = function(obj, tagName) { + + for (var node = obj.parentNode; + node.nodeName.toLowerCase() != 'body'; + node = node.parentNode) { + + if (tagName.toLowerCase() == node.nodeName.toLowerCase()) { + return node; + } + + } + return null; + } + + me.removeNode = function (node) { + var parentNode = node.parentNode; + if (parentNode) { + parentNode.removeChild(node); + } + } + + } + + var StringHelpers = new function () { + var me = this; + + /******************************************************************************* + * Function sprintf(format_string,arguments...) Javascript emulation of the C + * printf function (modifiers and argument types "p" and "n" are not supported + * due to language restrictions) + * + * Copyright 2003 K&L Productions. All rights reserved + * http://www.klproductions.com + * + * Terms of use: This function can be used free of charge IF this header is not + * modified and remains with the function code. + * + * Legal: Use this code at your own risk. K&L Productions assumes NO + * resposibility for anything. + ******************************************************************************/ + me.sprintf = function (fstring) + { var pad = function(str,ch,len) + { var ps=''; + for(var i=0; i0?str+ps:ps+str; + } + var processFlags = function(flags,width,rs,arg) + { var pn = function(flags,arg,rs) + { if(arg>=0) + { if(flags.indexOf(' ')>=0) rs = ' ' + rs; + else if(flags.indexOf('+')>=0) rs = '+' + rs; + } + else + rs = '-' + rs; + return rs; + } + var iWidth = parseInt(width,10); + if(width.charAt(0) == '0') + { var ec=0; + if(flags.indexOf(' ')>=0 || flags.indexOf('+')>=0) ec++; + if(rs.length<(iWidth-ec)) rs = pad(rs,'0',rs.length-(iWidth-ec)); + return pn(flags,arg,rs); + } + rs = pn(flags,arg,rs); + if(rs.length=0) rs = rs.replace(/^(.*)(e.*)$/,'$1.$2'); + return processFlags(flags,width,rs,arg); + } + converters['f'] = function(flags,width,precision,arg) + { iPrecision = parseInt(precision); + if(isNaN(iPrecision)) iPrecision = 6; + rs = (Math.abs(arg)).toFixed(iPrecision); + if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs + '.'; + return processFlags(flags,width,rs,arg); + } + converters['G'] = function(flags,width,precision,arg) + { return (converters['g'](flags,width,precision,arg)).toUpperCase(); + } + converters['g'] = function(flags,width,precision,arg) + { iPrecision = parseInt(precision); + absArg = Math.abs(arg); + rse = absArg.toExponential(); + rsf = absArg.toFixed(6); + if(!isNaN(iPrecision)) + { rsep = absArg.toExponential(iPrecision); + rse = rsep.length < rse.length ? rsep : rse; + rsfp = absArg.toFixed(iPrecision); + rsf = rsfp.length < rsf.length ? rsfp : rsf; + } + if(rse.indexOf('.')<0 && flags.indexOf('#')>=0) rse = rse.replace(/^(.*)(e.*)$/,'$1.$2'); + if(rsf.indexOf('.')<0 && flags.indexOf('#')>=0) rsf = rsf + '.'; + rs = rse.length=0) rs='0'+rs; + return processFlags(flags,width,rs,arg); + } + converters['X'] = function(flags,width,precision,arg) + { return (converters['x'](flags,width,precision,arg)).toUpperCase(); + } + converters['x'] = function(flags,width,precision,arg) + { var iPrecision=parseInt(precision); + arg = Math.abs(arg); + var rs = Math.round(arg).toString(16); + if(rs.length=0) rs='0x'+rs; + return processFlags(flags,width,rs,arg); + } + converters['s'] = function(flags,width,precision,arg) + { var iPrecision=parseInt(precision); + var rs = arg; + if(rs.length > iPrecision) rs = rs.substring(0,iPrecision); + return processFlags(flags,width,rs,0); + } + farr = fstring.split('%'); + retstr = farr[0]; + fpRE = /^([-+ #]*)(\d*)\.?(\d*)([cdieEfFgGosuxX])(.*)$/; + for(var i=1; i, to . + * @return {String} - the XML String inside the object. + */ + me.getOuterXML = function (node, options) { + var r; + // Internet Explorer + if (node.xml) { + r = node.xml; + + // Everyone else + } else if (node.outerHTML) { + r = node.outerHTML; + } else if (window.XMLSerializer) { + + var serializer = new XMLSerializer(); + var text = serializer.serializeToString(node); + r = text; + } else { + return null; + } + + /* + * If the XML is actually HTML and you are inserting it into an HTML + * document, you must use the "insertClosingTags" option, otherwise + * Opera will not like you, especially if you have empty tags. + */ + if (options) { + if (options.insertClosingTags) { + r = r.replace(selfClosingTagRe, "<$1>"); + } + } + return r; + } + } + + + // default styles + var placeholderCSS = 'color: #999999; font-style: italic'; + var placeholderRequiredCSS = 'color: #ffcccc !important;' + + var sb = ""; + + // has to be two seperate rules, or some browsers, like firefox, will not use the rule. + if (document.getElementsByTagName('body').length == 0) { + sb = ''; + + + document.write(sb); + } +} + + + +EventHelpers.addPageLoadEvent('html5Widgets.init'); + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/.DS_Store b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b42dd969bbfb7a5f87121ebe8d3ae71324300f5e GIT binary patch literal 6148 zcmeHKO>7%Q6n@Wf+TCQAP6{mzP+<}TMMPC>XsGxRi{sLkwlu1p+NA+^?H!sGn_c5s z+Yynep;vwcCnN--CnUHa=-;sdfsiJ_6-=!w(i<)~NoJ>GEJ&ni83 zevee_Vp?Z13(@QNl5>6}qwCpd)jr2M&#Ky;IHDD&ZP9X}4&VUCSk_DzSMIuj5#l^t$I;X<2Bf1OP<-JsbC+?YQR1ZDpvE~?Ea=&Xc7 zMmO705G+K(m(!f8#e6lEF&kX9XGGMF=T%~zv5w#;IL+yId5LBgHJ?h#L#(bMo?^Oh4F9vRd2bC9S ztEyeSq)O_tE4R*;?=DqfPHp`Hyy)*V+i;Wn})!w}IfXzlt=4tPowclb{lL_s8 z#CptTTTFIDd7W{qXbmgMdOGNUeb8ox!M--8omEF|^|Z4`Z~3$a0CU=zO>_fxLjg)q zgEP>EHFzD~fsf%LT!t%f6~2M%a07mUU*R|S9Y=8tCvgh*U;+1|gGHRjC-ERI;0Y|_ zBA&!Ly4XMuIfmH67g1o0eLRN)d=<~*YxoAfiErWC_%6PO@8bt}0YAb|@iV-PSMVBs zj$h!H_!WMO-{TGZNk3s``15^w`1Bg_=k@mHSjoc}ItdOml7|F!Dxprr+21c~Wf|xXh^%1flX!L4?6Js AJpcdz literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/ChangeLog b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/ChangeLog new file mode 100644 index 0000000..712f773 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/ChangeLog @@ -0,0 +1,761 @@ +2005-03-07 Mihai Bazon + + * skins/aqua/theme.css: *** empty log message *** + + * release-notes.html: updated release notes + + * calendar-setup.js: + use a better approach to initialize the calendar--don't call _init twice, + it's the most time consuming function in the calendar. Instead, determine + the date beforehand if possible and pass it to the calendar at constructor. + + * calendar.js: + avoid keyboard operation when 'multiple dates' is set (very buggy for now) + + * calendar.js: + fixed keyboard handling problems: now it works fine when "showsOtherMonths" + is passed; it also seems to be fine with disabled dates (won't normally + allow selection)--however this area is still likely to be buggy, i.e. in a + month that has all the dates disabled. + + * calendar.js: + some trivial performance improvements in the _init function + Added Date.parseDate (old Calendar.prototype.parseDate now calls this one) + +2005-03-05 Mihai Bazon + + * release-notes.html: updated release notes + + * dayinfo.html: *** empty log message *** + + * calendar-setup.js: + bugfix--update an inputField even if flat calendar is selected + + * calendar.js: + fixed bugs in parseDate function (if for some reason the input string is + totally broken, then check numbers for NaN and use values from the current + date instead) + + * make-release.pl: copy the skins subdirectory and all skins + + * index.html: added Aqua skin + + * skins/aqua/active-bg.gif, skins/aqua/dark-bg.gif, skins/aqua/hover-bg.gif, skins/aqua/menuarrow.gif, skins/aqua/normal-bg.gif, skins/aqua/rowhover-bg.gif, skins/aqua/status-bg.gif, skins/aqua/theme.css, skins/aqua/title-bg.gif, skins/aqua/today-bg.gif: + in the future, skins will go to this directory, each in a separate subdir; for now there's only Aqua, an excellent new skin + + * calendar.js: workaround IE bug, needed in the Aqua theme + don't hide select elements unless browser is IE or Opera + + * lang/calendar-bg.js, lang/calendar-big5-utf8.js, lang/calendar-big5.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-utf8.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-de.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fi.js, lang/calendar-fr.js, lang/calendar-he-utf8.js, lang/calendar-hu.js, lang/calendar-it.js, lang/calendar-ko-utf8.js, lang/calendar-ko.js, lang/calendar-lt-utf8.js, lang/calendar-lt.js, lang/calendar-lv.js, lang/calendar-nl.js, lang/calendar-no.js, lang/calendar-pl-utf8.js, lang/calendar-pl.js, lang/calendar-pt.js, lang/calendar-ro.js, lang/calendar-ru.js, lang/calendar-ru_win_.js, lang/calendar-si.js, lang/calendar-sk.js, lang/calendar-sp.js, lang/calendar-sv.js, lang/calendar-zh.js, lang/cn_utf8.js: + updated urls, copyright notices + + * doc/reference.tex: updated documentation + + * calendar.js, index.html: + renamed the global variable to _dynarch_popupCalendar to avoid name clashes + + * multiple-dates.html: start with an empty array + + * calendar.js: + fixed bugs in the time selector (12:XX pm was wrongfully understood as 12:XX am) + + * calendar.js: + using innerHTML instead of text nodes; works better in Safari and also makes + a smaller, cleaner code + +2005-03-04 Mihai Bazon + + * calendar.js: + fixed a performance regression that occurred after adding support for multiple dates + fixed the time selection bug (now it keeps time correctly) + clicking today will close the calendar if "today" is already selected + + * lang/cn_utf8.js: new translation + +2005-02-17 Mihai Bazon + + * lang/calendar-ar-utf8.zip: Added arabic translation + +2004-10-19 Mihai Bazon + + * lang/calendar-zh.js: updated + +2004-09-20 Mihai Bazon + + * lang/calendar-no.js: updated (Daniel Holmen) + +2004-09-20 Mihai Bazon + + * lang/calendar-no.js: updated (Daniel Holmen) + +2004-08-11 Mihai Bazon + + * lang/calendar-nl.js: updated language file (thanks to Arjen Duursma) + + * lang/calendar-sp.js: updated (thanks to Rafael Velasco) + +2004-07-21 Mihai Bazon + + * lang/calendar-br.js: updated + + * calendar-setup.js: fixed bug (dateText) + +2004-07-21 Mihai Bazon + + * lang/calendar-br.js: updated + + * calendar-setup.js: fixed bug (dateText) + +2004-07-04 Mihai Bazon + + * lang/calendar-lv.js: + added LV translation (thanks to Juris Valdovskis) + +2004-06-25 Mihai Bazon + + * calendar.js: + fixed bug in IE (el.calendar.tooltips is null or not an object) + +2004-06-24 Mihai Bazon + + * doc/reference.tex: fixed latex compilation + + * index.html: linking other sample files + + * calendar-setup.js, calendar.js, dayinfo.html: + ability to display day info (dateText parameter) + sample file + +2004-06-23 Mihai Bazon + + * doc/reference.tex, lang/calendar-bg.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-ko-utf8.js, lang/calendar-ko.js, lang/calendar-nl.js, lang/calendar-sv.js, README, calendar.js, index.html: + email address changed + +2004-06-14 Mihai Bazon + + * lang/calendar-cs-utf8.js, lang/calendar-cs-win.js: + updated translations + + * calendar-system.css: added z-index to drop downs + + * lang/calendar-en.js: + first day of week can now be part of the language file + + * lang/calendar-es.js: + updated language file (thanks to Servilio Afre Puentes) + + * calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar-blue.css: + added z-index property to drop downs (fixes bug) + +2004-06-13 Mihai Bazon + + * calendar-setup.js: fixed bug (apply showOthers to flat calendars too) + +2004-06-06 Mihai Bazon + + * calendar-setup.js: + firstDay defaults to "null", in which case the value in the language file + will be used + + * calendar.js: + firstDayOfWeek can now default to a value specified in the language definition file + + * index.html: first day of week is now numeric + +2004-06-02 Mihai Bazon + + * calendar.js: added date tooltip function + +2004-05-28 Mihai Bazon + + * lang/calendar-br.js: updated (thanks to Marcos Pont) + + * calendar-setup.js: fixed small bug + +2004-05-01 Mihai Bazon + + * calendar-setup.js: returns the calendar object + +2004-04-28 Mihai Bazon + + * calendar-setup.js: + patch to read the date value from the inputField, according to ifFormat (if + both are passed), for flat calendars. (thanks Colin T. Hill) + +2004-04-20 Mihai Bazon + + * calendar-setup.js, calendar.js, multiple-dates.html: + added support for multiple dates selection + + * lang/calendar-nl.js: + updated Dutch translation, thanks to Jeroen Wolsink + + * lang/calendar-big5-utf8.js, lang/calendar-big5.js: + Traditional Chinese language (thanks GaryFu) + +2004-03-26 Mihai Bazon + + * lang/calendar-fr.js, lang/calendar-pt.js: updated + + * lang/calendar-ru_win_.js, lang/calendar-ru.js: + updated, thanks to Sly Golovanov + +2004-03-25 Mihai Bazon + + * lang/calendar-fr.js: updated (thanks to David Duret) + +2004-03-24 Mihai Bazon + + * lang/calendar-da.js: updated (thanks to Michael Thingmand Henriksen) + +2004-03-21 Mihai Bazon + + * lang/calendar-ca.js: updated (thanks to David Valls) + +2004-03-17 Mihai Bazon + + * lang/calendar-de.js: updated to UTF8 (thanks to Jack (tR)) + +2004-03-09 Mihai Bazon + + * lang/calendar-bg.js: Bulgarian translation + +2004-03-08 Mihai Bazon + + * lang/calendar-he-utf8.js: Hebrew translation (thanks to Idan Sofer) + + * lang/calendar-hu.js: updated (thanks to Istvan Karaszi) + +2004-02-27 Mihai Bazon + + * lang/calendar-it.js: updated (thanks to Fabio Di Bernardini) + +2004-02-25 Mihai Bazon + + * calendar.js: fix for Safari (thanks to Olivier Chirouze / XPWeb) + +2004-02-22 Mihai Bazon + + * lang/calendar-al.js: Albanian language file + +2004-02-17 Mihai Bazon + + * lang/calendar-fr.js: fixed + + * lang/calendar-fr.js: + FR translation updated (thanks to SIMON Alexandre) + + * lang/calendar-es.js: ES translation updated, thanks to David Gonzales + +2004-02-10 Mihai Bazon + + * lang/calendar-pt.js: + updated Portugese translation, thanks to Elcio Ferreira + +2004-02-09 Mihai Bazon + + * TODO: updated + +2004-02-06 Mihai Bazon + + * README: describe the PHP files + + * make-release.pl: includes php files + + * make-release.pl: ChangeLog included in the distribution (if found) + + * calendar.js, doc/reference.tex, index.html: switched to version 0.9.6 + + * doc/Calendar.setup.tex, doc/reference.tex: updated documentation + + * release-notes.html: updated release notes + + * calendar.js: Fixed bug: Feb/29 and year change now keeps Feb in view + + * calendar.js: fixed the "ESC" problem (call the close handler) + + * calendar.js: fixed day of year range (1 to 366 instead of 0 to 365) + + * calendar.js: fixed week number calculations + + * doc/reference.tex: fixed (date input format) + + * calendar.php: removed comment + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js: + workaround for IE bug (you can't normally specify through CSS the style for + an element having two classes or more; we had to change a classname) + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + smaller fonts on days that are in neighbor months + +2004-02-04 Mihai Bazon + + * index.html: first demo shows the "showOtherMonths" capability + + * calendar-setup.js: support new parameters in the calendar. + added: firstDay, showOthers, cache. + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js, lang/calendar-en.js, lang/calendar-ro.js: + new parameters: firstDayOfWeek, showsOtherMonths; removed mondayFirst. + This adds support for setting any day to be the first day of week (by just + clicking the day name in the display); also, if showsOtherMonths is enabled + then dates belonging to adjacent months that are in the current view will be + displayed and the calendar will have a fixed height. + + all themes updated. + + * test.php: test for calendar.php + + * calendar.php: fixed bug (pass numeric values as numbers) + +2004-02-01 Mihai Bazon + + * calendar.php: added PHP wrapper + + * img.gif: icon updated + + * TODO: updated TODO list + +2004-01-27 Mihai Bazon + + * calendar.js: + Janusz Piwowarski sent over a patch for IE5 compatibility which is much more + elegant than the atrocities that I had wrote :-D I'm gettin' old.. Thanks Janusz! + + * lang/calendar-fi.js: updated + +2004-01-15 Mihai Bazon + + * TODO: updated TODO list + + * calendar-setup.js: default align changed to "Br" + + * doc/reference.tex: changed default value for "align" + + * calendar-setup.js: calling onchange event handler, if available + + * calendar-setup.js: added "position" option + + * simple-1.html: demonstrates "step" option + + * calendar-setup.js: added "step" option + + * calendar.js: added yearStep config parameter + + * calendar.js: + fixed parseDate routine (the NaN bug which occurred when there was a space + after the date and no time) + +2004-01-14 Mihai Bazon + + * lang/calendar-en.js: added "Time:" + + * test-position.html: test for the new position algorithm + + * index.html: do not destroy() the calendar + avoid bug in parseDate (%p must be separated by non-word characters) + + * menuarrow2.gif: for calendar-blue2.css + + * calendar-setup.js: honor "date" parameter if passed + + * calendar.js: IE5 support is back + performance improvements in IE6 (mouseover combo boxes) + display "Time:" beside the clock area, if defined in the language file + new positioning algorithm (try to keep the calendar in page) + rewrote parseDate a little cleaner + + * lang/calendar-el.js: + updated Greek translation (thanks Alexandros Pappas) + +2004-01-13 Mihai Bazon + + * index.html: added style blue2, using utf-8 instead of iso-8859-2 + + * calendar.js: performance under IE (which sucks, by the way) + + * doc/reference.tex: Sunny added to sponsor list + + * doc/Calendar.setup.tex: documenting parameter 'electric' + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + fixed IE text size problems + +2004-01-08 Mihai Bazon + + * lang/calendar-pl.js: + Polish translation updated to UTF-8 (thanks to Artur Filipiak) + +2004-01-07 Mihai Bazon + + * lang/calendar-si.js: updated (David Milost) + + * lang/calendar-si.js: Slovenian translation (thanks to David Milost) + +2003-12-21 Mihai Bazon + + * TODO: updated TODO list + + * lang/calendar-de.js: German translation (thanks to Peter Strotmann) + +2003-12-19 Mihai Bazon + + * doc/reference.tex: Thank you, Ian Barrak + +2003-12-18 Mihai Bazon + + * doc/reference.tex: fixed documentation bug (thanks Mike) + +2003-12-05 Mihai Bazon + + * lang/calendar-ko-utf8.js: + UTF8 version of the Korean language (hopefully correct) + + * lang/calendar-pl-utf8.js, lang/calendar-pl.js: + updated Polish translation (thanks to Janusz Piwowarski) + +2003-12-04 Mihai Bazon + + * lang/calendar-fr.js: + French translation updated (thanks to Angiras Rama) + +2003-11-22 Mihai Bazon + + * lang/calendar-da.js: updated (thanks to Jesper M. Christensen) + +2003-11-20 Mihai Bazon + + * calendar-blue2.css, calendar-tas.css: + new styles (thanks to Wendall Mosemann for blue2, Mark Lynch for tas) + + * lang/calendar-lt-utf8.js, lang/calendar-lt.js: + Lithuanian translation (thanks to Martynas Majeris) + + * lang/calendar-sp.js: updated + +2003-11-17 Mihai Bazon + + * TODO: added TODO list + +2003-11-14 Mihai Bazon + + * lang/calendar-ko.js: Korean translation (thanks to Yourim Yi) + +2003-11-12 Mihai Bazon + + * lang/calendar-jp.js: small bug fixed (thanks to TAHARA Yusei) + +2003-11-10 Mihai Bazon + + * lang/calendar-fr.js: translation updated, thanks to Florent Ramiere + + * calendar-setup.js: + added new parameter: electric (if false then the field will not get updated on each move) + + * index.html: fixed DOCTYPE + +2003-11-07 Mihai Bazon + + * calendar-setup.js: + fixed minor problem (maybe we're passing object reference instead of ID for + the flat calendar parent) + +2003-11-06 Mihai Bazon + + * lang/calendar-fi.js: + added Finnish translation (thanks to Antti Tuppurainen) + +2003-11-05 Mihai Bazon + + * release-notes.html: fixed typo + + * doc/reference.tex, index.html, calendar.js: 0.9.5 + + * README: fixed license statement + + * release-notes.html: updated release notes (0.9.5) + +2003-11-03 Mihai Bazon + + * lang/calendar-de.js: + updated German translation (thanks to Gerhard Neiner) + + * calendar-setup.js: fixed license statement + + * calendar.js: whitespace + + * calendar.js: fixed license statement + + * calendar.js: + fixed positioning problem when input field is inside scrolled divs + +2003-11-01 Mihai Bazon + + * lang/calendar-af.js: Afrikaan language (thanks to Derick Olivier) + +2003-10-31 Mihai Bazon + + * lang/calendar-it.js: + updated IT translation (thanks to Christian Blaser) + + * lang/calendar-es.js: updated ES translation, thanks to Raul + +2003-10-30 Mihai Bazon + + * lang/calendar-hu.js: updated thanks to Istvan Karaszi + + * index.html, simple-1.html, simple-2.html, simple-3.html: + switched to utf-8 all encodings + + * lang/calendar-sk.js: + added Slovak translation (thanks to Peter Valach) + + * lang/calendar-ro.js: switched to utf-8 + +2003-10-29 Mihai Bazon + + * lang/calendar-es.js: + updated translation, thanks to Jose Ma. Martinez Miralles + + * doc/reference.tex: + fixed the footnote problem (thanks Dominique de Waleffe for the tip) + + * lang/calendar-ro.js: fixed typo + + * lang/calendar-sv.js: oops, license should be LGPL + + * lang/calendar-sw.js: new swedish translation is calendar-sv.js + + * menuarrow.gif, menuarrow.png: + oops, forgot little drop-down menu arrows + + * lang/calendar-sv.js: swedish translation thanks to Leonard Norrgard + + * index.html: oops, some other minor changes + + * index.html, release-notes.html: + latest changes in release-notes and index page for 0.9.4 + + * doc/reference.tex, calendar.js: + added %s date format (# of seconds since Epoch) + + * calendar.js: + A click on TODAY will not close the calendar, even in single-click mode + +2003-10-28 Mihai Bazon + + * index.html: previous cal.html + + * cal.html: moved to index.html + + * README, cal.html, doc/reference.tex, lang/calendar-de.js, lang/calendar-en.js, lang/calendar-ro.js, release-notes.html: + LGPL license, forever. + + * doc/Calendar.setup.tex, simple-1.html: + doc updated for the onUpdate parameter to Calendar.setup + +2003-10-26 Mihai Bazon + + * calendar.js: fixed bug (correct display of the dropdown menus) + + * doc/Calendar.setup.tex, doc/reference.tex, lang/calendar-de.js, lang/calendar-en.js, lang/calendar-ro.js, README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-setup.js, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js, release-notes.html, simple-1.html, simple-3.html: + lots of changes for the 0.9.4 release (see the release-notes.html) + +2003-10-15 Mihai Bazon + + * doc/reference.tex: + documentation updated for 0.9.4 (not yet finished though) + +2003-10-07 Mihai Bazon + + * calendar.js, doc/reference.tex, release-notes.html, README, cal.html, calendar-setup.js: + modified project website + +2003-10-06 Mihai Bazon + + * calendar-setup.js: + added some properties (onSelect, onClose, date) (thanks altblue) + +2003-09-24 Mihai Bazon + + * simple-3.html: dateIsSpecial does not need the "date" argument ;-) + +2003-09-24 fsoft + + * calendar.js, simple-3.html: + added year, month, day to getDateStatus() function + +2003-09-24 Mihai Bazon + + * simple-3.html: example on how to use special dates + + * calendar-setup.js, calendar.js, simple-1.html: + support for special dates (thanks fabio) + +2003-09-17 Mihai Bazon + + * doc/reference.tex: fixed error in section 3. + +2003-08-01 Mihai Bazon + + * lang/calendar-jp.js: added Japanese translation + +2003-07-16 Mihai Bazon + + * simple-1.html: fixed problem with first example [IE,Opera] + +2003-07-09 Mihai Bazon + + * doc/Calendar.setup.tex: fixed typo (closing parenthesis) + + * lang/calendar-de.js: + added German translation, thanks to Hartwig Weinkauf + +2003-07-08 Mihai Bazon + + * cal.html: added link to release-notes + + * release-notes.html: 0.9.3 release notes + + * make-release.pl: + Script to create distribution archive. It needs some additional packages: + + - LaTeX + - tex2page + - jscrunch (JS compressor) + + * doc/html/makedoc.sh, doc/html/reference.css, doc/reference.tex, doc/makedoc.sh: + documentation updates... + + * calendar.js: added semicolon to make the code "compressible" + +2003-07-06 Mihai Bazon + + * doc/reference.tex: spell checked + + * doc/reference.tex: [minor] changed credits order + + * doc/reference.tex: various improvements and additions + + * doc/html/reference.css: minor eye-candy tweaks + +2003-07-05 Mihai Bazon + + * doc/html/Calendar.setup.html.tex, doc/html/makedoc.sh, doc/html/reference.css, doc/html/reference.t2p, doc/hyperref.cfg, doc/makedoc.sh, doc/reference.tex, doc/Calendar.setup.tex, doc/Calendar.setup.pdf.tex: + full documentation in LaTeX, for PDF and HTML formats + + * simple-2.html: + added demonstration of flat calendar with Calendar.setup + + * simple-1.html: + modified some links, added link to documentation, added demonstration of + disableFunc property + + * calendar-setup.js: added the ability to create flat calendar too + + * cal.html: added links to documentation and simple-[12].html pages + + * README: up-to-date... + + * calendar-setup.html: removed: the documentation is unified + +2003-07-03 Mihai Bazon + + * cal.html: some links to newly added files + + * calendar-setup.html, calendar-setup.js, img.gif, simple-1.html: + added some files to simplify calendar creation for non-(JS)-programmers + + * lang/calendar-zh.js: added simplified chinese (thanks ATang) + +2003-07-02 Mihai Bazon + + * calendar.js: * "yy"-related... [small fix] + + * calendar.js: + * #721833 fixed (yy format will understand years prior to 29 as 20xx) + + * calendar.js: * added refresh() function + + * calendar.js: * fixed bug when in single click mode + * added alignment options to "showAtElement" member function + +2003-06-25 Mihai Bazon + + * lang/calendar-pt.js: + added portugese translation (thanks Nuno Barreto) + +2003-06-24 Mihai Bazon + + * calendar.js: + call user handler when the date was changed using the keyboard + + * bugtest-hidden-selects.html: + file to test bug with hidden select-s (thanks Ying Zhang for reporting and for this test file) + + * lang/calendar-hr-utf8.js: + added croatian translation in utf8 (thanks Krunoslav Zubrinic) + +2003-06-23 Mihai Bazon + + * lang/calendar-hu.js: added hungarian translation + + * lang/calendar-hr.js: + added croatian translation (thanks to Krunoslav Zubrinic) + +2003-06-22 Mihai Bazon + + * calendar.js: + * #723335 fixed (clicking TODAY will not select the today date if the + disabledHandler rejects it) + + * cal.html: * new code for to work with fix for bug #703238 + * switch to new version + + * calendar.js: + * some patches to make code compatible with Opera 7 (well, almost compatible) + * bug #703238 fixed (fix breaks compatibility with older code that uses + calendar in single-click mode) + * bug #703814 fixed + +2003-04-09 Mihai Bazon + + * lang/calendar-tr.js: added turkish lang file + +2003-03-19 Mihai Bazon + + * lang/calendar-ru.js: russian translation added + + * lang/calendar-no.js: norwegian translation added + +2003-03-15 Mihai Bazon + + * lang/calendar-no.js: norwegian translation + +2003-03-12 Mihai Bazon + + * lang/calendar-pl.js: added polish translation + +2003-03-11 Mihai Bazon + + * calendar.js: + bugfix in parseDate (added base to parseInt, thanks Alan!) + +2003-03-05 Mihai Bazon + + * calendar.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-du.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-nl.js, lang/calendar-ro.js, lang/calendar-sp.js, lang/calendar-sw.js: + New file. + + * calendar.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-du.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-nl.js, lang/calendar-ro.js, lang/calendar-sp.js, lang/calendar-sw.js: + moved to CVS at sourceforge.net + release: 0.9.2 + new language packs + + + * README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + New file. + + * README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + moved to CVS at sourceforge.net + release: 0.9.2 + new language packs + + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/README b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/README new file mode 100644 index 0000000..455ab3d --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/README @@ -0,0 +1,33 @@ +The DHTML Calendar +------------------- + + Author: Mihai Bazon, + http://dynarch.com/mishoo/ + + This program is free software published under the + terms of the GNU Lesser General Public License. + + For the entire license text please refer to + http://www.gnu.org/licenses/lgpl.html + +Contents +--------- + + calendar.js -- the main program file + lang/*.js -- internalization files + *.css -- color themes + cal.html -- example usage file + doc/ -- documentation, in PDF and HTML + simple-1.html -- quick setup examples [popup calendars] + simple-2.html -- quick setup example for flat calendar + calendar.php -- PHP wrapper + test.php -- test file for the PHP wrapper + +Homepage +--------- + + For details and latest versions please refer to calendar + homepage, located on my website: + + http://dynarch.com/mishoo/calendar.epl + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/altblue.html b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/altblue.html new file mode 100644 index 0000000..1de7463 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/altblue.html @@ -0,0 +1,23 @@ + + + + + calendar test + + + + + + + + +
+
+ + + + click the button for a calendar +
+
+ + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/bugtest-hidden-selects.html b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/bugtest-hidden-selects.html new file mode 100644 index 0000000..fd955c0 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/bugtest-hidden-selects.html @@ -0,0 +1,108 @@ + + + +Bug + + + + + + + + + + + + + +
+Date: +
+ + +

+
+
Visible <select>, hides and unhides as expected +
+ + +

+
Hidden <select>, it should stay hidden (but doesn't) +
+ + +

+
Hidden textbox below, it stays hidden as expected +
+ +

+ diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-blue.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-blue.css new file mode 100644 index 0000000..62ecf99 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-blue.css @@ -0,0 +1,232 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #556; + font-size: 11px; + color: #000; + cursor: default; + background: #eef; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ +} + +.calendar .nav { + background: #778 url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + background: #fff; + color: #000; + padding: 2px; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ + background: #778; + color: #fff; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: #bdf; +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #556; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #a66; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #aaf; + color: #000; + border: 1px solid #04f; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #77c; + padding: 2px 0px 0px 2px; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + color: #456; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #bbb; +} +.calendar tbody .day.othermonth.oweekend { + color: #fbb; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #bdf; +} + +.calendar tbody .rowhilite td { + background: #def; +} + +.calendar tbody .rowhilite td.wn { + background: #eef; +} + +.calendar tbody td.hilite { /* Hovered cells */ + background: #def; + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + background: #cde; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #fff; + color: #000; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #a66; +} + +.calendar tbody td.today { /* Cell showing selected date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #556; + color: #fff; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #fff; + color: #445; + border-top: 1px solid #556; + padding: 1px; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #aaf; + border: 1px solid #04f; + color: #000; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #77c; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #655; + background: #def; + color: #000; + font-size: 90%; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: #acf; +} + +.calendar .combo .active { + border-top: 1px solid #46a; + border-bottom: 1px solid #46a; + background: #eef; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #f4f0e8; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #667; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-blue2.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-blue2.css new file mode 100644 index 0000000..8570aff --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-blue2.css @@ -0,0 +1,236 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #206A9B; + font-size: 11px; + color: #000; + cursor: default; + background: #F1F8FC; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ +} + +.calendar .nav { + background: #007ED1 url(menuarrow2.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + background: #000; + color: #fff; + padding: 2px; +} + +.calendar thead tr { /* Row containing navigation buttons */ + background: #007ED1; + color: #fff; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: #C7E1F3; +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #206A9B; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #a66; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #34ABFA; + color: #000; + border: 1px solid #016DC5; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #006AA9; + border: 1px solid #008AFF; + padding: 2px 0px 0px 2px; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + color: #456; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #bbb; +} +.calendar tbody .day.othermonth.oweekend { + color: #fbb; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #C7E1F3; +} + +.calendar tbody .rowhilite td { + background: #def; +} + +.calendar tbody .rowhilite td.wn { + background: #F1F8FC; +} + +.calendar tbody td.hilite { /* Hovered cells */ + background: #def; + padding: 1px 3px 1px 1px; + border: 1px solid #8FC4E8; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + background: #cde; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #fff; + color: #000; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #a66; +} + +.calendar tbody td.today { /* Cell showing selected date */ + font-weight: bold; + color: #D50000; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #206A9B; + color: #fff; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #000; + color: #fff; + border-top: 1px solid #206A9B; + padding: 1px; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #B8DAF0; + border: 1px solid #178AEB; + color: #000; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #006AA9; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #655; + background: #def; + color: #000; + font-size: 90%; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: #34ABFA; + border-top: 1px solid #46a; + border-bottom: 1px solid #46a; + font-weight: bold; +} + +.calendar .combo .active { + border-top: 1px solid #46a; + border-bottom: 1px solid #46a; + background: #F1F8FC; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #E3F0F9; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #F1F8FC; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #267DB7; + color: #fff; +} + +.calendar td.time span.active { + border-color: red; + background-color: #000; + color: #A5FF00; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-brown.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-brown.css new file mode 100644 index 0000000..e7b6285 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-brown.css @@ -0,0 +1,225 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #655; + font-size: 11px; + color: #000; + cursor: default; + background: #ffd; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ +} + +.calendar .nav { + background: #edc url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + background: #654; + color: #fed; + padding: 2px; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ + background: #edc; + color: #000; +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #655; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #faa; + color: #000; + border: 1px solid #f40; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #c77; + padding: 2px 0px 0px 2px; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: #fed; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #bbb; +} +.calendar tbody .day.othermonth.oweekend { + color: #fbb; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #fed; +} + +.calendar tbody .rowhilite td { + background: #ddf; +} + +.calendar tbody .rowhilite td.wn { + background: #efe; +} + +.calendar tbody td.hilite { /* Hovered cells */ + background: #ffe; + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + background: #ddc; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #fea; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { font-weight: bold; } + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #988; + color: #000; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + border-top: 1px solid #655; + background: #dcb; + color: #840; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #faa; + border: 1px solid #f40; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #c77; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #655; + background: #ffe; + color: #000; + font-size: 90%; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: #fc8; +} + +.calendar .combo .active { + border-top: 1px solid #a64; + border-bottom: 1px solid #a64; + background: #fee; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #a88; + padding: 1px 0px; + text-align: center; + background-color: #fed; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #988; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #866; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-green.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-green.css new file mode 100644 index 0000000..564666d --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-green.css @@ -0,0 +1,229 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #565; + font-size: 11px; + color: #000; + cursor: default; + background: #efe; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ + background: #676; + color: #fff; + font-size: 90%; +} + +.calendar .nav { + background: #676 url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + padding: 2px; + background: #250; + color: #efa; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #565; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #a66; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #afa; + color: #000; + border: 1px solid #084; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #7c7; + padding: 2px 0px 0px 2px; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: #dfb; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + color: #564; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #bbb; +} +.calendar tbody .day.othermonth.oweekend { + color: #fbb; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #8a8; + background: #dfb; +} + +.calendar tbody .rowhilite td { + background: #dfd; +} + +.calendar tbody .rowhilite td.wn { + background: #efe; +} + +.calendar tbody td.hilite { /* Hovered cells */ + background: #efd; + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + background: #dec; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #f8fff8; + color: #000; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #a66; +} + +.calendar tbody td.today { font-weight: bold; color: #0a0; } + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #565; + color: #fff; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + padding: 2px; + background: #250; + color: #efa; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #afa; + border: 1px solid #084; + color: #000; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #7c7; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #565; + background: #efd; + color: #000; + font-size: 90%; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: #af8; +} + +.calendar .combo .active { + border-top: 1px solid #6a4; + border-bottom: 1px solid #6a4; + background: #efe; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #8a8; + padding: 1px 0px; + text-align: center; + background-color: #dfb; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #898; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #686; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-handler.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-handler.js new file mode 100644 index 0000000..92df58e --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-handler.js @@ -0,0 +1,42 @@ +var DateDisabled = { + 0 : [ 21, 25, 28, 29, 30 ], + 1 : [ 15, 16, 17, 19 ] +}; + +var CDate = {}; +(function (date) { + CDate = { + w: date.getDay(), + d: date.getDate(), + m: date.getMonth(), + y: date.getFullYear(), + date: date, + }; + })(new Date); + +function dateStatus (date, y, m, d) { + var diff = date - CDate.date; + if (diff < 172800000 || diff > 5356800000) return true; + + if (DateDisabled && DateDisabled[m]) { + for (var i in DateDisabled[m]) + if (DateDisabled[m][i] == d) + return true; + } + + return false; +}; + +window.onload = function () { + Calendar.setup({ + inputField: 'f_date', + ifFormat: '%u, %e, %m, %Y', + displayArea: 'f_date_show', + daFormat: '%A, %B %e, %Y', + button: 'f_date_trigger', + firstDay: 1, + weekNumbers: false, + range: [CDate.y, CDate.y], + dateStatusFunc: dateStatus + }); +}; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-handler_stripped.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-handler_stripped.js new file mode 100644 index 0000000..3f2c865 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-handler_stripped.js @@ -0,0 +1 @@ +var DateDisabled={0:[21,25,28,29,30],1:[15,16,17,19]};var CDate={};(function(date){CDate={w:date.getDay(),d:date.getDate(),m:date.getMonth(),y:date.getFullYear(),date:date,};})(new Date);function dateStatus(date,y,m,d){var diff=date-CDate.date;if(diff<172800000||diff>5356800000)return true;if(DateDisabled&&DateDisabled[m]){for(var i in DateDisabled[m])if(DateDisabled[m][i]==d)return true;}return false;};window.onload=function(){Calendar.setup({inputField:'f_date',ifFormat:'%u, %e, %m, %Y',displayArea:'f_date_show',daFormat:'%A, %B %e, %Y',button:'f_date_trigger',firstDay:1,weekNumbers:false,range:[CDate.y,CDate.y],dateStatusFunc:dateStatus});}; \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-old.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-old.js new file mode 100644 index 0000000..e958eae --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-old.js @@ -0,0 +1,1843 @@ +/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo + * ----------------------------------------------------------- + * + * The DHTML Calendar, version 1.0 "It is happening again" + * + * Details and latest version at: + * www.dynarch.com/projects/calendar + * + * This script is developed by Dynarch.com. Visit us at www.dynarch.com. + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + */ + +// $Id: calendar-old.js,v 1.1 2010-07-16 02:56:33 tv Exp $ + +/** The Calendar object constructor. */ +Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) { + // member variables + this.activeDiv = null; + this.currentDateEl = null; + this.getDateStatus = null; + this.getDateToolTip = null; + this.getDateText = null; + this.timeout = null; + this.onSelected = onSelected || null; + this.onClose = onClose || null; + this.dragging = false; + this.hidden = false; + this.minYear = 1970; + this.maxYear = 2050; + this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"]; + this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"]; + this.isPopup = true; + this.weekNumbers = true; + this.firstDayOfWeek = typeof firstDayOfWeek == "number" ? firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc. + this.showsOtherMonths = false; + this.dateStr = dateStr; + this.ar_days = null; + this.showsTime = false; + this.time24 = true; + this.yearStep = 1; + this.hiliteToday = true; + this.multiple = null; + // HTML elements + this.table = null; + this.element = null; + this.tbody = null; + this.firstdayname = null; + // Combo boxes + this.monthsCombo = null; + this.yearsCombo = null; + this.hilitedMonth = null; + this.activeMonth = null; + this.hilitedYear = null; + this.activeYear = null; + // Information + this.dateClicked = false; + + // one-time initializations + if (typeof Calendar._SDN == "undefined") { + // table of short day names + if (typeof Calendar._SDN_len == "undefined") + Calendar._SDN_len = 3; + var ar = new Array(); + for (var i = 8; i > 0;) { + ar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len); + } + Calendar._SDN = ar; + // table of short month names + if (typeof Calendar._SMN_len == "undefined") + Calendar._SMN_len = 3; + ar = new Array(); + for (var i = 12; i > 0;) { + ar[--i] = Calendar._MN[i].substr(0, Calendar._SMN_len); + } + Calendar._SMN = ar; + } +}; + +// ** constants + +/// "static", needed for event handlers. +Calendar._C = null; + +/// detect a special case of "web browser" +Calendar.is_ie = ( /msie/i.test(navigator.userAgent) && + !/opera/i.test(navigator.userAgent) ); + +Calendar.is_ie5 = ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) ); + +/// detect Opera browser +Calendar.is_opera = /opera/i.test(navigator.userAgent); + +/// detect KHTML-based browsers +Calendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent); + +// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate +// library, at some point. + +Calendar.getAbsolutePos = function(el) { + var SL = 0, ST = 0; + var is_div = /^div$/i.test(el.tagName); + if (is_div && el.scrollLeft) + SL = el.scrollLeft; + if (is_div && el.scrollTop) + ST = el.scrollTop; + var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST }; + if (el.offsetParent) { + var tmp = this.getAbsolutePos(el.offsetParent); + r.x += tmp.x; + r.y += tmp.y; + } + return r; +}; + +Calendar.isRelated = function (el, evt) { + var related = evt.relatedTarget; + if (!related) { + var type = evt.type; + if (type == "mouseover") { + related = evt.fromElement; + } else if (type == "mouseout") { + related = evt.toElement; + } + } + while (related) { + if (related == el) { + return true; + } + related = related.parentNode; + } + return false; +}; + +Calendar.removeClass = function(el, className) { + if (!(el && el.className)) { + return; + } + var cls = el.className.split(" "); + var ar = new Array(); + for (var i = cls.length; i > 0;) { + if (cls[--i] != className) { + ar[ar.length] = cls[i]; + } + } + el.className = ar.join(" "); +}; + +Calendar.addClass = function(el, className) { + Calendar.removeClass(el, className); + el.className += " " + className; +}; + +// FIXME: the following 2 functions totally suck, are useless and should be replaced immediately. +Calendar.getElement = function(ev) { + var f = Calendar.is_ie ? window.event.srcElement : ev.currentTarget; + while (f.nodeType != 1 || /^div$/i.test(f.tagName)) + f = f.parentNode; + return f; +}; + +Calendar.getTargetElement = function(ev) { + var f = Calendar.is_ie ? window.event.srcElement : ev.target; + while (f.nodeType != 1) + f = f.parentNode; + return f; +}; + +Calendar.stopEvent = function(ev) { + ev || (ev = window.event); + if (Calendar.is_ie) { + ev.cancelBubble = true; + ev.returnValue = false; + } else { + ev.preventDefault(); + ev.stopPropagation(); + } + return false; +}; + +Calendar.addEvent = function(el, evname, func) { + if (el.attachEvent) { // IE + el.attachEvent("on" + evname, func); + } else if (el.addEventListener) { // Gecko / W3C + el.addEventListener(evname, func, true); + } else { + el["on" + evname] = func; + } +}; + +Calendar.removeEvent = function(el, evname, func) { + if (el.detachEvent) { // IE + el.detachEvent("on" + evname, func); + } else if (el.removeEventListener) { // Gecko / W3C + el.removeEventListener(evname, func, true); + } else { + el["on" + evname] = null; + } +}; + +Calendar.createElement = function(type, parent) { + var el = null; + if (document.createElementNS) { + // use the XHTML namespace; IE won't normally get here unless + // _they_ "fix" the DOM2 implementation. + el = document.createElementNS("http://www.w3.org/1999/xhtml", type); + } else { + el = document.createElement(type); + } + if (typeof parent != "undefined") { + parent.appendChild(el); + } + return el; +}; + +// END: UTILITY FUNCTIONS + +// BEGIN: CALENDAR STATIC FUNCTIONS + +/** Internal -- adds a set of events to make some element behave like a button. */ +Calendar._add_evs = function(el) { + with (Calendar) { + addEvent(el, "mouseover", dayMouseOver); + addEvent(el, "mousedown", dayMouseDown); + addEvent(el, "mouseout", dayMouseOut); + if (is_ie) { + addEvent(el, "dblclick", dayMouseDblClick); + el.setAttribute("unselectable", true); + } + } +}; + +Calendar.findMonth = function(el) { + if (typeof el.month != "undefined") { + return el; + } else if (typeof el.parentNode.month != "undefined") { + return el.parentNode; + } + return null; +}; + +Calendar.findYear = function(el) { + if (typeof el.year != "undefined") { + return el; + } else if (typeof el.parentNode.year != "undefined") { + return el.parentNode; + } + return null; +}; + +Calendar.showMonthsCombo = function () { + var cal = Calendar._C; + if (!cal) { + return false; + } + var cal = cal; + var cd = cal.activeDiv; + var mc = cal.monthsCombo; + if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + if (cal.activeMonth) { + Calendar.removeClass(cal.activeMonth, "active"); + } + var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()]; + Calendar.addClass(mon, "active"); + cal.activeMonth = mon; + var s = mc.style; + s.display = "block"; + if (cd.navtype < 0) + s.left = cd.offsetLeft + "px"; + else { + var mcw = mc.offsetWidth; + if (typeof mcw == "undefined") + // Konqueror brain-dead techniques + mcw = 50; + s.left = (cd.offsetLeft + cd.offsetWidth - mcw) + "px"; + } + s.top = (cd.offsetTop + cd.offsetHeight) + "px"; +}; + +Calendar.showYearsCombo = function (fwd) { + var cal = Calendar._C; + if (!cal) { + return false; + } + var cal = cal; + var cd = cal.activeDiv; + var yc = cal.yearsCombo; + if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + if (cal.activeYear) { + Calendar.removeClass(cal.activeYear, "active"); + } + cal.activeYear = null; + var Y = cal.date.getFullYear() + (fwd ? 1 : -1); + var yr = yc.firstChild; + var show = false; + for (var i = 12; i > 0; --i) { + if (Y >= cal.minYear && Y <= cal.maxYear) { + yr.innerHTML = Y; + yr.year = Y; + yr.style.display = "block"; + show = true; + } else { + yr.style.display = "none"; + } + yr = yr.nextSibling; + Y += fwd ? cal.yearStep : -cal.yearStep; + } + if (show) { + var s = yc.style; + s.display = "block"; + if (cd.navtype < 0) + s.left = cd.offsetLeft + "px"; + else { + var ycw = yc.offsetWidth; + if (typeof ycw == "undefined") + // Konqueror brain-dead techniques + ycw = 50; + s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px"; + } + s.top = (cd.offsetTop + cd.offsetHeight) + "px"; + } +}; + +// event handlers + +Calendar.tableMouseUp = function(ev) { + var cal = Calendar._C; + if (!cal) { + return false; + } + if (cal.timeout) { + clearTimeout(cal.timeout); + } + var el = cal.activeDiv; + if (!el) { + return false; + } + var target = Calendar.getTargetElement(ev); + ev || (ev = window.event); + Calendar.removeClass(el, "active"); + if (target == el || target.parentNode == el) { + Calendar.cellClick(el, ev); + } + var mon = Calendar.findMonth(target); + var date = null; + if (mon) { + date = new Date(cal.date); + if (mon.month != date.getMonth()) { + date.setMonth(mon.month); + cal.setDate(date); + cal.dateClicked = false; + cal.callHandler(); + } + } else { + var year = Calendar.findYear(target); + if (year) { + date = new Date(cal.date); + if (year.year != date.getFullYear()) { + date.setFullYear(year.year); + cal.setDate(date); + cal.dateClicked = false; + cal.callHandler(); + } + } + } + with (Calendar) { + removeEvent(document, "mouseup", tableMouseUp); + removeEvent(document, "mouseover", tableMouseOver); + removeEvent(document, "mousemove", tableMouseOver); + cal._hideCombos(); + _C = null; + return stopEvent(ev); + } +}; + +Calendar.tableMouseOver = function (ev) { + var cal = Calendar._C; + if (!cal) { + return; + } + var el = cal.activeDiv; + var target = Calendar.getTargetElement(ev); + if (target == el || target.parentNode == el) { + Calendar.addClass(el, "hilite active"); + Calendar.addClass(el.parentNode, "rowhilite"); + } else { + if (typeof el.navtype == "undefined" || (el.navtype != 50 && (el.navtype == 0 || Math.abs(el.navtype) > 2))) + Calendar.removeClass(el, "active"); + Calendar.removeClass(el, "hilite"); + Calendar.removeClass(el.parentNode, "rowhilite"); + } + ev || (ev = window.event); + if (el.navtype == 50 && target != el) { + var pos = Calendar.getAbsolutePos(el); + var w = el.offsetWidth; + var x = ev.clientX; + var dx; + var decrease = true; + if (x > pos.x + w) { + dx = x - pos.x - w; + decrease = false; + } else + dx = pos.x - x; + + if (dx < 0) dx = 0; + var range = el._range; + var current = el._current; + var count = Math.floor(dx / 10) % range.length; + for (var i = range.length; --i >= 0;) + if (range[i] == current) + break; + while (count-- > 0) + if (decrease) { + if (--i < 0) + i = range.length - 1; + } else if ( ++i >= range.length ) + i = 0; + var newval = range[i]; + el.innerHTML = newval; + + cal.onUpdateTime(); + } + var mon = Calendar.findMonth(target); + if (mon) { + if (mon.month != cal.date.getMonth()) { + if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + Calendar.addClass(mon, "hilite"); + cal.hilitedMonth = mon; + } else if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + } else { + if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + var year = Calendar.findYear(target); + if (year) { + if (year.year != cal.date.getFullYear()) { + if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + Calendar.addClass(year, "hilite"); + cal.hilitedYear = year; + } else if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + } else if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + } + return Calendar.stopEvent(ev); +}; + +Calendar.tableMouseDown = function (ev) { + if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) { + return Calendar.stopEvent(ev); + } +}; + +Calendar.calDragIt = function (ev) { + var cal = Calendar._C; + if (!(cal && cal.dragging)) { + return false; + } + var posX; + var posY; + if (Calendar.is_ie) { + posY = window.event.clientY + document.body.scrollTop; + posX = window.event.clientX + document.body.scrollLeft; + } else { + posX = ev.pageX; + posY = ev.pageY; + } + cal.hideShowCovered(); + var st = cal.element.style; + st.left = (posX - cal.xOffs) + "px"; + st.top = (posY - cal.yOffs) + "px"; + return Calendar.stopEvent(ev); +}; + +Calendar.calDragEnd = function (ev) { + var cal = Calendar._C; + if (!cal) { + return false; + } + cal.dragging = false; + with (Calendar) { + removeEvent(document, "mousemove", calDragIt); + removeEvent(document, "mouseup", calDragEnd); + tableMouseUp(ev); + } + cal.hideShowCovered(); +}; + +Calendar.dayMouseDown = function(ev) { + var el = Calendar.getElement(ev); + if (el.disabled) { + return false; + } + var cal = el.calendar; + cal.activeDiv = el; + Calendar._C = cal; + if (el.navtype != 300) with (Calendar) { + if (el.navtype == 50) { + el._current = el.innerHTML; + addEvent(document, "mousemove", tableMouseOver); + } else + addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", tableMouseOver); + addClass(el, "hilite active"); + addEvent(document, "mouseup", tableMouseUp); + } else if (cal.isPopup) { + cal._dragStart(ev); + } + if (el.navtype == -1 || el.navtype == 1) { + if (cal.timeout) clearTimeout(cal.timeout); + cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250); + } else if (el.navtype == -2 || el.navtype == 2) { + if (cal.timeout) clearTimeout(cal.timeout); + cal.timeout = setTimeout((el.navtype > 0) ? "Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250); + } else { + cal.timeout = null; + } + return Calendar.stopEvent(ev); +}; + +Calendar.dayMouseDblClick = function(ev) { + Calendar.cellClick(Calendar.getElement(ev), ev || window.event); + if (Calendar.is_ie) { + document.selection.empty(); + } +}; + +Calendar.dayMouseOver = function(ev) { + var el = Calendar.getElement(ev); + if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) { + return false; + } + if (el.ttip) { + if (el.ttip.substr(0, 1) == "_") { + el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1); + } + el.calendar.tooltips.innerHTML = el.ttip; + } + if (el.navtype != 300) { + Calendar.addClass(el, "hilite"); + if (el.caldate) { + Calendar.addClass(el.parentNode, "rowhilite"); + var cal = el.calendar; + if (cal && cal.getDateToolTip) { + var d = el.caldate; + window.status = d; + el.title = cal.getDateToolTip(d, d.getFullYear(), d.getMonth(), d.getDate()); + } + } + } + return Calendar.stopEvent(ev); +}; + +Calendar.dayMouseOut = function(ev) { + with (Calendar) { + var el = getElement(ev); + if (isRelated(el, ev) || _C || el.disabled) + return false; + removeClass(el, "hilite"); + if (el.caldate) + removeClass(el.parentNode, "rowhilite"); + if (el.calendar) + el.calendar.tooltips.innerHTML = _TT["SEL_DATE"]; + // return stopEvent(ev); + } +}; + +/** + * A generic "click" handler :) handles all types of buttons defined in this + * calendar. + */ +Calendar.cellClick = function(el, ev) { + var cal = el.calendar; + var closing = false; + var newdate = false; + var date = null; + if (typeof el.navtype == "undefined") { + if (cal.currentDateEl) { + Calendar.removeClass(cal.currentDateEl, "selected"); + Calendar.addClass(el, "selected"); + closing = (cal.currentDateEl == el); + if (!closing) { + cal.currentDateEl = el; + } + } + cal.date.setDateOnly(el.caldate); + date = cal.date; + var other_month = !(cal.dateClicked = !el.otherMonth); + if (!other_month && !cal.currentDateEl && cal.multiple) + cal._toggleMultipleDate(new Date(date)); + else + newdate = !el.disabled; + // a date was clicked + if (other_month) + cal._init(cal.firstDayOfWeek, date); + } else { + // None button (clear form) + if (el.navtype == 10000) { + cal.params.inputField.value= ""; + cal.callCloseHandler(); + return; + } + + + if (el.navtype == 200) { + Calendar.removeClass(el, "hilite"); + cal.callCloseHandler(); + return; + } + date = new Date(cal.date); + if (el.navtype == 0) { + if (CSSHelpers.isMemberOfClass(cal.params.inputField, 'pastInvalid')) { + date.setDateOnly(addToDate(new Date(), 1)); + } else { + date.setDateOnly(new Date()); // TODAY + } + } + // unless "today" was clicked, we assume no date was clicked so + // the selected handler will know not to close the calenar when + // in single-click mode. + // cal.dateClicked = (el.navtype == 0); + cal.dateClicked = false; + var year = date.getFullYear(); + var mon = date.getMonth(); + function setMonth(m) { + var day = date.getDate(); + var max = date.getMonthDays(m); + if (day > max) { + date.setDate(max); + } + date.setMonth(m); + }; + switch (el.navtype) { + case 400: + Calendar.removeClass(el, "hilite"); + var text = Calendar._TT["ABOUT"]; + if (typeof text != "undefined") { + text += cal.showsTime ? Calendar._TT["ABOUT_TIME"] : ""; + } else { + // FIXME: this should be removed as soon as lang files get updated! + text = "Help and about box text is not translated into this language.\n" + + "If you know this language and you feel generous please update\n" + + "the corresponding file in \"lang\" subdir to match calendar-en.js\n" + + "and send it back to to get it into the distribution ;-)\n\n" + + "Thank you!\n" + + "http://dynarch.com/mishoo/calendar.epl\n"; + } + alert(text); + return; + case -2: + if (year > cal.minYear) { + date.setFullYear(year - 1); + } + break; + case -1: + if (mon > 0) { + setMonth(mon - 1); + } else if (year-- > cal.minYear) { + date.setFullYear(year); + setMonth(11); + } + break; + case 1: + if (mon < 11) { + setMonth(mon + 1); + } else if (year < cal.maxYear) { + date.setFullYear(year + 1); + setMonth(0); + } + break; + case 2: + if (year < cal.maxYear) { + date.setFullYear(year + 1); + } + break; + case 100: + cal.setFirstDayOfWeek(el.fdow); + return; + case 50: + var range = el._range; + var current = el.innerHTML; + for (var i = range.length; --i >= 0;) + if (range[i] == current) + break; + if (ev && ev.shiftKey) { + if (--i < 0) + i = range.length - 1; + } else if ( ++i >= range.length ) + i = 0; + var newval = range[i]; + el.innerHTML = newval; + cal.onUpdateTime(); + return; + case 0: + // TODAY will bring us here + if ((typeof cal.getDateStatus == "function") && + cal.getDateStatus(date, date.getFullYear(), date.getMonth(), date.getDate())) { + return false; + } + break; + } + if (!date.equalsTo(cal.date)) { + cal.setDate(date); + newdate = true; + } else if (el.navtype == 0) + newdate = closing = true; + } + if (newdate) { + ev && cal.callHandler(); + } + if (closing) { + Calendar.removeClass(el, "hilite"); + ev && cal.callCloseHandler(); + } +}; + +// END: CALENDAR STATIC FUNCTIONS + +// BEGIN: CALENDAR OBJECT FUNCTIONS + +/** + * This function creates the calendar inside the given parent. If _par is + * null than it creates a popup calendar inside the BODY element. If _par is + * an element, be it BODY, then it creates a non-popup calendar (still + * hidden). Some properties need to be set before calling this function. + */ +Calendar.prototype.create = function (_par) { + var parent = null; + if (! _par) { + // default parent is the document body, in which case we create + // a popup calendar. + parent = document.getElementsByTagName("body")[0]; + this.isPopup = true; + } else { + parent = _par; + this.isPopup = false; + } + this.date = this.dateStr ? new Date(this.dateStr) : new Date(); + + var table = Calendar.createElement("table"); + this.table = table; + table.cellSpacing = 0; + table.cellPadding = 0; + table.calendar = this; + Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown); + + var div = Calendar.createElement("div"); + this.element = div; + div.className = "calendar"; + if (this.isPopup) { + div.style.position = "absolute"; + div.style.display = "none"; + } + div.appendChild(table); + + var thead = Calendar.createElement("thead", table); + var cell = null; + var row = null; + + var cal = this; + var hh = function (text, cs, navtype) { + cell = Calendar.createElement("td", row); + cell.colSpan = cs; + cell.className = "button"; + if (navtype != 0 && Math.abs(navtype) <= 2) + cell.className += " nav"; + Calendar._add_evs(cell); + cell.calendar = cal; + cell.navtype = navtype; + cell.innerHTML = "
" + text + "
"; + return cell; + }; + + row = Calendar.createElement("tr", thead); + var title_length = 6; + (this.isPopup) && --title_length; + (this.weekNumbers) && ++title_length; + + hh("?", 1, 400).ttip = Calendar._TT["INFO"]; + this.title = hh("", title_length, 300); + this.title.className = "title"; + if (this.isPopup) { + this.title.ttip = Calendar._TT["DRAG_TO_MOVE"]; + this.title.style.cursor = "move"; + hh("×", 1, 200).ttip = Calendar._TT["CLOSE"]; + } + + row = Calendar.createElement("tr", thead); + row.className = "headrow"; + + this._nav_py = hh("«", 1, -2); + this._nav_py.ttip = Calendar._TT["PREV_YEAR"]; + + this._nav_pm = hh("‹", 1, -1); + this._nav_pm.ttip = Calendar._TT["PREV_MONTH"]; + + + if (CSSHelpers.isMemberOfClass(this.params.inputField, 'pastInvalid')) { + this._nav_now = hh(Calendar._TT["TOMORROW"], this.weekNumbers ? 2 : 1, 0); + this._nav_now.ttip = Calendar._TT["GO_TOMORROW"]; + } else { + this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 2 : 1, 0); + this._nav_now.ttip = Calendar._TT["GO_TODAY"]; + } + + this._nav_none = hh(Calendar._TT["NONE"],this.weekNumbers ? 2 : 1, 10000) + this._nav_none.ttip = Calendar._TT["GO_NONE"]; + + + this._nav_nm = hh("›", 1, 1); + this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"]; + + this._nav_ny = hh("»", 1, 2); + this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"]; + + // day names + row = Calendar.createElement("tr", thead); + row.className = "daynames"; + if (this.weekNumbers) { + cell = Calendar.createElement("td", row); + cell.className = "name wn"; + cell.innerHTML = Calendar._TT["WK"]; + } + for (var i = 7; i > 0; --i) { + cell = Calendar.createElement("td", row); + if (!i) { + cell.navtype = 100; + cell.calendar = this; + Calendar._add_evs(cell); + } + } + this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild; + this._displayWeekdays(); + + var tbody = Calendar.createElement("tbody", table); + this.tbody = tbody; + + for (i = 6; i > 0; --i) { + row = Calendar.createElement("tr", tbody); + if (this.weekNumbers) { + cell = Calendar.createElement("td", row); + } + for (var j = 7; j > 0; --j) { + cell = Calendar.createElement("td", row); + cell.calendar = this; + Calendar._add_evs(cell); + } + } + + if (this.showsTime) { + row = Calendar.createElement("tr", tbody); + row.className = "time"; + + cell = Calendar.createElement("td", row); + cell.className = "time"; + cell.colSpan = 2; + cell.innerHTML = Calendar._TT["TIME"] || " "; + + cell = Calendar.createElement("td", row); + cell.className = "time"; + cell.colSpan = this.weekNumbers ? 4 : 3; + + (function(){ + function makeTimePart(className, init, range_start, range_end) { + var part = Calendar.createElement("span", cell); + part.className = className; + part.innerHTML = init; + part.calendar = cal; + part.ttip = Calendar._TT["TIME_PART"]; + part.navtype = 50; + part._range = []; + if (typeof range_start != "number") + part._range = range_start; + else { + for (var i = range_start; i <= range_end; ++i) { + var txt; + if (i < 10 && range_end >= 10) txt = '0' + i; + else txt = '' + i; + part._range[part._range.length] = txt; + } + } + Calendar._add_evs(part); + return part; + }; + var hrs = cal.date.getHours(); + var mins = cal.date.getMinutes(); + var t12 = !cal.time24; + var pm = (hrs > 12); + if (t12 && pm) hrs -= 12; + var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23); + var span = Calendar.createElement("span", cell); + span.innerHTML = ":"; + span.className = "colon"; + var M = makeTimePart("minute", mins, 0, 59); + var AP = null; + cell = Calendar.createElement("td", row); + cell.className = "time"; + cell.colSpan = 2; + if (t12) + AP = makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]); + else + cell.innerHTML = " "; + + cal.onSetTime = function() { + var pm, hrs = this.date.getHours(), + mins = this.date.getMinutes(); + if (t12) { + pm = (hrs >= 12); + if (pm) hrs -= 12; + if (hrs == 0) hrs = 12; + AP.innerHTML = pm ? "pm" : "am"; + } + H.innerHTML = (hrs < 10) ? ("0" + hrs) : hrs; + M.innerHTML = (mins < 10) ? ("0" + mins) : mins; + }; + + cal.onUpdateTime = function() { + var date = this.date; + var h = parseInt(H.innerHTML, 10); + if (t12) { + if (/pm/i.test(AP.innerHTML) && h < 12) + h += 12; + else if (/am/i.test(AP.innerHTML) && h == 12) + h = 0; + } + var d = date.getDate(); + var m = date.getMonth(); + var y = date.getFullYear(); + date.setHours(h); + date.setMinutes(parseInt(M.innerHTML, 10)); + date.setFullYear(y); + date.setMonth(m); + date.setDate(d); + this.dateClicked = false; + this.callHandler(); + }; + })(); + } else { + this.onSetTime = this.onUpdateTime = function() {}; + } + + var tfoot = Calendar.createElement("tfoot", table); + + row = Calendar.createElement("tr", tfoot); + row.className = "footrow"; + + cell = hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300); + cell.className = "ttip"; + if (this.isPopup) { + cell.ttip = Calendar._TT["DRAG_TO_MOVE"]; + cell.style.cursor = "move"; + } + this.tooltips = cell; + + div = Calendar.createElement("div", this.element); + this.monthsCombo = div; + div.className = "combo"; + for (i = 0; i < Calendar._MN.length; ++i) { + var mn = Calendar.createElement("div"); + mn.className = Calendar.is_ie ? "label-IEfix" : "label"; + mn.month = i; + mn.innerHTML = Calendar._SMN[i]; + div.appendChild(mn); + } + + div = Calendar.createElement("div", this.element); + this.yearsCombo = div; + div.className = "combo"; + for (i = 12; i > 0; --i) { + var yr = Calendar.createElement("div"); + yr.className = Calendar.is_ie ? "label-IEfix" : "label"; + div.appendChild(yr); + } + + this._init(this.firstDayOfWeek, this.date); + parent.appendChild(this.element); +}; + +/** keyboard navigation, only for popup calendars */ +Calendar._keyEvent = function(ev) { + var cal = window._dynarch_popupCalendar; + if (!cal || cal.multiple) + return false; + (Calendar.is_ie) && (ev = window.event); + var act = (Calendar.is_ie || ev.type == "keypress"), + K = ev.keyCode; + if (ev.ctrlKey) { + switch (K) { + case 37: // KEY left + act && Calendar.cellClick(cal._nav_pm); + break; + case 38: // KEY up + act && Calendar.cellClick(cal._nav_py); + break; + case 39: // KEY right + act && Calendar.cellClick(cal._nav_nm); + break; + case 40: // KEY down + act && Calendar.cellClick(cal._nav_ny); + break; + default: + return false; + } + } else switch (K) { + case 32: // KEY space (now) + Calendar.cellClick(cal._nav_now); + break; + case 27: // KEY esc + act && cal.callCloseHandler(); + break; + case 37: // KEY left + case 38: // KEY up + case 39: // KEY right + case 40: // KEY down + if (act) { + var prev, x, y, ne, el, step; + prev = K == 37 || K == 38; + step = (K == 37 || K == 39) ? 1 : 7; + function setVars() { + el = cal.currentDateEl; + + // Bug fix by Zoltan: if el is null, then set it + // to today's date. + if (!el) { + cal.setDate(new Date()); + el = cal.currentDateEl; + alert(el); + } + + var p = el.pos; + x = p & 15; + y = p >> 4; + ne = cal.ar_days[y][x]; + };setVars(); + function prevMonth() { + var date = new Date(cal.date); + date.setDate(date.getDate() - step); + cal.setDate(date); + }; + function nextMonth() { + var date = new Date(cal.date); + date.setDate(date.getDate() + step); + cal.setDate(date); + }; + while (1) { + switch (K) { + case 37: // KEY left + if (--x >= 0) + ne = cal.ar_days[y][x]; + else { + x = 6; + K = 38; + continue; + } + break; + case 38: // KEY up + if (--y >= 0) + ne = cal.ar_days[y][x]; + else { + prevMonth(); + setVars(); + } + break; + case 39: // KEY right + if (++x < 7) + ne = cal.ar_days[y][x]; + else { + x = 0; + K = 40; + continue; + } + break; + case 40: // KEY down + if (++y < cal.ar_days.length) + ne = cal.ar_days[y][x]; + else { + nextMonth(); + setVars(); + } + break; + } + break; + } + if (ne) { + if (!ne.disabled) + Calendar.cellClick(ne); + else if (prev) + prevMonth(); + else + nextMonth(); + } + } + break; + case 13: // KEY enter + if (act) + Calendar.cellClick(cal.currentDateEl, ev); + break; + default: + return false; + } + return Calendar.stopEvent(ev); +}; + +/** + * (RE)Initializes the calendar to the given date and firstDayOfWeek + */ +Calendar.prototype._init = function (firstDayOfWeek, date) { + var today = new Date(), + TY = today.getFullYear(), + TM = today.getMonth(), + TD = today.getDate(); + this.table.style.visibility = "hidden"; + var year = date.getFullYear(); + if (year < this.minYear) { + year = this.minYear; + date.setFullYear(year); + } else if (year > this.maxYear) { + year = this.maxYear; + date.setFullYear(year); + } + this.firstDayOfWeek = firstDayOfWeek; + this.date = new Date(date); + var month = date.getMonth(); + var mday = date.getDate(); + var no_days = date.getMonthDays(); + + // calendar voodoo for computing the first day that would actually be + // displayed in the calendar, even if it's from the previous month. + // WARNING: this is magic. ;-) + date.setDate(1); + var day1 = (date.getDay() - this.firstDayOfWeek) % 7; + if (day1 < 0) + day1 += 7; + date.setDate(-day1); + date.setDate(date.getDate() + 1); + + var row = this.tbody.firstChild; + var MN = Calendar._SMN[month]; + var ar_days = this.ar_days = new Array(); + var weekend = Calendar._TT["WEEKEND"]; + var dates = this.multiple ? (this.datesCells = {}) : null; + for (var i = 0; i < 6; ++i, row = row.nextSibling) { + var cell = row.firstChild; + if (this.weekNumbers) { + cell.className = "day wn"; + cell.innerHTML = date.getWeekNumber(); + cell = cell.nextSibling; + } + row.className = "daysrow"; + var hasdays = false, iday, dpos = ar_days[i] = []; + for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday + 1)) { + iday = date.getDate(); + var wday = date.getDay(); + cell.className = "day"; + cell.pos = i << 4 | j; + dpos[j] = cell; + var current_month = (date.getMonth() == month); + if (!current_month) { + if (this.showsOtherMonths) { + cell.className += " othermonth"; + cell.otherMonth = true; + } else { + cell.className = "emptycell"; + cell.innerHTML = " "; + cell.disabled = true; + continue; + } + } else { + cell.otherMonth = false; + hasdays = true; + } + cell.disabled = false; + cell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday; + if (dates) + dates[date.print("%Y%m%d")] = cell; + if (this.getDateStatus) { + var status = this.getDateStatus(date, year, month, iday); + if (status === true) { + cell.className += " disabled"; + cell.disabled = true; + } else { + if (/disabled/i.test(status)) + cell.disabled = true; + cell.className += " " + status; + } + } + if (!cell.disabled) { + cell.caldate = new Date(date); + cell.ttip = "_"; + if (!this.multiple && current_month + && iday == mday && this.hiliteToday) { + cell.className += " selected"; + this.currentDateEl = cell; + } + if (date.getFullYear() == TY && + date.getMonth() == TM && + iday == TD) { + cell.className += " today"; + cell.ttip += Calendar._TT["PART_TODAY"]; + } + if (weekend.indexOf(wday.toString()) != -1) + cell.className += cell.otherMonth ? " oweekend" : " weekend"; + } + } + if (!(hasdays || this.showsOtherMonths)) + row.className = "emptyrow"; + } + this.title.innerHTML = Calendar._MN[month] + ", " + year; + this.onSetTime(); + this.table.style.visibility = "visible"; + this._initMultipleDates(); + // PROFILE + // this.tooltips.innerHTML = "Generated in " + ((new Date()) - today) + " ms"; +}; + +Calendar.prototype._initMultipleDates = function() { + if (this.multiple) { + for (var i in this.multiple) { + var cell = this.datesCells[i]; + var d = this.multiple[i]; + if (!d) + continue; + if (cell) + cell.className += " selected"; + } + } +}; + +Calendar.prototype._toggleMultipleDate = function(date) { + if (this.multiple) { + var ds = date.print("%Y%m%d"); + var cell = this.datesCells[ds]; + if (cell) { + var d = this.multiple[ds]; + if (!d) { + Calendar.addClass(cell, "selected"); + this.multiple[ds] = date; + } else { + Calendar.removeClass(cell, "selected"); + delete this.multiple[ds]; + } + } + } +}; + +Calendar.prototype.setDateToolTipHandler = function (unaryFunction) { + this.getDateToolTip = unaryFunction; +}; + +/** + * Calls _init function above for going to a certain date (but only if the + * date is different than the currently selected one). + */ +Calendar.prototype.setDate = function (date) { + if (!date.equalsTo(this.date)) { + this._init(this.firstDayOfWeek, date); + } +}; + +/** + * Refreshes the calendar. Useful if the "disabledHandler" function is + * dynamic, meaning that the list of disabled date can change at runtime. + * Just * call this function if you think that the list of disabled dates + * should * change. + */ +Calendar.prototype.refresh = function () { + this._init(this.firstDayOfWeek, this.date); +}; + +/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for Monday, etc.). */ +Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) { + this._init(firstDayOfWeek, this.date); + this._displayWeekdays(); +}; + +/** + * Allows customization of what dates are enabled. The "unaryFunction" + * parameter must be a function object that receives the date (as a JS Date + * object) and returns a boolean value. If the returned value is true then + * the passed date will be marked as disabled. + */ +Calendar.prototype.setDateStatusHandler = Calendar.prototype.setDisabledHandler = function (unaryFunction) { + this.getDateStatus = unaryFunction; +}; + +/** Customization of allowed year range for the calendar. */ +Calendar.prototype.setRange = function (a, z) { + this.minYear = a; + this.maxYear = z; +}; + +/** Calls the first user handler (selectedHandler). */ +Calendar.prototype.callHandler = function () { + if (this.onSelected && this.dateClicked) { + this.onSelected(this, this.date.print(this.dateFormat)); + } +}; + +/** Calls the second user handler (closeHandler). */ +Calendar.prototype.callCloseHandler = function () { + if (this.onClose) { + this.onClose(this); + } + this.hideShowCovered(); +}; + +/** Removes the calendar object from the DOM tree and destroys it. */ +Calendar.prototype.destroy = function () { + var el = this.element.parentNode; + el.removeChild(this.element); + Calendar._C = null; + window._dynarch_popupCalendar = null; +}; + +/** + * Moves the calendar element to a different section in the DOM tree (changes + * its parent). + */ +Calendar.prototype.reparent = function (new_parent) { + var el = this.element; + el.parentNode.removeChild(el); + new_parent.appendChild(el); +}; + +// This gets called when the user presses a mouse button anywhere in the +// document, if the calendar is shown. If the click was outside the open +// calendar this function closes it. +Calendar._checkCalendar = function(ev) { + var calendar = window._dynarch_popupCalendar; + if (!calendar) { + return false; + } + var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev); + for (; el != null && el != calendar.element; el = el.parentNode); + if (el == null) { + // calls closeHandler which should hide the calendar. + window._dynarch_popupCalendar.callCloseHandler(); + return Calendar.stopEvent(ev); + } +}; + +/** Shows the calendar. */ +Calendar.prototype.show = function () { + var rows = this.table.getElementsByTagName("tr"); + for (var i = rows.length; i > 0;) { + var row = rows[--i]; + Calendar.removeClass(row, "rowhilite"); + var cells = row.getElementsByTagName("td"); + for (var j = cells.length; j > 0;) { + var cell = cells[--j]; + Calendar.removeClass(cell, "hilite"); + Calendar.removeClass(cell, "active"); + } + } + this.element.style.display = "block"; + this.hidden = false; + if (this.isPopup) { + window._dynarch_popupCalendar = this; + Calendar.addEvent(document, "keydown", Calendar._keyEvent); + Calendar.addEvent(document, "keypress", Calendar._keyEvent); + Calendar.addEvent(document, "mousedown", Calendar._checkCalendar); + } + this.hideShowCovered(); +}; + +/** + * Hides the calendar. Also removes any "hilite" from the class of any TD + * element. + */ +Calendar.prototype.hide = function () { + if (this.isPopup) { + Calendar.removeEvent(document, "keydown", Calendar._keyEvent); + Calendar.removeEvent(document, "keypress", Calendar._keyEvent); + Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar); + } + this.element.style.display = "none"; + this.hidden = true; + this.hideShowCovered(); +}; + +/** + * Shows the calendar at a given absolute position (beware that, depending on + * the calendar element style -- position property -- this might be relative + * to the parent's containing rectangle). + */ +Calendar.prototype.showAt = function (x, y) { + var s = this.element.style; + s.left = x + "px"; + s.top = y + "px"; + this.show(); +}; + +/** Shows the calendar near a given element. */ +Calendar.prototype.showAtElement = function (el, opts) { + if (window.calendarHelpers && !window.calendarHelpers.canShowCalendar(el)) { + return; + } + var self = this; + var p = Calendar.getAbsolutePos(el); + if (!opts || typeof opts != "string") { + this.showAt(p.x, p.y + el.offsetHeight); + return true; + } + function fixPosition(box) { + if (box.x < 0) + box.x = 0; + if (box.y < 0) + box.y = 0; + var cp = document.createElement("div"); + var s = cp.style; + s.position = "absolute"; + s.right = s.bottom = s.width = s.height = "0px"; + document.body.appendChild(cp); + var br = Calendar.getAbsolutePos(cp); + document.body.removeChild(cp); + /* if (Calendar.is_ie) { + br.y += document.body.scrollTop; + br.x += document.body.scrollLeft; + } else { */ + br.y += window.scrollY; + br.x += window.scrollX; + //} + var tmp = box.x + box.width - br.x; + if (tmp > 0) box.x -= tmp; + tmp = box.y + box.height - br.y; + if (tmp > 0) box.y -= tmp; + }; + this.element.style.display = "block"; + Calendar.continuation_for_the_fucking_khtml_browser = function() { + var w = self.element.offsetWidth; + var h = self.element.offsetHeight; + self.element.style.display = "none"; + var valign = opts.substr(0, 1); + var halign = "l"; + if (opts.length > 1) { + halign = opts.substr(1, 1); + } + // vertical alignment + switch (valign) { + case "T": p.y -= h; break; + case "B": p.y += el.offsetHeight; break; + case "C": p.y += (el.offsetHeight - h) / 2; break; + case "t": p.y += el.offsetHeight - h; break; + case "b": break; // already there + } + // horizontal alignment + switch (halign) { + case "L": p.x -= w; break; + case "R": p.x += el.offsetWidth; break; + case "C": p.x += (el.offsetWidth - w) / 2; break; + case "l": p.x += el.offsetWidth - w; break; + case "r": break; // already there + } + p.width = w; + p.height = h + 40; + self.monthsCombo.style.display = "none"; + fixPosition(p); + self.showAt(p.x, p.y); + }; + if (Calendar.is_khtml) + setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", 10); + else + Calendar.continuation_for_the_fucking_khtml_browser(); +}; + +/** Customizes the date format. */ +Calendar.prototype.setDateFormat = function (str) { + this.dateFormat = str; +}; + +/** Customizes the tooltip date format. */ +Calendar.prototype.setTtDateFormat = function (str) { + this.ttDateFormat = str; +}; + +/** + * Tries to identify the date represented in a string. If successful it also + * calls this.setDate which moves the calendar to the given date. + */ +Calendar.prototype.parseDate = function(str, fmt) { + if (!fmt) + fmt = this.dateFormat; + this.setDate(Date.parseDate(str, fmt)); +}; + +Calendar.prototype.hideShowCovered = function () { + if (!Calendar.is_ie && !Calendar.is_opera) + return; + function getVisib(obj){ + var value = obj.style.visibility; + if (!value) { + if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C + if (!Calendar.is_khtml) + value = document.defaultView. + getComputedStyle(obj, "").getPropertyValue("visibility"); + else + value = ''; + } else if (obj.currentStyle) { // IE + value = obj.currentStyle.visibility; + } else + value = ''; + } + return value; + }; + + var tags = new Array("applet", "iframe", "select"); + var el = this.element; + + var p = Calendar.getAbsolutePos(el); + var EX1 = p.x; + var EX2 = el.offsetWidth + EX1; + var EY1 = p.y; + var EY2 = el.offsetHeight + EY1; + + for (var k = tags.length; k > 0; ) { + var ar = document.getElementsByTagName(tags[--k]); + var cc = null; + + for (var i = ar.length; i > 0;) { + cc = ar[--i]; + + p = Calendar.getAbsolutePos(cc); + var CX1 = p.x; + var CX2 = cc.offsetWidth + CX1; + var CY1 = p.y; + var CY2 = cc.offsetHeight + CY1; + + if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) { + if (!cc.__msh_save_visibility) { + cc.__msh_save_visibility = getVisib(cc); + } + cc.style.visibility = cc.__msh_save_visibility; + } else { + if (!cc.__msh_save_visibility) { + cc.__msh_save_visibility = getVisib(cc); + } + cc.style.visibility = "hidden"; + } + } + } +}; + +/** Internal function; it displays the bar with the names of the weekday. */ +Calendar.prototype._displayWeekdays = function () { + var fdow = this.firstDayOfWeek; + var cell = this.firstdayname; + var weekend = Calendar._TT["WEEKEND"]; + for (var i = 0; i < 7; ++i) { + cell.className = "day name"; + var realday = (i + fdow) % 7; + if (i) { + cell.ttip = Calendar._TT["DAY_FIRST"].replace("%s", Calendar._DN[realday]); + cell.navtype = 100; + cell.calendar = this; + cell.fdow = realday; + Calendar._add_evs(cell); + } + if (weekend.indexOf(realday.toString()) != -1) { + Calendar.addClass(cell, "weekend"); + } + cell.innerHTML = Calendar._SDN[(i + fdow) % 7]; + cell = cell.nextSibling; + } +}; + +/** Internal function. Hides all combo boxes that might be displayed. */ +Calendar.prototype._hideCombos = function () { + this.monthsCombo.style.display = "none"; + this.yearsCombo.style.display = "none"; +}; + +/** Internal function. Starts dragging the element. */ +Calendar.prototype._dragStart = function (ev) { + if (this.dragging) { + return; + } + this.dragging = true; + var posX; + var posY; + if (Calendar.is_ie) { + posY = window.event.clientY + document.body.scrollTop; + posX = window.event.clientX + document.body.scrollLeft; + } else { + posY = ev.clientY + window.scrollY; + posX = ev.clientX + window.scrollX; + } + var st = this.element.style; + this.xOffs = posX - parseInt(st.left); + this.yOffs = posY - parseInt(st.top); + with (Calendar) { + addEvent(document, "mousemove", calDragIt); + addEvent(document, "mouseup", calDragEnd); + } +}; + +// BEGIN: DATE OBJECT PATCHES + +/** Adds the number of days array to the Date object. */ +Date._MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31); + +/** Constants used for time computations */ +Date.SECOND = 1000 /* milliseconds */; +Date.MINUTE = 60 * Date.SECOND; +Date.HOUR = 60 * Date.MINUTE; +Date.DAY = 24 * Date.HOUR; +Date.WEEK = 7 * Date.DAY; + +Date.parseDate = function(str, fmt) { + var today = new Date(); + var y = 0; + var m = -1; + var d = 0; + var a = str.split(/\W+/); + var b = fmt.match(/%./g); + var i = 0, j = 0; + var hr = 0; + var min = 0; + for (i = 0; i < a.length; ++i) { + if (!a[i]) + continue; + switch (b[i]) { + case "%d": + case "%e": + d = parseInt(a[i], 10); + break; + + case "%m": + m = parseInt(a[i], 10) - 1; + break; + + case "%Y": + case "%y": + y = parseInt(a[i], 10); + (y < 100) && (y += (y > 29) ? 1900 : 2000); + break; + + case "%b": + case "%B": + for (j = 0; j < 12; ++j) { + if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; } + } + break; + + case "%H": + case "%I": + case "%k": + case "%l": + hr = parseInt(a[i], 10); + break; + + case "%P": + case "%p": + if (/pm/i.test(a[i]) && hr < 12) + hr += 12; + else if (/am/i.test(a[i]) && hr >= 12) + hr -= 12; + break; + + case "%M": + min = parseInt(a[i], 10); + break; + } + } + if (isNaN(y)) y = today.getFullYear(); + if (isNaN(m)) m = today.getMonth(); + if (isNaN(d)) d = today.getDate(); + if (isNaN(hr)) hr = today.getHours(); + if (isNaN(min)) min = today.getMinutes(); + if (y != 0 && m != -1 && d != 0) + return new Date(y, m, d, hr, min, 0); + y = 0; m = -1; d = 0; + for (i = 0; i < a.length; ++i) { + if (a[i].search(/[a-zA-Z]+/) != -1) { + var t = -1; + for (j = 0; j < 12; ++j) { + if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; } + } + if (t != -1) { + if (m != -1) { + d = m+1; + } + m = t; + } + } else if (parseInt(a[i], 10) <= 12 && m == -1) { + m = a[i]-1; + } else if (parseInt(a[i], 10) > 31 && y == 0) { + y = parseInt(a[i], 10); + (y < 100) && (y += (y > 29) ? 1900 : 2000); + } else if (d == 0) { + d = a[i]; + } + } + if (y == 0) + y = today.getFullYear(); + if (m != -1 && d != 0) + return new Date(y, m, d, hr, min, 0); + return today; +}; + +/** Returns the number of days in the current month */ +Date.prototype.getMonthDays = function(month) { + var year = this.getFullYear(); + if (typeof month == "undefined") { + month = this.getMonth(); + } + if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))) && month == 1) { + return 29; + } else { + return Date._MD[month]; + } +}; + +/** Returns the number of day in the year. */ +Date.prototype.getDayOfYear = function() { + var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); + var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0); + var time = now - then; + return Math.floor(time / Date.DAY); +}; + +/** Returns the number of the week in year, as defined in ISO 8601. */ +Date.prototype.getWeekNumber = function() { + var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); + var DoW = d.getDay(); + d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu + var ms = d.valueOf(); // GMT + d.setMonth(0); + d.setDate(4); // Thu in Week 1 + return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1; +}; + +/** Checks date and time equality */ +Date.prototype.equalsTo = function(date) { + return ((this.getFullYear() == date.getFullYear()) && + (this.getMonth() == date.getMonth()) && + (this.getDate() == date.getDate()) && + (this.getHours() == date.getHours()) && + (this.getMinutes() == date.getMinutes())); +}; + +/** Set only the year, month, date parts (keep existing time) */ +Date.prototype.setDateOnly = function(date) { + var tmp = new Date(date); + this.setDate(1); + this.setFullYear(tmp.getFullYear()); + this.setMonth(tmp.getMonth()); + this.setDate(tmp.getDate()); +}; + +/** Prints the date in a string according to the given format. */ +Date.prototype.print = function (str) { + var m = this.getMonth(); + var d = this.getDate(); + var y = this.getFullYear(); + var wn = this.getWeekNumber(); + var w = this.getDay(); + var s = {}; + var hr = this.getHours(); + var pm = (hr >= 12); + var ir = (pm) ? (hr - 12) : hr; + var dy = this.getDayOfYear(); + if (ir == 0) + ir = 12; + var min = this.getMinutes(); + var sec = this.getSeconds(); + s["%a"] = Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N] + s["%A"] = Calendar._DN[w]; // full weekday name + s["%b"] = Calendar._SMN[m]; // abbreviated month name [FIXME: I18N] + s["%B"] = Calendar._MN[m]; // full month name + // FIXME: %c : preferred date and time representation for the current locale + s["%C"] = 1 + Math.floor(y / 100); // the century number + s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31) + s["%e"] = d; // the day of the month (range 1 to 31) + // FIXME: %D : american date style: %m/%d/%y + // FIXME: %E, %F, %G, %g, %h (man strftime) + s["%H"] = (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h format) + s["%I"] = (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h format) + s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // day of the year (range 001 to 366) + s["%k"] = hr; // hour, range 0 to 23 (24h format) + s["%l"] = ir; // hour, range 1 to 12 (12h format) + s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12 + s["%M"] = (min < 10) ? ("0" + min) : min; // minute, range 00 to 59 + s["%n"] = "\n"; // a newline character + s["%p"] = pm ? "PM" : "AM"; + s["%P"] = pm ? "pm" : "am"; + // FIXME: %r : the time in am/pm notation %I:%M:%S %p + // FIXME: %R : the time in 24-hour notation %H:%M + s["%s"] = Math.floor(this.getTime() / 1000); + s["%S"] = (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59 + s["%t"] = "\t"; // a tab character + // FIXME: %T : the time in 24-hour notation (%H:%M:%S) + s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn; + s["%u"] = w + 1; // the day of the week (range 1 to 7, 1 = MON) + s["%w"] = w; // the day of the week (range 0 to 6, 0 = SUN) + // FIXME: %x : preferred date representation for the current locale without the time + // FIXME: %X : preferred time representation for the current locale without the date + s["%y"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99) + s["%Y"] = y; // year with the century + s["%%"] = "%"; // a literal '%' character + + var re = /%./g; + if (!Calendar.is_ie5 && !Calendar.is_khtml) + return str.replace(re, function (par) { return s[par] || par; }); + + var a = str.match(re); + + for (var i = 0; i < a.length; i++) { + var tmp = s[a[i]]; + if (tmp) { + re = new RegExp(a[i], 'g'); + str = str.replace(re, tmp); + } + } + + return str; +}; + +Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear; +Date.prototype.setFullYear = function(y) { + var d = new Date(this); + d.__msh_oldSetFullYear(y); + if (d.getMonth() != this.getMonth()) + this.setDate(28); + this.__msh_oldSetFullYear(y); +}; + +// END: DATE OBJECT PATCHES + + +// global object that remembers the calendar +window._dynarch_popupCalendar = null; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-setup.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-setup.js new file mode 100644 index 0000000..42e3dc6 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-setup.js @@ -0,0 +1,203 @@ +/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ + * --------------------------------------------------------------------------- + * + * The DHTML Calendar + * + * Details and latest version at: + * http://dynarch.com/mishoo/calendar.epl + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + * + * This file defines helper functions for setting up the calendar. They are + * intended to help non-programmers get a working calendar on their site + * quickly. This script should not be seen as part of the calendar. It just + * shows you what one can do with the calendar, while in the same time + * providing a quick and simple method for setting it up. If you need + * exhaustive customization of the calendar creation process feel free to + * modify this code to suit your needs (this is recommended and much better + * than modifying calendar.js itself). + */ + +// $Id: calendar-setup.js,v 1.1 2010-06-01 04:29:24 tv Exp $ + +/** + * This function "patches" an input field (or other element) to use a calendar + * widget for date selection. + * + * The "params" is a single object that can have the following properties: + * + * prop. name | description + * ------------------------------------------------------------------------------------------------- + * inputField | the ID of an input field to store the date + * displayArea | the ID of a DIV or other element to show the date + * button | ID of a button or other element that will trigger the calendar + * eventName | event that will trigger the calendar, without the "on" prefix (default: "click") + * ifFormat | date format that will be stored in the input field + * daFormat | the date format that will be used to display the date in displayArea + * singleClick | (true/false) wether the calendar is in single click mode or not (default: true) + * firstDay | numeric: 0 to 6. "0" means display Sunday first, "1" means display Monday first, etc. + * align | alignment (default: "Br"); if you don't know what's this see the calendar documentation + * range | array with 2 elements. Default: [1900, 2999] -- the range of years available + * weekNumbers | (true/false) if it's true (default) the calendar will display week numbers + * flat | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID + * flatCallback | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar) + * disableFunc | function that receives a JS Date object and should return true if that date has to be disabled in the calendar + * onSelect | function that gets called when a date is selected. You don't _have_ to supply this (the default is generally okay) + * onClose | function that gets called when the calendar is closed. [default] + * onUpdate | function that gets called after the date is updated in the input field. Receives a reference to the calendar. + * date | the date that the calendar will be initially displayed to + * showsTime | default: false; if true the calendar will include a time selector + * timeFormat | the time format; can be "12" or "24", default is "12" + * electric | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close + * step | configures the step of the years in drop-down boxes; default: 1 (it was 2 ... have no idea why) + * position | configures the calendar absolute position; default: null + * cache | if "true" (but default: "false") it will reuse the same calendar object, where possible + * showOthers | if "true" (but default: "false") it will show days from other months too + * + * None of them is required, they all have default values. However, if you + * pass none of "inputField", "displayArea" or "button" you'll get a warning + * saying "nothing to setup". + */ +Calendar.setup = function (params) { + function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } }; + + param_default("inputField", null); + param_default("displayArea", null); + param_default("button", null); + param_default("eventName", "click"); + param_default("ifFormat", "%Y/%m/%d"); + param_default("daFormat", "%Y/%m/%d"); + param_default("singleClick", true); + param_default("disableFunc", null); + param_default("dateStatusFunc", params["disableFunc"]); // takes precedence if both are defined + param_default("dateTooltipFunc", null); + param_default("dateText", null); + param_default("firstDay", null); + param_default("align", "Br"); + param_default("range", [1900, 2999]); + param_default("weekNumbers", true); + param_default("flat", null); + param_default("flatCallback", null); + param_default("onSelect", null); + param_default("onClose", null); + param_default("onUpdate", null); + param_default("date", null); + param_default("showsTime", false); + param_default("timeFormat", "24"); + param_default("electric", true); + param_default("step", 1); + param_default("position", null); + param_default("cache", false); + param_default("showOthers", false); + param_default("multiple", null); + + var tmp = ["inputField", "displayArea", "button"]; + for (var i in tmp) { + if (typeof params[tmp[i]] == "string") { + params[tmp[i]] = document.getElementById(params[tmp[i]]); + } + } + if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) { + alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code"); + return false; + } + + function onSelect(cal) { + var p = cal.params; + var update = (cal.dateClicked || p.electric); + if (update && p.inputField) { + p.inputField.value = cal.date.print(p.ifFormat); + if (typeof p.inputField.onchange == "function") + p.inputField.onchange(); + } + if (update && p.displayArea) + p.displayArea.innerHTML = cal.date.print(p.daFormat); + if (update && typeof p.onUpdate == "function") + p.onUpdate(cal); + if (update && p.flat) { + if (typeof p.flatCallback == "function") + p.flatCallback(cal); + } + if (update && p.singleClick && cal.dateClicked) + cal.callCloseHandler(); + }; + + if (params.flat != null) { + if (typeof params.flat == "string") + params.flat = document.getElementById(params.flat); + if (!params.flat) { + alert("Calendar.setup:\n Flat specified but can't find parent."); + return false; + } + var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect); + cal.setDateToolTipHandler(params.dateTooltipFunc); + cal.showsOtherMonths = params.showOthers; + cal.showsTime = params.showsTime; + cal.time24 = (params.timeFormat == "24"); + cal.params = params; + cal.weekNumbers = params.weekNumbers; + cal.setRange(params.range[0], params.range[1]); + cal.setDateStatusHandler(params.dateStatusFunc); + cal.getDateText = params.dateText; + if (params.ifFormat) { + cal.setDateFormat(params.ifFormat); + } + if (params.inputField && typeof params.inputField.value == "string") { + cal.parseDate(params.inputField.value); + } + cal.create(params.flat); + cal.show(); + return false; + } + + var triggerEl = params.button || params.displayArea || params.inputField; + triggerEl["on" + params.eventName] = function() { + var dateEl = params.inputField || params.displayArea; + var dateFmt = params.inputField ? params.ifFormat : params.daFormat; + var mustCreate = false; + var cal = window.calendar; + if (dateEl) + params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt); + if (!(cal && params.cache)) { + window.calendar = cal = new Calendar(params.firstDay, + params.date, + params.onSelect || onSelect, + params.onClose || function(cal) { cal.hide(); }); + cal.setDateToolTipHandler(params.dateTooltipFunc); + cal.showsTime = params.showsTime; + cal.time24 = (params.timeFormat == "24"); + cal.weekNumbers = params.weekNumbers; + mustCreate = true; + } else { + if (params.date) + cal.setDate(params.date); + cal.hide(); + } + if (params.multiple) { + cal.multiple = {}; + for (var i = params.multiple.length; --i >= 0;) { + var d = params.multiple[i]; + var ds = d.print("%Y%m%d"); + cal.multiple[ds] = d; + } + } + cal.showsOtherMonths = params.showOthers; + cal.yearStep = params.step; + cal.setRange(params.range[0], params.range[1]); + cal.params = params; + cal.setDateStatusHandler(params.dateStatusFunc); + cal.getDateText = params.dateText; + cal.setDateFormat(dateFmt); + if (mustCreate) + cal.create(); + cal.refresh(); + if (!params.position) + cal.showAtElement(params.button || params.displayArea || params.inputField, params.align); + else + cal.showAt(params.position[0], params.position[1]); + return false; + }; + + return cal; +}; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-setup_stripped.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-setup_stripped.js new file mode 100644 index 0000000..0b78430 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-setup_stripped.js @@ -0,0 +1,21 @@ +/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ + * --------------------------------------------------------------------------- + * + * The DHTML Calendar + * + * Details and latest version at: + * http://dynarch.com/mishoo/calendar.epl + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + * + * This file defines helper functions for setting up the calendar. They are + * intended to help non-programmers get a working calendar on their site + * quickly. This script should not be seen as part of the calendar. It just + * shows you what one can do with the calendar, while in the same time + * providing a quick and simple method for setting it up. If you need + * exhaustive customization of the calendar creation process feel free to + * modify this code to suit your needs (this is recommended and much better + * than modifying calendar.js itself). + */ + Calendar.setup=function(params){function param_default(pname,def){if(typeof params[pname]=="undefined"){params[pname]=def;}};param_default("inputField",null);param_default("displayArea",null);param_default("button",null);param_default("eventName","click");param_default("ifFormat","%Y/%m/%d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true);param_default("disableFunc",null);param_default("dateStatusFunc",params["disableFunc"]);param_default("dateTooltipFunc",null);param_default("dateText",null);param_default("firstDay",null);param_default("align","Br");param_default("range",[1900,2999]);param_default("weekNumbers",true);param_default("flat",null);param_default("flatCallback",null);param_default("onSelect",null);param_default("onClose",null);param_default("onUpdate",null);param_default("date",null);param_default("showsTime",false);param_default("timeFormat","24");param_default("electric",true);param_default("step",2);param_default("position",null);param_default("cache",false);param_default("showOthers",false);param_default("multiple",null);var tmp=["inputField","displayArea","button"];for(var i in tmp){if(typeof params[tmp[i]]=="string"){params[tmp[i]]=document.getElementById(params[tmp[i]]);}}if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");return false;}function onSelect(cal){var p=cal.params;var update=(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputField.value=cal.date.print(p.ifFormat);if(typeof p.inputField.onchange=="function")p.inputField.onchange();}if(update&&p.displayArea)p.displayArea.innerHTML=cal.date.print(p.daFormat);if(update&&typeof p.onUpdate=="function")p.onUpdate(cal);if(update&&p.flat){if(typeof p.flatCallback=="function")p.flatCallback(cal);}if(update&&p.singleClick&&cal.dateClicked)cal.callCloseHandler();};if(params.flat!=null){if(typeof params.flat=="string")params.flat=document.getElementById(params.flat);if(!params.flat){alert("Calendar.setup:\n Flat specified but can't find parent.");return false;}var cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect);cal.setDateToolTipHandler(params.dateTooltipFunc);cal.showsOtherMonths=params.showOthers;cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.params=params;cal.weekNumbers=params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;if(params.ifFormat){cal.setDateFormat(params.ifFormat);}if(params.inputField&&typeof params.inputField.value=="string"){cal.parseDate(params.inputField.value);}cal.create(params.flat);cal.show();return false;}var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=params.inputField||params.displayArea;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;if(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt);if(!(cal&¶ms.cache)){window.calendar=cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide();});cal.setDateToolTipHandler(params.dateTooltipFunc);cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.weekNumbers=params.weekNumbers;mustCreate=true;}else{if(params.date)cal.setDate(params.date);cal.hide();}if(params.multiple){cal.multiple={};for(var i=params.multiple.length;--i>=0;){var d=params.multiple[i];var ds=d.print("%Y%m%d");cal.multiple[ds]=d;}}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);else cal.showAt(params.position[0],params.position[1]);return false;};return cal;}; \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-system.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-system.css new file mode 100644 index 0000000..f64493b --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-system.css @@ -0,0 +1,251 @@ +/* The main calendar widget. DIV containing a table. */ + +.calendar { + position: relative; + display: none; + border: 1px solid; + border-color: #fff #000 #000 #fff; + font-size: 11px; + cursor: default; + background: Window; + color: WindowText; + font-family: tahoma,verdana,sans-serif; +} + +.calendar table { + border: 1px solid; + border-color: #fff #000 #000 #fff; + font-size: 11px; + cursor: default; + background: Window; + color: WindowText; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; + padding: 1px; + border: 1px solid; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; + background: ButtonFace; +} + +.calendar .nav { + background: ButtonFace url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; + padding: 1px; + border: 1px solid #000; + background: ActiveCaption; + color: CaptionText; + text-align: center; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .daynames { /* Row containing the day names */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid ButtonShadow; + padding: 2px; + text-align: center; + background: ButtonFace; + color: ButtonText; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + border: 2px solid; + padding: 0px; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + border-width: 1px; + padding: 2px 0px 0px 2px; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid ButtonShadow; + background: ButtonFace; + color: ButtonText; +} + +.calendar tbody .rowhilite td { + background: Highlight; + color: HighlightText; +} + +.calendar tbody td.hilite { /* Hovered cells */ + padding: 1px 3px 1px 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; + border: 1px solid; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border: 1px solid; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; + padding: 2px 2px 0px 2px; + background: ButtonFace; + color: ButtonText; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { /* Cell showing today date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody td.disabled { color: GrayText; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: ButtonFace; + padding: 1px; + border: 1px solid; + border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; + color: ButtonText; + text-align: center; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + padding: 1px; + background: #e4e0d8; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + width: 4em; + top: 0px; + left: 0px; + cursor: default; + border: 1px solid; + border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; + background: Menu; + color: MenuText; + font-size: 90%; + padding: 1px; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .active { + padding: 0px; + border: 1px solid #000; +} + +.calendar .combo .hilite { + background: Highlight; + color: HighlightText; +} + +.calendar td.time { + border-top: 1px solid ButtonShadow; + padding: 1px 0px; + text-align: center; + background-color: ButtonFace; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: Menu; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: Highlight; + color: HighlightText; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-tas.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-tas.css new file mode 100644 index 0000000..a0c9c9d --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-tas.css @@ -0,0 +1,239 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #655; + font-size: 11px; + color: #000; + cursor: default; + background: #ffd; + font-family: tahoma,verdana,sans-serif; + filter: +progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#DDDCCC,EndColorStr=#FFFFFF); +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ + color:#363636; +} + +.calendar .nav { + background: #edc url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + background: #654; + color: #363636; + padding: 2px; + filter: +progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#dddccc); +} + +.calendar thead .headrow { /* Row containing navigation buttons */ + /*background: #3B86A0;*/ + color: #363636; + font-weight: bold; +filter: +progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#3b86a0); +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #655; + padding: 2px; + text-align: center; + color: #363636; + filter: +progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#DDDCCC,EndColorStr=#FFFFFF); +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #ffcc86; + color: #000; + border: 1px solid #b59345; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #c77; + padding: 2px 0px 0px 2px; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: #fed; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #fed; +} + +.calendar tbody .rowhilite td { + background: #ddf; + +} + +.calendar tbody .rowhilite td.wn { + background: #efe; +} + +.calendar tbody td.hilite { /* Hovered cells */ + background: #ffe; + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + background: #ddc; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #fea; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { font-weight: bold; } + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #988; + color: #000; + +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + border-top: 1px solid #655; + background: #dcb; + color: #363636; + font-weight: bold; + filter: +progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#FFFFFF,EndColorStr=#DDDCCC); +} +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #faa; + border: 1px solid #f40; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #c77; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #655; + background: #ffe; + color: #000; + font-size: smaller; + z-index: 100; +} + +.combo .label, +.combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.combo .label-IEfix { + width: 4em; +} + +.combo .hilite { + background: #fc8; +} + +.combo .active { + border-top: 1px solid #a64; + border-bottom: 1px solid #a64; + background: #fee; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #a88; + padding: 1px 0px; + text-align: center; + background-color: #fed; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #988; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #866; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-1.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-1.css new file mode 100644 index 0000000..56ffdf2 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-1.css @@ -0,0 +1,271 @@ +/* The main calendar widget. DIV containing a table. */ + +.calendar { + position: relative; + display: none; + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + font-size: 11px; + color: #000; + cursor: default; + background: #d4d0c8; + font-family: tahoma,verdana,sans-serif; +} + +.calendar table { + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + font-size: 11px; + color: #000; + cursor: default; + background: #d4d0c8; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; + padding: 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar .nav { + background: transparent url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; + padding: 1px; + border: 1px solid #000; + background: #848078; + color: #fff; + text-align: center; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .daynames { /* Row containing the day names */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #000; + padding: 2px; + text-align: center; + background: #f4f0e8; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + padding: 0px; + background-color: #e4e0d8; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + background-color: #c4c0b8; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #f4f0e8; +} + +.calendar tbody .rowhilite td { + background: #e4e0d8; +} + +.calendar tbody .rowhilite td.wn { + background: #d4d0c8; +} + +.calendar tbody td.hilite { /* Hovered cells */ + padding: 1px 3px 1px 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + padding: 2px 2px 0px 2px; + background: #e4e0d8; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { /* Cell showing today date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #f4f0e8; + padding: 1px; + border: 1px solid #000; + background: #848078; + color: #fff; + text-align: center; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + padding: 1px; + background: #e4e0d8; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + width: 4em; + top: 0px; + left: 0px; + cursor: default; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + background: #e4e0d8; + font-size: 90%; + padding: 1px; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .active { + background: #c4c0b8; + padding: 0px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar .combo .hilite { + background: #048; + color: #fea; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #f4f0e8; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #766; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-2.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-2.css new file mode 100644 index 0000000..ccb85a0 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-2.css @@ -0,0 +1,271 @@ +/* The main calendar widget. DIV containing a table. */ + +.calendar { + position: relative; + display: none; + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + font-size: 11px; + color: #000; + cursor: default; + background: #d4c8d0; + font-family: tahoma,verdana,sans-serif; +} + +.calendar table { + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + font-size: 11px; + color: #000; + cursor: default; + background: #d4c8d0; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; + padding: 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar .nav { + background: transparent url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; + padding: 1px; + border: 1px solid #000; + background: #847880; + color: #fff; + text-align: center; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .daynames { /* Row containing the day names */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #000; + padding: 2px; + text-align: center; + background: #f4e8f0; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + padding: 0px; + background-color: #e4d8e0; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + background-color: #c4b8c0; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #f4e8f0; +} + +.calendar tbody .rowhilite td { + background: #e4d8e0; +} + +.calendar tbody .rowhilite td.wn { + background: #d4c8d0; +} + +.calendar tbody td.hilite { /* Hovered cells */ + padding: 1px 3px 1px 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + padding: 2px 2px 0px 2px; + background: #e4d8e0; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { /* Cell showing today date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #f4e8f0; + padding: 1px; + border: 1px solid #000; + background: #847880; + color: #fff; + text-align: center; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + padding: 1px; + background: #e4d8e0; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + width: 4em; + top: 0px; + left: 0px; + cursor: default; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + background: #e4d8e0; + font-size: 90%; + padding: 1px; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .active { + background: #d4c8d0; + padding: 0px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar .combo .hilite { + background: #408; + color: #fea; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #f4f0e8; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #766; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-cold-1.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-cold-1.css new file mode 100644 index 0000000..09a1a80 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-cold-1.css @@ -0,0 +1,265 @@ +/* The main calendar widget. DIV containing a table. */ + +.calendar { + position: relative; + display: none; + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + font-size: 11px; + color: #000; + cursor: default; + background: #c8d0d4; + font-family: tahoma,verdana,sans-serif; +} + +.calendar table { + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + font-size: 11px; + color: #000; + cursor: default; + background: #c8d0d4; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; + padding: 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar .nav { + background: transparent url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; + padding: 1px; + border: 1px solid #000; + background: #788084; + color: #fff; + text-align: center; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .daynames { /* Row containing the day names */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #000; + padding: 2px; + text-align: center; + background: #e8f0f4; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + padding: 0px; + background-color: #d8e0e4; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + background-color: #b8c0c4; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #e8f4f0; +} + +.calendar tbody .rowhilite td { + background: #d8e4e0; +} + +.calendar tbody .rowhilite td.wn { + background: #c8d4d0; +} + +.calendar tbody td.hilite { /* Hovered cells */ + padding: 1px 3px 1px 1px; + border: 1px solid; + border-color: #fff #000 #000 #fff; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; + border: 1px solid; + border-color: #000 #fff #fff #000; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + padding: 2px 2px 0px 2px; + border: 1px solid; + border-color: #000 #fff #fff #000; + background: #d8e0e4; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { /* Cell showing today date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #e8f0f4; + padding: 1px; + border: 1px solid #000; + background: #788084; + color: #fff; + text-align: center; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + padding: 1px; + background: #d8e0e4; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + width: 4em; + top: 0px; + left: 0px; + cursor: default; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + background: #d8e0e4; + font-size: 90%; + padding: 1px; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .active { + background: #c8d0d4; + padding: 0px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar .combo .hilite { + background: #048; + color: #aef; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #e8f0f4; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #667; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-cold-2.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-cold-2.css new file mode 100644 index 0000000..0ae6b08 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-win2k-cold-2.css @@ -0,0 +1,271 @@ +/* The main calendar widget. DIV containing a table. */ + +.calendar { + position: relative; + display: none; + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + font-size: 11px; + color: #000; + cursor: default; + background: #c8d4d0; + font-family: tahoma,verdana,sans-serif; +} + +.calendar table { + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + font-size: 11px; + color: #000; + cursor: default; + background: #c8d4d0; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; + padding: 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar .nav { + background: transparent url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; + padding: 1px; + border: 1px solid #000; + background: #788480; + color: #fff; + text-align: center; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .daynames { /* Row containing the day names */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #000; + padding: 2px; + text-align: center; + background: #e8f4f0; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #f00; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + border-top: 2px solid #fff; + border-right: 2px solid #000; + border-bottom: 2px solid #000; + border-left: 2px solid #fff; + padding: 0px; + background-color: #d8e4e0; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + background-color: #b8c4c0; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + width: 2em; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #aaa; +} +.calendar tbody .day.othermonth.oweekend { + color: #faa; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #e8f4f0; +} + +.calendar tbody .rowhilite td { + background: #d8e4e0; +} + +.calendar tbody .rowhilite td.wn { + background: #c8d4d0; +} + +.calendar tbody td.hilite { /* Hovered cells */ + padding: 1px 3px 1px 1px; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; + padding: 2px 2px 0px 2px; + background: #d8e4e0; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #f00; +} + +.calendar tbody td.today { /* Cell showing today date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + background: #e8f4f0; + padding: 1px; + border: 1px solid #000; + background: #788480; + color: #fff; + text-align: center; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + padding: 1px; + background: #d8e4e0; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + padding: 2px 0px 0px 2px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + width: 4em; + top: 0px; + left: 0px; + cursor: default; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; + border-left: 1px solid #fff; + background: #d8e4e0; + font-size: 90%; + padding: 1px; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .active { + background: #c8d4d0; + padding: 0px; + border-top: 1px solid #000; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + border-left: 1px solid #000; +} + +.calendar .combo .hilite { + background: #048; + color: #aef; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #e8f0f4; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #667; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar.js new file mode 100644 index 0000000..eddb43b --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar.js @@ -0,0 +1,1853 @@ +/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo + * ----------------------------------------------------------- + * + * The DHTML Calendar, version 1.0 "It is happening again" + * + * Details and latest version at: + * www.dynarch.com/projects/calendar + * + * This script is developed by Dynarch.com. Visit us at www.dynarch.com. + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + */ + +// $Id: calendar.js,v 1.3 2010-07-27 04:41:27 tv Exp $ + +/** The Calendar object constructor. */ +Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) { + // member variables + this.activeDiv = null; + this.currentDateEl = null; + this.getDateStatus = null; + this.getDateToolTip = null; + this.getDateText = null; + this.timeout = null; + this.onSelected = onSelected || null; + this.onClose = onClose || null; + this.dragging = false; + this.hidden = false; + this.minYear = 1970; + this.maxYear = 2050; + this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"]; + this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"]; + this.isPopup = true; + this.weekNumbers = true; + this.firstDayOfWeek = typeof firstDayOfWeek == "number" ? firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc. + this.showsOtherMonths = false; + this.dateStr = dateStr; + this.ar_days = null; + this.showsTime = false; + this.time24 = true; + this.yearStep = 2; + this.hiliteToday = true; + this.multiple = null; + // HTML elements + this.table = null; + this.element = null; + this.tbody = null; + this.firstdayname = null; + // Combo boxes + this.monthsCombo = null; + this.yearsCombo = null; + this.hilitedMonth = null; + this.activeMonth = null; + this.hilitedYear = null; + this.activeYear = null; + // Information + this.dateClicked = false; + + // one-time initializations + if (typeof Calendar._SDN == "undefined") { + // table of short day names + if (typeof Calendar._SDN_len == "undefined") + Calendar._SDN_len = 3; + var ar = new Array(); + for (var i = 8; i > 0;) { + ar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len); + } + Calendar._SDN = ar; + // table of short month names + if (typeof Calendar._SMN_len == "undefined") + Calendar._SMN_len = 3; + ar = new Array(); + for (var i = 12; i > 0;) { + ar[--i] = Calendar._MN[i].substr(0, Calendar._SMN_len); + } + Calendar._SMN = ar; + } +}; + +// ** constants + +/// "static", needed for event handlers. +Calendar._C = null; + +/// detect a special case of "web browser" +Calendar.is_ie = ( /msie/i.test(navigator.userAgent) && + !/opera/i.test(navigator.userAgent) ); + +Calendar.is_ie5 = ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) ); +Calendar.is_ie7up = ( Calendar.is_ie && parseFloat(navigator.userAgent.replace(/.*msie ([0-9]+).*/i, "$1" )) >= 7 ); + +/// detect Opera browser +Calendar.is_opera = /opera/i.test(navigator.userAgent); + +/// detect KHTML-based browsers +Calendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent); + +// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate +// library, at some point. + +Calendar.getAbsolutePos = function(el) { + var SL = 0, ST = 0; + var is_div = /^div$/i.test(el.tagName); + if (is_div && el.scrollLeft) + SL = el.scrollLeft; + if (is_div && el.scrollTop) + ST = el.scrollTop; + var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST }; + if (el.offsetParent) { + var tmp = this.getAbsolutePos(el.offsetParent); + r.x += tmp.x; + r.y += tmp.y; + } + return r; +}; + +Calendar.isRelated = function (el, evt) { + var related = evt.relatedTarget; + if (!related) { + var type = evt.type; + if (type == "mouseover") { + related = evt.fromElement; + } else if (type == "mouseout") { + related = evt.toElement; + } + } + while (related) { + if (related == el) { + return true; + } + related = related.parentNode; + } + return false; +}; + +Calendar.removeClass = function(el, className) { + if (!(el && el.className)) { + return; + } + var cls = el.className.split(" "); + var ar = new Array(); + for (var i = cls.length; i > 0;) { + if (cls[--i] != className) { + ar[ar.length] = cls[i]; + } + } + el.className = ar.join(" "); +}; + +Calendar.addClass = function(el, className) { + Calendar.removeClass(el, className); + el.className += " " + className; +}; + +// FIXME: the following 2 functions totally suck, are useless and should be replaced immediately. +Calendar.getElement = function(ev) { + var f = Calendar.is_ie ? window.event.srcElement : ev.currentTarget; + while (f.nodeType != 1 || /^div$/i.test(f.tagName)) + f = f.parentNode; + return f; +}; + +Calendar.getTargetElement = function(ev) { + var f = Calendar.is_ie ? window.event.srcElement : ev.target; + while (f.nodeType != 1) + f = f.parentNode; + return f; +}; + +Calendar.stopEvent = function(ev) { + ev || (ev = window.event); + if (Calendar.is_ie) { + ev.cancelBubble = true; + ev.returnValue = false; + } else { + ev.preventDefault(); + ev.stopPropagation(); + } + return false; +}; + +Calendar.addEvent = function(el, evname, func) { + if (el.attachEvent) { // IE + el.attachEvent("on" + evname, func); + } else if (el.addEventListener) { // Gecko / W3C + el.addEventListener(evname, func, true); + } else { + el["on" + evname] = func; + } +}; + +Calendar.removeEvent = function(el, evname, func) { + if (el.detachEvent) { // IE + el.detachEvent("on" + evname, func); + } else if (el.removeEventListener) { // Gecko / W3C + el.removeEventListener(evname, func, true); + } else { + el["on" + evname] = null; + } +}; + +Calendar.createElement = function(type, parent) { + var el = null; + if (document.createElementNS) { + // use the XHTML namespace; IE won't normally get here unless + // _they_ "fix" the DOM2 implementation. + el = document.createElementNS("http://www.w3.org/1999/xhtml", type); + } else { + el = document.createElement(type); + } + if (typeof parent != "undefined") { + parent.appendChild(el); + } + return el; +}; + +// END: UTILITY FUNCTIONS + +// BEGIN: CALENDAR STATIC FUNCTIONS + +/** Internal -- adds a set of events to make some element behave like a button. */ +Calendar._add_evs = function(el) { + with (Calendar) { + addEvent(el, "mouseover", dayMouseOver); + addEvent(el, "mousedown", dayMouseDown); + addEvent(el, "mouseout", dayMouseOut); + if (is_ie) { + addEvent(el, "dblclick", dayMouseDblClick); + el.setAttribute("unselectable", true); + } + } +}; + +Calendar.findMonth = function(el) { + if (typeof el.month != "undefined") { + return el; + } else if (typeof el.parentNode.month != "undefined") { + return el.parentNode; + } + return null; +}; + +Calendar.findYear = function(el) { + if (typeof el.year != "undefined") { + return el; + } else if (typeof el.parentNode.year != "undefined") { + return el.parentNode; + } + return null; +}; + +Calendar.showMonthsCombo = function () { + var cal = Calendar._C; + if (!cal) { + return false; + } + var cal = cal; + var cd = cal.activeDiv; + var mc = cal.monthsCombo; + if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + if (cal.activeMonth) { + Calendar.removeClass(cal.activeMonth, "active"); + } + var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()]; + Calendar.addClass(mon, "active"); + cal.activeMonth = mon; + var s = mc.style; + s.display = "block"; + if (cd.navtype < 0) + s.left = cd.offsetLeft + "px"; + else { + var mcw = mc.offsetWidth; + if (typeof mcw == "undefined") + // Konqueror brain-dead techniques + mcw = 50; + s.left = (cd.offsetLeft + cd.offsetWidth - mcw) + "px"; + } + s.top = (cd.offsetTop + cd.offsetHeight) + "px"; +}; + +Calendar.showYearsCombo = function (fwd) { + var cal = Calendar._C; + if (!cal) { + return false; + } + var cal = cal; + var cd = cal.activeDiv; + var yc = cal.yearsCombo; + if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + if (cal.activeYear) { + Calendar.removeClass(cal.activeYear, "active"); + } + cal.activeYear = null; + var Y = cal.date.getFullYear() + (fwd ? 1 : -1); + var yr = yc.firstChild; + var show = false; + for (var i = 12; i > 0; --i) { + if (Y >= cal.minYear && Y <= cal.maxYear) { + yr.innerHTML = Y; + yr.year = Y; + yr.style.display = "block"; + show = true; + } else { + yr.style.display = "none"; + } + yr = yr.nextSibling; + Y += fwd ? cal.yearStep : -cal.yearStep; + } + if (show) { + var s = yc.style; + s.display = "block"; + if (cd.navtype < 0) + s.left = cd.offsetLeft + "px"; + else { + var ycw = yc.offsetWidth; + if (typeof ycw == "undefined") + // Konqueror brain-dead techniques + ycw = 50; + s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px"; + } + s.top = (cd.offsetTop + cd.offsetHeight) + "px"; + } +}; + +// event handlers + +Calendar.tableMouseUp = function(ev) { + var cal = Calendar._C; + if (!cal) { + return false; + } + if (cal.timeout) { + clearTimeout(cal.timeout); + } + var el = cal.activeDiv; + if (!el) { + return false; + } + var target = Calendar.getTargetElement(ev); + ev || (ev = window.event); + Calendar.removeClass(el, "active"); + if (target == el || target.parentNode == el) { + Calendar.cellClick(el, ev); + } + var mon = Calendar.findMonth(target); + var date = null; + if (mon) { + date = new Date(cal.date); + if (mon.month != date.getMonth()) { + date.setMonth(mon.month); + cal.setDate(date); + cal.dateClicked = false; + cal.callHandler(); + } + } else { + var year = Calendar.findYear(target); + if (year) { + date = new Date(cal.date); + if (year.year != date.getFullYear()) { + date.setFullYear(year.year); + cal.setDate(date); + cal.dateClicked = false; + cal.callHandler(); + } + } + } + with (Calendar) { + removeEvent(document, "mouseup", tableMouseUp); + removeEvent(document, "mouseover", tableMouseOver); + removeEvent(document, "mousemove", tableMouseOver); + cal._hideCombos(); + _C = null; + return stopEvent(ev); + } +}; + +Calendar.tableMouseOver = function (ev) { + var cal = Calendar._C; + if (!cal) { + return; + } + var el = cal.activeDiv; + var target = Calendar.getTargetElement(ev); + if (target == el || target.parentNode == el) { + Calendar.addClass(el, "hilite active"); + Calendar.addClass(el.parentNode, "rowhilite"); + } else { + if (typeof el.navtype == "undefined" || (el.navtype != 50 && (el.navtype == 0 || Math.abs(el.navtype) > 2))) + Calendar.removeClass(el, "active"); + Calendar.removeClass(el, "hilite"); + Calendar.removeClass(el.parentNode, "rowhilite"); + } + ev || (ev = window.event); + if (el.navtype == 50 && target != el) { + var pos = Calendar.getAbsolutePos(el); + var w = el.offsetWidth; + var x = ev.clientX; + var dx; + var decrease = true; + if (x > pos.x + w) { + dx = x - pos.x - w; + decrease = false; + } else + dx = pos.x - x; + + if (dx < 0) dx = 0; + var range = el._range; + var current = el._current; + var count = Math.floor(dx / 10) % range.length; + for (var i = range.length; --i >= 0;) + if (range[i] == current) + break; + while (count-- > 0) + if (decrease) { + if (--i < 0) + i = range.length - 1; + } else if ( ++i >= range.length ) + i = 0; + var newval = range[i]; + el.innerHTML = newval; + + cal.onUpdateTime(); + } + var mon = Calendar.findMonth(target); + if (mon) { + if (mon.month != cal.date.getMonth()) { + if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + Calendar.addClass(mon, "hilite"); + cal.hilitedMonth = mon; + } else if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + } else { + if (cal.hilitedMonth) { + Calendar.removeClass(cal.hilitedMonth, "hilite"); + } + var year = Calendar.findYear(target); + if (year) { + if (year.year != cal.date.getFullYear()) { + if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + Calendar.addClass(year, "hilite"); + cal.hilitedYear = year; + } else if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + } else if (cal.hilitedYear) { + Calendar.removeClass(cal.hilitedYear, "hilite"); + } + } + return Calendar.stopEvent(ev); +}; + +Calendar.tableMouseDown = function (ev) { + if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) { + return Calendar.stopEvent(ev); + } +}; + +Calendar.calDragIt = function (ev) { + var cal = Calendar._C; + if (!(cal && cal.dragging)) { + return false; + } + var posX; + var posY; + if (Calendar.is_ie) { + posY = window.event.clientY + document.body.scrollTop; + posX = window.event.clientX + document.body.scrollLeft; + } else { + posX = ev.pageX; + posY = ev.pageY; + } + cal.hideShowCovered(); + var st = cal.element.style; + st.left = (posX - cal.xOffs) + "px"; + st.top = (posY - cal.yOffs) + "px"; + return Calendar.stopEvent(ev); +}; + +Calendar.calDragEnd = function (ev) { + var cal = Calendar._C; + if (!cal) { + return false; + } + cal.dragging = false; + with (Calendar) { + removeEvent(document, "mousemove", calDragIt); + removeEvent(document, "mouseup", calDragEnd); + tableMouseUp(ev); + } + cal.hideShowCovered(); +}; + +Calendar.dayMouseDown = function(ev) { + var el = Calendar.getElement(ev); + if (el.disabled) { + return false; + } + var cal = el.calendar; + cal.activeDiv = el; + Calendar._C = cal; + if (el.navtype != 300) with (Calendar) { + if (el.navtype == 50) { + el._current = el.innerHTML; + addEvent(document, "mousemove", tableMouseOver); + } else + addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", tableMouseOver); + addClass(el, "hilite active"); + addEvent(document, "mouseup", tableMouseUp); + } else if (cal.isPopup) { + cal._dragStart(ev); + } + if (el.navtype == -1 || el.navtype == 1) { + if (cal.timeout) clearTimeout(cal.timeout); + cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250); + } else if (el.navtype == -2 || el.navtype == 2) { + if (cal.timeout) clearTimeout(cal.timeout); + cal.timeout = setTimeout((el.navtype > 0) ? "Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250); + } else { + cal.timeout = null; + } + return Calendar.stopEvent(ev); +}; + +Calendar.dayMouseDblClick = function(ev) { + Calendar.cellClick(Calendar.getElement(ev), ev || window.event); + if (Calendar.is_ie) { + document.selection.empty(); + } +}; + +Calendar.dayMouseOver = function(ev) { + var el = Calendar.getElement(ev); + if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) { + return false; + } + if (el.ttip) { + if (el.ttip.substr(0, 1) == "_") { + el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1); + } + el.calendar.tooltips.innerHTML = el.ttip; + } + if (el.navtype != 300) { + Calendar.addClass(el, "hilite"); + if (el.caldate) { + Calendar.addClass(el.parentNode, "rowhilite"); + } + } + return Calendar.stopEvent(ev); +}; + +Calendar.dayMouseOut = function(ev) { + with (Calendar) { + var el = getElement(ev); + if (isRelated(el, ev) || _C || el.disabled) + return false; + removeClass(el, "hilite"); + if (el.caldate) + removeClass(el.parentNode, "rowhilite"); + if (el.calendar) + el.calendar.tooltips.innerHTML = _TT["SEL_DATE"]; + return stopEvent(ev); + } +}; + +/** + * A generic "click" handler :) handles all types of buttons defined in this + * calendar. + */ +Calendar.cellClick = function(el, ev) { + var cal = el.calendar; + var closing = false; + var newdate = false; + var date = null; + if (typeof el.navtype == "undefined") { + if (cal.currentDateEl) { + Calendar.removeClass(cal.currentDateEl, "selected"); + Calendar.addClass(el, "selected"); + closing = (cal.currentDateEl == el); + if (!closing) { + cal.currentDateEl = el; + } + } + cal.date.setDateOnly(el.caldate); + date = cal.date; + var other_month = !(cal.dateClicked = !el.otherMonth); + if (!other_month && !cal.currentDateEl) + cal._toggleMultipleDate(new Date(date)); + else + newdate = !el.disabled; + // a date was clicked + if (other_month) + cal._init(cal.firstDayOfWeek, date); + } else { + if (el.navtype == 200) { + Calendar.removeClass(el, "hilite"); + cal.callCloseHandler(); + return; + } + date = new Date(cal.date); + if (el.navtype == 0) + date.setDateOnly(new Date()); // TODAY + // unless "today" was clicked, we assume no date was clicked so + // the selected handler will know not to close the calenar when + // in single-click mode. + // cal.dateClicked = (el.navtype == 0); + cal.dateClicked = false; + var year = date.getFullYear(); + var mon = date.getMonth(); + function setMonth(m) { + var day = date.getDate(); + var max = date.getMonthDays(m); + if (day > max) { + date.setDate(max); + } + date.setMonth(m); + }; + switch (el.navtype) { + case 400: + Calendar.removeClass(el, "hilite"); + var text = Calendar._TT["ABOUT"]; + if (typeof text != "undefined") { + text += cal.showsTime ? Calendar._TT["ABOUT_TIME"] : ""; + } else { + // FIXME: this should be removed as soon as lang files get updated! + text = "Help and about box text is not translated into this language.\n" + + "If you know this language and you feel generous please update\n" + + "the corresponding file in \"lang\" subdir to match calendar-en.js\n" + + "and send it back to to get it into the distribution ;-)\n\n" + + "Thank you!\n" + + "http://dynarch.com/mishoo/calendar.epl\n"; + } + alert(text); + return; + case -2: + if (year > cal.minYear) { + date.setFullYear(year - 1); + } + break; + case -1: + if (mon > 0) { + setMonth(mon - 1); + } else if (year-- > cal.minYear) { + date.setFullYear(year); + setMonth(11); + } + break; + case 1: + if (mon < 11) { + setMonth(mon + 1); + } else if (year < cal.maxYear) { + date.setFullYear(year + 1); + setMonth(0); + } + break; + case 2: + if (year < cal.maxYear) { + date.setFullYear(year + 1); + } + break; + case 100: + cal.setFirstDayOfWeek(el.fdow); + return; + case 50: + var range = el._range; + var current = el.innerHTML; + for (var i = range.length; --i >= 0;) + if (range[i] == current) + break; + if (ev && ev.shiftKey) { + if (--i < 0) + i = range.length - 1; + } else if ( ++i >= range.length ) + i = 0; + var newval = range[i]; + el.innerHTML = newval; + cal.onUpdateTime(); + return; + case 0: + // TODAY will bring us here + if ((typeof cal.getDateStatus == "function") && + cal.getDateStatus(date, date.getFullYear(), date.getMonth(), date.getDate())) { + return false; + } + break; + } + if (!date.equalsTo(cal.date)) { + cal.setDate(date); + newdate = true; + } else if (el.navtype == 0) + newdate = closing = true; + } + if (newdate) { + ev && cal.callHandler(); + } + if (closing) { + Calendar.removeClass(el, "hilite"); + ev && cal.callCloseHandler(); + } +}; + +// END: CALENDAR STATIC FUNCTIONS + +// BEGIN: CALENDAR OBJECT FUNCTIONS + +/** + * This function creates the calendar inside the given parent. If _par is + * null than it creates a popup calendar inside the BODY element. If _par is + * an element, be it BODY, then it creates a non-popup calendar (still + * hidden). Some properties need to be set before calling this function. + */ +Calendar.prototype.create = function (_par) { + var parent = null; + if (! _par) { + // default parent is the document body, in which case we create + // a popup calendar. + parent = document.getElementsByTagName("body")[0]; + this.isPopup = true; + } else { + parent = _par; + this.isPopup = false; + } + this.date = this.dateStr ? new Date(this.dateStr) : new Date(); + + var table = Calendar.createElement("table"); + this.table = table; + table.cellSpacing = 0; + table.cellPadding = 0; + table.calendar = this; + Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown); + + var div = Calendar.createElement("div"); + this.element = div; + div.className = "calendar"; + if (this.isPopup) { + div.style.position = "absolute"; + div.style.display = "none"; + } + div.appendChild(table); + + var thead = Calendar.createElement("thead", table); + var cell = null; + var row = null; + + var cal = this; + var hh = function (text, cs, navtype) { + cell = Calendar.createElement("td", row); + cell.colSpan = cs; + cell.className = "button"; + if (navtype != 0 && Math.abs(navtype) <= 2) + cell.className += " nav"; + Calendar._add_evs(cell); + cell.calendar = cal; + cell.navtype = navtype; + cell.innerHTML = "
" + text + "
"; + return cell; + }; + + row = Calendar.createElement("tr", thead); + var title_length = 6; + (this.isPopup) && --title_length; + (this.weekNumbers) && ++title_length; + + hh("?", 1, 400).ttip = Calendar._TT["INFO"]; + this.title = hh("", title_length, 300); + this.title.className = "title"; + if (this.isPopup) { + this.title.ttip = Calendar._TT["DRAG_TO_MOVE"]; + this.title.style.cursor = "move"; + hh("×", 1, 200).ttip = Calendar._TT["CLOSE"]; + } + + row = Calendar.createElement("tr", thead); + row.className = "headrow"; + + this._nav_py = hh("«", 1, -2); + this._nav_py.ttip = Calendar._TT["PREV_YEAR"]; + + this._nav_pm = hh("‹", 1, -1); + this._nav_pm.ttip = Calendar._TT["PREV_MONTH"]; + + this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0); + this._nav_now.ttip = Calendar._TT["GO_TODAY"]; + + this._nav_nm = hh("›", 1, 1); + this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"]; + + this._nav_ny = hh("»", 1, 2); + this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"]; + + // day names + row = Calendar.createElement("tr", thead); + row.className = "daynames"; + if (this.weekNumbers) { + cell = Calendar.createElement("td", row); + cell.className = "name wn"; + cell.innerHTML = Calendar._TT["WK"]; + } + for (var i = 7; i > 0; --i) { + cell = Calendar.createElement("td", row); + if (!i) { + cell.navtype = 100; + cell.calendar = this; + Calendar._add_evs(cell); + } + } + this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild; + this._displayWeekdays(); + + var tbody = Calendar.createElement("tbody", table); + this.tbody = tbody; + + for (i = 6; i > 0; --i) { + row = Calendar.createElement("tr", tbody); + if (this.weekNumbers) { + cell = Calendar.createElement("td", row); + } + for (var j = 7; j > 0; --j) { + cell = Calendar.createElement("td", row); + cell.calendar = this; + Calendar._add_evs(cell); + } + } + + if (this.showsTime) { + row = Calendar.createElement("tr", tbody); + row.className = "time"; + + cell = Calendar.createElement("td", row); + cell.className = "time"; + cell.colSpan = 2; + cell.innerHTML = Calendar._TT["TIME"] || " "; + + cell = Calendar.createElement("td", row); + cell.className = "time"; + cell.colSpan = this.weekNumbers ? 4 : 3; + + (function(){ + function makeTimePart(className, init, range_start, range_end) { + var part = Calendar.createElement("span", cell); + part.className = className; + part.innerHTML = init; + part.calendar = cal; + part.ttip = Calendar._TT["TIME_PART"]; + part.navtype = 50; + part._range = []; + if (typeof range_start != "number") + part._range = range_start; + else { + for (var i = range_start; i <= range_end; ++i) { + var txt; + if (i < 10 && range_end >= 10) txt = '0' + i; + else txt = '' + i; + part._range[part._range.length] = txt; + } + } + Calendar._add_evs(part); + return part; + }; + var hrs = cal.date.getHours(); + var mins = cal.date.getMinutes(); + var t12 = !cal.time24; + var pm = (hrs > 12); + if (t12 && pm) hrs -= 12; + var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23); + var span = Calendar.createElement("span", cell); + span.innerHTML = ":"; + span.className = "colon"; + var M = makeTimePart("minute", mins, 0, 59); + var AP = null; + cell = Calendar.createElement("td", row); + cell.className = "time"; + cell.colSpan = 2; + if (t12) + AP = makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]); + else + cell.innerHTML = " "; + + cal.onSetTime = function() { + var pm, hrs = this.date.getHours(), + mins = this.date.getMinutes(); + if (t12) { + pm = (hrs >= 12); + if (pm) hrs -= 12; + if (hrs == 0) hrs = 12; + AP.innerHTML = pm ? "pm" : "am"; + } + H.innerHTML = (hrs < 10) ? ("0" + hrs) : hrs; + M.innerHTML = (mins < 10) ? ("0" + mins) : mins; + }; + + cal.onUpdateTime = function() { + var date = this.date; + var h = parseInt(H.innerHTML, 10); + if (t12) { + if (/pm/i.test(AP.innerHTML) && h < 12) + h += 12; + else if (/am/i.test(AP.innerHTML) && h == 12) + h = 0; + } + var d = date.getDate(); + var m = date.getMonth(); + var y = date.getFullYear(); + date.setHours(h); + date.setMinutes(parseInt(M.innerHTML, 10)); + date.setFullYear(y); + date.setMonth(m); + date.setDate(d); + this.dateClicked = false; + this.callHandler(); + }; + })(); + } else { + this.onSetTime = this.onUpdateTime = function() {}; + } + + var tfoot = Calendar.createElement("tfoot", table); + + row = Calendar.createElement("tr", tfoot); + row.className = "footrow"; + + cell = hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300); + cell.className = "ttip"; + if (this.isPopup) { + cell.ttip = Calendar._TT["DRAG_TO_MOVE"]; + cell.style.cursor = "move"; + } + this.tooltips = cell; + + div = Calendar.createElement("div", this.element); + this.monthsCombo = div; + div.className = "combo"; + for (i = 0; i < Calendar._MN.length; ++i) { + var mn = Calendar.createElement("div"); + mn.className = Calendar.is_ie ? "label-IEfix" : "label"; + mn.month = i; + mn.innerHTML = Calendar._SMN[i]; + div.appendChild(mn); + } + + div = Calendar.createElement("div", this.element); + this.yearsCombo = div; + div.className = "combo"; + for (i = 12; i > 0; --i) { + var yr = Calendar.createElement("div"); + yr.className = Calendar.is_ie ? "label-IEfix" : "label"; + div.appendChild(yr); + } + + this._init(this.firstDayOfWeek, this.date); + parent.appendChild(this.element); +}; + +/** keyboard navigation, only for popup calendars */ +Calendar._keyEvent = function(ev) { + var cal = window._dynarch_popupCalendar; + if (!cal || cal.multiple) + return false; + (Calendar.is_ie) && (ev = window.event); + var act = (Calendar.is_ie || ev.type == "keypress"), + K = ev.keyCode; + if (ev.ctrlKey) { + switch (K) { + case 37: // KEY left + act && Calendar.cellClick(cal._nav_pm); + break; + case 38: // KEY up + act && Calendar.cellClick(cal._nav_py); + break; + case 39: // KEY right + act && Calendar.cellClick(cal._nav_nm); + break; + case 40: // KEY down + act && Calendar.cellClick(cal._nav_ny); + break; + default: + return false; + } + } else switch (K) { + case 32: // KEY space (now) + Calendar.cellClick(cal._nav_now); + break; + case 27: // KEY esc + act && cal.callCloseHandler(); + break; + case 37: // KEY left + case 38: // KEY up + case 39: // KEY right + case 40: // KEY down + if (act) { + var prev, x, y, ne, el, step; + prev = K == 37 || K == 38; + step = (K == 37 || K == 39) ? 1 : 7; + function setVars() { + el = cal.currentDateEl; + var p = el.pos; + x = p & 15; + y = p >> 4; + ne = cal.ar_days[y][x]; + };setVars(); + function prevMonth() { + var date = new Date(cal.date); + date.setDate(date.getDate() - step); + cal.setDate(date); + }; + function nextMonth() { + var date = new Date(cal.date); + date.setDate(date.getDate() + step); + cal.setDate(date); + }; + while (1) { + switch (K) { + case 37: // KEY left + if (--x >= 0) + ne = cal.ar_days[y][x]; + else { + x = 6; + K = 38; + continue; + } + break; + case 38: // KEY up + if (--y >= 0) + ne = cal.ar_days[y][x]; + else { + prevMonth(); + setVars(); + } + break; + case 39: // KEY right + if (++x < 7) + ne = cal.ar_days[y][x]; + else { + x = 0; + K = 40; + continue; + } + break; + case 40: // KEY down + if (++y < cal.ar_days.length) + ne = cal.ar_days[y][x]; + else { + nextMonth(); + setVars(); + } + break; + } + break; + } + if (ne) { + if (!ne.disabled) + Calendar.cellClick(ne); + else if (prev) + prevMonth(); + else + nextMonth(); + } + } + break; + case 13: // KEY enter + if (act) + Calendar.cellClick(cal.currentDateEl, ev); + break; + default: + return false; + } + return Calendar.stopEvent(ev); +}; + +/** + * (RE)Initializes the calendar to the given date and firstDayOfWeek + */ +Calendar.prototype._init = function (firstDayOfWeek, date) { + var today = new Date(), + TY = today.getFullYear(), + TM = today.getMonth(), + TD = today.getDate(); + this.table.style.visibility = "hidden"; + var year = date.getFullYear(); + if (year < this.minYear) { + year = this.minYear; + date.setFullYear(year); + } else if (year > this.maxYear) { + year = this.maxYear; + date.setFullYear(year); + } + this.firstDayOfWeek = firstDayOfWeek; + this.date = new Date(date); + var month = date.getMonth(); + var mday = date.getDate(); + var no_days = date.getMonthDays(); + + // calendar voodoo for computing the first day that would actually be + // displayed in the calendar, even if it's from the previous month. + // WARNING: this is magic. ;-) + date.setDate(1); + var day1 = (date.getDay() - this.firstDayOfWeek) % 7; + if (day1 < 0) + day1 += 7; + date.setDate(-day1); + date.setDate(date.getDate() + 1); + + var row = this.tbody.firstChild; + var MN = Calendar._SMN[month]; + var ar_days = this.ar_days = new Array(); + var weekend = Calendar._TT["WEEKEND"]; + var dates = this.multiple ? (this.datesCells = {}) : null; + for (var i = 0; i < 6; ++i, row = row.nextSibling) { + var cell = row.firstChild; + if (this.weekNumbers) { + cell.className = "day wn"; + cell.innerHTML = date.getWeekNumber(); + cell = cell.nextSibling; + } + row.className = "daysrow"; + var hasdays = false, iday, dpos = ar_days[i] = []; + for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday + 1)) { + iday = date.getDate(); + var wday = date.getDay(); + cell.className = "day"; + cell.pos = i << 4 | j; + dpos[j] = cell; + var current_month = (date.getMonth() == month); + if (!current_month) { + if (this.showsOtherMonths) { + cell.className += " othermonth"; + cell.otherMonth = true; + } else { + cell.className = "emptycell"; + cell.innerHTML = " "; + cell.disabled = true; + continue; + } + } else { + cell.otherMonth = false; + hasdays = true; + } + cell.disabled = false; + cell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday; + if (dates) + dates[date.print("%Y%m%d")] = cell; + if (this.getDateStatus) { + var status = this.getDateStatus(date, year, month, iday); + if (this.getDateToolTip) { + var toolTip = this.getDateToolTip(date, year, month, iday); + if (toolTip) + cell.title = toolTip; + } + if (status === true) { + cell.className += " disabled"; + cell.disabled = true; + } else { + if (/disabled/i.test(status)) + cell.disabled = true; + cell.className += " " + status; + } + } + if (!cell.disabled) { + cell.caldate = new Date(date); + cell.ttip = "_"; + if (!this.multiple && current_month + && iday == mday && this.hiliteToday) { + cell.className += " selected"; + this.currentDateEl = cell; + } + if (date.getFullYear() == TY && + date.getMonth() == TM && + iday == TD) { + cell.className += " today"; + cell.ttip += Calendar._TT["PART_TODAY"]; + } + if (weekend.indexOf(wday.toString()) != -1) + cell.className += cell.otherMonth ? " oweekend" : " weekend"; + } + } + if (!(hasdays || this.showsOtherMonths)) + row.className = "emptyrow"; + } + this.title.innerHTML = Calendar._MN[month] + ", " + year; + this.onSetTime(); + this.table.style.visibility = "visible"; + this._initMultipleDates(); + // PROFILE + // this.tooltips.innerHTML = "Generated in " + ((new Date()) - today) + " ms"; +}; + +Calendar.prototype._initMultipleDates = function() { + if (this.multiple) { + for (var i in this.multiple) { + var cell = this.datesCells[i]; + var d = this.multiple[i]; + if (!d) + continue; + if (cell) + cell.className += " selected"; + } + } +}; + +Calendar.prototype._toggleMultipleDate = function(date) { + if (this.multiple) { + var ds = date.print("%Y%m%d"); + var cell = this.datesCells[ds]; + if (cell) { + var d = this.multiple[ds]; + if (!d) { + Calendar.addClass(cell, "selected"); + this.multiple[ds] = date; + } else { + Calendar.removeClass(cell, "selected"); + delete this.multiple[ds]; + } + } + } +}; + +Calendar.prototype.setDateToolTipHandler = function (unaryFunction) { + this.getDateToolTip = unaryFunction; +}; + +/** + * Calls _init function above for going to a certain date (but only if the + * date is different than the currently selected one). + */ +Calendar.prototype.setDate = function (date) { + if (!date.equalsTo(this.date)) { + this._init(this.firstDayOfWeek, date); + } +}; + +/** + * Refreshes the calendar. Useful if the "disabledHandler" function is + * dynamic, meaning that the list of disabled date can change at runtime. + * Just * call this function if you think that the list of disabled dates + * should * change. + */ +Calendar.prototype.refresh = function () { + this._init(this.firstDayOfWeek, this.date); +}; + +/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for Monday, etc.). */ +Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) { + this._init(firstDayOfWeek, this.date); + this._displayWeekdays(); +}; + +/** + * Allows customization of what dates are enabled. The "unaryFunction" + * parameter must be a function object that receives the date (as a JS Date + * object) and returns a boolean value. If the returned value is true then + * the passed date will be marked as disabled. + */ +Calendar.prototype.setDateStatusHandler = Calendar.prototype.setDisabledHandler = function (unaryFunction) { + this.getDateStatus = unaryFunction; +}; + +/** Customization of allowed year range for the calendar. */ +Calendar.prototype.setRange = function (a, z) { + this.minYear = a; + this.maxYear = z; +}; + +/** Calls the first user handler (selectedHandler). */ +Calendar.prototype.callHandler = function () { + if (this.onSelected) { + this.onSelected(this, this.date.print(this.dateFormat)); + } +}; + +/** Calls the second user handler (closeHandler). */ +Calendar.prototype.callCloseHandler = function () { + if (this.onClose) { + this.onClose(this); + } + this.hideShowCovered(); +}; + +/** Removes the calendar object from the DOM tree and destroys it. */ +Calendar.prototype.destroy = function () { + var el = this.element.parentNode; + el.removeChild(this.element); + Calendar._C = null; + window._dynarch_popupCalendar = null; +}; + +/** + * Moves the calendar element to a different section in the DOM tree (changes + * its parent). + */ +Calendar.prototype.reparent = function (new_parent) { + var el = this.element; + el.parentNode.removeChild(el); + new_parent.appendChild(el); +}; + +// This gets called when the user presses a mouse button anywhere in the +// document, if the calendar is shown. If the click was outside the open +// calendar this function closes it. +Calendar._checkCalendar = function(ev) { + var calendar = window._dynarch_popupCalendar; + if (!calendar) { + return false; + } + var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev); + for (; el != null && el != calendar.element; el = el.parentNode); + if (el == null) { + // calls closeHandler which should hide the calendar. + window._dynarch_popupCalendar.callCloseHandler(); + return Calendar.stopEvent(ev); + } +}; + +/** Shows the calendar. */ +Calendar.prototype.show = function () { + var rows = this.table.getElementsByTagName("tr"); + for (var i = rows.length; i > 0;) { + var row = rows[--i]; + Calendar.removeClass(row, "rowhilite"); + var cells = row.getElementsByTagName("td"); + for (var j = cells.length; j > 0;) { + var cell = cells[--j]; + Calendar.removeClass(cell, "hilite"); + Calendar.removeClass(cell, "active"); + } + } + this.element.style.display = "block"; + this.hidden = false; + if (this.isPopup) { + window._dynarch_popupCalendar = this; + Calendar.addEvent(document, "keydown", Calendar._keyEvent); + Calendar.addEvent(document, "keypress", Calendar._keyEvent); + Calendar.addEvent(document, "mousedown", Calendar._checkCalendar); + } + this.hideShowCovered(); +}; + +/** + * Hides the calendar. Also removes any "hilite" from the class of any TD + * element. + */ +Calendar.prototype.hide = function () { + if (this.isPopup) { + Calendar.removeEvent(document, "keydown", Calendar._keyEvent); + Calendar.removeEvent(document, "keypress", Calendar._keyEvent); + Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar); + } + this.element.style.display = "none"; + this.hidden = true; + this.hideShowCovered(); +}; + +/** + * Shows the calendar at a given absolute position (beware that, depending on + * the calendar element style -- position property -- this might be relative + * to the parent's containing rectangle). + */ +Calendar.prototype.showAt = function (x, y) { + var s = this.element.style; + s.left = x + "px"; + s.top = y + "px"; + this.show(); +}; + +/** Shows the calendar near a given element. */ +Calendar.prototype.showAtElement = function (el, opts) { + var self = this; + var p = Calendar.getAbsolutePos(el); + if (!opts || typeof opts != "string") { + this.showAt(p.x, p.y + el.offsetHeight); + return true; + } + + function getScrollPos() { + var r = new Object(); + + // All except that I know of except IE + if (window.pageXOffset != null) { + + r.x = window.pageXOffset; + r.y = window.pageYOffset; + // IE 6.x strict + } else if (document.documentElement != null + && (parseInt(document.documentElement.scrollLeft) != 0 + || parseInt(document.documentElement.scrollTop) != 0)) { + + r.x = document.documentElement.scrollLeft; + r.y = document.documentElement.scrollTop; + // all other IE + } else if (document.body != null && + document.body.scrollLeft != null) { + + r.x = document.body.scrollLeft; + r.y = document.body.scrollTop; + // if for some reason none of the above work, this should. + } else if (window.scrollX != null) { + + r.x = window.scrollX; + r.y = window.scrollY; + } + + + return r; + } + + function fixPosition(box) { + + if (box.x < 0) + box.x = 0; + if (box.y < 0) + box.y = 0; + var cp = document.createElement("div"); + var s = cp.style; + s.position = "absolute"; + s.right = s.bottom = s.width = s.height = "0px"; + document.body.appendChild(cp); + var br = Calendar.getAbsolutePos(cp); + document.body.removeChild(cp); + /* if (Calendar.is_ie && !Calendar.is_ie7up) { + br.y += document.body.scrollTop; + br.x += document.body.scrollLeft; + } else { + br.y += window.scrollY; + br.x += window.scrollX; + } */ + var scrollPos = getScrollPos(); + + + br.y += scrollPos.y; + br.x += scrollPos.x; + + var tmp = box.x + box.width - br.x; + + if (tmp > 0) box.x -= tmp; + tmp = box.y + box.height - br.y; + + if (tmp > 0) box.y -= tmp; + }; + this.element.style.display = "block"; + Calendar.continuation_for_the_fucking_khtml_browser = function() { + var w = self.element.offsetWidth; + var h = self.element.offsetHeight; + self.element.style.display = "none"; + var valign = opts.substr(0, 1); + var halign = "l"; + if (opts.length > 1) { + halign = opts.substr(1, 1); + } + // vertical alignment + switch (valign) { + case "T": p.y -= h; break; + case "B": p.y += el.offsetHeight; break; + case "C": p.y += (el.offsetHeight - h) / 2; break; + case "t": p.y += el.offsetHeight - h; break; + case "b": break; // already there + } + // horizontal alignment + switch (halign) { + case "L": p.x -= w; break; + case "R": p.x += el.offsetWidth; break; + case "C": p.x += (el.offsetWidth - w) / 2; break; + case "l": p.x += el.offsetWidth - w; break; + case "r": break; // already there + } + p.width = w; + p.height = h + 40; + self.monthsCombo.style.display = "none"; + fixPosition(p); + self.showAt(p.x, p.y); + }; + if (Calendar.is_khtml) + setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", 10); + else + Calendar.continuation_for_the_fucking_khtml_browser(); +}; + +/** Customizes the date format. */ +Calendar.prototype.setDateFormat = function (str) { + this.dateFormat = str; +}; + +/** Customizes the tooltip date format. */ +Calendar.prototype.setTtDateFormat = function (str) { + this.ttDateFormat = str; +}; + +/** + * Tries to identify the date represented in a string. If successful it also + * calls this.setDate which moves the calendar to the given date. + */ +Calendar.prototype.parseDate = function(str, fmt) { + if (!fmt) + fmt = this.dateFormat; + this.setDate(Date.parseDate(str, fmt)); +}; + +Calendar.prototype.hideShowCovered = function () { + if (!Calendar.is_ie && !Calendar.is_opera) + return; + function getVisib(obj){ + var value = obj.style.visibility; + if (!value) { + if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C + if (!Calendar.is_khtml) + value = document.defaultView. + getComputedStyle(obj, "").getPropertyValue("visibility"); + else + value = ''; + } else if (obj.currentStyle) { // IE + value = obj.currentStyle.visibility; + } else + value = ''; + } + return value; + }; + + var tags = new Array("applet", "iframe", "select"); + var el = this.element; + + var p = Calendar.getAbsolutePos(el); + var EX1 = p.x; + var EX2 = el.offsetWidth + EX1; + var EY1 = p.y; + var EY2 = el.offsetHeight + EY1; + + for (var k = tags.length; k > 0; ) { + var ar = document.getElementsByTagName(tags[--k]); + var cc = null; + + for (var i = ar.length; i > 0;) { + cc = ar[--i]; + + p = Calendar.getAbsolutePos(cc); + var CX1 = p.x; + var CX2 = cc.offsetWidth + CX1; + var CY1 = p.y; + var CY2 = cc.offsetHeight + CY1; + + if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) { + if (!cc.__msh_save_visibility) { + cc.__msh_save_visibility = getVisib(cc); + } + cc.style.visibility = cc.__msh_save_visibility; + } else { + if (!cc.__msh_save_visibility) { + cc.__msh_save_visibility = getVisib(cc); + } + cc.style.visibility = "hidden"; + } + } + } +}; + +/** Internal function; it displays the bar with the names of the weekday. */ +Calendar.prototype._displayWeekdays = function () { + var fdow = this.firstDayOfWeek; + var cell = this.firstdayname; + var weekend = Calendar._TT["WEEKEND"]; + for (var i = 0; i < 7; ++i) { + cell.className = "day name"; + var realday = (i + fdow) % 7; + if (i) { + cell.ttip = Calendar._TT["DAY_FIRST"].replace("%s", Calendar._DN[realday]); + cell.navtype = 100; + cell.calendar = this; + cell.fdow = realday; + Calendar._add_evs(cell); + } + if (weekend.indexOf(realday.toString()) != -1) { + Calendar.addClass(cell, "weekend"); + } + cell.innerHTML = Calendar._SDN[(i + fdow) % 7]; + cell = cell.nextSibling; + } +}; + +/** Internal function. Hides all combo boxes that might be displayed. */ +Calendar.prototype._hideCombos = function () { + this.monthsCombo.style.display = "none"; + this.yearsCombo.style.display = "none"; +}; + +/** Internal function. Starts dragging the element. */ +Calendar.prototype._dragStart = function (ev) { + if (this.dragging) { + return; + } + this.dragging = true; + var posX; + var posY; + if (Calendar.is_ie) { + posY = window.event.clientY + document.body.scrollTop; + posX = window.event.clientX + document.body.scrollLeft; + } else { + posY = ev.clientY + window.scrollY; + posX = ev.clientX + window.scrollX; + } + var st = this.element.style; + this.xOffs = posX - parseInt(st.left); + this.yOffs = posY - parseInt(st.top); + with (Calendar) { + addEvent(document, "mousemove", calDragIt); + addEvent(document, "mouseup", calDragEnd); + } +}; + +// BEGIN: DATE OBJECT PATCHES + +/** Adds the number of days array to the Date object. */ +Date._MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31); + +/** Constants used for time computations */ +Date.SECOND = 1000 /* milliseconds */; +Date.MINUTE = 60 * Date.SECOND; +Date.HOUR = 60 * Date.MINUTE; +Date.DAY = 24 * Date.HOUR; +Date.WEEK = 7 * Date.DAY; + +Date.parseDate = function(str, fmt) { + var today = new Date(); + var y = 0; + var m = -1; + var d = 0; + var a = str.split(/\W+/); + var b = fmt.match(/%./g); + var i = 0, j = 0; + var hr = 0; + var min = 0; + for (i = 0; i < a.length; ++i) { + if (!a[i]) + continue; + switch (b[i]) { + case "%d": + case "%e": + d = parseInt(a[i], 10); + break; + + case "%m": + m = parseInt(a[i], 10) - 1; + break; + + case "%Y": + case "%y": + y = parseInt(a[i], 10); + (y < 100) && (y += (y > 29) ? 1900 : 2000); + break; + + case "%b": + case "%B": + for (j = 0; j < 12; ++j) { + if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; } + } + break; + + case "%H": + case "%I": + case "%k": + case "%l": + hr = parseInt(a[i], 10); + break; + + case "%P": + case "%p": + if (/pm/i.test(a[i]) && hr < 12) + hr += 12; + else if (/am/i.test(a[i]) && hr >= 12) + hr -= 12; + break; + + case "%M": + min = parseInt(a[i], 10); + break; + } + } + if (isNaN(y)) y = today.getFullYear(); + if (isNaN(m)) m = today.getMonth(); + if (isNaN(d)) d = today.getDate(); + if (isNaN(hr)) hr = today.getHours(); + if (isNaN(min)) min = today.getMinutes(); + if (y != 0 && m != -1 && d != 0) + return new Date(y, m, d, hr, min, 0); + y = 0; m = -1; d = 0; + for (i = 0; i < a.length; ++i) { + if (a[i].search(/[a-zA-Z]+/) != -1) { + var t = -1; + for (j = 0; j < 12; ++j) { + if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; } + } + if (t != -1) { + if (m != -1) { + d = m+1; + } + m = t; + } + } else if (parseInt(a[i], 10) <= 12 && m == -1) { + m = a[i]-1; + } else if (parseInt(a[i], 10) > 31 && y == 0) { + y = parseInt(a[i], 10); + (y < 100) && (y += (y > 29) ? 1900 : 2000); + } else if (d == 0) { + d = a[i]; + } + } + if (y == 0) + y = today.getFullYear(); + if (m != -1 && d != 0) + return new Date(y, m, d, hr, min, 0); + return today; +}; + +/** Returns the number of days in the current month */ +Date.prototype.getMonthDays = function(month) { + var year = this.getFullYear(); + if (typeof month == "undefined") { + month = this.getMonth(); + } + if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))) && month == 1) { + return 29; + } else { + return Date._MD[month]; + } +}; + +/** Returns the number of day in the year. */ +Date.prototype.getDayOfYear = function() { + var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); + var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0); + var time = now - then; + return Math.floor(time / Date.DAY); +}; + +/** Returns the number of the week in year, as defined in ISO 8601. */ +Date.prototype.getWeekNumber = function() { + var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); + var DoW = d.getDay(); + d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu + var ms = d.valueOf(); // GMT + d.setMonth(0); + d.setDate(4); // Thu in Week 1 + return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1; +}; + +/** Checks date and time equality */ +Date.prototype.equalsTo = function(date) { + return ((this.getFullYear() == date.getFullYear()) && + (this.getMonth() == date.getMonth()) && + (this.getDate() == date.getDate()) && + (this.getHours() == date.getHours()) && + (this.getMinutes() == date.getMinutes())); +}; + +/** Set only the year, month, date parts (keep existing time) */ +Date.prototype.setDateOnly = function(date) { + var tmp = new Date(date); + this.setDate(1); + this.setFullYear(tmp.getFullYear()); + this.setMonth(tmp.getMonth()); + this.setDate(tmp.getDate()); +}; + +/** Prints the date in a string according to the given format. */ +Date.prototype.print = function (str) { + var m = this.getMonth(); + var d = this.getDate(); + var y = this.getFullYear(); + var wn = this.getWeekNumber(); + var w = this.getDay(); + var s = {}; + var hr = this.getHours(); + var pm = (hr >= 12); + var ir = (pm) ? (hr - 12) : hr; + var dy = this.getDayOfYear(); + if (ir == 0) + ir = 12; + var min = this.getMinutes(); + var sec = this.getSeconds(); + s["%a"] = Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N] + s["%A"] = Calendar._DN[w]; // full weekday name + s["%b"] = Calendar._SMN[m]; // abbreviated month name [FIXME: I18N] + s["%B"] = Calendar._MN[m]; // full month name + // FIXME: %c : preferred date and time representation for the current locale + s["%C"] = 1 + Math.floor(y / 100); // the century number + s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31) + s["%e"] = d; // the day of the month (range 1 to 31) + // FIXME: %D : american date style: %m/%d/%y + // FIXME: %E, %F, %G, %g, %h (man strftime) + s["%H"] = (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h format) + s["%I"] = (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h format) + s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // day of the year (range 001 to 366) + s["%k"] = hr; // hour, range 0 to 23 (24h format) + s["%l"] = ir; // hour, range 1 to 12 (12h format) + s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12 + s["%M"] = (min < 10) ? ("0" + min) : min; // minute, range 00 to 59 + s["%n"] = "\n"; // a newline character + s["%p"] = pm ? "PM" : "AM"; + s["%P"] = pm ? "pm" : "am"; + // FIXME: %r : the time in am/pm notation %I:%M:%S %p + // FIXME: %R : the time in 24-hour notation %H:%M + s["%s"] = Math.floor(this.getTime() / 1000); + s["%S"] = (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59 + s["%t"] = "\t"; // a tab character + // FIXME: %T : the time in 24-hour notation (%H:%M:%S) + s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn; + s["%u"] = w + 1; // the day of the week (range 1 to 7, 1 = MON) + s["%w"] = w; // the day of the week (range 0 to 6, 0 = SUN) + // FIXME: %x : preferred date representation for the current locale without the time + // FIXME: %X : preferred time representation for the current locale without the date + s["%y"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99) + s["%Y"] = y; // year with the century + s["%%"] = "%"; // a literal '%' character + + var re = /%./g; + if (!Calendar.is_ie5 && !Calendar.is_khtml) + return str.replace(re, function (par) { return s[par] || par; }); + + var a = str.match(re); + for (var i = 0; i < a.length; i++) { + var tmp = s[a[i]]; + if (tmp) { + re = new RegExp(a[i], 'g'); + str = str.replace(re, tmp); + } + } + + return str; +}; + +Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear; +Date.prototype.setFullYear = function(y) { + var d = new Date(this); + d.__msh_oldSetFullYear(y); + if (d.getMonth() != this.getMonth()) + this.setDate(28); + this.__msh_oldSetFullYear(y); +}; + +// END: DATE OBJECT PATCHES + + + + +// global object that remembers the calendar +window._dynarch_popupCalendar = null; + + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar.php b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar.php new file mode 100644 index 0000000..2e563e9 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar.php @@ -0,0 +1,124 @@ +calendar_file = 'calendar_stripped.js'; + $this->calendar_setup_file = 'calendar-setup_stripped.js'; + } else { + $this->calendar_file = 'calendar.js'; + $this->calendar_setup_file = 'calendar-setup.js'; + } + $this->calendar_lang_file = 'lang/calendar-' . $lang . '.js'; + $this->calendar_theme_file = $theme.'.css'; + $this->calendar_lib_path = preg_replace('/\/+$/', '/', $calendar_lib_path); + $this->calendar_options = array('ifFormat' => '%Y/%m/%d', + 'daFormat' => '%Y/%m/%d'); + } + + function set_option($name, $value) { + $this->calendar_options[$name] = $value; + } + + function load_files() { + echo $this->get_load_files_code(); + } + + function get_load_files_code() { + $code = ( '' . NEWLINE ); + $code .= ( '' . NEWLINE ); + $code .= ( '' . NEWLINE ); + $code .= ( '' ); + return $code; + } + + function _make_calendar($other_options = array()) { + $js_options = $this->_make_js_hash(array_merge($this->calendar_options, $other_options)); + $code = ( '' ); + return $code; + } + + function make_input_field($cal_options = array(), $field_attributes = array(), $output = true) { + $result = ""; + $id = $this->_gen_id(); + $attrstr = $this->_make_html_attr(array_merge($field_attributes, + array('id' => $this->_field_id($id), + 'type' => 'text'))); + $result.= ''; + $result.= '
' . + ''; + + $options = array_merge($cal_options, + array('inputField' => $this->_field_id($id), + 'button' => $this->_trigger_id($id))); + $result.= $this->_make_calendar($options); + + if ($output) + echo $output; + return $output; + } + + /// PRIVATE SECTION + + function _field_id($id) { return 'f-calendar-field-' . $id; } + function _trigger_id($id) { return 'f-calendar-trigger-' . $id; } + function _gen_id() { static $id = 0; return ++$id; } + + function _make_js_hash($array) { + $jstr = ''; + reset($array); + while (list($key, $val) = each($array)) { + if (is_bool($val)) + $val = $val ? 'true' : 'false'; + else if (!is_numeric($val)) + $val = '"'.$val.'"'; + if ($jstr) $jstr .= ','; + $jstr .= '"' . $key . '":' . $val; + } + return $jstr; + } + + function _make_html_attr($array) { + $attrstr = ''; + reset($array); + while (list($key, $val) = each($array)) { + $attrstr .= $key . '="' . $val . '" '; + } + return $attrstr; + } +}; + +?> diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar_stripped.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar_stripped.js new file mode 100644 index 0000000..d5e5b29 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar_stripped.js @@ -0,0 +1,14 @@ +/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo + * ----------------------------------------------------------- + * + * The DHTML Calendar, version 1.0 "It is happening again" + * + * Details and latest version at: + * www.dynarch.com/projects/calendar + * + * This script is developed by Dynarch.com. Visit us at www.dynarch.com. + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + */ + Calendar=function(firstDayOfWeek,dateStr,onSelected,onClose){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.getDateToolTip=null;this.getDateText=null;this.timeout=null;this.onSelected=onSelected||null;this.onClose=onClose||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT["DEF_DATE_FORMAT"];this.ttDateFormat=Calendar._TT["TT_DATE_FORMAT"];this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=typeof firstDayOfWeek=="number"?firstDayOfWeek:Calendar._FD;this.showsOtherMonths=false;this.dateStr=dateStr;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.hiliteToday=true;this.multiple=null;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined")Calendar._SDN_len=3;var ar=new Array();for(var i=8;i>0;){ar[--i]=Calendar._DN[i].substr(0,Calendar._SDN_len);}Calendar._SDN=ar;if(typeof Calendar._SMN_len=="undefined")Calendar._SMN_len=3;ar=new Array();for(var i=12;i>0;){ar[--i]=Calendar._MN[i].substr(0,Calendar._SMN_len);}Calendar._SMN=ar;}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(el){var SL=0,ST=0;var is_div=/^div$/i.test(el.tagName);if(is_div&&el.scrollLeft)SL=el.scrollLeft;if(is_div&&el.scrollTop)ST=el.scrollTop;var r={x:el.offsetLeft-SL,y:el.offsetTop-ST};if(el.offsetParent){var tmp=this.getAbsolutePos(el.offsetParent);r.x+=tmp.x;r.y+=tmp.y;}return r;};Calendar.isRelated=function(el,evt){var related=evt.relatedTarget;if(!related){var type=evt.type;if(type=="mouseover"){related=evt.fromElement;}else if(type=="mouseout"){related=evt.toElement;}}while(related){if(related==el){return true;}related=related.parentNode;}return false;};Calendar.removeClass=function(el,className){if(!(el&&el.className)){return;}var cls=el.className.split(" ");var ar=new Array();for(var i=cls.length;i>0;){if(cls[--i]!=className){ar[ar.length]=cls[i];}}el.className=ar.join(" ");};Calendar.addClass=function(el,className){Calendar.removeClass(el,className);el.className+=" "+className;};Calendar.getElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.currentTarget;while(f.nodeType!=1||/^div$/i.test(f.tagName))f=f.parentNode;return f;};Calendar.getTargetElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.target;while(f.nodeType!=1)f=f.parentNode;return f;};Calendar.stopEvent=function(ev){ev||(ev=window.event);if(Calendar.is_ie){ev.cancelBubble=true;ev.returnValue=false;}else{ev.preventDefault();ev.stopPropagation();}return false;};Calendar.addEvent=function(el,evname,func){if(el.attachEvent){el.attachEvent("on"+evname,func);}else if(el.addEventListener){el.addEventListener(evname,func,true);}else{el["on"+evname]=func;}};Calendar.removeEvent=function(el,evname,func){if(el.detachEvent){el.detachEvent("on"+evname,func);}else if(el.removeEventListener){el.removeEventListener(evname,func,true);}else{el["on"+evname]=null;}};Calendar.createElement=function(type,parent){var el=null;if(document.createElementNS){el=document.createElementNS("http://www.w3.org/1999/xhtml",type);}else{el=document.createElement(type);}if(typeof parent!="undefined"){parent.appendChild(el);}return el;};Calendar._add_evs=function(el){with(Calendar){addEvent(el,"mouseover",dayMouseOver);addEvent(el,"mousedown",dayMouseDown);addEvent(el,"mouseout",dayMouseOut);if(is_ie){addEvent(el,"dblclick",dayMouseDblClick);el.setAttribute("unselectable",true);}}};Calendar.findMonth=function(el){if(typeof el.month!="undefined"){return el;}else if(typeof el.parentNode.month!="undefined"){return el.parentNode;}return null;};Calendar.findYear=function(el){if(typeof el.year!="undefined"){return el;}else if(typeof el.parentNode.year!="undefined"){return el.parentNode;}return null;};Calendar.showMonthsCombo=function(){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var mc=cal.monthsCombo;if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}if(cal.activeMonth){Calendar.removeClass(cal.activeMonth,"active");}var mon=cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];Calendar.addClass(mon,"active");cal.activeMonth=mon;var s=mc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else{var mcw=mc.offsetWidth;if(typeof mcw=="undefined")mcw=50;s.left=(cd.offsetLeft+cd.offsetWidth-mcw)+"px";}s.top=(cd.offsetTop+cd.offsetHeight)+"px";};Calendar.showYearsCombo=function(fwd){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var yc=cal.yearsCombo;if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}if(cal.activeYear){Calendar.removeClass(cal.activeYear,"active");}cal.activeYear=null;var Y=cal.date.getFullYear()+(fwd?1:-1);var yr=yc.firstChild;var show=false;for(var i=12;i>0;--i){if(Y>=cal.minYear&&Y<=cal.maxYear){yr.innerHTML=Y;yr.year=Y;yr.style.display="block";show=true;}else{yr.style.display="none";}yr=yr.nextSibling;Y+=fwd?cal.yearStep:-cal.yearStep;}if(show){var s=yc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else{var ycw=yc.offsetWidth;if(typeof ycw=="undefined")ycw=50;s.left=(cd.offsetLeft+cd.offsetWidth-ycw)+"px";}s.top=(cd.offsetTop+cd.offsetHeight)+"px";}};Calendar.tableMouseUp=function(ev){var cal=Calendar._C;if(!cal){return false;}if(cal.timeout){clearTimeout(cal.timeout);}var el=cal.activeDiv;if(!el){return false;}var target=Calendar.getTargetElement(ev);ev||(ev=window.event);Calendar.removeClass(el,"active");if(target==el||target.parentNode==el){Calendar.cellClick(el,ev);}var mon=Calendar.findMonth(target);var date=null;if(mon){date=new Date(cal.date);if(mon.month!=date.getMonth()){date.setMonth(mon.month);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}else{var year=Calendar.findYear(target);if(year){date=new Date(cal.date);if(year.year!=date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}}with(Calendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);cal._hideCombos();_C=null;return stopEvent(ev);}};Calendar.tableMouseOver=function(ev){var cal=Calendar._C;if(!cal){return;}var el=cal.activeDiv;var target=Calendar.getTargetElement(ev);if(target==el||target.parentNode==el){Calendar.addClass(el,"hilite active");Calendar.addClass(el.parentNode,"rowhilite");}else{if(typeof el.navtype=="undefined"||(el.navtype!=50&&(el.navtype==0||Math.abs(el.navtype)>2)))Calendar.removeClass(el,"active");Calendar.removeClass(el,"hilite");Calendar.removeClass(el.parentNode,"rowhilite");}ev||(ev=window.event);if(el.navtype==50&&target!=el){var pos=Calendar.getAbsolutePos(el);var w=el.offsetWidth;var x=ev.clientX;var dx;var decrease=true;if(x>pos.x+w){dx=x-pos.x-w;decrease=false;}else dx=pos.x-x;if(dx<0)dx=0;var range=el._range;var current=el._current;var count=Math.floor(dx/10)%range.length;for(var i=range.length;--i>=0;)if(range[i]==current)break;while(count-->0)if(decrease){if(--i<0)i=range.length-1;}else if(++i>=range.length)i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();}var mon=Calendar.findMonth(target);if(mon){if(mon.month!=cal.date.getMonth()){if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}Calendar.addClass(mon,"hilite");cal.hilitedMonth=mon;}else if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}}else{if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}var year=Calendar.findYear(target);if(year){if(year.year!=cal.date.getFullYear()){if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}Calendar.addClass(year,"hilite");cal.hilitedYear=year;}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}return Calendar.stopEvent(ev);};Calendar.tableMouseDown=function(ev){if(Calendar.getTargetElement(ev)==Calendar.getElement(ev)){return Calendar.stopEvent(ev);}};Calendar.calDragIt=function(ev){var cal=Calendar._C;if(!(cal&&cal.dragging)){return false;}var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posX=ev.pageX;posY=ev.pageY;}cal.hideShowCovered();var st=cal.element.style;st.left=(posX-cal.xOffs)+"px";st.top=(posY-cal.yOffs)+"px";return Calendar.stopEvent(ev);};Calendar.calDragEnd=function(ev){var cal=Calendar._C;if(!cal){return false;}cal.dragging=false;with(Calendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(ev);}cal.hideShowCovered();};Calendar.dayMouseDown=function(ev){var el=Calendar.getElement(ev);if(el.disabled){return false;}var cal=el.calendar;cal.activeDiv=el;Calendar._C=cal;if(el.navtype!=300)with(Calendar){if(el.navtype==50){el._current=el.innerHTML;addEvent(document,"mousemove",tableMouseOver);}else addEvent(document,Calendar.is_ie5?"mousemove":"mouseover",tableMouseOver);addClass(el,"hilite active");addEvent(document,"mouseup",tableMouseUp);}else if(cal.isPopup){cal._dragStart(ev);}if(el.navtype==-1||el.navtype==1){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout("Calendar.showMonthsCombo()",250);}else if(el.navtype==-2||el.navtype==2){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout((el.navtype>0)?"Calendar.showYearsCombo(true)":"Calendar.showYearsCombo(false)",250);}else{cal.timeout=null;}return Calendar.stopEvent(ev);};Calendar.dayMouseDblClick=function(ev){Calendar.cellClick(Calendar.getElement(ev),ev||window.event);if(Calendar.is_ie){document.selection.empty();}};Calendar.dayMouseOver=function(ev){var el=Calendar.getElement(ev);if(Calendar.isRelated(el,ev)||Calendar._C||el.disabled){return false;}if(el.ttip){if(el.ttip.substr(0,1)=="_"){el.ttip=el.caldate.print(el.calendar.ttDateFormat)+el.ttip.substr(1);}el.calendar.tooltips.innerHTML=el.ttip;}if(el.navtype!=300){Calendar.addClass(el,"hilite");if(el.caldate){Calendar.addClass(el.parentNode,"rowhilite");var cal=el.calendar;if(cal&&cal.getDateToolTip){var d=el.caldate;window.status=d;el.title=cal.getDateToolTip(d,d.getFullYear(),d.getMonth(),d.getDate());}}}return Calendar.stopEvent(ev);};Calendar.dayMouseOut=function(ev){with(Calendar){var el=getElement(ev);if(isRelated(el,ev)||_C||el.disabled)return false;removeClass(el,"hilite");if(el.caldate)removeClass(el.parentNode,"rowhilite");if(el.calendar)el.calendar.tooltips.innerHTML=_TT["SEL_DATE"];}};Calendar.cellClick=function(el,ev){var cal=el.calendar;var closing=false;var newdate=false;var date=null;if(typeof el.navtype=="undefined"){if(cal.currentDateEl){Calendar.removeClass(cal.currentDateEl,"selected");Calendar.addClass(el,"selected");closing=(cal.currentDateEl==el);if(!closing){cal.currentDateEl=el;}}cal.date.setDateOnly(el.caldate);date=cal.date;var other_month=!(cal.dateClicked=!el.otherMonth);if(!other_month&&!cal.currentDateEl&&cal.multiple)cal._toggleMultipleDate(new Date(date));else newdate=!el.disabled;if(other_month)cal._init(cal.firstDayOfWeek,date);}else{if(el.navtype==200){Calendar.removeClass(el,"hilite");cal.callCloseHandler();return;}date=new Date(cal.date);if(el.navtype==0)date.setDateOnly(new Date());cal.dateClicked=false;var year=date.getFullYear();var mon=date.getMonth();function setMonth(m){var day=date.getDate();var max=date.getMonthDays(m);if(day>max){date.setDate(max);}date.setMonth(m);};switch(el.navtype){case 400:Calendar.removeClass(el,"hilite");var text=Calendar._TT["ABOUT"];if(typeof text!="undefined"){text+=cal.showsTime?Calendar._TT["ABOUT_TIME"]:"";}else{text="Help and about box text is not translated into this language.\n"+"If you know this language and you feel generous please update\n"+"the corresponding file in \"lang\" subdir to match calendar-en.js\n"+"and send it back to to get it into the distribution ;-)\n\n"+"Thank you!\n"+"http://dynarch.com/mishoo/calendar.epl\n";}alert(text);return;case-2:if(year>cal.minYear){date.setFullYear(year-1);}break;case-1:if(mon>0){setMonth(mon-1);}else if(year-->cal.minYear){date.setFullYear(year);setMonth(11);}break;case 1:if(mon<11){setMonth(mon+1);}else if(year=0;)if(range[i]==current)break;if(ev&&ev.shiftKey){if(--i<0)i=range.length-1;}else if(++i>=range.length)i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();return;case 0:if((typeof cal.getDateStatus=="function")&&cal.getDateStatus(date,date.getFullYear(),date.getMonth(),date.getDate())){return false;}break;}if(!date.equalsTo(cal.date)){cal.setDate(date);newdate=true;}else if(el.navtype==0)newdate=closing=true;}if(newdate){ev&&cal.callHandler();}if(closing){Calendar.removeClass(el,"hilite");ev&&cal.callCloseHandler();}};Calendar.prototype.create=function(_par){var parent=null;if(!_par){parent=document.getElementsByTagName("body")[0];this.isPopup=true;}else{parent=_par;this.isPopup=false;}this.date=this.dateStr?new Date(this.dateStr):new Date();var table=Calendar.createElement("table");this.table=table;table.cellSpacing=0;table.cellPadding=0;table.calendar=this;Calendar.addEvent(table,"mousedown",Calendar.tableMouseDown);var div=Calendar.createElement("div");this.element=div;div.className="calendar";if(this.isPopup){div.style.position="absolute";div.style.display="none";}div.appendChild(table);var thead=Calendar.createElement("thead",table);var cell=null;var row=null;var cal=this;var hh=function(text,cs,navtype){cell=Calendar.createElement("td",row);cell.colSpan=cs;cell.className="button";if(navtype!=0&&Math.abs(navtype)<=2)cell.className+=" nav";Calendar._add_evs(cell);cell.calendar=cal;cell.navtype=navtype;cell.innerHTML="
"+text+"
";return cell;};row=Calendar.createElement("tr",thead);var title_length=6;(this.isPopup)&&--title_length;(this.weekNumbers)&&++title_length;hh("?",1,400).ttip=Calendar._TT["INFO"];this.title=hh("",title_length,300);this.title.className="title";if(this.isPopup){this.title.ttip=Calendar._TT["DRAG_TO_MOVE"];this.title.style.cursor="move";hh("×",1,200).ttip=Calendar._TT["CLOSE"];}row=Calendar.createElement("tr",thead);row.className="headrow";this._nav_py=hh("«",1,-2);this._nav_py.ttip=Calendar._TT["PREV_YEAR"];this._nav_pm=hh("‹",1,-1);this._nav_pm.ttip=Calendar._TT["PREV_MONTH"];this._nav_now=hh(Calendar._TT["TODAY"],this.weekNumbers?4:3,0);this._nav_now.ttip=Calendar._TT["GO_TODAY"];this._nav_nm=hh("›",1,1);this._nav_nm.ttip=Calendar._TT["NEXT_MONTH"];this._nav_ny=hh("»",1,2);this._nav_ny.ttip=Calendar._TT["NEXT_YEAR"];row=Calendar.createElement("tr",thead);row.className="daynames";if(this.weekNumbers){cell=Calendar.createElement("td",row);cell.className="name wn";cell.innerHTML=Calendar._TT["WK"];}for(var i=7;i>0;--i){cell=Calendar.createElement("td",row);if(!i){cell.navtype=100;cell.calendar=this;Calendar._add_evs(cell);}}this.firstdayname=(this.weekNumbers)?row.firstChild.nextSibling:row.firstChild;this._displayWeekdays();var tbody=Calendar.createElement("tbody",table);this.tbody=tbody;for(i=6;i>0;--i){row=Calendar.createElement("tr",tbody);if(this.weekNumbers){cell=Calendar.createElement("td",row);}for(var j=7;j>0;--j){cell=Calendar.createElement("td",row);cell.calendar=this;Calendar._add_evs(cell);}}if(this.showsTime){row=Calendar.createElement("tr",tbody);row.className="time";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;cell.innerHTML=Calendar._TT["TIME"]||" ";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=this.weekNumbers?4:3;(function(){function makeTimePart(className,init,range_start,range_end){var part=Calendar.createElement("span",cell);part.className=className;part.innerHTML=init;part.calendar=cal;part.ttip=Calendar._TT["TIME_PART"];part.navtype=50;part._range=[];if(typeof range_start!="number")part._range=range_start;else{for(var i=range_start;i<=range_end;++i){var txt;if(i<10&&range_end>=10)txt='0'+i;else txt=''+i;part._range[part._range.length]=txt;}}Calendar._add_evs(part);return part;};var hrs=cal.date.getHours();var mins=cal.date.getMinutes();var t12=!cal.time24;var pm=(hrs>12);if(t12&&pm)hrs-=12;var H=makeTimePart("hour",hrs,t12?1:0,t12?12:23);var span=Calendar.createElement("span",cell);span.innerHTML=":";span.className="colon";var M=makeTimePart("minute",mins,0,59);var AP=null;cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;if(t12)AP=makeTimePart("ampm",pm?"pm":"am",["am","pm"]);else cell.innerHTML=" ";cal.onSetTime=function(){var pm,hrs=this.date.getHours(),mins=this.date.getMinutes();if(t12){pm=(hrs>=12);if(pm)hrs-=12;if(hrs==0)hrs=12;AP.innerHTML=pm?"pm":"am";}H.innerHTML=(hrs<10)?("0"+hrs):hrs;M.innerHTML=(mins<10)?("0"+mins):mins;};cal.onUpdateTime=function(){var date=this.date;var h=parseInt(H.innerHTML,10);if(t12){if(/pm/i.test(AP.innerHTML)&&h<12)h+=12;else if(/am/i.test(AP.innerHTML)&&h==12)h=0;}var d=date.getDate();var m=date.getMonth();var y=date.getFullYear();date.setHours(h);date.setMinutes(parseInt(M.innerHTML,10));date.setFullYear(y);date.setMonth(m);date.setDate(d);this.dateClicked=false;this.callHandler();};})();}else{this.onSetTime=this.onUpdateTime=function(){};}var tfoot=Calendar.createElement("tfoot",table);row=Calendar.createElement("tr",tfoot);row.className="footrow";cell=hh(Calendar._TT["SEL_DATE"],this.weekNumbers?8:7,300);cell.className="ttip";if(this.isPopup){cell.ttip=Calendar._TT["DRAG_TO_MOVE"];cell.style.cursor="move";}this.tooltips=cell;div=Calendar.createElement("div",this.element);this.monthsCombo=div;div.className="combo";for(i=0;i0;--i){var yr=Calendar.createElement("div");yr.className=Calendar.is_ie?"label-IEfix":"label";div.appendChild(yr);}this._init(this.firstDayOfWeek,this.date);parent.appendChild(this.element);};Calendar._keyEvent=function(ev){var cal=window._dynarch_popupCalendar;if(!cal||cal.multiple)return false;(Calendar.is_ie)&&(ev=window.event);var act=(Calendar.is_ie||ev.type=="keypress"),K=ev.keyCode;if(ev.ctrlKey){switch(K){case 37:act&&Calendar.cellClick(cal._nav_pm);break;case 38:act&&Calendar.cellClick(cal._nav_py);break;case 39:act&&Calendar.cellClick(cal._nav_nm);break;case 40:act&&Calendar.cellClick(cal._nav_ny);break;default:return false;}}else switch(K){case 32:Calendar.cellClick(cal._nav_now);break;case 27:act&&cal.callCloseHandler();break;case 37:case 38:case 39:case 40:if(act){var prev,x,y,ne,el,step;prev=K==37||K==38;step=(K==37||K==39)?1:7;function setVars(){el=cal.currentDateEl;var p=el.pos;x=p&15;y=p>>4;ne=cal.ar_days[y][x];};setVars();function prevMonth(){var date=new Date(cal.date);date.setDate(date.getDate()-step);cal.setDate(date);};function nextMonth(){var date=new Date(cal.date);date.setDate(date.getDate()+step);cal.setDate(date);};while(1){switch(K){case 37:if(--x>=0)ne=cal.ar_days[y][x];else{x=6;K=38;continue;}break;case 38:if(--y>=0)ne=cal.ar_days[y][x];else{prevMonth();setVars();}break;case 39:if(++x<7)ne=cal.ar_days[y][x];else{x=0;K=40;continue;}break;case 40:if(++ythis.maxYear){year=this.maxYear;date.setFullYear(year);}this.firstDayOfWeek=firstDayOfWeek;this.date=new Date(date);var month=date.getMonth();var mday=date.getDate();var no_days=date.getMonthDays();date.setDate(1);var day1=(date.getDay()-this.firstDayOfWeek)%7;if(day1<0)day1+=7;date.setDate(-day1);date.setDate(date.getDate()+1);var row=this.tbody.firstChild;var MN=Calendar._SMN[month];var ar_days=this.ar_days=new Array();var weekend=Calendar._TT["WEEKEND"];var dates=this.multiple?(this.datesCells={}):null;for(var i=0;i<6;++i,row=row.nextSibling){var cell=row.firstChild;if(this.weekNumbers){cell.className="day wn";cell.innerHTML=date.getWeekNumber();cell=cell.nextSibling;}row.className="daysrow";var hasdays=false,iday,dpos=ar_days[i]=[];for(var j=0;j<7;++j,cell=cell.nextSibling,date.setDate(iday+1)){iday=date.getDate();var wday=date.getDay();cell.className="day";cell.pos=i<<4|j;dpos[j]=cell;var current_month=(date.getMonth()==month);if(!current_month){if(this.showsOtherMonths){cell.className+=" othermonth";cell.otherMonth=true;}else{cell.className="emptycell";cell.innerHTML=" ";cell.disabled=true;continue;}}else{cell.otherMonth=false;hasdays=true;}cell.disabled=false;cell.innerHTML=this.getDateText?this.getDateText(date,iday):iday;if(dates)dates[date.print("%Y%m%d")]=cell;if(this.getDateStatus){var status=this.getDateStatus(date,year,month,iday);if(status===true){cell.className+=" disabled";cell.disabled=true;}else{if(/disabled/i.test(status))cell.disabled=true;cell.className+=" "+status;}}if(!cell.disabled){cell.caldate=new Date(date);cell.ttip="_";if(!this.multiple&¤t_month&&iday==mday&&this.hiliteToday){cell.className+=" selected";this.currentDateEl=cell;}if(date.getFullYear()==TY&&date.getMonth()==TM&&iday==TD){cell.className+=" today";cell.ttip+=Calendar._TT["PART_TODAY"];}if(weekend.indexOf(wday.toString())!=-1)cell.className+=cell.otherMonth?" oweekend":" weekend";}}if(!(hasdays||this.showsOtherMonths))row.className="emptyrow";}this.title.innerHTML=Calendar._MN[month]+", "+year;this.onSetTime();this.table.style.visibility="visible";this._initMultipleDates();};Calendar.prototype._initMultipleDates=function(){if(this.multiple){for(var i in this.multiple){var cell=this.datesCells[i];var d=this.multiple[i];if(!d)continue;if(cell)cell.className+=" selected";}}};Calendar.prototype._toggleMultipleDate=function(date){if(this.multiple){var ds=date.print("%Y%m%d");var cell=this.datesCells[ds];if(cell){var d=this.multiple[ds];if(!d){Calendar.addClass(cell,"selected");this.multiple[ds]=date;}else{Calendar.removeClass(cell,"selected");delete this.multiple[ds];}}}};Calendar.prototype.setDateToolTipHandler=function(unaryFunction){this.getDateToolTip=unaryFunction;};Calendar.prototype.setDate=function(date){if(!date.equalsTo(this.date)){this._init(this.firstDayOfWeek,date);}};Calendar.prototype.refresh=function(){this._init(this.firstDayOfWeek,this.date);};Calendar.prototype.setFirstDayOfWeek=function(firstDayOfWeek){this._init(firstDayOfWeek,this.date);this._displayWeekdays();};Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(unaryFunction){this.getDateStatus=unaryFunction;};Calendar.prototype.setRange=function(a,z){this.minYear=a;this.maxYear=z;};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat));}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this);}this.hideShowCovered();};Calendar.prototype.destroy=function(){var el=this.element.parentNode;el.removeChild(this.element);Calendar._C=null;window._dynarch_popupCalendar=null;};Calendar.prototype.reparent=function(new_parent){var el=this.element;el.parentNode.removeChild(el);new_parent.appendChild(el);};Calendar._checkCalendar=function(ev){var calendar=window._dynarch_popupCalendar;if(!calendar){return false;}var el=Calendar.is_ie?Calendar.getElement(ev):Calendar.getTargetElement(ev);for(;el!=null&&el!=calendar.element;el=el.parentNode);if(el==null){window._dynarch_popupCalendar.callCloseHandler();return Calendar.stopEvent(ev);}};Calendar.prototype.show=function(){var rows=this.table.getElementsByTagName("tr");for(var i=rows.length;i>0;){var row=rows[--i];Calendar.removeClass(row,"rowhilite");var cells=row.getElementsByTagName("td");for(var j=cells.length;j>0;){var cell=cells[--j];Calendar.removeClass(cell,"hilite");Calendar.removeClass(cell,"active");}}this.element.style.display="block";this.hidden=false;if(this.isPopup){window._dynarch_popupCalendar=this;Calendar.addEvent(document,"keydown",Calendar._keyEvent);Calendar.addEvent(document,"keypress",Calendar._keyEvent);Calendar.addEvent(document,"mousedown",Calendar._checkCalendar);}this.hideShowCovered();};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"keydown",Calendar._keyEvent);Calendar.removeEvent(document,"keypress",Calendar._keyEvent);Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar);}this.element.style.display="none";this.hidden=true;this.hideShowCovered();};Calendar.prototype.showAt=function(x,y){var s=this.element.style;s.left=x+"px";s.top=y+"px";this.show();};Calendar.prototype.showAtElement=function(el,opts){var self=this;var p=Calendar.getAbsolutePos(el);if(!opts||typeof opts!="string"){this.showAt(p.x,p.y+el.offsetHeight);return true;}function fixPosition(box){if(box.x<0)box.x=0;if(box.y<0)box.y=0;var cp=document.createElement("div");var s=cp.style;s.position="absolute";s.right=s.bottom=s.width=s.height="0px";document.body.appendChild(cp);var br=Calendar.getAbsolutePos(cp);document.body.removeChild(cp);if(Calendar.is_ie){br.y+=document.body.scrollTop;br.x+=document.body.scrollLeft;}else{br.y+=window.scrollY;br.x+=window.scrollX;}var tmp=box.x+box.width-br.x;if(tmp>0)box.x-=tmp;tmp=box.y+box.height-br.y;if(tmp>0)box.y-=tmp;};this.element.style.display="block";Calendar.continuation_for_the_fucking_khtml_browser=function(){var w=self.element.offsetWidth;var h=self.element.offsetHeight;self.element.style.display="none";var valign=opts.substr(0,1);var halign="l";if(opts.length>1){halign=opts.substr(1,1);}switch(valign){case "T":p.y-=h;break;case "B":p.y+=el.offsetHeight;break;case "C":p.y+=(el.offsetHeight-h)/2;break;case "t":p.y+=el.offsetHeight-h;break;case "b":break;}switch(halign){case "L":p.x-=w;break;case "R":p.x+=el.offsetWidth;break;case "C":p.x+=(el.offsetWidth-w)/2;break;case "l":p.x+=el.offsetWidth-w;break;case "r":break;}p.width=w;p.height=h+40;self.monthsCombo.style.display="none";fixPosition(p);self.showAt(p.x,p.y);};if(Calendar.is_khtml)setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10);else Calendar.continuation_for_the_fucking_khtml_browser();};Calendar.prototype.setDateFormat=function(str){this.dateFormat=str;};Calendar.prototype.setTtDateFormat=function(str){this.ttDateFormat=str;};Calendar.prototype.parseDate=function(str,fmt){if(!fmt)fmt=this.dateFormat;this.setDate(Date.parseDate(str,fmt));};Calendar.prototype.hideShowCovered=function(){if(!Calendar.is_ie&&!Calendar.is_opera)return;function getVisib(obj){var value=obj.style.visibility;if(!value){if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){if(!Calendar.is_khtml)value=document.defaultView. getComputedStyle(obj,"").getPropertyValue("visibility");else value='';}else if(obj.currentStyle){value=obj.currentStyle.visibility;}else value='';}return value;};var tags=new Array("applet","iframe","select");var el=this.element;var p=Calendar.getAbsolutePos(el);var EX1=p.x;var EX2=el.offsetWidth+EX1;var EY1=p.y;var EY2=el.offsetHeight+EY1;for(var k=tags.length;k>0;){var ar=document.getElementsByTagName(tags[--k]);var cc=null;for(var i=ar.length;i>0;){cc=ar[--i];p=Calendar.getAbsolutePos(cc);var CX1=p.x;var CX2=cc.offsetWidth+CX1;var CY1=p.y;var CY2=cc.offsetHeight+CY1;if(this.hidden||(CX1>EX2)||(CX2EY2)||(CY229)?1900:2000);break;case "%b":case "%B":for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break;}}break;case "%H":case "%I":case "%k":case "%l":hr=parseInt(a[i],10);break;case "%P":case "%p":if(/pm/i.test(a[i])&&hr<12)hr+=12;else if(/am/i.test(a[i])&&hr>=12)hr-=12;break;case "%M":min=parseInt(a[i],10);break;}}if(isNaN(y))y=today.getFullYear();if(isNaN(m))m=today.getMonth();if(isNaN(d))d=today.getDate();if(isNaN(hr))hr=today.getHours();if(isNaN(min))min=today.getMinutes();if(y!=0&&m!=-1&&d!=0)return new Date(y,m,d,hr,min,0);y=0;m=-1;d=0;for(i=0;i31&&y==0){y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);}else if(d==0){d=a[i];}}if(y==0)y=today.getFullYear();if(m!=-1&&d!=0)return new Date(y,m,d,hr,min,0);return today;};Date.prototype.getMonthDays=function(month){var year=this.getFullYear();if(typeof month=="undefined"){month=this.getMonth();}if(((0==(year%4))&&((0!=(year%100))||(0==(year%400))))&&month==1){return 29;}else{return Date._MD[month];}};Date.prototype.getDayOfYear=function(){var now=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var then=new Date(this.getFullYear(),0,0,0,0,0);var time=now-then;return Math.floor(time/Date.DAY);};Date.prototype.getWeekNumber=function(){var d=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var DoW=d.getDay();d.setDate(d.getDate()-(DoW+6)%7+3);var ms=d.valueOf();d.setMonth(0);d.setDate(4);return Math.round((ms-d.valueOf())/(7*864e5))+1;};Date.prototype.equalsTo=function(date){return((this.getFullYear()==date.getFullYear())&&(this.getMonth()==date.getMonth())&&(this.getDate()==date.getDate())&&(this.getHours()==date.getHours())&&(this.getMinutes()==date.getMinutes()));};Date.prototype.setDateOnly=function(date){var tmp=new Date(date);this.setDate(1);this.setFullYear(tmp.getFullYear());this.setMonth(tmp.getMonth());this.setDate(tmp.getDate());};Date.prototype.print=function(str){var m=this.getMonth();var d=this.getDate();var y=this.getFullYear();var wn=this.getWeekNumber();var w=this.getDay();var s={};var hr=this.getHours();var pm=(hr>=12);var ir=(pm)?(hr-12):hr;var dy=this.getDayOfYear();if(ir==0)ir=12;var min=this.getMinutes();var sec=this.getSeconds();s["%a"]=Calendar._SDN[w];s["%A"]=Calendar._DN[w];s["%b"]=Calendar._SMN[m];s["%B"]=Calendar._MN[m];s["%C"]=1+Math.floor(y/100);s["%d"]=(d<10)?("0"+d):d;s["%e"]=d;s["%H"]=(hr<10)?("0"+hr):hr;s["%I"]=(ir<10)?("0"+ir):ir;s["%j"]=(dy<100)?((dy<10)?("00"+dy):("0"+dy)):dy;s["%k"]=hr;s["%l"]=ir;s["%m"]=(m<9)?("0"+(1+m)):(1+m);s["%M"]=(min<10)?("0"+min):min;s["%n"]="\n";s["%p"]=pm?"PM":"AM";s["%P"]=pm?"pm":"am";s["%s"]=Math.floor(this.getTime()/1000);s["%S"]=(sec<10)?("0"+sec):sec;s["%t"]="\t";s["%U"]=s["%W"]=s["%V"]=(wn<10)?("0"+wn):wn;s["%u"]=w+1;s["%w"]=w;s["%y"]=(''+y).substr(2,2);s["%Y"]=y;s["%%"]="%";var re=/%./g;if(!Calendar.is_ie5&&!Calendar.is_khtml)return str.replace(re,function(par){return s[par]||par;});var a=str.match(re);for(var i=0;i + +How to include additional info in day cells + + + + + + + + +

How to include additional info in day cells

+ +
+ + + +

The idea is simple:

+ +
    +
  1. +

    Define a callback that takes two parameters like this:

    +
    function getDateText(date, d)
    +

    + This function will receive the date object as the first + parameter and the current date number (1..31) as the second (you + can get it as well by calling date.getDate() but since it's very + probably useful I thought I'd pass it too so that we can avoid a + function call). +

    +

    + This function must return the text to be inserted in + the cell of the passed date. That is, one should at least + "return d;". +

    +
  2. +
  3. + Pass the above function as the "dateText" parameter to + Calendar.setup. +
  4. +
+ +

+ The function could simply look like: +

+ +
  function getDateText(date, d) {
+    if (d == 12) {
+      return "12th";
+    } else if (d == 13) {
+      return "bad luck";
+    } /* ... etc ... */
+  }
+ +

+ but it's easy to imagine that this approach sucks. For a better + way, see the source of this page and note the usage of an externally + defined "dateText" object which maps "date" to "date info", also + taking into account the year and month. This object can be easily + generated from a database, and the getDateText function becomes + extremely simple (and static). +

+ +

+ Cheers! +

+ +
+
mishoo
+ Last modified: Sat Mar 5 17:18:06 EET 2005 + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/field-button.jpg b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/field-button.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecbe9d8d45a7a4657baad518781aa4599555f112 GIT binary patch literal 2509 zcmb7EdpOkT7yr(cTt+jD%Y>K=MO1Esl@?<#2C+j~myNB=Xl=$Nx~Qbwr(B!HC7FiI zsIcxM3AvlqxMvJqTq;DC`fZAxZR__uzu)h#-+7<+Jn!?K=X}ojoaghtn`4{LfUP8= zGZ6rRK)^Z40ydum$__EK;{f353g`m>AT8Mv+Y|xz01N_!LLo4TgTY{MDLH8=i7Cj+ zZjnPOpioE!BvMgXT}4p|gGM4%wN)`18r!#TS5(33U^R8rHMeX24FZy+O2MTN($WY` zC8Uz(|81L(0Hida1w4a*umBhdf*?Vgj{$W6fJjLE&EuOv;V>`=A|)+}+H3_t5HJ)1 z2g78fzQiRFC=3oDQHp5oKq>4#?_!~nvWczd@f;mvQ@ou=d{Nbl9XK=lAbOl6U->_P zzW{*1l6wuLq#gtSL%!7n01#4p*&~pi(Xu%X$U#7o4k1Y30IOyHaoA(z{mcfDbDQcTE=4ejlGlhR&a1{gj_jNy{OY*jy}_fw#2n z=1&_ilA?NZ3x2%S-oPpj9nH5`xU5Y_sK*6%zVAxP(a?}EB2>*z2!f!unvNz8O*YOU4k4OR2rgxMkxQGlkLGwHVC1>}rSqvksd zl%|-}a9r)DXkdhrz*fWKT1<7edgzJ=WN>A6$L-4+%kT-uM%?IUr@Cw^`fCw;&i*Mi zqV~Qu%4L8rKs3d)2j#6SA_%opSD#^e(ueGIr|WeuUy{)g@ofn;RB~5TbcD|2Ft_RU zgn9LMD{Z%$!MFOHDC0TSQ+YaWI?;7V)XyZRl6NUssf8HcT(Wtc>&Dj-E#LT!H5r6+ z4F{eN`UH;W1jMu?J}j$-Rln>AW}4ZCGG$4}xE_l8`b`-Rmc|#W9PbkfjpCHc$mi4j zoZri9rTGkcny)j;*mgxlYaZg>dIPQrg|N-CpT=@5@IVC%jp!Ep)$WrBP;YG z!T`QXuc2`gUexLkpRjvQYlJnHVpFU?MF@;Ln#xlc2dX>o9WVFQ9XYz|;OxFmtYSYo zYOWY0dm+b|C9_vOV@pItyJcWp%7-j-bb zVD@mVFbmOjW-v};&cO4zMqmS#M0s_;FJ#-r(iBUZYmK)e1SYiM?#Sow#3|9Sy!x;2 zN9t?UpeZO*G_Y~nYm7O;ijwZ?X#J4mZ&`9~ zm z*T@?8#M?$rn}#vkcV%u#RGrY)CQu`--@J0LIa;ug*i=p_A#g3BGs(;rlA5cGveSJT zeMBtM#k%>7-f*tb)px6pN>8Vk>+wv-*97pZhQ4S2h`&_7zM`*NS#W};rYrPCJ1V7b zo$%6zcJ@qE8)WlwWrtFi9q28odP$YLTH!}6Ops89JlW{Ly2zHeJ<{2=3+h`nY6hf9a7BnKXWCZirqy1^Hc-Y z_nK3f0OuIula=YK{Dk7_lppQPMHJ9(T)+9p{-P&u=h^6hF{hCa0B>*Q0Ie(XSQ{!7 zn)ahei~bmgMU71QPm;K~W0JnNbq;P}FXo&U;=J;T`%3t2QTl|{0)yWtYAdF zEczY6=_m1w9Im^tlo?SbMs*QVFxdpj2XnVWPs4)Yc=cBl$dW@&s+;nsN+;ilK16y` zDrp&itwhmb+%C($aYs|c#FWDK@!?*(1jI!7I`R3fR;@PoEavk7s^3h-`6%05fn~NM$gBSo=F(5>*$| zJM!D+x+`Z%@+iGMX!5XPF3x+QC%rey*?h=bd&ocqW?X)dJ}T?Xq4jm`Q_lz&fCdP? zI6T_x2Qy0TKSR;0f>#9kzkD4pA%bbS5`C>i{^je7M>hepu-nZ}_46?wgMzprId->J z+Zx^y(F6S<){jFg+_}($r?Gk)pF?;LmN83oH@r&lvwt0G+yBn0=H$|w6TyxPuLhgT zY)&uE^m?N>=Y$*X?e+MNH2Q@r6QA*)G`_<$KmEL8f9%rjP2jqTjq|$r)cGBs>;HX_ z>2rQ>|FN-n6WI2#Gk&_TX*Br70TH7yJOdL?49bz4G*=zw6i__<37m%Mq?`K9-jL0w Fe*qKRb9w*( literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference-Z-S.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference-Z-S.css new file mode 100644 index 0000000..812b3fb --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference-Z-S.css @@ -0,0 +1,195 @@ + + body { + color: black; + /* background-color: #e5e5e5;*/ + background-color: #ffffff; + /*background-color: beige;*/ + margin-top: 2em; + margin-left: 8%; + margin-right: 8%; + } + + h1,h2,h3,h4,h5,h6 { + margin-top: .5em; + } + + .title { + font-size: 200%; + font-weight: normal; + margin-top: 2.8em; + text-align: center; + } + + .partheading { + font-size: 100%; + } + + .chapterheading { + font-size: 100%; + } + + .beginsection { + font-size: 110%; + } + + .tiny { + font-size: 40%; + } + + .scriptsize { + font-size: 60%; + } + + .footnotesize { + font-size: 75%; + } + + .small { + font-size: 90%; + } + + .normalsize { + font-size: 100%; + } + + .large { + font-size: 120%; + } + + .largecap { + font-size: 150%; + } + + .largeup { + font-size: 200%; + } + + .huge { + font-size: 300%; + } + + .hugecap { + font-size: 350%; + } + + pre { + margin-left: 2em; + } + + blockquote { + margin-left: 2em; + } + + ol { + list-style-type: decimal; + } + + ol ol { + list-style-type: lower-alpha; + } + + ol ol ol { + list-style-type: lower-roman; + } + + ol ol ol ol { + list-style-type: upper-alpha; + } + + tt i { + font-family: serif; + } + + .verbatim em { + font-family: serif; + } + + /* + .verbatim { + color: #4d0000; + } + */ + + .scheme em { + color: black; + font-family: serif; + } + + .scheme { + color: brown; + } + + .scheme .keyword { + color: #990000; + font-weight: bold; + } + + .scheme .builtin { + color: #990000; + } + + .scheme .variable { + color: navy; + } + + .scheme .global { + color: purple; + } + + .scheme .selfeval { + color: green; + } + + .scheme .comment { + color: teal; + } + + .schemeresponse { + color: green; + } + + .navigation { + color: red; + text-align: right; + font-size: medium; + font-style: italic; + } + + .disable { + /* color: #e5e5e5; */ + color: gray; + } + + .smallcaps { + font-size: 75%; + } + + .smallprint { + color: gray; + font-size: 75%; + text-align: right; + } + + /* + .smallprint hr { + text-align: left; + width: 40%; + } + */ + + .footnoterule { + text-align: left; + width: 40%; + } + + .colophon { + color: gray; + font-size: 80%; + font-style: italic; + text-align: right; + } + + .colophon a { + color: gray; + } + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference.css b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference.css new file mode 100644 index 0000000..4c5e126 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference.css @@ -0,0 +1,34 @@ +html { margin: 0px; padding: 0px; background-color: #08f; color: #444; font-family: georgia,serif; } +body { margin: 2em 8%; background-color: #fff; padding: 1em; border: 2px ridge #048; } + +a:link, a:visited { text-decoration: none; color: #00f; } +a:hover { color: #f00; text-decoration: underline; } +a:active { color: #f84; } + +h1, h2, h3, h4, h5, h6 { font-family: tahoma,verdana,sans-serif; } + +h2, h3 { font-weight: normal; } + +h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover { text-decoration: none; } + +h1 { font-size: 170%; border: 2px ridge #048; letter-spacing: 2px; color: #000; margin-left: -2em; margin-right: -2em; +background-color: #fff; padding: 2px 1em; background-color: #def; } +h2 { font-size: 140%; color: #222; } +h3 { font-size: 120%; color: #444; } + +h1.title { font-size: 300%; font-family: georgia,serif; font-weight: normal; color: #846; letter-spacing: -1px; +border: none; +padding: none; +background-color: #fff; +border-bottom: 3px double #624; padding-bottom: 2px; margin-left: 8%; margin-right: 8%; } + +.colophon { padding-top: 2em; color: #999; font-size: 90%; font-family: georgia,"times new roman",serif; } +.colophon a:link, .colophon a:visited { color: #755; } +.colophon a:hover { color: #422; text-decoration: underline; } + +.footnote { font-size: 90%; font-style: italic; font-family: georgia,"times new roman",serif; margin: 0px 3em; } +.footnote sup { font-size: 120%; padding: 0px 0.3em; position: relative; top: -0.2em; } + +.small { font-size: 90%; } + +.verbatim { background-color: #eee; padding: 0.2em 1em; border: 1px solid #aaa; } diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference.html b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference.html new file mode 100644 index 0000000..0275fbd --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/html/reference.html @@ -0,0 +1,1739 @@ + + + + + +DHTML Calendar Widget + + + + + + +
+

+

+

+

+

+

+

+

+

+

+

+

+

+

+ + + + +

+

+ + +

+

+

+

+

+

DHTML Calendar Widget

+

+
+Mihai Bazon, <mihai_bazon@yahoo.com>
+© Dynarch.com 2002-2005, www.dynarch.com

February 11, 2006

+

+

+calendar version: 1.0 ``It is happening again'' +

+
+

+

+$Id: reference.html,v 1.1 2010-06-01 04:30:47 tv Exp $ +

+
+
+ +
+ +
+ +

Contents

+

+

+    1  Overview
+        1.1  How does this thing work?
+        1.2  Project files
+        1.3  License
+

+

+    2  Quick startup
+        2.1  Installing a popup calendar
+        2.2  Installing a flat calendar
+        2.3  Calendar.setup in detail
+

+

+    3  Recipes
+        3.1  Popup calendars
+            3.1.1  Simple text field with calendar attached to a button
+            3.1.2  Simple field with calendar attached to an image
+            3.1.3  Hidden field, plain text triggers
+            3.1.4  2 Linked fields, no trigger buttons
+        3.2  Flat calendars
+        3.3  Highlight special dates
+        3.4  Select multiple dates
+

+

+    4  The Calendar object overview
+        4.1  Creating a calendar
+        4.2  Order does matter ;-)
+        4.3  Caching the object
+        4.4  Callback functions
+

+

+    5  The Calendar object API reference
+        5.1  Calendar constructor
+        5.2  Useful member variables (properties)
+        5.3  Public methods
+            5.3.1  Calendar.create
+            5.3.2  Calendar.callHandler
+            5.3.3  Calendar.callCloseHandler
+            5.3.4  Calendar.hide
+            5.3.5  Calendar.setDateFormat
+            5.3.6  Calendar.setTtDateFormat
+            5.3.7  Calendar.setDisabledHandler
+            5.3.8  Calendar.setDateStatusHandler
+            5.3.9  Calendar.show
+            5.3.10  Calendar.showAt
+            5.3.11  Calendar.showAtElement
+            5.3.12  Calendar.setDate
+            5.3.13  Calendar.setFirstDayOfWeek
+            5.3.14  Calendar.parseDate
+            5.3.15  Calendar.setRange
+

+

+    6  Side effects
+

+

+    7  Credits
+

+

+

+

+

+ +

1  Overview

+

The DHTML Calendar widget1 +is an (HTML) user interface element that gives end-users a friendly way to +select date and time. It works in a web browser. The first versions only provided +support for popup calendars, while starting with version 0.9 it also supports +``flat'' display. A ``flat'' calendar is a calendar that stays visible in the +page all the time. In this mode it could be very useful for ``blog'' pages and +other pages that require the calendar to be always present.

+

+The calendar is compatible with most popular browsers nowadays. While it's +created using web standards and it should generally work with any compliant +browser, the following browsers were found to work: Mozilla/Firefox (the +development platform), Netscape 6.0 or better, all other Gecko-based browsers, +Internet Explorer 5.0 or better for Windows2, Opera 73, Konqueror 3.1.2 and Apple Safari for +MacOSX.

+

+You can find the latest info and version at the calendar homepage:

+

+

+ +

+

+ +

1.1  How does this thing work?

+

DHTML is not ``another kind of HTML''. It's merely a naming convention. DHTML +refers to the combination of HTML, CSS, JavaScript and DOM. DOM (Document +Object Model) is a set of interfaces that glues the other three together. In +other words, DOM allows dynamic modification of an HTML page through a program. +JavaScript is our programming language, since that's what browsers like. CSS +is a way to make it look good ;-). So all this soup is generically known as +DHTML.

+

+Using DOM calls, the program dynamically creates a <table> element +that contains a calendar for the given date and then inserts it in the document +body. Then it shows this table at a specified position. Usually the position +is related to some element in which the date needs to be displayed/entered, +such as an input field.

+

+By assigning a certain CSS class to the table we can control the look of the +calendar through an external CSS file; therefore, in order to change the +colors, backgrounds, rollover effects and other stuff, you can only change a +CSS file -- modification of the program itself is not necessary.

+

+

+ +

1.2  Project files

+

Here's a description of the project files, excluding documentation and example +files.

+

+

+

    +

    +
  • the main program file (calendar.js). This defines all the logic +behind the calendar widget.

    +

    +

    +
  • the CSS files (calendar-*.css). Loading one of them is +necessary in order to see the calendar as intended.

    +

    +

    +
  • the language definition files (lang/calendar-*.js). They are +plain JavaScript files that contain all texts that are displayed by the +calendar. Loading one of them is necessary.

    +

    +

    +
  • helper functions for quick setup of the calendar +(calendar-setup.js). You can do fine without it, but starting with +version 0.9.3 this is the recommended way to setup a calendar.

    +

    +

    +

+

+

+ +

1.3  License

+

+
+ +© Dynarch.com 2002-2005, +www.dynarch.com +Author: Mihai Bazon +
+

+The calendar is released under the +GNU Lesser General Public License.

+

+

+ +

2  Quick startup

+

+

+Installing the calendar used to be quite a task until version 0.9.3. Starting +with 0.9.3 I have included the file calendar-setup.js whose goal is to +assist you to setup a popup or flat calendar in minutes. You are +encouraged to modify this file and not calendar.js if you need +extra customization, but you're on your own.

+

+First you have to include the needed scripts and style-sheet. Make sure you do +this in your document's <head> section, also make sure you put the +correct paths to the scripts.

+

+

+
<style type="text/css">@import url(calendar-win2k-1.css);</style>
+<script type="text/javascript" src="calendar.js"></script>
+<script type="text/javascript" src="lang/calendar-en.js"></script>
+<script type="text/javascript" src="calendar-setup.js"></script>
+

+

+

+ +

2.1  Installing a popup calendar

+

+

+Now suppose you have the following HTML:

+

+

+
<form ...>
+  <input type="text" id="data" name="data" />
+  <button id="trigger">...</button>
+</form>
+

+

+You want the button to popup a calendar widget when clicked? Just +insert the following code immediately after the HTML form:

+

+

+
<script type="text/javascript">
+  Calendar.setup(
+    {
+      inputField  : "data",         // ID of the input field
+      ifFormat    : "%m %d, %Y",    // the date format
+      button      : "trigger"       // ID of the button
+    }
+  );
+</script>
+

+

+The Calendar.setup function, defined in calendar-setup.js +takes care of ``patching'' the button to display a calendar when clicked. The +calendar is by default in single-click mode and linked with the given input +field, so that when the end-user selects a date it will update the input field +with the date in the given format and close the calendar. If you are a +long-term user of the calendar you probably remember that for doing this you +needed to write a couple functions and add an ``onclick'' handler for the +button by hand.

+

+By looking at the example above we can see that the function +Calendar.setup receives only one parameter: a JavaScript object. +Further, that object can have lots of properties that tell to the setup +function how would we like to have the calendar. For instance, if we would +like a calendar that closes at double-click instead of single-click we would +also include the following: singleClick:false.

+

+For a list of all supported parameters please see the section +2.3.

+

+

+ +

2.2  Installing a flat calendar

+

+

+Here's how to configure a flat calendar, using the same Calendar.setup +function. First, you should have an empty element with an ID. This element +will act as a container for the calendar. It can be any block-level element, +such as DIV, TABLE, etc. We will use a DIV in this example.

+

+

+
<div id="calendar-container"></div>
+

+

+Then there is the JavaScript code that sets up the calendar into the +``calendar-container'' DIV. The code can occur anywhere in HTML +after the DIV element.

+

+

+
<script type="text/javascript">
+  function dateChanged(calendar) {
+    // Beware that this function is called even if the end-user only
+    // changed the month/year.  In order to determine if a date was
+    // clicked you can use the dateClicked property of the calendar:
+    if (calendar.dateClicked) {
+      // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
+      var y = calendar.date.getFullYear();
+      var m = calendar.date.getMonth();     // integer, 0..11
+      var d = calendar.date.getDate();      // integer, 1..31
+      // redirect...
+      window.location = "/" + y + "/" + m + "/" + d + "/index.php";
+    }
+  };
+
+  Calendar.setup(
+    {
+      flat         : "calendar-container", // ID of the parent element
+      flatCallback : dateChanged           // our callback function
+    }
+  );
+</script>
+

+

+

+ +

2.3  Calendar.setup in detail

+

+

+Following there is the complete list of properties interpreted by +Calendar.setup. All of them have default values, so you can pass only those +which you would like to customize. Anyway, you must pass at least one +of inputField, displayArea or button, for a popup +calendar, or flat for a flat calendar. Otherwise you will get a +warning message saying that there's nothing to setup.

+

+

+ + + + + + + + + + + + + + + + + + + + + + + + + +
property type description default +
inputField +string The ID of your input field. +null +
displayArea +string This is the ID of a <span>, <div>, or any other element that you would like to use to display the current date. This is generally useful only if the input field is hidden, as an area to display the date. +null +
button +string The ID of the calendar ``trigger''. This is an element (ordinarily a button or an image) that will dispatch a certain event (usually ``click'') to the function that creates and displays the calendar. +null +
eventName +string The name of the event that will trigger the calendar. The name should be without the ``on'' prefix, such as ``click'' instead of ``onclick''. Virtually all users will want to let this have the default value (``click''). Anyway, it could be useful if, say, you want the calendar to appear when the input field is focused and have no trigger button (in this case use ``focus'' as the event name). +``click'' +
ifFormat +string The format string that will be used to enter the date in the input field. This format will be honored even if the input field is hidden. +``%Y/%m/%d'' +
daFormat +string Format of the date displayed in the displayArea (if specified). +``%Y/%m/%d'' +
singleClick +boolean Wether the calendar is in ``single-click mode'' or ``double-click mode''. If true (the default) the calendar will be created in single-click mode. +true +
disableFunc +function A function that receives a JS Date object. It should return +true if that date has to be disabled, false otherwise. +DEPRECATED (see below). +null +
dateStatusFunc +function A function that receives a JS Date object and returns a boolean +or a string. This function allows one to set a certain CSS class to some +date, therefore making it look different. If it returns true then +the date will be disabled. If it returns false nothing special +happens with the given date. If it returns a string then that will be taken +as a CSS class and appended to the date element. If this string is +``disabled'' then the date is also disabled (therefore is like returning +true). For more information please also refer to section +5.3.8. +null +
firstDay +integer Specifies which day is to be displayed as the first day of +week. Possible values are 0 to 6; 0 means Sunday, 1 means Monday, ..., 6 +means Saturday. The end user can easily change this too, by clicking on the +day name in the calendar header. +0 +
weekNumbers +boolean If ``true'' then the calendar will display week numbers. +true +
align +string Alignment of the calendar, relative to the reference element. The +reference element is dynamically chosen like this: if a displayArea is +specified then it will be the reference element. Otherwise, the input field +is the reference element. For the meaning of the alignment characters +please section 5.3.11. +``Bl'' +
range +array An array having exactly 2 elements, integers. (!) The first [0] element is the minimum year that is available, and the second [1] element is the maximum year that the calendar will allow. +[1900, 2999] +
flat +string If you want a flat calendar, pass the ID of the parent object in +this property. If not, pass null here (or nothing at all as +null is the default value). +null +
flatCallback +function You should provide this function if the calendar is flat. It +will be called when the date in the calendar is changed with a reference to +the calendar object. See section 2.2 for an example +of how to setup a flat calendar. +null +
onSelect +function If you provide a function handler here then you have to manage +the ``click-on-date'' event by yourself. Look in the calendar-setup.js and +take as an example the onSelect handler that you can see there. +null +
onClose +function This handler will be called when the calendar needs to close. +You don't need to provide one, but if you do it's your responsibility to +hide/destroy the calendar. You're on your own. Check the calendar-setup.js +file for an example. +null +
onUpdate +function If you supply a function handler here, it will be called right +after the target field is updated with a new date. You can use this to +chain 2 calendars, for instance to setup a default date in the second just +after a date was selected in the first. +null +
date +date This allows you to setup an initial date where the calendar will be +positioned to. If absent then the calendar will open to the today date. +null +
showsTime +boolean If this is set to true then the calendar will also +allow time selection. +false +
timeFormat +string Set this to ``12'' or ``24'' to configure the way that the +calendar will display time. +``24'' +
electric +boolean Set this to ``false'' if you want the calendar to update the +field only when closed (by default it updates the field at each date change, +even if the calendar is not closed) true +
position +array Specifies the [x, y] position, relative to page's top-left corner, +where the calendar will be displayed. If not passed then the position will +be computed based on the ``align'' parameter. Defaults to ``null'' (not +used). null +
cache +boolean Set this to ``true'' if you want to cache the calendar object. +This means that a single calendar object will be used for all fields that +require a popup calendar false +
showOthers +boolean If set to ``true'' then days belonging to months overlapping +with the currently displayed month will also be displayed in the calendar +(but in a ``faded-out'' color) false + +
+ +

+

+ +

3  Recipes

+

This section presents some common ways to setup a calendar using the +Calendar.setup function detailed in the previous section.

+

+We don't discuss here about loading the JS or CSS code -- so make sure you +add the proper <script> and <style> or <link> elements in your +HTML code. Also, when we present input fields, please note that they should +be embedded in some form in order for data to be actually sent to server; we +don't discuss these things here because they are not related to our +calendar.

+

+

+ +

3.1  Popup calendars

+

These samples can be found in the file “simple-1.html†from the +calendar package.

+

+

+ +

3.1.1  Simple text field with calendar attached to a button

+

+

+This piece of code will create a calendar for a simple input field with a +button that will open the calendar when clicked.

+

+

+
<input type="text" name="date" id="f_date_b"
+       /><button type="reset" id="f_trigger_b"
+       >...</button>
+<script type="text/javascript">
+    Calendar.setup({
+        inputField     :    "f_date_b",           //*
+        ifFormat       :    "%m/%d/%Y %I:%M %p",
+        showsTime      :    true,
+        button         :    "f_trigger_b",        //*
+        step           :    1
+    });
+</script>
+

+

+Note that this code does more actually; the only required fields are +those marked with “//*†-- that is, the ID of the input field and the ID of +the button need to be passed to Calendar.setup in order for the +calendar to be properly assigned to this input field. As one can easily +guess from the argument names, the other arguments configure a certain date +format, instruct the calendar to also include a time selector and display +every year in the drop-down boxes (the “step†parameter) -- instead of showing +every other year as the default calendar does.

+

+

+ +

3.1.2  Simple field with calendar attached to an image

+

Same as the above, but the element that triggers the calendar is this time +an image, not a button.

+

+

+
<input type="text" name="date" id="f_date_c" readonly="1" />
+<img src="img.gif" id="f_trigger_c"
+     style="cursor: pointer; border: 1px solid red;"
+     title="Date selector"
+     onmouseover="this.style.background='red';"
+     onmouseout="this.style.background=''" />
+<script type="text/javascript">
+    Calendar.setup({
+        inputField     :    "f_date_c",
+        ifFormat       :    "%B %e, %Y",
+        button         :    "f_trigger_c",
+        align          :    "Tl",
+        singleClick    :    false
+    });
+</script>
+

+

+Note that the same 2 parameters are required as in the previous case; the +difference is that the 'button' parameter now gets the ID of the image +instead of the ID of the button. But the event is the same: at 'onclick' on +the element that is passed as 'button', the calendar will be shown.

+

+The above code additionally sets an alignment mode -- the parameters are +described in 5.3.11.

+

+

+ +

3.1.3  Hidden field, plain text triggers

+

Sometimes, to assure that the date is well formatted, you might want not to +allow the end user to write a date manually. This can easily be achieved +with an input field by setting its readonly attribute, which is +defined by the HTML4 standard; however, here's an even nicer approach: our +calendar widget allows you to use a hidden field as the way to pass data to +server, and a “display area†to show the end user the selected date. The +“display area†can be any HTML element, such as a DIV or a SPAN or +whatever -- we will use a SPAN in our sample.

+

+

+
<input type="hidden" name="date" id="f_date_d" />
+
+<p>Your birthday:
+   <span style="background-color: #ff8; cursor: default;"
+         onmouseover="this.style.backgroundColor='#ff0';"
+         onmouseout="this.style.backgroundColor='#ff8';"
+         id="show_d"
+   >Click to open date selector</span>.</p>
+
+<script type="text/javascript">
+    Calendar.setup({
+        inputField     :    "f_date_d",
+        ifFormat       :    "%Y/%d/%m",
+        displayArea    :    "show_d",
+        daFormat       :    "%A, %B %d, %Y",
+    });
+</script>
+

+

+The above code will configure a calendar attached to the hidden field and to +the SPAN having the id=“show_dâ€. When the SPAN element is clicked, the +calendar opens and allows the end user to chose a date. When the date is +chosen, the input field will be updated with the value in the format +“%Y/%d/%mâ€, and the SPAN element will display the date in a +friendlier format (defined by “daFormatâ€).

+

+Beware that using this approach will make your page unfunctional in browsers +that do not support JavaScript or our calendar.

+

+

+ +

3.1.4  2 Linked fields, no trigger buttons

+

Supposing you want to create 2 fields that hold an interval of exactly one +week. The first is the starting date, and the second is the ending date. +You want the fields to be automatically updated when some date is clicked in +one or the other, in order to keep exactly one week difference between them.

+

+

+
<input type="text" name="date" id="f_date_a" />
+<input type="text" name="date" id="f_calcdate" />
+
+<script type="text/javascript">
+    function catcalc(cal) {
+        var date = cal.date;
+        var time = date.getTime()
+        // use the _other_ field
+        var field = document.getElementById("f_calcdate");
+        if (field == cal.params.inputField) {
+            field = document.getElementById("f_date_a");
+            time -= Date.WEEK; // substract one week
+        } else {
+            time += Date.WEEK; // add one week
+        }
+        var date2 = new Date(time);
+        field.value = date2.print("%Y-%m-%d %H:%M");
+    }
+    Calendar.setup({
+        inputField     :    "f_date_a",
+        ifFormat       :    "%Y-%m-%d %H:%M",
+        showsTime      :    true,
+        timeFormat     :    "24",
+        onUpdate       :    catcalc
+    });
+    Calendar.setup({
+        inputField     :    "f_calcdate",
+        ifFormat       :    "%Y-%m-%d %H:%M",
+        showsTime      :    true,
+        timeFormat     :    "24",
+        onUpdate       :    catcalc
+    });
+</script>
+

+

+The above code will configure 2 input fields with calendars attached, as +usual. The first thing to note is that there's no trigger button -- in such +case, the calendar will popup when one clicks into the input field. Using +the onUpdate parameter, we pass a reference to a function of ours +that will get called after a date was selected. In that function we +determine what field was updated and we compute the date in the other input +field such that it keeps a one week difference between the two. Enjoy! :-)

+

+

+ +

3.2  Flat calendars

+

This sample can be found in “simple-2.htmlâ€. It will configure a +flat calendar that is always displayed in the page, in the DIV having the +id=“calendar-containerâ€. When a date is clicked our function hander gets +called (dateChanged) and it will compute an URL to jump to based on +the selected date, then use window.location to visit the new link.

+

+

+
<div style="float: right; margin-left: 1em; margin-bottom: 1em;"
+id="calendar-container"></div>
+
+<script type="text/javascript">
+  function dateChanged(calendar) {
+    // Beware that this function is called even if the end-user only
+    // changed the month/year.  In order to determine if a date was
+    // clicked you can use the dateClicked property of the calendar:
+    if (calendar.dateClicked) {
+      // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
+      var y = calendar.date.getFullYear();
+      var m = calendar.date.getMonth();     // integer, 0..11
+      var d = calendar.date.getDate();      // integer, 1..31
+      // redirect...
+      window.location = "/" + y + "/" + m + "/" + d + "/index.php";
+    }
+  };
+
+  Calendar.setup(
+    {
+      flat         : "calendar-container", // ID of the parent element
+      flatCallback : dateChanged           // our callback function
+    }
+  );
+</script>
+

+

+

+ +

3.3  Highlight special dates

+

So you want to display certain dates in a different color, or with bold +font, or whatever, right? Well, no problem -- our calendar can do this as +well. It doesn't matter if it's a flat or popup calendar -- we'll use a flat +one for this sample. The idea, however, is that you need to have the dates +in an array or a JavaScript object -- whatever is suitable for your way of +thinking -- and use it from a function that returns a value, telling the +calendar what kind of date is the passed one.

+

+Too much talking, here's the code ;-)

+

+

+
<!-- this goes into the <head> tag -->
+<style type="text/css">
+  .special { background-color: #000; color: #fff; }
+</style>
+
+<!-- and the rest inside the <body> -->
+<div style="float: right; margin-left: 1em; margin-bottom: 1em;"
+id="calendar-container"></div>
+
+<script type="text/javascript">
+  var SPECIAL_DAYS = {
+    0 : [ 13, 24 ],		// special days in January
+    2 : [ 1, 6, 8, 12, 18 ],	// special days in March
+    8 : [ 21, 11 ]		// special days in September
+  };
+
+  function dateIsSpecial(year, month, day) {
+    var m = SPECIAL_DAYS[month];
+    if (!m) return false;
+    for (var i in m) if (m[i] == day) return true;
+    return false;
+  };
+
+  function dateChanged(calendar) {
+    // Beware that this function is called even if the end-user only
+    // changed the month/year.  In order to determine if a date was
+    // clicked you can use the dateClicked property of the calendar:
+    if (calendar.dateClicked) {
+      // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
+      var y = calendar.date.getFullYear();
+      var m = calendar.date.getMonth();     // integer, 0..11
+      var d = calendar.date.getDate();      // integer, 1..31
+      // redirect...
+      window.location = "/" + y + "/" + m + "/" + d + "/index.php";
+    }
+  };
+
+  function ourDateStatusFunc(date, y, m, d) {
+    if (dateIsSpecial(y, m, d))
+      return "special";
+    else
+      return false; // other dates are enabled
+      // return true if you want to disable other dates
+  };
+
+  Calendar.setup(
+    {
+      flat         : "calendar-container", // ID of the parent element
+      flatCallback : dateChanged,          // our callback function
+      dateStatusFunc : ourDateStatusFunc
+    }
+  );
+</script>
+

+

+So the above code creates a normal flat calendar, like in the previous +sample. We hook into it with the function “ourDateStatusFuncâ€, +which receives a date object as the first argument, and also the year, +month, date as the next 3 arguments (normally, you can extract year, month, +date from the first parameter too, but we pass them separately for +convenience, as it's very likely that they are going to be used in this +function).

+

+So, this function receives a date. It can return false if you want +no special action to be taken on that date, true if that date +should be disabled (unselectable), or a string if you want to assign a +special CSS class to that date. We return “special†for the dates that we +want to highlight -- and note that we defined a “special†look for them in +the CSS section.

+

+I used a simple approach here to define what dates are special. There's a +JavaScript object (the SPECIAL_DAYS global variable) which holds an array +of dates for each month. Month numbers start at zero (January). Months +that don't contain special dates can be absent from this object. Note that +the way to implement this is completely separated from the calendar +code -- therefore, feel free to use your imagination if you have better +ideas. :-)

+

+

+ +

3.4  Select multiple dates

+

Starting version 1.0, the calendar is able to handle multiple dates +selection. You just need to pass the “multiple†parameter to +Calendar.setup and add some special code that interprets the +selection once the calendar is closed.

+

+

+
<a id="trigger" href="#">[open calendar...]</a>
+<div id="output"></div>
+<script type="text/javascript">//<![CDATA[
+    // the default multiple dates selected,
+    // first time the calendar is displayed
+    var MA = [];
+
+    function closed(cal) {
+
+      // here we'll write the output; this is only for example.  You
+      // will normally fill an input field or something with the dates.
+      var el = document.getElementById("output");
+
+      // reset initial content.
+      el.innerHTML = "";
+
+      // Reset the "MA", in case one triggers the calendar again.
+      // CAREFUL!  You don't want to do "MA = [];".  We need to modify
+      // the value of the current array, instead of creating a new one.
+      // Calendar.setup is called only once! :-)  So be careful.
+      MA.length = 0;
+
+      // walk the calendar's multiple dates selection hash
+      for (var i in cal.multiple) {
+        var d = cal.multiple[i];
+        // sometimes the date is not actually selected,
+        // so let's check
+        if (d) {
+          // OK, selected.  Fill an input field or something.
+          el.innerHTML += d.print("%A, %Y %B %d") + "<br />";
+          // and push it in the "MA", in case one triggers the calendar again.
+          MA[MA.length] = d;
+        }
+      }
+      cal.hide();
+      return true;
+    };
+
+    Calendar.setup({
+      align      : "BR",
+      showOthers : true,
+      multiple   : MA, // pass the initial or computed array of multiple dates
+      onClose    : closed,
+      button     : "trigger"
+    });
+//]]></script>
+

+

+The above code creates a popup calendar and passes to it an array of dates, +which is initially empty, in the “multiple†argument. When the calendar is +closed it will call our “closed†function handler; in this handler +we determine what dates were actually selected, inspecting the +“cal.multiple†property, we display them in a DIV element right +next to the <a> element that opens the calendar, and we reinitialize the +global array of selected dates (which will be used if the end user opens the +calendar again). I guess the code speaks for itself, right? :-)

+

+

+ +

4  The Calendar object overview

+

+

+Basically you should be able to setup the calendar with the function presented +in the previous section. However, if for some reason Calendar.setup +doesn't provide all the functionality that you need and you want to tweak into +the process of creating and configuring the calendar ``by hand'', then this +section is the way to go.

+

+The file calendar.js implements the functionality of the calendar. +All (well, almost all) functions and variables are embedded in the JavaScript +object ``Calendar''.

+

+You can instantiate a Calendar object by calling the constructor, like +this: var cal = new Calendar(...). We will discuss the parameters +later. After creating the object, the variable cal will contain a +reference to it. You can use this reference to access further options of the +calendar, for instance:

+

+

+
cal.weekNumbers = false; // do not display week numbers
+cal.showsTime = true;    // include a time selector
+cal.setDateFormat("%Y.%m.%d %H:%M"); // set this format: 2003.12.31 23:59
+cal.setDisabledHandler(function(date, year, month, day) {
+  // verify date and return true if it has to be disabled
+  // ``date'' is a JS Date object, but if you only need the
+  // year, month and/or day you can get them separately as
+  // next 3 parameters, as you can see in the declaration
+  if (year == 2004) {
+    // disable all dates from 2004
+    return true;
+  }
+  return false;
+});
+

+

+etc. Prior to version +0.9.3 this was the only way to configure it. The Calendar.setup +function, documented in section 2, basically does the same +things (actually more) in order to setup the calendar, based on the parameters +that you provided.

+

+

+ +

4.1  Creating a calendar

+

The calendar is created by following some steps (even the function +Calendar.setup, described in section 2, does the +same). While you can skip optional (marked ``opt'') steps if you're happy with +the defaults, please respect the order below.

+

+

+

    +

    +
  1. Instantiate a Calendar object. Details about this in +section 5.1.

    +

    +

    +
  2. opt   Set the weekNumbers property to false if you don't want +the calendar to display week numbers.

    +

    +

    +
  3. opt   Set the showsTime property to true if you +want the calendar to also provide a time selector.

    +

    +

    +
  4. opt   Set the time24 property to false if you want +the time selector to be in 12-hour format. Default is 24-hour format. This +property only has effect if you also set showsTime to +true.

    +

    +

    +
  5. opt   Set the range of years available for selection (see section +5.3.15). The default range is [1970..2050].

    +

    +

    +
  6. opt   Set the getDateStatus property. You should pass +here a function that receives a JavaScript Date object and returns +true if the given date should be disabled, false otherwise (details in +section 5.3.7).

    +

    +

    +
  7. opt   Set a date format. Your handler function, passed to the +calendar constructor, will be called when a date is selected with a reference +to the calendar and a date string in this format.

    +

    +

    +
  8. Create the HTML elements related to the calendar. This step +practically puts the calendar in your HTML page. You simply call +Calendar.create(). You can give an optional parameter if you wanna +create a flat calendar (details in section 5.3.1).

    +

    +

    +
  9. opt   Initialize the calendar to a certain date, for instance from +the input field.

    +

    +

    +
  10. Show the calendar (details in section 5.3.9).

    +

    +

    +

+

+

+ +

4.2  Order does matter ;-)

+

As you could see in the previous section, there are more steps to be followed +in order to setup the calendar. This happens because there are two different +things that need to be accomplished: first there is the JavaScript object, that +is created with new Calendar(...). Secondly there are the HTML +elements that actually lets you see and manipulate the calendar.

+

+

+[ Those that did UI4 programming, no matter in what +language and on what platform, may be familiar with this concept. First there +is the object in memory that lets you manipulate the UI element, and secondly +there is the UI element (known as ``control'', ``window'', ``widget'', etc.), +also in memory but you don't usually access it directly. ] +

+By instantiating the calendar we create the JavaScript object. It lets us +configure some properties and it also knows how to create the UI element (the +HTML elements actually) that will eventually be what the end-user sees on +screen. Creation of the HTML element is accomplished by the function +Calendar.create. It knows how to create popup or flat calendars. +This function is described in section 5.3.1.

+

+Some properties need to be set prior to creating the HTML elements, because +otherwise they wouldn't have any effect. Such a property is +weekNumbers -- it has the default value ``true'', and if you don't +want the calendar to display the week numbers you have to set it to false. If, +however, you do that after calling Calendar.create the calendar +would still display the week numbers, because the HTML elements are already +created (including the <td>-s in the <table> element that +should contain the week numbers). For this reason the order of the steps above +is important.

+

+Another example is when you want to show the calendar. The ``create'' function +does create the HTML elements, but they are initially hidden (have the style +``display: none'') unless the calendar is a flat calendar that should be always +visible in the page. Obviously, the Calendar.show function should be +called after calling Calendar.create.

+

+

+ +

4.3  Caching the object

+

Suppose the end-user has popped up a calendar and selects a date. The calendar +then closes. What really happens now?

+

+There are two approaches. The first (used in very old versions of the +calendar) was to drop completely the Calendar object and when the end-user pops +up the calendar again to create another one. This approach is bad for more +reasons:

+

+

+

    +

    +
  • creating the JavaScript object and HTML elements is time-consuming

    +

    +

    +
  • we may loose some end-user preferences (i.e. he might prefer to have +Monday for the first day of week and probably already clicked it the first time +when the calendar was opened, but now he has to do it again)

    +

    +

    +

+

+The second approach, implemented by the Calendar.setup function, is to +cache the JavaScript object. It does this by checking the global variable +window.calendar and if it is not null it assumes it is the created +Calendar object. When the end-user closes the calendar, our code will only +call ``hide'' on it, therefore keeping the JavaScript object and the +HTML elements in place.

+

+CAVEAT:     Since time selection support was introduced, this +``object caching'' mechanism has the following drawback: if you once created +the calendar with the time selection support, then other items that may not +require this functionality will still get a calendar with the time selection +support enabled. And reciprocal. ;-) Hopefully this will be corrected in a +later version, but for now it doesn't seem such a big problem.

+

+

+ +

4.4  Callback functions

+

You might rightfully wonder how is the calendar related to the input field? +Who tells it that it has to update that input field when a date is +selected, or that it has to jump to that URL when a date is clicked in +flat mode?

+

+All this magic is done through callback functions. The calendar doesn't know +anything about the existence of an input field, nor does it know where to +redirect the browser when a date is clicked in flat mode. It just calls your +callback when a particular event is happening, and you're responsible to handle +it from there. For a general purpose library I think this is the best model of +making a truly reusable thing.

+

+The calendar supports the following user callbacks:

+

+

+

    +

    +
  • onSelect   -- this gets called when the end-user changes the date in the +calendar. Documented in section IGNORE.

    +

    +

    +
  • onClose   -- this gets called when the calendar should close. It's +user's responsibility to close the calendar. Details in section +IGNORE.

    +

    +

    +
  • getDateStatus   -- this function gets called for any day in a month, +just before displaying the month. It is called with a JavaScript Date +object and should return true if that date should be disabled, false +if it's an ordinary date and no action should be taken, or it can return a +string in which case the returned value will be appended to the element's CSS +class (this way it provides a powerful way to make some dates ``special'', +i.e. highlight them differently). Details in section +5.3.8.

    +

    +

    +

+

+

+ +

5  The Calendar object API reference

+

+

+

+ +

5.1  Calendar constructor

+

+

+Synopsis:

+

+

+
var calendar = Calendar(firstDayOfWeek, date, onSelect, onClose);
+

+

+Parameters are as follows:

+

+

+

    +

    +
  • firstDayOfWeek   -- specifies which day is to be displayed as the first +day of week. Possible values are 0 to 6; 0 means Sunday, 1 means Monday, +..., 6 means Saturday.

    +

    +

    +
  • date   -- a JavaScript Date object or null. If null +is passed then the calendar will default to today date. Otherwise it will +initialize on the given date.

    +

    +

    +
  • onSelect   -- your callback for the ``onChange'' event. See above.

    +

    +

    +
  • onClose   -- your callback for the ``onClose'' event. See above.

    +

    +

    +

+

+

+ +

The onSelect event

+

+

+Here is a typical implementation of this function:

+

+

+
function onSelect(calendar, date) {
+  var input_field = document.getElementById("date");
+  input_field.value = date;
+};
+

+

+date is in the format selected with calendar.setDateFormat +(see section 5.3.5). This code simply updates the +input field. If you want the calendar to be in single-click mode then you +should also close the calendar after you updated the input field, so we come to +the following version:

+

+

+
function onSelect(calendar, date) {
+  var input_field = document.getElementById("date");
+  input_field.value = date;
+  if (calendar.dateClicked) {
+    calendar.callCloseHandler(); // this calls "onClose" (see above)
+  }
+};
+

+

+Note that we checked the member variable dateClicked and +only hide the calendar if it's true. If this variable is false it +means that no date was actually selected, but the user only changed the +month/year using the navigation buttons or the menus. We don't want to hide +the calendar in that case.

+

+

+ +

The onClose event

+

+

+This event is triggered when the calendar should close. It should hide or +destroy the calendar object -- the calendar itself just triggers the event, but +it won't close itself.

+

+A typical implementation of this function is the following:

+

+

+
function onClose(calendar) {
+  calendar.hide();
+  // or calendar.destroy();
+};
+

+

+

+ +

5.2  Useful member variables (properties)

+

+

+After creating the Calendar object you can access the following properties:

+

+

+

    +

    +
  • date -- is a JavaScript Date object. It will always +reflect the date shown in the calendar (yes, even if the calendar is hidden).

    +

    +

    +
  • isPopup -- if this is true then the current Calendar object is +a popup calendar. Otherwise (false) we have a flat calendar. This variable is +set from Calendar.create and has no meaning before this function was +called.

    +

    +

    +
  • dateClicked -- particularly useful in the onSelect +handler, this variable tells us if a date was really clicked. That's because +the onSelect handler is called even if the end-user only changed the +month/year but did not select a date. We don't want to close the calendar in +that case.

    +

    +

    +
  • weekNumbers -- if true (default) then the calendar +displays week numbers. If you don't want week numbers you have to set this +variable to false before calling Calendar.create.

    +

    +

    +
  • showsTime - if you set this to true (it is +false by default) then the calendar will also include a time selector.

    +

    +

    +
  • time24 - if you set this to false then the time +selector will be in 12-hour format. It is in 24-hour format by default.

    +

    +

    +
  • firstDayOfWeek -- specifies the first day of week (0 to 6, pass +0 for Sunday, 1 for Monday, ..., 6 for Saturday). This variable is set from +constructor, but you still have a chance to modify it before calling +Calendar.create.

    +

    +

    +

+

+There are lots of other member variables, but one should access them only +through member functions so I won't document them here.

+

+

+ +

5.3  Public methods

+

+ +

5.3.1  Calendar.create

+

+

+This function creates the afferent HTML elements that are needed to display the +calendar. You should call it after setting the calendar properties. Synopsis: +

+
calendar.create(); // creates a popup calendar
+  // -- or --
+calendar.create(document.getElementById(parent_id)); // makes a flat calendar
+

+

+It can create a popup calendar or a flat calendar. If the ``parent'' argument +is present (it should be a reference -- not ID -- to an HTML element) then +a flat calendar is created and it is inserted in the given element.

+

+At any moment, given a reference to a calendar object, we can inspect if it's a +popup or a flat calendar by checking the boolean member variable +isPopup:

+

+

+
if (calendar.isPopup) {
+   // this is a popup calendar
+} else {
+   // this is a flat calendar
+}
+

+

+

+ +

5.3.2  Calendar.callHandler

+

+

+This function calls the first user callback (the +onSelect handler) with the required parameters.

+

+

+ +

5.3.3  Calendar.callCloseHandler

+

+

+This function calls the second user callback (the +onClose handler). It's useful when you want to have a +``single-click'' calendar -- just call this in your onSelect handler, +if a date was clicked.

+

+

+ +

5.3.4  Calendar.hide

+

+

+Call this function to hide the calendar. The calendar object and HTML elements +will not be destroyed, thus you can later call one of the show +functions on the same element.

+

+

+ +

5.3.5  Calendar.setDateFormat

+

+

+This function configures the format in which the calendar reports the date to +your ``onSelect'' handler. Call it like this:

+

+

+
calendar.setDateFormat("%y/%m/%d");
+

+

+As you can see, it receives only one parameter, the required format. The magic +characters are the following:

+

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
%a abbreviated weekday name
%A full weekday name
%b abbreviated month name
%B full month name
%C century number
%d the day of the month ( 00 .. 31 )
%e the day of the month ( 0 .. 31 )
%H hour ( 00 .. 23 )
%I hour ( 01 .. 12 )
%j day of the year ( 000 .. 366 )
%k hour ( 0 .. 23 )
%l hour ( 1 .. 12 )
%m month ( 01 .. 12 )
%M minute ( 00 .. 59 )
%n a newline character
%p ``PM'' or ``AM''
%P ``pm'' or ``am''
%S second ( 00 .. 59 )
%s number of seconds since Epoch (since Jan 01 1970 00:00:00 UTC)
%t a tab character
%U, %W, %V the week number
%u the day of the week ( 1 .. 7, 1 = MON )
%w the day of the week ( 0 .. 6, 0 = SUN )
%y year without the century ( 00 .. 99 )
%Y year including the century ( ex. 1979 )
%% a literal % character +

+There are more algorithms for computing the week number. All +three specifiers currently implement the same one, as defined by ISO 8601: +``the week 01 is the week that has the Thursday in the current year, which is +equivalent to the week that contains the fourth day of January. Weeks start on +Monday.''

+

+

+ +

5.3.6  Calendar.setTtDateFormat

+

+

+Has the same prototype as Calendar.setDateFormat, but refers to the +format of the date displayed in the ``status bar'' when the mouse is over some +date.

+

+

+ +

5.3.7  Calendar.setDisabledHandler

+

+

+This function allows you to specify a callback function that checks if a +certain date must be disabled by the calendar. You are responsible to write +the callback function. Synopsis:

+

+

+
function disallowDate(date) {
+  // date is a JS Date object
+  if (  date.getFullYear() == 2003 &&
+        date.getMonth()    == 6 /* July, it's zero-based */ &&
+        date.getDate()     == 5  ) {
+    return true; // disable July 5 2003
+  }
+  return false; // enable other dates
+};
+
+calendar.setDisabledHandler(disallowDate);
+

+

+If you change this function in ``real-time'', meaning, without creating a new +calendar, then you have to call calendar.refresh() to make it +redisplay the month and take into account the new disabledHandler. +Calendar.setup does this, so you have no such trouble with it.

+

+Note that disallowDate should be very fast, as it is called for each +date in the month. Thus, it gets called, say, 30 times before displaying the +calendar, and 30 times when the month is changed. Tests I've done so far show +that it's still good, but in the future I might switch it to a different design +(for instance, to call it once per month and to return an array of dates that +must be disabled).

+

+This function should be considered deprecated in the favor of +Calendar.setDateStatusHandler, described below.

+

+

+ +

5.3.8  Calendar.setDateStatusHandler

+

+

+This function obsoletes Calendar.setDisabledHandler. You call it with +a function parameter, but this function can return a boolean +or a string. If the return value is a boolean (true or +false) then it behaves just like setDisabledHandler, +therefore disabling the date if the return value is true.

+

+If the returned value is a string then the given date will gain an additional +CSS class, namely the returned value. You can use this to highlight some dates +in some way. Note that you are responsible for defining the CSS class that you +return. If you return the string ``disabled'' then that date will be disabled, +just as if you returned true.

+

+Here is a simple scenario that shows what you can do with this function. The +following should be present in some of your styles, or in the document head in +a STYLE tag (but put it after the place where the calendar styles were +loaded):

+

+

+
.special { background-color: #000; color: #fff; }
+

+

+And you would use the following code before calling Calendar.create():

+

+

+
// this table holds your special days, so that we can automatize
+// things a bit:
+var SPECIAL_DAYS = {
+    0 : [ 13, 24 ],             // special days in January
+    2 : [ 1, 6, 8, 12, 18 ],    // special days in March
+    8 : [ 21, 11 ],             // special days in September
+   11 : [ 25, 28 ]              // special days in December
+};
+
+// this function returns true if the passed date is special
+function dateIsSpecial(year, month, day) {
+    var m = SPECIAL_DAYS[month];
+    if (!m) return false;
+    for (var i in m) if (m[i] == day) return true;
+    return false;
+}
+
+// this is the actual date status handler.  Note that it receives the
+// date object as well as separate values of year, month and date, for
+// your confort.
+function dateStatusHandler(date, y, m, d) {
+    if (dateIsSpecial(y, m, d)) return ``special'';
+    else return false;
+    // return true above if you want to disable other dates
+}
+
+// configure it to the calendar
+calendar.setDateStatusHandler(dateStatusHandler);
+

+

+The above code adds the ``special'' class name to some dates that are defined +in the SPECIAL_DAYS table. Other dates will simply be displayed as default, +enabled.

+

+

+ +

5.3.9  Calendar.show

+

+

+Call this function do show the calendar. It basically sets the CSS ``display'' +property to ``block''. It doesn't modify the calendar position.

+

+This function only makes sense when the calendar is in popup mode.

+

+

+ +

5.3.10  Calendar.showAt

+

+

+Call this to show the calendar at a certain (x, y) position. Prototype:

+

+

+
calendar.showAt(x, y);
+

+

+The parameters are absolute coordinates relative to the top left +corner of the page, thus they are page coordinates not screen +coordinates.

+

+After setting the given coordinates it calls Calendar.show. This function only +makes sense when the calendar is in popup mode.

+

+

+ +

5.3.11  Calendar.showAtElement

+

+

+This function is useful if you want to display the calendar near some element. +You call it like this:

+

+

+
calendar.showAtElement(element, align);
+

+

+where element is a reference to your element (for instance it can be the input +field that displays the date) and align is an optional parameter, of type string, +containing one or two characters. For instance, if you pass "Br" as +align, the calendar will appear below the element and with its right +margin continuing the element's right margin.

+

+As stated above, align may contain one or two characters. The first character +dictates the vertical alignment, relative to the element, and the second +character dictates the horizontal alignment. If the second character is +missing it will be assumed "l" (the left margin of the calendar will +be at the same horizontal position as the left margin of the element).

+

+The characters given for the align parameters are case sensitive. This +function only makes sense when the calendar is in popup mode. After computing +the position it uses Calendar.showAt to display the calendar there.

+

+

+ +

Vertical alignment

+

The first character in ``align'' can take one of the following values:

+

+

+

    +

    +
  • T -- completely above the reference element (bottom margin of +the calendar aligned to the top margin of the element).

    +

    +

    +
  • t -- above the element but may overlap it (bottom margin of the calendar aligned to +the bottom margin of the element).

    +

    +

    +
  • c -- the calendar displays vertically centered to the reference +element. It might overlap it (that depends on the horizontal alignment).

    +

    +

    +
  • b -- below the element but may overlap it (top margin of the calendar aligned to +the top margin of the element).

    +

    +

    +
  • B -- completely below the element (top margin of the calendar +aligned to the bottom margin of the element).

    +

    +

    +

+

+

+ +

Horizontal alignment

+

The second character in ``align'' can take one of the following values:

+

+

+

    +

    +
  • L -- completely to the left of the reference element (right +margin of the calendar aligned to the left margin of the element).

    +

    +

    +
  • l -- to the left of the element but may overlap it (left margin +of the calendar aligned to the left margin of the element).

    +

    +

    +
  • c -- horizontally centered to the element. Might overlap it, +depending on the vertical alignment.

    +

    +

    +
  • r -- to the right of the element but may overlap it (right +margin of the calendar aligned to the right margin of the element).

    +

    +

    +
  • R -- completely to the right of the element (left margin of the +calendar aligned to the right margin of the element).

    +

    +

    +

+

+

+ +

Default values

+

If the ``align'' parameter is missing the calendar will choose +``Br''.

+

+

+ +

5.3.12  Calendar.setDate

+

+

+Receives a JavaScript Date object. Sets the given date in the +calendar. If the calendar is visible the new date is displayed immediately.

+

+

+
calendar.setDate(new Date()); // go today
+

+

+

+ +

5.3.13  Calendar.setFirstDayOfWeek

+

+

+Changes the first day of week. The parameter has to be a numeric value ranging +from 0 to 6. Pass 0 for Sunday, 1 for Monday, ..., 6 for Saturday.

+

+

+
calendar.setFirstDayOfWeek(5); // start weeks on Friday
+

+

+

+ +

5.3.14  Calendar.parseDate

+

+

+Use this function to parse a date given as string and to move the calendar to +that date.

+

+The algorithm tries to parse the date according to the format that was +previously set with Calendar.setDateFormat; if that fails, it still +tries to get some valid date out of it (it doesn't read your thoughts, though).

+

+

+
calendar.parseDate("2003/07/06");
+

+

+

+ +

5.3.15  Calendar.setRange

+

+

+Sets the range of years that are allowed in the calendar. Synopsis:

+

+

+
calendar.setRange(1970, 2050);
+

+

+

+ +

6  Side effects

+

The calendar code was intentionally embedded in an object to make it have as +less as possible side effects. However, there are some -- not harmful, after +all. Here is a list of side effects; you can count they already happened after +calendar.js was loaded.

+

+

+

    +

    +
  1. The global variable window.calendar will be set to null. This +variable is used by the calendar code, especially when doing drag & drop for +moving the calendar. In the future I might get rid of it, but for now it +didn't harm anyone.

    +

    +

    +
  2. The JavaScript Date object is modified. We add some properties +and functions that are very useful to our calendar. It made more sense to add +them directly to the Date object than to the calendar itself. +Complete list:

    +

    +

    +

      +

      +
    1. Date._MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31); +

      +
    2. Date.SECOND = 1000 /* milliseconds */; +

      +
    3. Date.MINUTE = 60 * Date.SECOND; +

      +
    4. Date.HOUR = 60 * Date.MINUTE; +

      +
    5. Date.DAY = 24 * Date.HOUR; +

      +
    6. Date.WEEK = 7 * Date.DAY;

      +

      +

      +
    7. Date.prototype.getMonthDays(month) -- returns the number of days +of the given month, or of the current date object if no month was given.

      +

      +

      +
    8. Date.prototype.getWeekNumber() -- returns the week number of the +date in the current object.

      +

      +

      +
    9. Date.prototype.equalsTo(other_date) -- compare the current date +object with other_date and returns true if the dates are +equal. It ignores time.

      +

      +

      +
    10. Date.prototype.print(format) -- returns a string with the +current date object represented in the given format. It implements the format +specified in section 5.3.5.

      +

      +

      +

    +

    +

    +

+

+

+ +

7  Credits

+

The following people either sponsored, donated money to the project or bought +commercial licenses (listed in reverse chronological order). Your name could +be here too! If you wish to sponsor the project (for instance request a +feature and pay me for implementing it) or donate some money please +please contact me at mihai_bazon@yahoo.com.

+

+

+

+

+

+
+ +Thank you!
+ -- mihai_bazon@yahoo.com +
+

+

+

+

1 +by the term ``widget'' I understand a single element of user interface. +But that's in Linux world. For those that did lots of Windows +programming the term ``control'' might be more familiar +

+

2 people report that the calendar does +not work with IE5/Mac. However, this browser was discontinued and we +believe that supporting it doesn't worth the efforts, given the fact that +it has the worst, buggiest implementation for DOM I've ever seen.

+

3 under Opera 7 the calendar still lacks some functionality, such as +keyboard navigation; also Opera doesn't seem to allow disabling text +selection when one drags the mouse on the page; despite all that, the +calendar is still highly functional under Opera 7 and looks as good as +in other supported browsers.

+

4 user interface

+
+

+
Last modified: Saturday, March 5th, 2005 1:37:14pm
+
+ + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/reference.pdf b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/doc/reference.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1e96fa0a18871656d59abb7579f37cf2c176736b GIT binary patch literal 265125 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Ξ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

&>*qd&o%$*$t9@8H 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 literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/img.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/img.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd2c4a521774c70473f11c88642543751a812d6f GIT binary patch literal 223 zcmY+8F$w}P5Jmsu1X2mY7Pj^lfoWE3A`H5AX$H3SCIQzYcmogOL2?Q^tGEd(=x;uM z{$plN=VQ0Kv{>RraL#2QrIhnCSD|Y2rlx_xwxq&h@fcKZs#?v!0&(grG%|C?d}R)U zD^^qZLqwz(8AZb2F@n7Ht1*~)C_QN;j~*1;!-N#FcEOM(A3fUjg#2vzUPlb`OU3Tk Fe*i=yIHv#r literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/index.html b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/index.html new file mode 100644 index 0000000..1b02750 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/index.html @@ -0,0 +1,333 @@ + + + + + + + +The Coolest DHTML Calendar - Online Demo + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

+

+Theme:
+Aqua +| +Tiger +| +winter +| +blue +| +summer +| +green +
+win2k-1 +| +win2k-2 +| +win2k-cold-1 +| +win2k-cold-2 +
+system + +
+Release notes. +
+Set it up in minutes: + popup calendar, + flat calendar. +Other samples: + special days, + day info, + multiple dates selection +
+Documentation: + HTML, + PDF. +
+

+ +
+ +
+ + + + + + + + +
+ +
+
+Popup examples +
+ +
+ +Date #1: %Y-%m-%d [%W] %H:%M -- single +click
+ +Date #2: %a, %b %e, %Y [%I:%M %p] +-- double click + +

+ + +this select should hide when the calendar is above it. +

+ +Date #3: %d/%m/%Y +-- single click +
+ +Date #4: %A, %B %e, %Y -- +double click + +
+ +

This is release 1.0. Works on MSIE/Win 5.0 or better (really), +Opera 7+, Mozilla, Firefox, Netscape 6.x, 7.0 and all other Gecko-s, +Konqueror and Safari.

+ +

Keyboard navigation

+ +

Starting with version 0.9.2, you can also use the keyboard to select +dates (only for popup calendars; does not work with Opera +7 or Konqueror/Safari). The following keys are available:

+ +
    + +
  • , , + , -- select date
  • +
  • CTRL + , + -- select month
  • +
  • CTRL + , + -- select year
  • +
  • SPACE -- go to today date
  • +
  • ENTER -- accept the currently selected date
  • +
  • ESC -- cancel selection
  • + +
+ +
+ +
+ Flat calendar +
+ +

A non-popup version will appear below as soon + as the page is loaded. Note that it doesn't show the week number.

+ + +
+
 
+ +

+ The example above uses the setDisabledHandler() member function + to setup a handler that would only enable days withing a range of 10 days, + forward or backward, from the current date. +

+ + + +
+ +
dynarch.com 2002-2005
+Author: Mihai +Bazon
Distributed under the GNU LGPL.
+ +

If you use this script on a public page we +would love it if you would let us +know.

+ + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-af.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-af.js new file mode 100644 index 0000000..aeda581 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-af.js @@ -0,0 +1,39 @@ +// ** I18N Afrikaans +Calendar._DN = new Array +("Sondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrydag", + "Saterdag", + "Sondag"); +Calendar._MN = new Array +("Januarie", + "Februarie", + "Maart", + "April", + "Mei", + "Junie", + "Julie", + "Augustus", + "September", + "Oktober", + "November", + "Desember"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["TOGGLE"] = "Verander eerste dag van die week"; +Calendar._TT["PREV_YEAR"] = "Vorige jaar (hou vir keuselys)"; +Calendar._TT["PREV_MONTH"] = "Vorige maand (hou vir keuselys)"; +Calendar._TT["GO_TODAY"] = "Gaan na vandag"; +Calendar._TT["NEXT_MONTH"] = "Volgende maand (hou vir keuselys)"; +Calendar._TT["NEXT_YEAR"] = "Volgende jaar (hou vir keuselys)"; +Calendar._TT["SEL_DATE"] = "Kies datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Sleep om te skuif"; +Calendar._TT["PART_TODAY"] = " (vandag)"; +Calendar._TT["MON_FIRST"] = "Vertoon Maandag eerste"; +Calendar._TT["SUN_FIRST"] = "Display Sunday first"; +Calendar._TT["CLOSE"] = "Close"; +Calendar._TT["TODAY"] = "Today"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-al.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-al.js new file mode 100644 index 0000000..4f701cf --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-al.js @@ -0,0 +1,101 @@ +// Calendar ALBANIAN language +//author Rigels Gordani rige@hotmail.com + +// ditet +Calendar._DN = new Array +("E Diele", +"E Hene", +"E Marte", +"E Merkure", +"E Enjte", +"E Premte", +"E Shtune", +"E Diele"); + +//ditet shkurt +Calendar._SDN = new Array +("Die", +"Hen", +"Mar", +"Mer", +"Enj", +"Pre", +"Sht", +"Die"); + +// muajt +Calendar._MN = new Array +("Janar", +"Shkurt", +"Mars", +"Prill", +"Maj", +"Qeshor", +"Korrik", +"Gusht", +"Shtator", +"Tetor", +"Nentor", +"Dhjetor"); + +// muajte shkurt +Calendar._SMN = new Array +("Jan", +"Shk", +"Mar", +"Pri", +"Maj", +"Qes", +"Kor", +"Gus", +"Sht", +"Tet", +"Nen", +"Dhj"); + +// ndihmesa +Calendar._TT = {}; +Calendar._TT["INFO"] = "Per kalendarin"; + +Calendar._TT["ABOUT"] = +"Zgjedhes i ores/dates ne DHTML \n" + +"\n\n" +"Zgjedhja e Dates:\n" + +"- Perdor butonat \xab, \xbb per te zgjedhur vitin\n" + +"- Perdor butonat" + String.fromCharCode(0x2039) + ", " + +String.fromCharCode(0x203a) + +" per te zgjedhur muajin\n" + +"- Mbani shtypur butonin e mousit per nje zgjedje me te shpejte."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Zgjedhja e kohes:\n" + +"- Kliko tek ndonje nga pjeset e ores per ta rritur ate\n" + +"- ose kliko me Shift per ta zvogeluar ate\n" + +"- ose cliko dhe terhiq per zgjedhje me te shpejte."; + +Calendar._TT["PREV_YEAR"] = "Viti i shkuar (prit per menune)"; +Calendar._TT["PREV_MONTH"] = "Muaji i shkuar (prit per menune)"; +Calendar._TT["GO_TODAY"] = "Sot"; +Calendar._TT["NEXT_MONTH"] = "Muaji i ardhshem (prit per menune)"; +Calendar._TT["NEXT_YEAR"] = "Viti i ardhshem (prit per menune)"; +Calendar._TT["SEL_DATE"] = "Zgjidh daten"; +Calendar._TT["DRAG_TO_MOVE"] = "Terhiqe per te levizur"; +Calendar._TT["PART_TODAY"] = " (sot)"; + +// "%s" eshte dita e pare e javes +// %s do te zevendesohet me emrin e dite +Calendar._TT["DAY_FIRST"] = "Trego te %s te paren"; + + +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Mbyll"; +Calendar._TT["TODAY"] = "Sot"; +Calendar._TT["TIME_PART"] = "Kliko me (Shift-)ose terhiqe per te ndryshuar +vleren"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "Java"; +Calendar._TT["TIME"] = "Koha:"; + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-bg.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-bg.js new file mode 100644 index 0000000..5eb73ec --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-bg.js @@ -0,0 +1,124 @@ +// ** I18N + +// Calendar BG language +// Author: Mihai Bazon, +// Translator: Valentin Sheiretsky, +// Encoding: Windows-1251 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Íåäåëÿ", + "Ïîíåäåëíèê", + "Âòîðíèê", + "Ñðÿäà", + "×åòâúðòúê", + "Ïåòúê", + "Ñúáîòà", + "Íåäåëÿ"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Íåä", + "Ïîí", + "Âòî", + "Ñðÿ", + "×åò", + "Ïåò", + "Ñúá", + "Íåä"); + +// full month names +Calendar._MN = new Array +("ßíóàðè", + "Ôåâðóàðè", + "Ìàðò", + "Àïðèë", + "Ìàé", + "Þíè", + "Þëè", + "Àâãóñò", + "Ñåïòåìâðè", + "Îêòîìâðè", + "Íîåìâðè", + "Äåêåìâðè"); + +// short month names +Calendar._SMN = new Array +("ßíó", + "Ôåâ", + "Ìàð", + "Àïð", + "Ìàé", + "Þíè", + "Þëè", + "Àâã", + "Ñåï", + "Îêò", + "Íîå", + "Äåê"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Èíôîðìàöèÿ çà êàëåíäàðà"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Date selection:\n" + +"- Use the \xab, \xbb buttons to select year\n" + +"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" + +"- Hold mouse button on any of the above buttons for faster selection."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Time selection:\n" + +"- Click on any of the time parts to increase it\n" + +"- or Shift-click to decrease it\n" + +"- or click and drag for faster selection."; + +Calendar._TT["PREV_YEAR"] = "Ïðåäíà ãîäèíà (çàäðúæòå çà ìåíþ)"; +Calendar._TT["PREV_MONTH"] = "Ïðåäåí ìåñåö (çàäðúæòå çà ìåíþ)"; +Calendar._TT["GO_TODAY"] = "Èçáåðåòå äíåñ"; +Calendar._TT["NEXT_MONTH"] = "Ñëåäâàù ìåñåö (çàäðúæòå çà ìåíþ)"; +Calendar._TT["NEXT_YEAR"] = "Ñëåäâàùà ãîäèíà (çàäðúæòå çà ìåíþ)"; +Calendar._TT["SEL_DATE"] = "Èçáåðåòå äàòà"; +Calendar._TT["DRAG_TO_MOVE"] = "Ïðåìåñòâàíå"; +Calendar._TT["PART_TODAY"] = " (äíåñ)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "%s êàòî ïúðâè äåí"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Çàòâîðåòå"; +Calendar._TT["TODAY"] = "Äíåñ"; +Calendar._TT["TIME_PART"] = "(Shift-)Click èëè drag çà äà ïðîìåíèòå ñòîéíîñòòà"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%A - %e %B %Y"; + +Calendar._TT["WK"] = "Ñåäì"; +Calendar._TT["TIME"] = "×àñ:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-big5-utf8.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-big5-utf8.js new file mode 100644 index 0000000..14e0d5d --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-big5-utf8.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar big5-utf8 language +// Author: Gary Fu, +// Encoding: utf8 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("星期日", + "星期一", + "星期二", + "星期三", + "星期四", + "星期五", + "星期六", + "星期日"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("æ—¥", + "一", + "二", + "三", + "å››", + "五", + "å…­", + "æ—¥"); + +// full month names +Calendar._MN = new Array +("一月", + "二月", + "三月", + "四月", + "五月", + "六月", + "七月", + "八月", + "ä¹æœˆ", + "å月", + "å一月", + "å二月"); + +// short month names +Calendar._SMN = new Array +("一月", + "二月", + "三月", + "四月", + "五月", + "六月", + "七月", + "八月", + "ä¹æœˆ", + "å月", + "å一月", + "å二月"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "關於"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"日期é¸æ“‡æ–¹æ³•:\n" + +"- 使用 \xab, \xbb 按鈕å¯é¸æ“‡å¹´ä»½\n" + +"- 使用 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 按鈕å¯é¸æ“‡æœˆä»½\n" + +"- 按ä½ä¸Šé¢çš„按鈕å¯ä»¥åŠ å¿«é¸å–"; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"時間é¸æ“‡æ–¹æ³•:\n" + +"- 點擊任何的時間部份å¯å¢žåŠ å…¶å€¼\n" + +"- åŒæ™‚按Shiftéµå†é»žæ“Šå¯æ¸›å°‘其值\n" + +"- 點擊並拖曳å¯åŠ å¿«æ”¹è®Šçš„值"; + +Calendar._TT["PREV_YEAR"] = "上一年 (按ä½é¸å–®)"; +Calendar._TT["PREV_MONTH"] = "下一年 (按ä½é¸å–®)"; +Calendar._TT["GO_TODAY"] = "到今日"; +Calendar._TT["NEXT_MONTH"] = "上一月 (按ä½é¸å–®)"; +Calendar._TT["NEXT_YEAR"] = "下一月 (按ä½é¸å–®)"; +Calendar._TT["SEL_DATE"] = "é¸æ“‡æ—¥æœŸ"; +Calendar._TT["DRAG_TO_MOVE"] = "拖曳"; +Calendar._TT["PART_TODAY"] = " (今日)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "å°‡ %s 顯示在å‰"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "關閉"; +Calendar._TT["TODAY"] = "今日"; +Calendar._TT["TIME_PART"] = "點擊or拖曳å¯æ”¹è®Šæ™‚é–“(åŒæ™‚按Shift為減)"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "週"; +Calendar._TT["TIME"] = "Time:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-big5.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-big5.js new file mode 100644 index 0000000..a589358 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-big5.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar big5 language +// Author: Gary Fu, +// Encoding: big5 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("¬P´Á¤é", + "¬P´Á¤@", + "¬P´Á¤G", + "¬P´Á¤T", + "¬P´Á¥|", + "¬P´Á¤­", + "¬P´Á¤»", + "¬P´Á¤é"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("¤é", + "¤@", + "¤G", + "¤T", + "¥|", + "¤­", + "¤»", + "¤é"); + +// full month names +Calendar._MN = new Array +("¤@¤ë", + "¤G¤ë", + "¤T¤ë", + "¥|¤ë", + "¤­¤ë", + "¤»¤ë", + "¤C¤ë", + "¤K¤ë", + "¤E¤ë", + "¤Q¤ë", + "¤Q¤@¤ë", + "¤Q¤G¤ë"); + +// short month names +Calendar._SMN = new Array +("¤@¤ë", + "¤G¤ë", + "¤T¤ë", + "¥|¤ë", + "¤­¤ë", + "¤»¤ë", + "¤C¤ë", + "¤K¤ë", + "¤E¤ë", + "¤Q¤ë", + "¤Q¤@¤ë", + "¤Q¤G¤ë"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Ãö©ó"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"¤é´Á¿ï¾Ü¤èªk:\n" + +"- ¨Ï¥Î \xab, \xbb «ö¶s¥i¿ï¾Ü¦~¥÷\n" + +"- ¨Ï¥Î " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " «ö¶s¥i¿ï¾Ü¤ë¥÷\n" + +"- «ö¦í¤W­±ªº«ö¶s¥i¥H¥[§Ö¿ï¨ú"; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"®É¶¡¿ï¾Ü¤èªk:\n" + +"- ÂIÀ»¥ô¦óªº®É¶¡³¡¥÷¥i¼W¥[¨ä­È\n" + +"- ¦P®É«öShiftÁä¦AÂIÀ»¥i´î¤Ö¨ä­È\n" + +"- ÂIÀ»¨Ã©ì¦²¥i¥[§Ö§ïÅܪº­È"; + +Calendar._TT["PREV_YEAR"] = "¤W¤@¦~ («ö¦í¿ï³æ)"; +Calendar._TT["PREV_MONTH"] = "¤U¤@¦~ («ö¦í¿ï³æ)"; +Calendar._TT["GO_TODAY"] = "¨ì¤µ¤é"; +Calendar._TT["NEXT_MONTH"] = "¤W¤@¤ë («ö¦í¿ï³æ)"; +Calendar._TT["NEXT_YEAR"] = "¤U¤@¤ë («ö¦í¿ï³æ)"; +Calendar._TT["SEL_DATE"] = "¿ï¾Ü¤é´Á"; +Calendar._TT["DRAG_TO_MOVE"] = "©ì¦²"; +Calendar._TT["PART_TODAY"] = " (¤µ¤é)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "±N %s Åã¥Ü¦b«e"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Ãö³¬"; +Calendar._TT["TODAY"] = "¤µ¤é"; +Calendar._TT["TIME_PART"] = "ÂIÀ»or©ì¦²¥i§ïÅܮɶ¡(¦P®É«öShift¬°´î)"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "¶g"; +Calendar._TT["TIME"] = "Time:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-br.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-br.js new file mode 100644 index 0000000..bfb0747 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-br.js @@ -0,0 +1,108 @@ +// ** I18N + +// Calendar pt-BR language +// Author: Fernando Dourado, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Domingo", + "Segunda", + "Terça", + "Quarta", + "Quinta", + "Sexta", + "Sabádo", + "Domingo"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +// [No changes using default values] + +// full month names +Calendar._MN = new Array +("Janeiro", + "Fevereiro", + "Março", + "Abril", + "Maio", + "Junho", + "Julho", + "Agosto", + "Setembro", + "Outubro", + "Novembro", + "Dezembro"); + +// short month names +// [No changes using default values] + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Sobre o calendário"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Translate to portuguese Brazil (pt-BR) by Fernando Dourado (fernando.dourado@ig.com.br)\n" + +"Tradução para o português Brasil (pt-BR) por Fernando Dourado (fernando.dourado@ig.com.br)" + +"\n\n" + +"Selecionar data:\n" + +"- Use as teclas \xab, \xbb para selecionar o ano\n" + +"- Use as teclas " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o mês\n" + +"- Clique e segure com o mouse em qualquer botão para selecionar rapidamente."; + +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Selecionar hora:\n" + +"- Clique em qualquer uma das partes da hora para aumentar\n" + +"- ou Shift-clique para diminuir\n" + +"- ou clique e arraste para selecionar rapidamente."; + +Calendar._TT["PREV_YEAR"] = "Ano anterior (clique e segure para menu)"; +Calendar._TT["PREV_MONTH"] = "Mês anterior (clique e segure para menu)"; +Calendar._TT["GO_TODAY"] = "Ir para a data atual"; +Calendar._TT["NEXT_MONTH"] = "Próximo mês (clique e segure para menu)"; +Calendar._TT["NEXT_YEAR"] = "Próximo ano (clique e segure para menu)"; +Calendar._TT["SEL_DATE"] = "Selecione uma data"; +Calendar._TT["DRAG_TO_MOVE"] = "Clique e segure para mover"; +Calendar._TT["PART_TODAY"] = " (hoje)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Exibir %s primeiro"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Fechar"; +Calendar._TT["TODAY"] = "Hoje"; +Calendar._TT["TIME_PART"] = "(Shift-)Clique ou arraste para mudar o valor"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%d de %B de %Y"; + +Calendar._TT["WK"] = "sem"; +Calendar._TT["TIME"] = "Hora:"; + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ca.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ca.js new file mode 100644 index 0000000..a2121bc --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ca.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar CA language +// Author: Mihai Bazon, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Diumenge", + "Dilluns", + "Dimarts", + "Dimecres", + "Dijous", + "Divendres", + "Dissabte", + "Diumenge"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Diu", + "Dil", + "Dmt", + "Dmc", + "Dij", + "Div", + "Dis", + "Diu"); + +// full month names +Calendar._MN = new Array +("Gener", + "Febrer", + "Març", + "Abril", + "Maig", + "Juny", + "Juliol", + "Agost", + "Setembre", + "Octubre", + "Novembre", + "Desembre"); + +// short month names +Calendar._SMN = new Array +("Gen", + "Feb", + "Mar", + "Abr", + "Mai", + "Jun", + "Jul", + "Ago", + "Set", + "Oct", + "Nov", + "Des"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Sobre el calendari"; + +Calendar._TT["ABOUT"] = +"DHTML Selector de Data/Hora\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Sel.lecció de Dates:\n" + +"- Fes servir els botons \xab, \xbb per sel.leccionar l'any\n" + +"- Fes servir els botons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per se.lecciconar el mes\n" + +"- Manté el ratolí apretat en qualsevol dels anteriors per sel.lecció ràpida."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Time selection:\n" + +"- claca en qualsevol de les parts de la hora per augmentar-les\n" + +"- o Shift-click per decrementar-la\n" + +"- or click and arrastra per sel.lecció ràpida."; + +Calendar._TT["PREV_YEAR"] = "Any anterior (Mantenir per menu)"; +Calendar._TT["PREV_MONTH"] = "Mes anterior (Mantenir per menu)"; +Calendar._TT["GO_TODAY"] = "Anar a avui"; +Calendar._TT["NEXT_MONTH"] = "Mes següent (Mantenir per menu)"; +Calendar._TT["NEXT_YEAR"] = "Any següent (Mantenir per menu)"; +Calendar._TT["SEL_DATE"] = "Sel.leccionar data"; +Calendar._TT["DRAG_TO_MOVE"] = "Arrastrar per moure"; +Calendar._TT["PART_TODAY"] = " (avui)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Mostra %s primer"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Tanca"; +Calendar._TT["TODAY"] = "Avui"; +Calendar._TT["TIME_PART"] = "(Shift-)Click a arrastra per canviar el valor"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "st"; +Calendar._TT["TIME"] = "Hora:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cn.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cn.js new file mode 100644 index 0000000..a0ef7c6 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cn.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Encoding: any +// Translator : Niko +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("\u5468\u65e5",//\u5468\u65e5 + "\u5468\u4e00",//\u5468\u4e00 + "\u5468\u4e8c",//\u5468\u4e8c + "\u5468\u4e09",//\u5468\u4e09 + "\u5468\u56db",//\u5468\u56db + "\u5468\u4e94",//\u5468\u4e94 + "\u5468\u516d",//\u5468\u516d + "\u5468\u65e5");//\u5468\u65e5 + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d", + "\u5468\u65e5"); + +// full month names +Calendar._MN = new Array +("\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708"); + +// short month names +Calendar._SMN = new Array +("\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "\u5173\u4e8e"; + +Calendar._TT["ABOUT"] = +" DHTML \u65e5\u8d77/\u65f6\u95f4\u9009\u62e9\u63a7\u4ef6\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: \u6700\u65b0\u7248\u672c\u8bf7\u767b\u9646http://www.dynarch.com/projects/calendar/\u5bdf\u770b\n" + +"\u9075\u5faaGNU LGPL. \u7ec6\u8282\u53c2\u9605 http://gnu.org/licenses/lgpl.html" + +"\n\n" + +"\u65e5\u671f\u9009\u62e9:\n" + +"- \u70b9\u51fb\xab(\xbb)\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e00\u5e74\u5ea6.\n" + +"- \u70b9\u51fb" + String.fromCharCode(0x2039) + "(" + String.fromCharCode(0x203a) + ")\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e2a\u6708\u4efd.\n" + +"- \u957f\u65f6\u95f4\u6309\u7740\u6309\u94ae\u5c06\u51fa\u73b0\u66f4\u591a\u9009\u62e9\u9879."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"\u65f6\u95f4\u9009\u62e9:\n" + +"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u589e\u52a0\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\n" + +"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u6309\u4f4fShift\u952e\u540e\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u51cf\u5c11\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)."; + +Calendar._TT["PREV_YEAR"] = "\u4e0a\u4e00\u5e74"; +Calendar._TT["PREV_MONTH"] = "\u4e0a\u4e2a\u6708"; +Calendar._TT["GO_TODAY"] = "\u5230\u4eca\u5929"; +Calendar._TT["NEXT_MONTH"] = "\u4e0b\u4e2a\u6708"; +Calendar._TT["NEXT_YEAR"] = "\u4e0b\u4e00\u5e74"; +Calendar._TT["SEL_DATE"] = "\u9009\u62e9\u65e5\u671f"; +Calendar._TT["DRAG_TO_MOVE"] = "\u62d6\u52a8"; +Calendar._TT["PART_TODAY"] = " (\u4eca\u5929)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "%s\u4e3a\u8fd9\u5468\u7684\u7b2c\u4e00\u5929"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "\u5173\u95ed"; +Calendar._TT["TODAY"] = "\u4eca\u5929"; +Calendar._TT["TIME_PART"] = "(\u6309\u7740Shift\u952e)\u5355\u51fb\u6216\u62d6\u52a8\u6539\u53d8\u503c"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e\u65e5"; + +Calendar._TT["WK"] = "\u5468"; +Calendar._TT["TIME"] = "\u65f6\u95f4:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs-utf8.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs-utf8.js new file mode 100644 index 0000000..f6bbbeb --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs-utf8.js @@ -0,0 +1,65 @@ +/* + calendar-cs-win.js + language: Czech + encoding: windows-1250 + author: Lubos Jerabek (xnet@seznam.cz) + Jan Uhlir (espinosa@centrum.cz) +*/ + +// ** I18N +Calendar._DN = new Array('NedÄ›le','PondÄ›lí','Úterý','StÅ™eda','ÄŒtvrtek','Pátek','Sobota','NedÄ›le'); +Calendar._SDN = new Array('Ne','Po','Út','St','ÄŒt','Pá','So','Ne'); +Calendar._MN = new Array('Leden','Únor','BÅ™ezen','Duben','KvÄ›ten','ÄŒerven','ÄŒervenec','Srpen','Září','Říjen','Listopad','Prosinec'); +Calendar._SMN = new Array('Led','Úno','BÅ™e','Dub','KvÄ›','ÄŒrv','ÄŒvc','Srp','Zář','Říj','Lis','Pro'); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "O komponentÄ› kalendář"; +Calendar._TT["TOGGLE"] = "ZmÄ›na prvního dne v týdnu"; +Calendar._TT["PREV_YEAR"] = "PÅ™edchozí rok (pÅ™idrž pro menu)"; +Calendar._TT["PREV_MONTH"] = "PÅ™edchozí mÄ›síc (pÅ™idrž pro menu)"; +Calendar._TT["GO_TODAY"] = "DneÅ¡ní datum"; +Calendar._TT["NEXT_MONTH"] = "Další mÄ›síc (pÅ™idrž pro menu)"; +Calendar._TT["NEXT_YEAR"] = "Další rok (pÅ™idrž pro menu)"; +Calendar._TT["SEL_DATE"] = "Vyber datum"; +Calendar._TT["DRAG_TO_MOVE"] = "ChyÅ¥ a táhni, pro pÅ™esun"; +Calendar._TT["PART_TODAY"] = " (dnes)"; +Calendar._TT["MON_FIRST"] = "Ukaž jako první PondÄ›lí"; +//Calendar._TT["SUN_FIRST"] = "Ukaž jako první NedÄ›li"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"VýbÄ›r datumu:\n" + +"- Use the \xab, \xbb buttons to select year\n" + +"- Použijte tlaÄítka " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " k výbÄ›ru mÄ›síce\n" + +"- Podržte tlaÄítko myÅ¡i na jakémkoliv z tÄ›ch tlaÄítek pro rychlejší výbÄ›r."; + +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"VýbÄ›r Äasu:\n" + +"- KliknÄ›te na jakoukoliv z Äástí výbÄ›ru Äasu pro zvýšení.\n" + +"- nebo Shift-click pro snížení\n" + +"- nebo kliknÄ›te a táhnÄ›te pro rychlejší výbÄ›r."; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Zobraz %s první"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Zavřít"; +Calendar._TT["TODAY"] = "Dnes"; +Calendar._TT["TIME_PART"] = "(Shift-)Klikni nebo táhni pro zmÄ›nu hodnoty"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "d.m.yy"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "ÄŒas:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs-win.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs-win.js new file mode 100644 index 0000000..140dff3 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs-win.js @@ -0,0 +1,65 @@ +/* + calendar-cs-win.js + language: Czech + encoding: windows-1250 + author: Lubos Jerabek (xnet@seznam.cz) + Jan Uhlir (espinosa@centrum.cz) +*/ + +// ** I18N +Calendar._DN = new Array('Nedìle','Pondìlí','Úterý','Støeda','Ètvrtek','Pátek','Sobota','Nedìle'); +Calendar._SDN = new Array('Ne','Po','Út','St','Èt','Pá','So','Ne'); +Calendar._MN = new Array('Leden','Únor','Bøezen','Duben','Kvìten','Èerven','Èervenec','Srpen','Záøí','Øíjen','Listopad','Prosinec'); +Calendar._SMN = new Array('Led','Úno','Bøe','Dub','Kvì','Èrv','Èvc','Srp','Záø','Øíj','Lis','Pro'); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "O komponentì kalendáø"; +Calendar._TT["TOGGLE"] = "Zmìna prvního dne v týdnu"; +Calendar._TT["PREV_YEAR"] = "Pøedchozí rok (pøidrž pro menu)"; +Calendar._TT["PREV_MONTH"] = "Pøedchozí mìsíc (pøidrž pro menu)"; +Calendar._TT["GO_TODAY"] = "Dnešní datum"; +Calendar._TT["NEXT_MONTH"] = "Další mìsíc (pøidrž pro menu)"; +Calendar._TT["NEXT_YEAR"] = "Další rok (pøidrž pro menu)"; +Calendar._TT["SEL_DATE"] = "Vyber datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Chy a táhni, pro pøesun"; +Calendar._TT["PART_TODAY"] = " (dnes)"; +Calendar._TT["MON_FIRST"] = "Ukaž jako první Pondìlí"; +//Calendar._TT["SUN_FIRST"] = "Ukaž jako první Nedìli"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Výbìr datumu:\n" + +"- Use the \xab, \xbb buttons to select year\n" + +"- Použijte tlaèítka " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " k výbìru mìsíce\n" + +"- Podržte tlaèítko myši na jakémkoliv z tìch tlaèítek pro rychlejší výbìr."; + +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Výbìr èasu:\n" + +"- Kliknìte na jakoukoliv z èástí výbìru èasu pro zvýšení.\n" + +"- nebo Shift-click pro snížení\n" + +"- nebo kliknìte a táhnìte pro rychlejší výbìr."; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Zobraz %s první"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Zavøít"; +Calendar._TT["TODAY"] = "Dnes"; +Calendar._TT["TIME_PART"] = "(Shift-)Klikni nebo táhni pro zmìnu hodnoty"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "d.m.yy"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "Èas:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs.js new file mode 100644 index 0000000..f6bbbeb --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-cs.js @@ -0,0 +1,65 @@ +/* + calendar-cs-win.js + language: Czech + encoding: windows-1250 + author: Lubos Jerabek (xnet@seznam.cz) + Jan Uhlir (espinosa@centrum.cz) +*/ + +// ** I18N +Calendar._DN = new Array('NedÄ›le','PondÄ›lí','Úterý','StÅ™eda','ÄŒtvrtek','Pátek','Sobota','NedÄ›le'); +Calendar._SDN = new Array('Ne','Po','Út','St','ÄŒt','Pá','So','Ne'); +Calendar._MN = new Array('Leden','Únor','BÅ™ezen','Duben','KvÄ›ten','ÄŒerven','ÄŒervenec','Srpen','Září','Říjen','Listopad','Prosinec'); +Calendar._SMN = new Array('Led','Úno','BÅ™e','Dub','KvÄ›','ÄŒrv','ÄŒvc','Srp','Zář','Říj','Lis','Pro'); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "O komponentÄ› kalendář"; +Calendar._TT["TOGGLE"] = "ZmÄ›na prvního dne v týdnu"; +Calendar._TT["PREV_YEAR"] = "PÅ™edchozí rok (pÅ™idrž pro menu)"; +Calendar._TT["PREV_MONTH"] = "PÅ™edchozí mÄ›síc (pÅ™idrž pro menu)"; +Calendar._TT["GO_TODAY"] = "DneÅ¡ní datum"; +Calendar._TT["NEXT_MONTH"] = "Další mÄ›síc (pÅ™idrž pro menu)"; +Calendar._TT["NEXT_YEAR"] = "Další rok (pÅ™idrž pro menu)"; +Calendar._TT["SEL_DATE"] = "Vyber datum"; +Calendar._TT["DRAG_TO_MOVE"] = "ChyÅ¥ a táhni, pro pÅ™esun"; +Calendar._TT["PART_TODAY"] = " (dnes)"; +Calendar._TT["MON_FIRST"] = "Ukaž jako první PondÄ›lí"; +//Calendar._TT["SUN_FIRST"] = "Ukaž jako první NedÄ›li"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"VýbÄ›r datumu:\n" + +"- Use the \xab, \xbb buttons to select year\n" + +"- Použijte tlaÄítka " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " k výbÄ›ru mÄ›síce\n" + +"- Podržte tlaÄítko myÅ¡i na jakémkoliv z tÄ›ch tlaÄítek pro rychlejší výbÄ›r."; + +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"VýbÄ›r Äasu:\n" + +"- KliknÄ›te na jakoukoliv z Äástí výbÄ›ru Äasu pro zvýšení.\n" + +"- nebo Shift-click pro snížení\n" + +"- nebo kliknÄ›te a táhnÄ›te pro rychlejší výbÄ›r."; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Zobraz %s první"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Zavřít"; +Calendar._TT["TODAY"] = "Dnes"; +Calendar._TT["TIME_PART"] = "(Shift-)Klikni nebo táhni pro zmÄ›nu hodnoty"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "d.m.yy"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "ÄŒas:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-da.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-da.js new file mode 100644 index 0000000..a99b598 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-da.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar DA language +// Author: Michael Thingmand Henriksen, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Søndag", +"Mandag", +"Tirsdag", +"Onsdag", +"Torsdag", +"Fredag", +"Lørdag", +"Søndag"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Søn", +"Man", +"Tir", +"Ons", +"Tor", +"Fre", +"Lør", +"Søn"); + +// full month names +Calendar._MN = new Array +("Januar", +"Februar", +"Marts", +"April", +"Maj", +"Juni", +"Juli", +"August", +"September", +"Oktober", +"November", +"December"); + +// short month names +Calendar._SMN = new Array +("Jan", +"Feb", +"Mar", +"Apr", +"Maj", +"Jun", +"Jul", +"Aug", +"Sep", +"Okt", +"Nov", +"Dec"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Om Kalenderen"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For den seneste version besøg: http://www.dynarch.com/projects/calendar/\n"; + +"Distribueret under GNU LGPL. Se http://gnu.org/licenses/lgpl.html for detajler." + +"\n\n" + +"Valg af dato:\n" + +"- Brug \xab, \xbb knapperne for at vælge Ã¥r\n" + +"- Brug " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " knapperne for at vælge mÃ¥ned\n" + +"- Hold knappen pÃ¥ musen nede pÃ¥ knapperne ovenfor for hurtigere valg."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Valg af tid:\n" + +"- Klik pÃ¥ en vilkÃ¥rlig del for større værdi\n" + +"- eller Shift-klik for for mindre værdi\n" + +"- eller klik og træk for hurtigere valg."; + +Calendar._TT["PREV_YEAR"] = "Ét Ã¥r tilbage (hold for menu)"; +Calendar._TT["PREV_MONTH"] = "Én mÃ¥ned tilbage (hold for menu)"; +Calendar._TT["GO_TODAY"] = "GÃ¥ til i dag"; +Calendar._TT["NEXT_MONTH"] = "Én mÃ¥ned frem (hold for menu)"; +Calendar._TT["NEXT_YEAR"] = "Ét Ã¥r frem (hold for menu)"; +Calendar._TT["SEL_DATE"] = "Vælg dag"; +Calendar._TT["DRAG_TO_MOVE"] = "Træk vinduet"; +Calendar._TT["PART_TODAY"] = " (i dag)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Vis %s først"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Luk"; +Calendar._TT["TODAY"] = "I dag"; +Calendar._TT["TIME_PART"] = "(Shift-)klik eller træk for at ændre værdi"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "Uge"; +Calendar._TT["TIME"] = "Tid:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-de.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-de.js new file mode 100644 index 0000000..4bc1137 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-de.js @@ -0,0 +1,124 @@ +// ** I18N + +// Calendar DE language +// Author: Jack (tR), +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag", + "Sonntag"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("So", + "Mo", + "Di", + "Mi", + "Do", + "Fr", + "Sa", + "So"); + +// full month names +Calendar._MN = new Array +("Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Feb", + "M\u00e4r", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Dez"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "\u00DCber dieses Kalendarmodul"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Datum ausw\u00e4hlen:\n" + +"- Benutzen Sie die \xab, \xbb Buttons um das Jahr zu w\u00e4hlen\n" + +"- Benutzen Sie die " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " Buttons um den Monat zu w\u00e4hlen\n" + +"- F\u00fcr eine Schnellauswahl halten Sie die Maustaste \u00fcber diesen Buttons fest."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Zeit ausw\u00e4hlen:\n" + +"- Klicken Sie auf die Teile der Uhrzeit, um diese zu erh\u00F6hen\n" + +"- oder klicken Sie mit festgehaltener Shift-Taste um diese zu verringern\n" + +"- oder klicken und festhalten f\u00fcr Schnellauswahl."; + +Calendar._TT["TOGGLE"] = "Ersten Tag der Woche w\u00e4hlen"; +Calendar._TT["PREV_YEAR"] = "Voriges Jahr (Festhalten f\u00fcr Schnellauswahl)"; +Calendar._TT["PREV_MONTH"] = "Voriger Monat (Festhalten f\u00fcr Schnellauswahl)"; +Calendar._TT["GO_TODAY"] = "Heute ausw\u00e4hlen"; +Calendar._TT["NEXT_MONTH"] = "N\u00e4chst. Monat (Festhalten f\u00fcr Schnellauswahl)"; +Calendar._TT["NEXT_YEAR"] = "N\u00e4chst. Jahr (Festhalten f\u00fcr Schnellauswahl)"; +Calendar._TT["SEL_DATE"] = "Datum ausw\u00e4hlen"; +Calendar._TT["DRAG_TO_MOVE"] = "Zum Bewegen festhalten"; +Calendar._TT["PART_TODAY"] = " (Heute)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Woche beginnt mit %s "; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Schlie\u00dfen"; +Calendar._TT["TODAY"] = "Heute"; +Calendar._TT["TIME_PART"] = "(Shift-)Klick oder Festhalten und Ziehen um den Wert zu \u00e4ndern"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "Zeit:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-du.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-du.js new file mode 100644 index 0000000..2200448 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-du.js @@ -0,0 +1,45 @@ +// ** I18N +Calendar._DN = new Array +("Zondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrijdag", + "Zaterdag", + "Zondag"); +Calendar._MN = new Array +("Januari", + "Februari", + "Maart", + "April", + "Mei", + "Juni", + "Juli", + "Augustus", + "September", + "Oktober", + "November", + "December"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["TOGGLE"] = "Toggle startdag van de week"; +Calendar._TT["PREV_YEAR"] = "Vorig jaar (indrukken voor menu)"; +Calendar._TT["PREV_MONTH"] = "Vorige month (indrukken voor menu)"; +Calendar._TT["GO_TODAY"] = "Naar Vandaag"; +Calendar._TT["NEXT_MONTH"] = "Volgende Maand (indrukken voor menu)"; +Calendar._TT["NEXT_YEAR"] = "Volgend jaar (indrukken voor menu)"; +Calendar._TT["SEL_DATE"] = "Selecteer datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Sleep om te verplaatsen"; +Calendar._TT["PART_TODAY"] = " (vandaag)"; +Calendar._TT["MON_FIRST"] = "Toon Maandag eerst"; +Calendar._TT["SUN_FIRST"] = "Toon Zondag eerst"; +Calendar._TT["CLOSE"] = "Sluiten"; +Calendar._TT["TODAY"] = "Vandaag"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "y-mm-dd"; +Calendar._TT["TT_DATE_FORMAT"] = "D, M d"; + +Calendar._TT["WK"] = "wk"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-el.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-el.js new file mode 100644 index 0000000..43a9b2c --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-el.js @@ -0,0 +1,89 @@ +// ** I18N +Calendar._DN = new Array +("ΚυÏιακή", + "ΔευτέÏα", + "ΤÏίτη", + "ΤετάÏτη", + "Πέμπτη", + "ΠαÏασκευή", + "Σάββατο", + "ΚυÏιακή"); + +Calendar._SDN = new Array +("Κυ", + "Δε", + "TÏ", + "Τε", + "Πε", + "Πα", + "Σα", + "Κυ"); + +Calendar._MN = new Array +("ΙανουάÏιος", + "ΦεβÏουάÏιος", + "ΜάÏτιος", + "ΑπÏίλιος", + "Μάϊος", + "ΙοÏνιος", + "ΙοÏλιος", + "ΑÏγουστος", + "ΣεπτέμβÏιος", + "ΟκτώβÏιος", + "ÎοέμβÏιος", + "ΔεκέμβÏιος"); + +Calendar._SMN = new Array +("Ιαν", + "Φεβ", + "ΜαÏ", + "ΑπÏ", + "Μαι", + "Ιουν", + "Ιουλ", + "Αυγ", + "Σεπ", + "Οκτ", + "Îοε", + "Δεκ"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Για το ημεÏολόγιο"; + +Calendar._TT["ABOUT"] = +"Επιλογέας ημεÏομηνίας/ÏŽÏας σε DHTML\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Για τελευταία έκδοση: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Επιλογή ημεÏομηνίας:\n" + +"- ΧÏησιμοποιείστε τα κουμπιά \xab, \xbb για επιλογή έτους\n" + +"- ΧÏησιμοποιείστε τα κουμπιά " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " για επιλογή μήνα\n" + +"- ΚÏατήστε κουμπί Ï€Î¿Î½Ï„Î¹ÎºÎ¿Ï Ï€Î±Ï„Î·Î¼Î­Î½Î¿ στα παÏαπάνω κουμπιά για πιο γÏήγοÏη επιλογή."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Επιλογή ÏŽÏας:\n" + +"- Κάντε κλικ σε ένα από τα μέÏη της ÏŽÏας για αÏξηση\n" + +"- ή Shift-κλικ για μείωση\n" + +"- ή κλικ και μετακίνηση για πιο γÏήγοÏη επιλογή."; +Calendar._TT["TOGGLE"] = "ΜπάÏα Ï€Ïώτης ημέÏας της εβδομάδας"; +Calendar._TT["PREV_YEAR"] = "ΠÏοηγ. έτος (κÏατήστε για το μενοÏ)"; +Calendar._TT["PREV_MONTH"] = "ΠÏοηγ. μήνας (κÏατήστε για το μενοÏ)"; +Calendar._TT["GO_TODAY"] = "ΣήμεÏα"; +Calendar._TT["NEXT_MONTH"] = "Επόμενος μήνας (κÏατήστε για το μενοÏ)"; +Calendar._TT["NEXT_YEAR"] = "Επόμενο έτος (κÏατήστε για το μενοÏ)"; +Calendar._TT["SEL_DATE"] = "Επιλέξτε ημεÏομηνία"; +Calendar._TT["DRAG_TO_MOVE"] = "ΣÏÏτε για να μετακινήσετε"; +Calendar._TT["PART_TODAY"] = " (σήμεÏα)"; +Calendar._TT["MON_FIRST"] = "Εμφάνιση ΔευτέÏας Ï€Ïώτα"; +Calendar._TT["SUN_FIRST"] = "Εμφάνιση ΚυÏιακής Ï€Ïώτα"; +Calendar._TT["CLOSE"] = "Κλείσιμο"; +Calendar._TT["TODAY"] = "ΣήμεÏα"; +Calendar._TT["TIME_PART"] = "(Shift-)κλικ ή μετακίνηση για αλλαγή"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y"; +Calendar._TT["TT_DATE_FORMAT"] = "D, d M"; + +Calendar._TT["WK"] = "εβδ"; + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-en.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-en.js new file mode 100644 index 0000000..6aa07a8 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-en.js @@ -0,0 +1,129 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat", + "Sun"); + +// First day of the week. "0" means display Sunday first, "1" means display +// Monday first, etc. +Calendar._FD = 0; + +// full month names +Calendar._MN = new Array +("January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "About the calendar"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Date selection:\n" + +"- Use the \xab, \xbb buttons to select year\n" + +"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" + +"- Hold mouse button on any of the above buttons for faster selection."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Time selection:\n" + +"- Click on any of the time parts to increase it\n" + +"- or Shift-click to decrease it\n" + +"- or click and drag for faster selection."; + +Calendar._TT["PREV_YEAR"] = "Prev. year (hold for menu)"; +Calendar._TT["PREV_MONTH"] = "Prev. month (hold for menu)"; +Calendar._TT["GO_TODAY"] = "Go Today"; +Calendar._TT["NEXT_MONTH"] = "Next month (hold for menu)"; +Calendar._TT["NEXT_YEAR"] = "Next year (hold for menu)"; +Calendar._TT["SEL_DATE"] = "Select date"; +Calendar._TT["DRAG_TO_MOVE"] = "Drag to move"; +Calendar._TT["PART_TODAY"] = " (today)"; +Calendar._TT["GO_NONE"] = "Don't enter in a date"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Display %s first"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Close"; +Calendar._TT["TODAY"] = "Today"; +Calendar._TT["NONE"] = "None"; +Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "Time:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-es.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-es.js new file mode 100644 index 0000000..19c1b30 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-es.js @@ -0,0 +1,129 @@ +// ** I18N + +// Calendar ES (spanish) language +// Author: Mihai Bazon, +// Updater: Servilio Afre Puentes +// Updated: 2004-06-03 +// Encoding: utf-8 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Domingo", + "Lunes", + "Martes", + "Miércoles", + "Jueves", + "Viernes", + "Sábado", + "Domingo"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Dom", + "Lun", + "Mar", + "Mié", + "Jue", + "Vie", + "Sáb", + "Dom"); + +// First day of the week. "0" means display Sunday first, "1" means display +// Monday first, etc. +Calendar._FD = 1; + +// full month names +Calendar._MN = new Array +("Enero", + "Febrero", + "Marzo", + "Abril", + "Mayo", + "Junio", + "Julio", + "Agosto", + "Septiembre", + "Octubre", + "Noviembre", + "Diciembre"); + +// short month names +Calendar._SMN = new Array +("Ene", + "Feb", + "Mar", + "Abr", + "May", + "Jun", + "Jul", + "Ago", + "Sep", + "Oct", + "Nov", + "Dic"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Acerca del calendario"; + +Calendar._TT["ABOUT"] = +"Selector DHTML de Fecha/Hora\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Para conseguir la última versión visite: http://www.dynarch.com/projects/calendar/\n" + +"Distribuido bajo licencia GNU LGPL. Visite http://gnu.org/licenses/lgpl.html para más detalles." + +"\n\n" + +"Selección de fecha:\n" + +"- Use los botones \xab, \xbb para seleccionar el año\n" + +"- Use los botones " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para seleccionar el mes\n" + +"- Mantenga pulsado el ratón en cualquiera de estos botones para una selección rápida."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Selección de hora:\n" + +"- Pulse en cualquiera de las partes de la hora para incrementarla\n" + +"- o pulse las mayúsculas mientras hace clic para decrementarla\n" + +"- o haga clic y arrastre el ratón para una selección más rápida."; + +Calendar._TT["PREV_YEAR"] = "Año anterior (mantener para menú)"; +Calendar._TT["PREV_MONTH"] = "Mes anterior (mantener para menú)"; +Calendar._TT["GO_TODAY"] = "Ir a hoy"; +Calendar._TT["NEXT_MONTH"] = "Mes siguiente (mantener para menú)"; +Calendar._TT["NEXT_YEAR"] = "Año siguiente (mantener para menú)"; +Calendar._TT["SEL_DATE"] = "Seleccionar fecha"; +Calendar._TT["DRAG_TO_MOVE"] = "Arrastrar para mover"; +Calendar._TT["PART_TODAY"] = " (hoy)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Hacer %s primer día de la semana"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Cerrar"; +Calendar._TT["TODAY"] = "Hoy"; +Calendar._TT["TIME_PART"] = "(Mayúscula-)Clic o arrastre para cambiar valor"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%A, %e de %B de %Y"; + +Calendar._TT["WK"] = "sem"; +Calendar._TT["TIME"] = "Hora:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-fi.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-fi.js new file mode 100644 index 0000000..328eabb --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-fi.js @@ -0,0 +1,98 @@ +// ** I18N + +// Calendar FI language (Finnish, Suomi) +// Author: Jarno Käyhkö, +// Encoding: UTF-8 +// Distributed under the same terms as the calendar itself. + +// full day names +Calendar._DN = new Array +("Sunnuntai", + "Maanantai", + "Tiistai", + "Keskiviikko", + "Torstai", + "Perjantai", + "Lauantai", + "Sunnuntai"); + +// short day names +Calendar._SDN = new Array +("Su", + "Ma", + "Ti", + "Ke", + "To", + "Pe", + "La", + "Su"); + +// full month names +Calendar._MN = new Array +("Tammikuu", + "Helmikuu", + "Maaliskuu", + "Huhtikuu", + "Toukokuu", + "Kesäkuu", + "Heinäkuu", + "Elokuu", + "Syyskuu", + "Lokakuu", + "Marraskuu", + "Joulukuu"); + +// short month names +Calendar._SMN = new Array +("Tam", + "Hel", + "Maa", + "Huh", + "Tou", + "Kes", + "Hei", + "Elo", + "Syy", + "Lok", + "Mar", + "Jou"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Tietoja kalenterista"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Uusin versio osoitteessa: http://www.dynarch.com/projects/calendar/\n" + +"Julkaistu GNU LGPL lisenssin alaisuudessa. Lisätietoja osoitteessa http://gnu.org/licenses/lgpl.html" + +"\n\n" + +"Päivämäärä valinta:\n" + +"- Käytä \xab, \xbb painikkeita valitaksesi vuosi\n" + +"- Käytä " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " painikkeita valitaksesi kuukausi\n" + +"- Pitämällä hiiren painiketta minkä tahansa yllä olevan painikkeen kohdalla, saat näkyviin valikon nopeampaan siirtymiseen."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Ajan valinta:\n" + +"- Klikkaa kellonajan numeroita lisätäksesi aikaa\n" + +"- tai pitämällä Shift-näppäintä pohjassa saat aikaa taaksepäin\n" + +"- tai klikkaa ja pidä hiiren painike pohjassa sekä liikuta hiirtä muuttaaksesi aikaa nopeasti eteen- ja taaksepäin."; + +Calendar._TT["PREV_YEAR"] = "Edell. vuosi (paina hetki, näet valikon)"; +Calendar._TT["PREV_MONTH"] = "Edell. kuukausi (paina hetki, näet valikon)"; +Calendar._TT["GO_TODAY"] = "Siirry tähän päivään"; +Calendar._TT["NEXT_MONTH"] = "Seur. kuukausi (paina hetki, näet valikon)"; +Calendar._TT["NEXT_YEAR"] = "Seur. vuosi (paina hetki, näet valikon)"; +Calendar._TT["SEL_DATE"] = "Valitse päivämäärä"; +Calendar._TT["DRAG_TO_MOVE"] = "Siirrä kalenterin paikkaa"; +Calendar._TT["PART_TODAY"] = " (tänään)"; +Calendar._TT["MON_FIRST"] = "Näytä maanantai ensimmäisenä"; +Calendar._TT["SUN_FIRST"] = "Näytä sunnuntai ensimmäisenä"; +Calendar._TT["CLOSE"] = "Sulje"; +Calendar._TT["TODAY"] = "Tänään"; +Calendar._TT["TIME_PART"] = "(Shift-) Klikkaa tai liikuta muuttaaksesi aikaa"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%d.%m.%Y"; + +Calendar._TT["WK"] = "Vko"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-fr.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-fr.js new file mode 100644 index 0000000..b003a65 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-fr.js @@ -0,0 +1,129 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Encoding: UTF-8 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// Translator: André Liechti, (2006-01-04) from scratch for version 1.x + +// full day names +Calendar._DN = new Array +("Dimanche", + "Lundi", + "Mardi", + "Mercredi", + "Jeudi", + "Vendredi", + "Samedi", + "Dimanche"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Dim", + "Lun", + "Mar", + "Mer", + "Jeu", + "Ven", + "Sam", + "Dim"); + +// First day of the week. "0" means display Sunday first, "1" means display +// Monday first, etc. +Calendar._FD = 1; + +// full month names +Calendar._MN = new Array +("Janvier", + "Février", + "Mars", + "Avril", + "Mai", + "Juin", + "Juillet", + "Août", + "Septembre", + "Octobre", + "Novembre", + "Décembre"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Fév", + "Mar", + "Avr", + "Mai", + "Juin", + "Juil", + "Aou", + "Sep", + "Oct", + "Nov", + "Déc"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "À propos du calendrier"; + +Calendar._TT["ABOUT"] = +"Sélecteur DHTML de date/heure\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Pour la version actuelle, visitez: http://www.dynarch.com/projects/calendar/\n" + +"Distribué sous licence GNU LGPL. Voir http://gnu.org/licenses/lgpl.html pour les détails." + "\n(licence traduite en français: http://www.rodage.org/lgpl.fr.html)" + +"\n\n" + +"Sélection de la date:\n" + +"- Utiliser les boutons \xab, \xbb pour sélectionner l'année\n" + +"- Utiliser les boutons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pour sélectionner le mois\n" + +"- En conservant pressé le bouton de la souris sur l'un de ces boutons, la sélection devient plus rapide."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Sélection de l\'heure:\n" + +"- Cliquer sur l'une des parties du temps pour l'augmenter\n" + +"- ou Maj-clic pour le diminuer\n" + +"- ou faire un cliquer-déplacer horizontal pour une modification plus rapide."; + +Calendar._TT["PREV_YEAR"] = "Année préc. (maintenir pour afficher menu)"; +Calendar._TT["PREV_MONTH"] = "Mois préc. (maintenir pour afficher menu)"; +Calendar._TT["GO_TODAY"] = "Atteindre la date du jour"; +Calendar._TT["NEXT_MONTH"] = "Mois suiv. (maintenir pour afficher menu)"; +Calendar._TT["NEXT_YEAR"] = "Année suiv. (maintenir pour afficher menu)"; +Calendar._TT["SEL_DATE"] = "Sélectionner une date"; +Calendar._TT["DRAG_TO_MOVE"] = "Glisser pour déplacer"; +Calendar._TT["PART_TODAY"] = " (aujourd'hui)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Afficher %s en premier"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Fermer"; +Calendar._TT["TODAY"] = "Aujourd'hui"; +Calendar._TT["TIME_PART"] = "(Maj-)Clic ou glisser pour changer la valeur"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%A, %e %B"; + +Calendar._TT["WK"] = "sem."; +Calendar._TT["TIME"] = "Heure:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-he-utf8.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-he-utf8.js new file mode 100644 index 0000000..7861217 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-he-utf8.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar EN language +// Author: Idan Sofer, +// Encoding: UTF-8 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("ר×שון", + "שני", + "שלישי", + "רביעי", + "חמישי", + "שישי", + "שבת", + "ר×שון"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("×", + "ב", + "×’", + "ד", + "×”", + "ו", + "ש", + "×"); + +// full month names +Calendar._MN = new Array +("ינו×ר", + "פברו×ר", + "מרץ", + "×פריל", + "מ××™", + "יוני", + "יולי", + "×וגוסט", + "ספטמבר", + "×וקטובר", + "נובמבר", + "דצמבר"); + +// short month names +Calendar._SMN = new Array +("×™× ×", + "פבר", + "מרץ", + "×פר", + "מ××™", + "יונ", + "יול", + "×וג", + "ספט", + "×וק", + "נוב", + "דצמ"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "×ודות השנתון"; + +Calendar._TT["ABOUT"] = +"בחרן ת×ריך/שעה DHTML\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"×”×’×™×¨×¡× ×”×חרונה זמינה ב: http://www.dynarch.com/projects/calendar/\n" + +"מופץ תחת זיכיון ×” GNU LGPL. עיין ב http://gnu.org/licenses/lgpl.html ×œ×¤×¨×˜×™× × ×•×¡×¤×™×." + +"\n\n" + +בחירת ת×ריך:\n" + +"- השתמש ×‘×›×¤×ª×•×¨×™× \xab, \xbb לבחירת שנה\n" + +"- השתמש ×‘×›×¤×ª×•×¨×™× " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " לבחירת חודש\n" + +"- החזק העכבר לחוץ מעל ×”×›×¤×ª×•×¨×™× ×”×ž×•×–×›×¨×™× ×œ×¢×™×œ לבחירה מהירה יותר."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"בחירת זמן:\n" + +"- לחץ על כל ×חד מחלקי הזמן כדי להוסיף\n" + +"- ×ו shift בשילוב ×¢× ×œ×—×™×¦×” כדי להחסיר\n" + +"- ×ו לחץ וגרור לפעולה מהירה יותר."; + +Calendar._TT["PREV_YEAR"] = "שנה קודמת - החזק לקבלת תפריט"; +Calendar._TT["PREV_MONTH"] = "חודש ×§×•×“× - החזק לקבלת תפריט"; +Calendar._TT["GO_TODAY"] = "עבור להיו×"; +Calendar._TT["NEXT_MONTH"] = "חודש ×”×‘× - החזק לתפריט"; +Calendar._TT["NEXT_YEAR"] = "שנה הב××” - החזק לתפריט"; +Calendar._TT["SEL_DATE"] = "בחר ת×ריך"; +Calendar._TT["DRAG_TO_MOVE"] = "גרור להזזה"; +Calendar._TT["PART_TODAY"] = " )היו×("; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "הצג %s קוד×"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "6"; + +Calendar._TT["CLOSE"] = "סגור"; +Calendar._TT["TODAY"] = "היו×"; +Calendar._TT["TIME_PART"] = "(שיפט-)לחץ וגרור כדי לשנות ערך"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "שעה::"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-he.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-he.js new file mode 100644 index 0000000..7861217 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-he.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar EN language +// Author: Idan Sofer, +// Encoding: UTF-8 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("ר×שון", + "שני", + "שלישי", + "רביעי", + "חמישי", + "שישי", + "שבת", + "ר×שון"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("×", + "ב", + "×’", + "ד", + "×”", + "ו", + "ש", + "×"); + +// full month names +Calendar._MN = new Array +("ינו×ר", + "פברו×ר", + "מרץ", + "×פריל", + "מ××™", + "יוני", + "יולי", + "×וגוסט", + "ספטמבר", + "×וקטובר", + "נובמבר", + "דצמבר"); + +// short month names +Calendar._SMN = new Array +("×™× ×", + "פבר", + "מרץ", + "×פר", + "מ××™", + "יונ", + "יול", + "×וג", + "ספט", + "×וק", + "נוב", + "דצמ"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "×ודות השנתון"; + +Calendar._TT["ABOUT"] = +"בחרן ת×ריך/שעה DHTML\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"×”×’×™×¨×¡× ×”×חרונה זמינה ב: http://www.dynarch.com/projects/calendar/\n" + +"מופץ תחת זיכיון ×” GNU LGPL. עיין ב http://gnu.org/licenses/lgpl.html ×œ×¤×¨×˜×™× × ×•×¡×¤×™×." + +"\n\n" + +בחירת ת×ריך:\n" + +"- השתמש ×‘×›×¤×ª×•×¨×™× \xab, \xbb לבחירת שנה\n" + +"- השתמש ×‘×›×¤×ª×•×¨×™× " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " לבחירת חודש\n" + +"- החזק העכבר לחוץ מעל ×”×›×¤×ª×•×¨×™× ×”×ž×•×–×›×¨×™× ×œ×¢×™×œ לבחירה מהירה יותר."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"בחירת זמן:\n" + +"- לחץ על כל ×חד מחלקי הזמן כדי להוסיף\n" + +"- ×ו shift בשילוב ×¢× ×œ×—×™×¦×” כדי להחסיר\n" + +"- ×ו לחץ וגרור לפעולה מהירה יותר."; + +Calendar._TT["PREV_YEAR"] = "שנה קודמת - החזק לקבלת תפריט"; +Calendar._TT["PREV_MONTH"] = "חודש ×§×•×“× - החזק לקבלת תפריט"; +Calendar._TT["GO_TODAY"] = "עבור להיו×"; +Calendar._TT["NEXT_MONTH"] = "חודש ×”×‘× - החזק לתפריט"; +Calendar._TT["NEXT_YEAR"] = "שנה הב××” - החזק לתפריט"; +Calendar._TT["SEL_DATE"] = "בחר ת×ריך"; +Calendar._TT["DRAG_TO_MOVE"] = "גרור להזזה"; +Calendar._TT["PART_TODAY"] = " )היו×("; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "הצג %s קוד×"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "6"; + +Calendar._TT["CLOSE"] = "סגור"; +Calendar._TT["TODAY"] = "היו×"; +Calendar._TT["TIME_PART"] = "(שיפט-)לחץ וגרור כדי לשנות ערך"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "שעה::"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hr-old.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hr-old.js new file mode 100644 index 0000000000000000000000000000000000000000..6c27f60c4f8d416145e316bdb92e455a04a26fc4 GIT binary patch literal 3088 zcmcJRZEq4$5QV3oOpN^xn|@MLX``QvFOd|BwX`K&TD8VBv|!x=g_MG!Mt{2coVhHp zKpTvj4cxc6GiS~{b9aCJT(gH3*@j(O+p2bD3I7+&G`&5u9_^Xcnfc6GbJ%NRA7TB) z#|3+172C0rd#bwCh1J+8t3EcD)@66wJ+E8Np7MLl+OpmC_<7>UTkyM$eGl6lj3p>PheZ0=Ww2=H?b(l|o^zMwpyIsrK|Sp&cKx5sS&@!9bLPe8y!ma|m&W@1t~03i zVNK_Gk(rhME=;!FTP?E|GvDK^rJ*FVQYO0UUUgnYdn=YQt!h}~kw)7*(yTJ*-gpib zZl$2fZ}$C`^OD_1B2{e9iaaHI&FIr`ue2#lE!UXvs;0s%sav4I+Bvf=`W^bqOTsRd z3#r;*y|Ms;vh5T5kb3$+n`bnQL#ow1S#y3O?q>A^Tan$T-(yY~JD^USqb_J0%v{q( z;0&xk!1v7>PB|GP+JT*2IC^s{CPfZR>2^A0^zShhL2~S;Re+-p89ZCghHfF{s#~oA zBX>BH^wbu~dKdQJ6XBS*+Pth|)R*2l^`ZCwo%I;gJZ(%PQuhB_8!;@E{O-@gRkmif zTx}=tA5^GnP#vi5TMH?#fco=PV>sz>5{FY!RGF#9LuCf#>z3-FK8=FvRSn}B)_YO4 zdX0swRHcjPqU<#(UFfcuRiD(Z+ew)YxVaYb85DMGo3=&9F`lPuK0(7(ZvHg4+4rPw zp(=4h)$5DrPt+dsC9+FSiy_EH7n6SzdjkdSk#$x*N3ImTX>`7eusHub3i#1Y&>i_0 zzeR!?rOVGAr{ytkf1BtnQ2^`agzClH9w)bhHnL||LkEvgdyD_U2*JFsr}VZ}t8b}L hPd9rmV52WTMaX%C+(ZQBcw3Zrwhfx``>it4|8LNz+, June 2003. +* Feel free to use this script under the terms of the GNU Lesser General +* Public License, as long as you do not remove or alter this notice. +*/ +Calendar._DN = new Array +("Nedjelja", + "Ponedjeljak", + "Utorak", + "Srijeda", + "ÄŒetvrtak", + "Petak", + "Subota", + "Nedjelja"); +Calendar._MN = new Array +("SijeÄanj", + "VeljaÄa", + "Ožujak", + "Travanj", + "Svibanj", + "Lipanj", + "Srpanj", + "Kolovoz", + "Rujan", + "Listopad", + "Studeni", + "Prosinac"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["TOGGLE"] = "Promjeni dan s kojim poÄinje tjedan"; +Calendar._TT["PREV_YEAR"] = "Prethodna godina (dugi pritisak za meni)"; +Calendar._TT["PREV_MONTH"] = "Prethodni mjesec (dugi pritisak za meni)"; +Calendar._TT["GO_TODAY"] = "Idi na tekući dan"; +Calendar._TT["NEXT_MONTH"] = "Slijedeći mjesec (dugi pritisak za meni)"; +Calendar._TT["NEXT_YEAR"] = "Slijedeća godina (dugi pritisak za meni)"; +Calendar._TT["SEL_DATE"] = "Izaberite datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Pritisni i povuci za promjenu pozicije"; +Calendar._TT["PART_TODAY"] = " (today)"; +Calendar._TT["MON_FIRST"] = "Prikaži ponedjeljak kao prvi dan"; +Calendar._TT["SUN_FIRST"] = "Prikaži nedjelju kao prvi dan"; +Calendar._TT["CLOSE"] = "Zatvori"; +Calendar._TT["TODAY"] = "Danas"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y"; +Calendar._TT["TT_DATE_FORMAT"] = "DD, dd.mm.y"; + +Calendar._TT["WK"] = "Tje"; \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hr.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hr.js new file mode 100644 index 0000000..d569cfd --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hr.js @@ -0,0 +1,49 @@ +/* Croatian language file for the DHTML Calendar version 0.9.2 +* Author Krunoslav Zubrinic , June 2003. +* Feel free to use this script under the terms of the GNU Lesser General +* Public License, as long as you do not remove or alter this notice. +*/ +Calendar._DN = new Array +("Nedjelja", + "Ponedjeljak", + "Utorak", + "Srijeda", + "ÄŒetvrtak", + "Petak", + "Subota", + "Nedjelja"); +Calendar._MN = new Array +("SijeÄanj", + "VeljaÄa", + "Ožujak", + "Travanj", + "Svibanj", + "Lipanj", + "Srpanj", + "Kolovoz", + "Rujan", + "Listopad", + "Studeni", + "Prosinac"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["TOGGLE"] = "Promjeni dan s kojim poÄinje tjedan"; +Calendar._TT["PREV_YEAR"] = "Prethodna godina (dugi pritisak za meni)"; +Calendar._TT["PREV_MONTH"] = "Prethodni mjesec (dugi pritisak za meni)"; +Calendar._TT["GO_TODAY"] = "Idi na tekući dan"; +Calendar._TT["NEXT_MONTH"] = "Slijedeći mjesec (dugi pritisak za meni)"; +Calendar._TT["NEXT_YEAR"] = "Slijedeća godina (dugi pritisak za meni)"; +Calendar._TT["SEL_DATE"] = "Izaberite datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Pritisni i povuci za promjenu pozicije"; +Calendar._TT["PART_TODAY"] = " (today)"; +Calendar._TT["MON_FIRST"] = "Prikaži ponedjeljak kao prvi dan"; +Calendar._TT["SUN_FIRST"] = "Prikaži nedjelju kao prvi dan"; +Calendar._TT["CLOSE"] = "Zatvori"; +Calendar._TT["TODAY"] = "Danas"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y"; +Calendar._TT["TT_DATE_FORMAT"] = "DD, dd.mm.y"; + +Calendar._TT["WK"] = "Tje"; \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hu.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hu.js new file mode 100644 index 0000000..f5bf057 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-hu.js @@ -0,0 +1,124 @@ +// ** I18N + +// Calendar HU language +// Author: ??? +// Modifier: KARASZI Istvan, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Vasárnap", + "Hétfõ", + "Kedd", + "Szerda", + "Csütörtök", + "Péntek", + "Szombat", + "Vasárnap"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("v", + "h", + "k", + "sze", + "cs", + "p", + "szo", + "v"); + +// full month names +Calendar._MN = new Array +("január", + "február", + "március", + "április", + "május", + "június", + "július", + "augusztus", + "szeptember", + "október", + "november", + "december"); + +// short month names +Calendar._SMN = new Array +("jan", + "feb", + "már", + "ápr", + "máj", + "jún", + "júl", + "aug", + "sze", + "okt", + "nov", + "dec"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "A kalendáriumról"; + +Calendar._TT["ABOUT"] = +"DHTML dátum/idõ kiválasztó\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"a legfrissebb verzió megtalálható: http://www.dynarch.com/projects/calendar/\n" + +"GNU LGPL alatt terjesztve. Lásd a http://gnu.org/licenses/lgpl.html oldalt a részletekhez." + +"\n\n" + +"Dátum választás:\n" + +"- használja a \xab, \xbb gombokat az év kiválasztásához\n" + +"- használja a " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " gombokat a hónap kiválasztásához\n" + +"- tartsa lenyomva az egérgombot a gyors választáshoz."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Idõ választás:\n" + +"- kattintva növelheti az idõt\n" + +"- shift-tel kattintva csökkentheti\n" + +"- lenyomva tartva és húzva gyorsabban kiválaszthatja."; + +Calendar._TT["PREV_YEAR"] = "Elõzõ év (tartsa nyomva a menühöz)"; +Calendar._TT["PREV_MONTH"] = "Elõzõ hónap (tartsa nyomva a menühöz)"; +Calendar._TT["GO_TODAY"] = "Mai napra ugrás"; +Calendar._TT["NEXT_MONTH"] = "Köv. hónap (tartsa nyomva a menühöz)"; +Calendar._TT["NEXT_YEAR"] = "Köv. év (tartsa nyomva a menühöz)"; +Calendar._TT["SEL_DATE"] = "Válasszon dátumot"; +Calendar._TT["DRAG_TO_MOVE"] = "Húzza a mozgatáshoz"; +Calendar._TT["PART_TODAY"] = " (ma)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "%s legyen a hét elsõ napja"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Bezár"; +Calendar._TT["TODAY"] = "Ma"; +Calendar._TT["TIME_PART"] = "(Shift-)Klikk vagy húzás az érték változtatásához"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%b %e, %a"; + +Calendar._TT["WK"] = "hét"; +Calendar._TT["TIME"] = "idõ:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-it.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-it.js new file mode 100644 index 0000000..7f84cde --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-it.js @@ -0,0 +1,124 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Translator: Fabio Di Bernardini, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Domenica", + "Lunedì", + "Martedì", + "Mercoledì", + "Giovedì", + "Venerdì", + "Sabato", + "Domenica"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Dom", + "Lun", + "Mar", + "Mer", + "Gio", + "Ven", + "Sab", + "Dom"); + +// full month names +Calendar._MN = new Array +("Gennaio", + "Febbraio", + "Marzo", + "Aprile", + "Maggio", + "Giugno", + "Luglio", + "Augosto", + "Settembre", + "Ottobre", + "Novembre", + "Dicembre"); + +// short month names +Calendar._SMN = new Array +("Gen", + "Feb", + "Mar", + "Apr", + "Mag", + "Giu", + "Lug", + "Ago", + "Set", + "Ott", + "Nov", + "Dic"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Informazioni sul calendario"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Per gli aggiornamenti: http://www.dynarch.com/projects/calendar/\n" + +"Distribuito sotto licenza GNU LGPL. Vedi http://gnu.org/licenses/lgpl.html per i dettagli." + +"\n\n" + +"Selezione data:\n" + +"- Usa \xab, \xbb per selezionare l'anno\n" + +"- Usa " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per i mesi\n" + +"- Tieni premuto a lungo il mouse per accedere alle funzioni di selezione veloce."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Selezione orario:\n" + +"- Clicca sul numero per incrementarlo\n" + +"- o Shift+click per decrementarlo\n" + +"- o click e sinistra o destra per variarlo."; + +Calendar._TT["PREV_YEAR"] = "Anno prec.(clicca a lungo per il menù)"; +Calendar._TT["PREV_MONTH"] = "Mese prec. (clicca a lungo per il menù)"; +Calendar._TT["GO_TODAY"] = "Oggi"; +Calendar._TT["NEXT_MONTH"] = "Pross. mese (clicca a lungo per il menù)"; +Calendar._TT["NEXT_YEAR"] = "Pross. anno (clicca a lungo per il menù)"; +Calendar._TT["SEL_DATE"] = "Seleziona data"; +Calendar._TT["DRAG_TO_MOVE"] = "Trascina per spostarlo"; +Calendar._TT["PART_TODAY"] = " (oggi)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Mostra prima %s"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Chiudi"; +Calendar._TT["TODAY"] = "Oggi"; +Calendar._TT["TIME_PART"] = "(Shift-)Click o trascina per cambiare il valore"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a:%b:%e"; + +Calendar._TT["WK"] = "set"; +Calendar._TT["TIME"] = "Ora:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-jp.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-jp.js new file mode 100644 index 0000000..3bca7eb --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-jp.js @@ -0,0 +1,45 @@ +// ** I18N +Calendar._DN = new Array +("“ú", + "ŒŽ", + "‰Î", + "…", + "–Ø", + "‹à", + "“y", + "“ú"); +Calendar._MN = new Array +("1ŒŽ", + "2ŒŽ", + "3ŒŽ", + "4ŒŽ", + "5ŒŽ", + "6ŒŽ", + "7ŒŽ", + "8ŒŽ", + "9ŒŽ", + "10ŒŽ", + "11ŒŽ", + "12ŒŽ"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["TOGGLE"] = "T‚Ìʼn‚Ì—j“ú‚ðØ‚è‘Ö‚¦"; +Calendar._TT["PREV_YEAR"] = "‘O”N"; +Calendar._TT["PREV_MONTH"] = "‘OŒŽ"; +Calendar._TT["GO_TODAY"] = "¡“ú"; +Calendar._TT["NEXT_MONTH"] = "—‚ŒŽ"; +Calendar._TT["NEXT_YEAR"] = "—‚”N"; +Calendar._TT["SEL_DATE"] = "“ú•t‘I‘ð"; +Calendar._TT["DRAG_TO_MOVE"] = "ƒEƒBƒ“ƒhƒE‚̈ړ®"; +Calendar._TT["PART_TODAY"] = " (¡“ú)"; +Calendar._TT["MON_FIRST"] = "ŒŽ—j“ú‚ð擪‚É"; +Calendar._TT["SUN_FIRST"] = "“ú—j“ú‚ð擪‚É"; +Calendar._TT["CLOSE"] = "•Â‚¶‚é"; +Calendar._TT["TODAY"] = "¡“ú"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "y-mm-dd"; +Calendar._TT["TT_DATE_FORMAT"] = "%mŒŽ %d“ú (%a)"; + +Calendar._TT["WK"] = "T"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko-utf8.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko-utf8.js new file mode 100644 index 0000000..035dd74 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko-utf8.js @@ -0,0 +1,120 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Translation: Yourim Yi +// Encoding: EUC-KR +// lang : ko +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names + +Calendar._DN = new Array +("ì¼ìš”ì¼", + "월요ì¼", + "화요ì¼", + "수요ì¼", + "목요ì¼", + "금요ì¼", + "토요ì¼", + "ì¼ìš”ì¼"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("ì¼", + "ì›”", + "í™”", + "수", + "목", + "금", + "토", + "ì¼"); + +// full month names +Calendar._MN = new Array +("1ì›”", + "2ì›”", + "3ì›”", + "4ì›”", + "5ì›”", + "6ì›”", + "7ì›”", + "8ì›”", + "9ì›”", + "10ì›”", + "11ì›”", + "12ì›”"); + +// short month names +Calendar._SMN = new Array +("1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "calendar ì— ëŒ€í•´ì„œ"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"\n"+ +"최신 ë²„ì „ì„ ë°›ìœ¼ì‹œë ¤ë©´ http://www.dynarch.com/projects/calendar/ ì— ë°©ë¬¸í•˜ì„¸ìš”\n" + +"\n"+ +"GNU LGPL ë¼ì´ì„¼ìŠ¤ë¡œ ë°°í¬ë©ë‹ˆë‹¤. \n"+ +"ë¼ì´ì„¼ìŠ¤ì— 대한 ìžì„¸í•œ ë‚´ìš©ì€ http://gnu.org/licenses/lgpl.html ì„ ì½ìœ¼ì„¸ìš”." + +"\n\n" + +"날짜 ì„ íƒ:\n" + +"- ì—°ë„를 ì„ íƒí•˜ë ¤ë©´ \xab, \xbb ë²„íŠ¼ì„ ì‚¬ìš©í•©ë‹ˆë‹¤\n" + +"- ë‹¬ì„ ì„ íƒí•˜ë ¤ë©´ " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " ë²„íŠ¼ì„ ëˆ„ë¥´ì„¸ìš”\n" + +"- ê³„ì† ëˆ„ë¥´ê³  있으면 위 ê°’ë“¤ì„ ë¹ ë¥´ê²Œ ì„ íƒí•˜ì‹¤ 수 있습니다."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"시간 ì„ íƒ:\n" + +"- 마우스로 누르면 ì‹œê°„ì´ ì¦ê°€í•©ë‹ˆë‹¤\n" + +"- Shift 키와 함께 누르면 ê°ì†Œí•©ë‹ˆë‹¤\n" + +"- 누른 ìƒíƒœì—ì„œ 마우스를 움ì§ì´ë©´ 좀 ë” ë¹ ë¥´ê²Œ ê°’ì´ ë³€í•©ë‹ˆë‹¤.\n"; + +Calendar._TT["PREV_YEAR"] = "지난 í•´ (길게 누르면 목ë¡)"; +Calendar._TT["PREV_MONTH"] = "지난 달 (길게 누르면 목ë¡)"; +Calendar._TT["GO_TODAY"] = "오늘 날짜로"; +Calendar._TT["NEXT_MONTH"] = "ë‹¤ìŒ ë‹¬ (길게 누르면 목ë¡)"; +Calendar._TT["NEXT_YEAR"] = "ë‹¤ìŒ í•´ (길게 누르면 목ë¡)"; +Calendar._TT["SEL_DATE"] = "날짜를 ì„ íƒí•˜ì„¸ìš”"; +Calendar._TT["DRAG_TO_MOVE"] = "마우스 드래그로 ì´ë™ 하세요"; +Calendar._TT["PART_TODAY"] = " (오늘)"; +Calendar._TT["MON_FIRST"] = "월요ì¼ì„ í•œ ì£¼ì˜ ì‹œìž‘ ìš”ì¼ë¡œ"; +Calendar._TT["SUN_FIRST"] = "ì¼ìš”ì¼ì„ í•œ ì£¼ì˜ ì‹œìž‘ ìš”ì¼ë¡œ"; +Calendar._TT["CLOSE"] = "닫기"; +Calendar._TT["TODAY"] = "오늘"; +Calendar._TT["TIME_PART"] = "(Shift-)í´ë¦­ ë˜ëŠ” 드래그 하세요"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]"; + +Calendar._TT["WK"] = "주"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko.js new file mode 100644 index 0000000..035dd74 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko.js @@ -0,0 +1,120 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Translation: Yourim Yi +// Encoding: EUC-KR +// lang : ko +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names + +Calendar._DN = new Array +("ì¼ìš”ì¼", + "월요ì¼", + "화요ì¼", + "수요ì¼", + "목요ì¼", + "금요ì¼", + "토요ì¼", + "ì¼ìš”ì¼"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("ì¼", + "ì›”", + "í™”", + "수", + "목", + "금", + "토", + "ì¼"); + +// full month names +Calendar._MN = new Array +("1ì›”", + "2ì›”", + "3ì›”", + "4ì›”", + "5ì›”", + "6ì›”", + "7ì›”", + "8ì›”", + "9ì›”", + "10ì›”", + "11ì›”", + "12ì›”"); + +// short month names +Calendar._SMN = new Array +("1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "calendar ì— ëŒ€í•´ì„œ"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"\n"+ +"최신 ë²„ì „ì„ ë°›ìœ¼ì‹œë ¤ë©´ http://www.dynarch.com/projects/calendar/ ì— ë°©ë¬¸í•˜ì„¸ìš”\n" + +"\n"+ +"GNU LGPL ë¼ì´ì„¼ìŠ¤ë¡œ ë°°í¬ë©ë‹ˆë‹¤. \n"+ +"ë¼ì´ì„¼ìŠ¤ì— 대한 ìžì„¸í•œ ë‚´ìš©ì€ http://gnu.org/licenses/lgpl.html ì„ ì½ìœ¼ì„¸ìš”." + +"\n\n" + +"날짜 ì„ íƒ:\n" + +"- ì—°ë„를 ì„ íƒí•˜ë ¤ë©´ \xab, \xbb ë²„íŠ¼ì„ ì‚¬ìš©í•©ë‹ˆë‹¤\n" + +"- ë‹¬ì„ ì„ íƒí•˜ë ¤ë©´ " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " ë²„íŠ¼ì„ ëˆ„ë¥´ì„¸ìš”\n" + +"- ê³„ì† ëˆ„ë¥´ê³  있으면 위 ê°’ë“¤ì„ ë¹ ë¥´ê²Œ ì„ íƒí•˜ì‹¤ 수 있습니다."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"시간 ì„ íƒ:\n" + +"- 마우스로 누르면 ì‹œê°„ì´ ì¦ê°€í•©ë‹ˆë‹¤\n" + +"- Shift 키와 함께 누르면 ê°ì†Œí•©ë‹ˆë‹¤\n" + +"- 누른 ìƒíƒœì—ì„œ 마우스를 움ì§ì´ë©´ 좀 ë” ë¹ ë¥´ê²Œ ê°’ì´ ë³€í•©ë‹ˆë‹¤.\n"; + +Calendar._TT["PREV_YEAR"] = "지난 í•´ (길게 누르면 목ë¡)"; +Calendar._TT["PREV_MONTH"] = "지난 달 (길게 누르면 목ë¡)"; +Calendar._TT["GO_TODAY"] = "오늘 날짜로"; +Calendar._TT["NEXT_MONTH"] = "ë‹¤ìŒ ë‹¬ (길게 누르면 목ë¡)"; +Calendar._TT["NEXT_YEAR"] = "ë‹¤ìŒ í•´ (길게 누르면 목ë¡)"; +Calendar._TT["SEL_DATE"] = "날짜를 ì„ íƒí•˜ì„¸ìš”"; +Calendar._TT["DRAG_TO_MOVE"] = "마우스 드래그로 ì´ë™ 하세요"; +Calendar._TT["PART_TODAY"] = " (오늘)"; +Calendar._TT["MON_FIRST"] = "월요ì¼ì„ í•œ ì£¼ì˜ ì‹œìž‘ ìš”ì¼ë¡œ"; +Calendar._TT["SUN_FIRST"] = "ì¼ìš”ì¼ì„ í•œ ì£¼ì˜ ì‹œìž‘ ìš”ì¼ë¡œ"; +Calendar._TT["CLOSE"] = "닫기"; +Calendar._TT["TODAY"] = "오늘"; +Calendar._TT["TIME_PART"] = "(Shift-)í´ë¦­ ë˜ëŠ” 드래그 하세요"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]"; + +Calendar._TT["WK"] = "주"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko.old.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko.old.js new file mode 100644 index 0000000..8cddf58 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ko.old.js @@ -0,0 +1,120 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Translation: Yourim Yi +// Encoding: EUC-KR +// lang : ko +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names + +Calendar._DN = new Array +("ÀÏ¿äÀÏ", + "¿ù¿äÀÏ", + "È­¿äÀÏ", + "¼ö¿äÀÏ", + "¸ñ¿äÀÏ", + "±Ý¿äÀÏ", + "Åä¿äÀÏ", + "ÀÏ¿äÀÏ"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("ÀÏ", + "¿ù", + "È­", + "¼ö", + "¸ñ", + "±Ý", + "Åä", + "ÀÏ"); + +// full month names +Calendar._MN = new Array +("1¿ù", + "2¿ù", + "3¿ù", + "4¿ù", + "5¿ù", + "6¿ù", + "7¿ù", + "8¿ù", + "9¿ù", + "10¿ù", + "11¿ù", + "12¿ù"); + +// short month names +Calendar._SMN = new Array +("1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "calendar ¿¡ ´ëÇؼ­"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"\n"+ +"ÃֽŠ¹öÀüÀ» ¹ÞÀ¸½Ã·Á¸é http://www.dynarch.com/projects/calendar/ ¿¡ ¹æ¹®Çϼ¼¿ä\n" + +"\n"+ +"GNU LGPL ¶óÀ̼¾½º·Î ¹èÆ÷µË´Ï´Ù. \n"+ +"¶óÀ̼¾½º¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº http://gnu.org/licenses/lgpl.html À» ÀÐÀ¸¼¼¿ä." + +"\n\n" + +"³¯Â¥ ¼±ÅÃ:\n" + +"- ¿¬µµ¸¦ ¼±ÅÃÇÏ·Á¸é \xab, \xbb ¹öÆ°À» »ç¿ëÇÕ´Ï´Ù\n" + +"- ´ÞÀ» ¼±ÅÃÇÏ·Á¸é " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " ¹öÆ°À» ´©¸£¼¼¿ä\n" + +"- °è¼Ó ´©¸£°í ÀÖÀ¸¸é À§ °ªµéÀ» ºü¸£°Ô ¼±ÅÃÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"½Ã°£ ¼±ÅÃ:\n" + +"- ¸¶¿ì½º·Î ´©¸£¸é ½Ã°£ÀÌ Áõ°¡ÇÕ´Ï´Ù\n" + +"- Shift Å°¿Í ÇÔ²² ´©¸£¸é °¨¼ÒÇÕ´Ï´Ù\n" + +"- ´©¸¥ »óÅ¿¡¼­ ¸¶¿ì½º¸¦ ¿òÁ÷À̸é Á» ´õ ºü¸£°Ô °ªÀÌ º¯ÇÕ´Ï´Ù.\n"; + +Calendar._TT["PREV_YEAR"] = "Áö³­ ÇØ (±æ°Ô ´©¸£¸é ¸ñ·Ï)"; +Calendar._TT["PREV_MONTH"] = "Áö³­ ´Þ (±æ°Ô ´©¸£¸é ¸ñ·Ï)"; +Calendar._TT["GO_TODAY"] = "¿À´Ã ³¯Â¥·Î"; +Calendar._TT["NEXT_MONTH"] = "´ÙÀ½ ´Þ (±æ°Ô ´©¸£¸é ¸ñ·Ï)"; +Calendar._TT["NEXT_YEAR"] = "´ÙÀ½ ÇØ (±æ°Ô ´©¸£¸é ¸ñ·Ï)"; +Calendar._TT["SEL_DATE"] = "³¯Â¥¸¦ ¼±ÅÃÇϼ¼¿ä"; +Calendar._TT["DRAG_TO_MOVE"] = "¸¶¿ì½º µå·¡±×·Î À̵¿ Çϼ¼¿ä"; +Calendar._TT["PART_TODAY"] = " (¿À´Ã)"; +Calendar._TT["MON_FIRST"] = "¿ù¿äÀÏÀ» ÇÑ ÁÖÀÇ ½ÃÀÛ ¿äÀÏ·Î"; +Calendar._TT["SUN_FIRST"] = "ÀÏ¿äÀÏÀ» ÇÑ ÁÖÀÇ ½ÃÀÛ ¿äÀÏ·Î"; +Calendar._TT["CLOSE"] = "´Ý±â"; +Calendar._TT["TODAY"] = "¿À´Ã"; +Calendar._TT["TIME_PART"] = "(Shift-)Ŭ¸¯ ¶Ç´Â µå·¡±× Çϼ¼¿ä"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]"; + +Calendar._TT["WK"] = "ÁÖ"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt-utf8.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt-utf8.js new file mode 100644 index 0000000..d39653b --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt-utf8.js @@ -0,0 +1,114 @@ +// ** I18N + +// Calendar LT language +// Author: Martynas Majeris, +// Encoding: UTF-8 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Sekmadienis", + "Pirmadienis", + "Antradienis", + "TreÄiadienis", + "Ketvirtadienis", + "Pentadienis", + "Å eÅ¡tadienis", + "Sekmadienis"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Sek", + "Pir", + "Ant", + "Tre", + "Ket", + "Pen", + "Å eÅ¡", + "Sek"); + +// full month names +Calendar._MN = new Array +("Sausis", + "Vasaris", + "Kovas", + "Balandis", + "Gegužė", + "Birželis", + "Liepa", + "RugpjÅ«tis", + "RugsÄ—jis", + "Spalis", + "Lapkritis", + "Gruodis"); + +// short month names +Calendar._SMN = new Array +("Sau", + "Vas", + "Kov", + "Bal", + "Geg", + "Bir", + "Lie", + "Rgp", + "Rgs", + "Spa", + "Lap", + "Gru"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Apie kalendorių"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"NaujausiÄ… versijÄ… rasite: http://www.dynarch.com/projects/calendar/\n" + +"Platinamas pagal GNU LGPL licencijÄ…. Aplankykite http://gnu.org/licenses/lgpl.html" + +"\n\n" + +"Datos pasirinkimas:\n" + +"- Metų pasirinkimas: \xab, \xbb\n" + +"- MÄ—nesio pasirinkimas: " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "\n" + +"- Nuspauskite ir laikykite pelÄ—s klaviÅ¡Ä… greitesniam pasirinkimui."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Laiko pasirinkimas:\n" + +"- Spustelkite ant valandų arba minuÄių - skaiÄius padidÄ—s vienetu.\n" + +"- Jei spausite kartu su Shift, skaiÄius sumažės.\n" + +"- Greitam pasirinkimui spustelkite ir pajudinkite pelÄ™."; + +Calendar._TT["PREV_YEAR"] = "Ankstesni metai (laikykite, jei norite meniu)"; +Calendar._TT["PREV_MONTH"] = "Ankstesnis mÄ—nuo (laikykite, jei norite meniu)"; +Calendar._TT["GO_TODAY"] = "Pasirinkti Å¡iandienÄ…"; +Calendar._TT["NEXT_MONTH"] = "Kitas mÄ—nuo (laikykite, jei norite meniu)"; +Calendar._TT["NEXT_YEAR"] = "Kiti metai (laikykite, jei norite meniu)"; +Calendar._TT["SEL_DATE"] = "Pasirinkite datÄ…"; +Calendar._TT["DRAG_TO_MOVE"] = "Tempkite"; +Calendar._TT["PART_TODAY"] = " (Å¡iandien)"; +Calendar._TT["MON_FIRST"] = "Pirma savaitÄ—s diena - pirmadienis"; +Calendar._TT["SUN_FIRST"] = "Pirma savaitÄ—s diena - sekmadienis"; +Calendar._TT["CLOSE"] = "Uždaryti"; +Calendar._TT["TODAY"] = "Å iandien"; +Calendar._TT["TIME_PART"] = "Spustelkite arba tempkite jei norite pakeisti"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%A, %Y-%m-%d"; + +Calendar._TT["WK"] = "sav"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt.js new file mode 100644 index 0000000..d39653b --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt.js @@ -0,0 +1,114 @@ +// ** I18N + +// Calendar LT language +// Author: Martynas Majeris, +// Encoding: UTF-8 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Sekmadienis", + "Pirmadienis", + "Antradienis", + "TreÄiadienis", + "Ketvirtadienis", + "Pentadienis", + "Å eÅ¡tadienis", + "Sekmadienis"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Sek", + "Pir", + "Ant", + "Tre", + "Ket", + "Pen", + "Å eÅ¡", + "Sek"); + +// full month names +Calendar._MN = new Array +("Sausis", + "Vasaris", + "Kovas", + "Balandis", + "Gegužė", + "Birželis", + "Liepa", + "RugpjÅ«tis", + "RugsÄ—jis", + "Spalis", + "Lapkritis", + "Gruodis"); + +// short month names +Calendar._SMN = new Array +("Sau", + "Vas", + "Kov", + "Bal", + "Geg", + "Bir", + "Lie", + "Rgp", + "Rgs", + "Spa", + "Lap", + "Gru"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Apie kalendorių"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"NaujausiÄ… versijÄ… rasite: http://www.dynarch.com/projects/calendar/\n" + +"Platinamas pagal GNU LGPL licencijÄ…. Aplankykite http://gnu.org/licenses/lgpl.html" + +"\n\n" + +"Datos pasirinkimas:\n" + +"- Metų pasirinkimas: \xab, \xbb\n" + +"- MÄ—nesio pasirinkimas: " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "\n" + +"- Nuspauskite ir laikykite pelÄ—s klaviÅ¡Ä… greitesniam pasirinkimui."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Laiko pasirinkimas:\n" + +"- Spustelkite ant valandų arba minuÄių - skaiÄius padidÄ—s vienetu.\n" + +"- Jei spausite kartu su Shift, skaiÄius sumažės.\n" + +"- Greitam pasirinkimui spustelkite ir pajudinkite pelÄ™."; + +Calendar._TT["PREV_YEAR"] = "Ankstesni metai (laikykite, jei norite meniu)"; +Calendar._TT["PREV_MONTH"] = "Ankstesnis mÄ—nuo (laikykite, jei norite meniu)"; +Calendar._TT["GO_TODAY"] = "Pasirinkti Å¡iandienÄ…"; +Calendar._TT["NEXT_MONTH"] = "Kitas mÄ—nuo (laikykite, jei norite meniu)"; +Calendar._TT["NEXT_YEAR"] = "Kiti metai (laikykite, jei norite meniu)"; +Calendar._TT["SEL_DATE"] = "Pasirinkite datÄ…"; +Calendar._TT["DRAG_TO_MOVE"] = "Tempkite"; +Calendar._TT["PART_TODAY"] = " (Å¡iandien)"; +Calendar._TT["MON_FIRST"] = "Pirma savaitÄ—s diena - pirmadienis"; +Calendar._TT["SUN_FIRST"] = "Pirma savaitÄ—s diena - sekmadienis"; +Calendar._TT["CLOSE"] = "Uždaryti"; +Calendar._TT["TODAY"] = "Å iandien"; +Calendar._TT["TIME_PART"] = "Spustelkite arba tempkite jei norite pakeisti"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%A, %Y-%m-%d"; + +Calendar._TT["WK"] = "sav"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt.old.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt.old.js new file mode 100644 index 0000000..43b93d6 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lt.old.js @@ -0,0 +1,114 @@ +// ** I18N + +// Calendar LT language +// Author: Martynas Majeris, +// Encoding: Windows-1257 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Sekmadienis", + "Pirmadienis", + "Antradienis", + "Treèiadienis", + "Ketvirtadienis", + "Pentadienis", + "Ðeðtadienis", + "Sekmadienis"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Sek", + "Pir", + "Ant", + "Tre", + "Ket", + "Pen", + "Ðeð", + "Sek"); + +// full month names +Calendar._MN = new Array +("Sausis", + "Vasaris", + "Kovas", + "Balandis", + "Geguþë", + "Birþelis", + "Liepa", + "Rugpjûtis", + "Rugsëjis", + "Spalis", + "Lapkritis", + "Gruodis"); + +// short month names +Calendar._SMN = new Array +("Sau", + "Vas", + "Kov", + "Bal", + "Geg", + "Bir", + "Lie", + "Rgp", + "Rgs", + "Spa", + "Lap", + "Gru"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Apie kalendoriø"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Naujausià versijà rasite: http://www.dynarch.com/projects/calendar/\n" + +"Platinamas pagal GNU LGPL licencijà. Aplankykite http://gnu.org/licenses/lgpl.html" + +"\n\n" + +"Datos pasirinkimas:\n" + +"- Metø pasirinkimas: \xab, \xbb\n" + +"- Mënesio pasirinkimas: " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "\n" + +"- Nuspauskite ir laikykite pelës klaviðà greitesniam pasirinkimui."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Laiko pasirinkimas:\n" + +"- Spustelkite ant valandø arba minuèiø - skaièus padidës vienetu.\n" + +"- Jei spausite kartu su Shift, skaièius sumaþës.\n" + +"- Greitam pasirinkimui spustelkite ir pajudinkite pelæ."; + +Calendar._TT["PREV_YEAR"] = "Ankstesni metai (laikykite, jei norite meniu)"; +Calendar._TT["PREV_MONTH"] = "Ankstesnis mënuo (laikykite, jei norite meniu)"; +Calendar._TT["GO_TODAY"] = "Pasirinkti ðiandienà"; +Calendar._TT["NEXT_MONTH"] = "Kitas mënuo (laikykite, jei norite meniu)"; +Calendar._TT["NEXT_YEAR"] = "Kiti metai (laikykite, jei norite meniu)"; +Calendar._TT["SEL_DATE"] = "Pasirinkite datà"; +Calendar._TT["DRAG_TO_MOVE"] = "Tempkite"; +Calendar._TT["PART_TODAY"] = " (ðiandien)"; +Calendar._TT["MON_FIRST"] = "Pirma savaitës diena - pirmadienis"; +Calendar._TT["SUN_FIRST"] = "Pirma savaitës diena - sekmadienis"; +Calendar._TT["CLOSE"] = "Uþdaryti"; +Calendar._TT["TODAY"] = "Ðiandien"; +Calendar._TT["TIME_PART"] = "Spustelkite arba tempkite jei norite pakeisti"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%A, %Y-%m-%d"; + +Calendar._TT["WK"] = "sav"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lv.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lv.js new file mode 100644 index 0000000..407699d --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-lv.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar LV language +// Author: Juris Valdovskis, +// Encoding: cp1257 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Svçtdiena", + "Pirmdiena", + "Otrdiena", + "Treðdiena", + "Ceturdiena", + "Piektdiena", + "Sestdiena", + "Svçtdiena"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Sv", + "Pr", + "Ot", + "Tr", + "Ce", + "Pk", + "Se", + "Sv"); + +// full month names +Calendar._MN = new Array +("Janvâris", + "Februâris", + "Marts", + "Aprîlis", + "Maijs", + "Jûnijs", + "Jûlijs", + "Augusts", + "Septembris", + "Oktobris", + "Novembris", + "Decembris"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Feb", + "Mar", + "Apr", + "Mai", + "Jûn", + "Jûl", + "Aug", + "Sep", + "Okt", + "Nov", + "Dec"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Par kalendâru"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Datuma izvçle:\n" + +"- Izmanto \xab, \xbb pogas, lai izvçlçtos gadu\n" + +"- Izmanto " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "pogas, lai izvçlçtos mçnesi\n" + +"- Turi nospiestu peles pogu uz jebkuru no augstâk minçtajâm pogâm, lai paâtrinâtu izvçli."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Laika izvçle:\n" + +"- Uzklikðíini uz jebkuru no laika daïâm, lai palielinâtu to\n" + +"- vai Shift-klikðíis, lai samazinâtu to\n" + +"- vai noklikðíini un velc uz attiecîgo virzienu lai mainîtu âtrâk."; + +Calendar._TT["PREV_YEAR"] = "Iepr. gads (turi izvçlnei)"; +Calendar._TT["PREV_MONTH"] = "Iepr. mçnesis (turi izvçlnei)"; +Calendar._TT["GO_TODAY"] = "Ðodien"; +Calendar._TT["NEXT_MONTH"] = "Nâkoðais mçnesis (turi izvçlnei)"; +Calendar._TT["NEXT_YEAR"] = "Nâkoðais gads (turi izvçlnei)"; +Calendar._TT["SEL_DATE"] = "Izvçlies datumu"; +Calendar._TT["DRAG_TO_MOVE"] = "Velc, lai pârvietotu"; +Calendar._TT["PART_TODAY"] = " (ðodien)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Attçlot %s kâ pirmo"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "1,7"; + +Calendar._TT["CLOSE"] = "Aizvçrt"; +Calendar._TT["TODAY"] = "Ðodien"; +Calendar._TT["TIME_PART"] = "(Shift-)Klikðíis vai pârvieto, lai mainîtu"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "Laiks:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-nl.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-nl.js new file mode 100644 index 0000000..a1dea94 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-nl.js @@ -0,0 +1,73 @@ +// ** I18N +Calendar._DN = new Array +("Zondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrijdag", + "Zaterdag", + "Zondag"); + +Calendar._SDN_len = 2; + +Calendar._MN = new Array +("Januari", + "Februari", + "Maart", + "April", + "Mei", + "Juni", + "Juli", + "Augustus", + "September", + "Oktober", + "November", + "December"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Info"; + +Calendar._TT["ABOUT"] = +"DHTML Datum/Tijd Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + +"Ga voor de meest recente versie naar: http://www.dynarch.com/projects/calendar/\n" + +"Verspreid onder de GNU LGPL. Zie http://gnu.org/licenses/lgpl.html voor details." + +"\n\n" + +"Datum selectie:\n" + +"- Gebruik de \xab \xbb knoppen om een jaar te selecteren\n" + +"- Gebruik de " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " knoppen om een maand te selecteren\n" + +"- Houd de muis ingedrukt op de genoemde knoppen voor een snellere selectie."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Tijd selectie:\n" + +"- Klik op een willekeurig onderdeel van het tijd gedeelte om het te verhogen\n" + +"- of Shift-klik om het te verlagen\n" + +"- of klik en sleep voor een snellere selectie."; + +//Calendar._TT["TOGGLE"] = "Selecteer de eerste week-dag"; +Calendar._TT["PREV_YEAR"] = "Vorig jaar (ingedrukt voor menu)"; +Calendar._TT["PREV_MONTH"] = "Vorige maand (ingedrukt voor menu)"; +Calendar._TT["GO_TODAY"] = "Ga naar Vandaag"; +Calendar._TT["NEXT_MONTH"] = "Volgende maand (ingedrukt voor menu)"; +Calendar._TT["NEXT_YEAR"] = "Volgend jaar (ingedrukt voor menu)"; +Calendar._TT["SEL_DATE"] = "Selecteer datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Klik en sleep om te verplaatsen"; +Calendar._TT["PART_TODAY"] = " (vandaag)"; +//Calendar._TT["MON_FIRST"] = "Toon Maandag eerst"; +//Calendar._TT["SUN_FIRST"] = "Toon Zondag eerst"; + +Calendar._TT["DAY_FIRST"] = "Toon %s eerst"; + +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Sluiten"; +Calendar._TT["TODAY"] = "(vandaag)"; +Calendar._TT["TIME_PART"] = "(Shift-)Klik of sleep om de waarde te veranderen"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b %Y"; + +Calendar._TT["WK"] = "wk"; +Calendar._TT["TIME"] = "Tijd:"; \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-no.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-no.js new file mode 100644 index 0000000..d9297d1 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-no.js @@ -0,0 +1,114 @@ +// ** I18N + +// Calendar NO language +// Author: Daniel Holmen, +// Encoding: UTF-8 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Søndag", + "Mandag", + "Tirsdag", + "Onsdag", + "Torsdag", + "Fredag", + "Lørdag", + "Søndag"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Søn", + "Man", + "Tir", + "Ons", + "Tor", + "Fre", + "Lør", + "Søn"); + +// full month names +Calendar._MN = new Array +("Januar", + "Februar", + "Mars", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Desember"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Feb", + "Mar", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "Des"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Om kalenderen"; + +Calendar._TT["ABOUT"] = +"DHTML Dato-/Tidsvelger\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For nyeste versjon, gÃ¥ til: http://www.dynarch.com/projects/calendar/\n" + +"Distribuert under GNU LGPL. Se http://gnu.org/licenses/lgpl.html for detaljer." + +"\n\n" + +"Datovalg:\n" + +"- Bruk knappene \xab og \xbb for Ã¥ velge Ã¥r\n" + +"- Bruk knappene " + String.fromCharCode(0x2039) + " og " + String.fromCharCode(0x203a) + " for Ã¥ velge mÃ¥ned\n" + +"- Hold inne musknappen eller knappene over for raskere valg."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Tidsvalg:\n" + +"- Klikk pÃ¥ en av tidsdelene for Ã¥ øke den\n" + +"- eller Shift-klikk for Ã¥ senke verdien\n" + +"- eller klikk-og-dra for raskere valg.."; + +Calendar._TT["PREV_YEAR"] = "Forrige. Ã¥r (hold for meny)"; +Calendar._TT["PREV_MONTH"] = "Forrige. mÃ¥ned (hold for meny)"; +Calendar._TT["GO_TODAY"] = "GÃ¥ til idag"; +Calendar._TT["NEXT_MONTH"] = "Neste mÃ¥ned (hold for meny)"; +Calendar._TT["NEXT_YEAR"] = "Neste Ã¥r (hold for meny)"; +Calendar._TT["SEL_DATE"] = "Velg dato"; +Calendar._TT["DRAG_TO_MOVE"] = "Dra for Ã¥ flytte"; +Calendar._TT["PART_TODAY"] = " (idag)"; +Calendar._TT["MON_FIRST"] = "Vis mandag først"; +Calendar._TT["SUN_FIRST"] = "Vis søndag først"; +Calendar._TT["CLOSE"] = "Lukk"; +Calendar._TT["TODAY"] = "Idag"; +Calendar._TT["TIME_PART"] = "(Shift-)Klikk eller dra for Ã¥ endre verdi"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "uke"; \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl-utf8.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl-utf8.js new file mode 100644 index 0000000..6b8ca67 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl-utf8.js @@ -0,0 +1,93 @@ +// ** I18N + +// Calendar PL language +// Author: Dariusz Pietrzak, +// Author: Janusz Piwowarski, +// Encoding: utf-8 +// Distributed under the same terms as the calendar itself. + +Calendar._DN = new Array +("Niedziela", + "PoniedziaÅ‚ek", + "Wtorek", + "Åšroda", + "Czwartek", + "PiÄ…tek", + "Sobota", + "Niedziela"); +Calendar._SDN = new Array +("Nie", + "Pn", + "Wt", + "Åšr", + "Cz", + "Pt", + "So", + "Nie"); +Calendar._MN = new Array +("StyczeÅ„", + "Luty", + "Marzec", + "KwiecieÅ„", + "Maj", + "Czerwiec", + "Lipiec", + "SierpieÅ„", + "WrzesieÅ„", + "Październik", + "Listopad", + "GrudzieÅ„"); +Calendar._SMN = new Array +("Sty", + "Lut", + "Mar", + "Kwi", + "Maj", + "Cze", + "Lip", + "Sie", + "Wrz", + "Paź", + "Lis", + "Gru"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "O kalendarzu"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Aby pobrać najnowszÄ… wersjÄ™, odwiedź: http://www.dynarch.com/projects/calendar/\n" + +"DostÄ™pny na licencji GNU LGPL. Zobacz szczegóły na http://gnu.org/licenses/lgpl.html." + +"\n\n" + +"Wybór daty:\n" + +"- Użyj przycisków \xab, \xbb by wybrać rok\n" + +"- Użyj przycisków " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " by wybrać miesiÄ…c\n" + +"- Przytrzymaj klawisz myszy nad jednym z powyższych przycisków dla szybszego wyboru."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Wybór czasu:\n" + +"- Kliknij na jednym z pól czasu by zwiÄ™kszyć jego wartość\n" + +"- lub kliknij trzymajÄ…c Shift by zmiejszyć jego wartość\n" + +"- lub kliknij i przeciÄ…gnij dla szybszego wyboru."; + +//Calendar._TT["TOGGLE"] = "ZmieÅ„ pierwszy dzieÅ„ tygodnia"; +Calendar._TT["PREV_YEAR"] = "Poprzedni rok (przytrzymaj dla menu)"; +Calendar._TT["PREV_MONTH"] = "Poprzedni miesiÄ…c (przytrzymaj dla menu)"; +Calendar._TT["GO_TODAY"] = "Idź do dzisiaj"; +Calendar._TT["NEXT_MONTH"] = "NastÄ™pny miesiÄ…c (przytrzymaj dla menu)"; +Calendar._TT["NEXT_YEAR"] = "NastÄ™pny rok (przytrzymaj dla menu)"; +Calendar._TT["SEL_DATE"] = "Wybierz datÄ™"; +Calendar._TT["DRAG_TO_MOVE"] = "PrzeciÄ…gnij by przesunąć"; +Calendar._TT["PART_TODAY"] = " (dzisiaj)"; +Calendar._TT["MON_FIRST"] = "WyÅ›wietl poniedziaÅ‚ek jako pierwszy"; +Calendar._TT["SUN_FIRST"] = "WyÅ›wietl niedzielÄ™ jako pierwszÄ…"; +Calendar._TT["CLOSE"] = "Zamknij"; +Calendar._TT["TODAY"] = "Dzisiaj"; +Calendar._TT["TIME_PART"] = "(Shift-)Kliknij lub przeciÄ…gnij by zmienić wartość"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%e %B, %A"; + +Calendar._TT["WK"] = "ty"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl.js new file mode 100644 index 0000000..6b8ca67 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl.js @@ -0,0 +1,93 @@ +// ** I18N + +// Calendar PL language +// Author: Dariusz Pietrzak, +// Author: Janusz Piwowarski, +// Encoding: utf-8 +// Distributed under the same terms as the calendar itself. + +Calendar._DN = new Array +("Niedziela", + "PoniedziaÅ‚ek", + "Wtorek", + "Åšroda", + "Czwartek", + "PiÄ…tek", + "Sobota", + "Niedziela"); +Calendar._SDN = new Array +("Nie", + "Pn", + "Wt", + "Åšr", + "Cz", + "Pt", + "So", + "Nie"); +Calendar._MN = new Array +("StyczeÅ„", + "Luty", + "Marzec", + "KwiecieÅ„", + "Maj", + "Czerwiec", + "Lipiec", + "SierpieÅ„", + "WrzesieÅ„", + "Październik", + "Listopad", + "GrudzieÅ„"); +Calendar._SMN = new Array +("Sty", + "Lut", + "Mar", + "Kwi", + "Maj", + "Cze", + "Lip", + "Sie", + "Wrz", + "Paź", + "Lis", + "Gru"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "O kalendarzu"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Aby pobrać najnowszÄ… wersjÄ™, odwiedź: http://www.dynarch.com/projects/calendar/\n" + +"DostÄ™pny na licencji GNU LGPL. Zobacz szczegóły na http://gnu.org/licenses/lgpl.html." + +"\n\n" + +"Wybór daty:\n" + +"- Użyj przycisków \xab, \xbb by wybrać rok\n" + +"- Użyj przycisków " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " by wybrać miesiÄ…c\n" + +"- Przytrzymaj klawisz myszy nad jednym z powyższych przycisków dla szybszego wyboru."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Wybór czasu:\n" + +"- Kliknij na jednym z pól czasu by zwiÄ™kszyć jego wartość\n" + +"- lub kliknij trzymajÄ…c Shift by zmiejszyć jego wartość\n" + +"- lub kliknij i przeciÄ…gnij dla szybszego wyboru."; + +//Calendar._TT["TOGGLE"] = "ZmieÅ„ pierwszy dzieÅ„ tygodnia"; +Calendar._TT["PREV_YEAR"] = "Poprzedni rok (przytrzymaj dla menu)"; +Calendar._TT["PREV_MONTH"] = "Poprzedni miesiÄ…c (przytrzymaj dla menu)"; +Calendar._TT["GO_TODAY"] = "Idź do dzisiaj"; +Calendar._TT["NEXT_MONTH"] = "NastÄ™pny miesiÄ…c (przytrzymaj dla menu)"; +Calendar._TT["NEXT_YEAR"] = "NastÄ™pny rok (przytrzymaj dla menu)"; +Calendar._TT["SEL_DATE"] = "Wybierz datÄ™"; +Calendar._TT["DRAG_TO_MOVE"] = "PrzeciÄ…gnij by przesunąć"; +Calendar._TT["PART_TODAY"] = " (dzisiaj)"; +Calendar._TT["MON_FIRST"] = "WyÅ›wietl poniedziaÅ‚ek jako pierwszy"; +Calendar._TT["SUN_FIRST"] = "WyÅ›wietl niedzielÄ™ jako pierwszÄ…"; +Calendar._TT["CLOSE"] = "Zamknij"; +Calendar._TT["TODAY"] = "Dzisiaj"; +Calendar._TT["TIME_PART"] = "(Shift-)Kliknij lub przeciÄ…gnij by zmienić wartość"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%e %B, %A"; + +Calendar._TT["WK"] = "ty"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl.old.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl.old.js new file mode 100644 index 0000000..76e0551 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pl.old.js @@ -0,0 +1,56 @@ +// ** I18N +// Calendar PL language +// Author: Artur Filipiak, +// January, 2004 +// Encoding: UTF-8 +Calendar._DN = new Array +("Niedziela", "PoniedziaÅ‚ek", "Wtorek", "Åšroda", "Czwartek", "PiÄ…tek", "Sobota", "Niedziela"); + +Calendar._SDN = new Array +("N", "Pn", "Wt", "Åšr", "Cz", "Pt", "So", "N"); + +Calendar._MN = new Array +("StyczeÅ„", "Luty", "Marzec", "KwiecieÅ„", "Maj", "Czerwiec", "Lipiec", "SierpieÅ„", "WrzesieÅ„", "Październik", "Listopad", "GrudzieÅ„"); + +Calendar._SMN = new Array +("Sty", "Lut", "Mar", "Kwi", "Maj", "Cze", "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "O kalendarzu"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Wybór daty:\n" + +"- aby wybrać rok użyj przycisków \xab, \xbb\n" + +"- aby wybrać miesiÄ…c użyj przycisków " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "\n" + +"- aby przyspieszyć wybór przytrzymaj wciÅ›niÄ™ty przycisk myszy nad ww. przyciskami."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Wybór czasu:\n" + +"- aby zwiÄ™kszyć wartość kliknij na dowolnym elemencie selekcji czasu\n" + +"- aby zmniejszyć wartość użyj dodatkowo klawisza Shift\n" + +"- możesz również poruszać myszkÄ™ w lewo i prawo wraz z wciÅ›niÄ™tym lewym klawiszem."; + +Calendar._TT["PREV_YEAR"] = "Poprz. rok (przytrzymaj dla menu)"; +Calendar._TT["PREV_MONTH"] = "Poprz. miesiÄ…c (przytrzymaj dla menu)"; +Calendar._TT["GO_TODAY"] = "Pokaż dziÅ›"; +Calendar._TT["NEXT_MONTH"] = "Nast. miesiÄ…c (przytrzymaj dla menu)"; +Calendar._TT["NEXT_YEAR"] = "Nast. rok (przytrzymaj dla menu)"; +Calendar._TT["SEL_DATE"] = "Wybierz datÄ™"; +Calendar._TT["DRAG_TO_MOVE"] = "PrzesuÅ„ okienko"; +Calendar._TT["PART_TODAY"] = " (dziÅ›)"; +Calendar._TT["MON_FIRST"] = "Pokaż PoniedziaÅ‚ek jako pierwszy"; +Calendar._TT["SUN_FIRST"] = "Pokaż NiedzielÄ™ jako pierwszÄ…"; +Calendar._TT["CLOSE"] = "Zamknij"; +Calendar._TT["TODAY"] = "DziÅ›"; +Calendar._TT["TIME_PART"] = "(Shift-)klik | drag, aby zmienić wartość"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y.%m.%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "wk"; \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pt.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pt.js new file mode 100644 index 0000000..deee8a1 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-pt.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar pt_BR language +// Author: Adalberto Machado, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Domingo", + "Segunda", + "Terca", + "Quarta", + "Quinta", + "Sexta", + "Sabado", + "Domingo"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("Dom", + "Seg", + "Ter", + "Qua", + "Qui", + "Sex", + "Sab", + "Dom"); + +// full month names +Calendar._MN = new Array +("Janeiro", + "Fevereiro", + "Marco", + "Abril", + "Maio", + "Junho", + "Julho", + "Agosto", + "Setembro", + "Outubro", + "Novembro", + "Dezembro"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Fev", + "Mar", + "Abr", + "Mai", + "Jun", + "Jul", + "Ago", + "Set", + "Out", + "Nov", + "Dez"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Sobre o calendario"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Ultima versao visite: http://www.dynarch.com/projects/calendar/\n" + +"Distribuido sobre GNU LGPL. Veja http://gnu.org/licenses/lgpl.html para detalhes." + +"\n\n" + +"Selecao de data:\n" + +"- Use os botoes \xab, \xbb para selecionar o ano\n" + +"- Use os botoes " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o mes\n" + +"- Segure o botao do mouse em qualquer um desses botoes para selecao rapida."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Selecao de hora:\n" + +"- Clique em qualquer parte da hora para incrementar\n" + +"- ou Shift-click para decrementar\n" + +"- ou clique e segure para selecao rapida."; + +Calendar._TT["PREV_YEAR"] = "Ant. ano (segure para menu)"; +Calendar._TT["PREV_MONTH"] = "Ant. mes (segure para menu)"; +Calendar._TT["GO_TODAY"] = "Hoje"; +Calendar._TT["NEXT_MONTH"] = "Prox. mes (segure para menu)"; +Calendar._TT["NEXT_YEAR"] = "Prox. ano (segure para menu)"; +Calendar._TT["SEL_DATE"] = "Selecione a data"; +Calendar._TT["DRAG_TO_MOVE"] = "Arraste para mover"; +Calendar._TT["PART_TODAY"] = " (hoje)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Mostre %s primeiro"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Fechar"; +Calendar._TT["TODAY"] = "Hoje"; +Calendar._TT["TIME_PART"] = "(Shift-)Click ou arraste para mudar valor"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b"; + +Calendar._TT["WK"] = "sm"; +Calendar._TT["TIME"] = "Hora:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ro.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ro.js new file mode 100644 index 0000000..116e358 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ro.js @@ -0,0 +1,66 @@ +// ** I18N +Calendar._DN = new Array +("Duminică", + "Luni", + "MarÅ£i", + "Miercuri", + "Joi", + "Vineri", + "Sâmbătă", + "Duminică"); +Calendar._SDN_len = 2; +Calendar._MN = new Array +("Ianuarie", + "Februarie", + "Martie", + "Aprilie", + "Mai", + "Iunie", + "Iulie", + "August", + "Septembrie", + "Octombrie", + "Noiembrie", + "Decembrie"); + +// tooltips +Calendar._TT = {}; + +Calendar._TT["INFO"] = "Despre calendar"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Pentru ultima versiune vizitaÅ£i: http://www.dynarch.com/projects/calendar/\n" + +"Distribuit sub GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"SelecÅ£ia datei:\n" + +"- FolosiÅ£i butoanele \xab, \xbb pentru a selecta anul\n" + +"- FolosiÅ£i butoanele " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pentru a selecta luna\n" + +"- TineÅ£i butonul mouse-ului apăsat pentru selecÅ£ie mai rapidă."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"SelecÅ£ia orei:\n" + +"- Click pe ora sau minut pentru a mări valoarea cu 1\n" + +"- Sau Shift-Click pentru a micÅŸora valoarea cu 1\n" + +"- Sau Click ÅŸi drag pentru a selecta mai repede."; + +Calendar._TT["PREV_YEAR"] = "Anul precedent (lung pt menu)"; +Calendar._TT["PREV_MONTH"] = "Luna precedentă (lung pt menu)"; +Calendar._TT["GO_TODAY"] = "Data de azi"; +Calendar._TT["NEXT_MONTH"] = "Luna următoare (lung pt menu)"; +Calendar._TT["NEXT_YEAR"] = "Anul următor (lung pt menu)"; +Calendar._TT["SEL_DATE"] = "Selectează data"; +Calendar._TT["DRAG_TO_MOVE"] = "Trage pentru a miÅŸca"; +Calendar._TT["PART_TODAY"] = " (astăzi)"; +Calendar._TT["DAY_FIRST"] = "AfiÅŸează %s prima zi"; +Calendar._TT["WEEKEND"] = "0,6"; +Calendar._TT["CLOSE"] = "ÃŽnchide"; +Calendar._TT["TODAY"] = "Astăzi"; +Calendar._TT["TIME_PART"] = "(Shift-)Click sau drag pentru a selecta"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%A, %d %B"; + +Calendar._TT["WK"] = "spt"; +Calendar._TT["TIME"] = "Ora:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ru.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ru.js new file mode 100644 index 0000000..9f75a6a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ru.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar RU language +// Translation: Sly Golovanov, http://golovanov.net, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("воÑкреÑенье", + "понедельник", + "вторник", + "Ñреда", + "четверг", + "пÑтница", + "Ñуббота", + "воÑкреÑенье"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("вÑк", + "пон", + "втр", + "Ñрд", + "чет", + "пÑÑ‚", + "Ñуб", + "вÑк"); + +// full month names +Calendar._MN = new Array +("Ñнварь", + "февраль", + "март", + "апрель", + "май", + "июнь", + "июль", + "авгуÑÑ‚", + "ÑентÑбрь", + "октÑбрь", + "ноÑбрь", + "декабрь"); + +// short month names +Calendar._SMN = new Array +("Ñнв", + "фев", + "мар", + "апр", + "май", + "июн", + "июл", + "авг", + "Ñен", + "окт", + "ноÑ", + "дек"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "О календаре..."; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Как выбрать дату:\n" + +"- При помощи кнопок \xab, \xbb можно выбрать год\n" + +"- При помощи кнопок " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " можно выбрать меÑÑц\n" + +"- Подержите Ñти кнопки нажатыми, чтобы поÑвилоÑÑŒ меню быÑтрого выбора."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Как выбрать времÑ:\n" + +"- При клике на чаÑах или минутах они увеличиваютÑÑ\n" + +"- при клике Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ клавишей Shift они уменьшаютÑÑ\n" + +"- еÑли нажать и двигать мышкой влево/вправо, они будут менÑÑ‚ÑŒÑÑ Ð±Ñ‹Ñтрее."; + +Calendar._TT["PREV_YEAR"] = "Ðа год назад (удерживать Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ)"; +Calendar._TT["PREV_MONTH"] = "Ðа меÑÑц назад (удерживать Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ)"; +Calendar._TT["GO_TODAY"] = "СегоднÑ"; +Calendar._TT["NEXT_MONTH"] = "Ðа меÑÑц вперед (удерживать Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ)"; +Calendar._TT["NEXT_YEAR"] = "Ðа год вперед (удерживать Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ)"; +Calendar._TT["SEL_DATE"] = "Выберите дату"; +Calendar._TT["DRAG_TO_MOVE"] = "ПеретаÑкивайте мышкой"; +Calendar._TT["PART_TODAY"] = " (ÑегоднÑ)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Первый день недели будет %s"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Закрыть"; +Calendar._TT["TODAY"] = "СегоднÑ"; +Calendar._TT["TIME_PART"] = "(Shift-)клик или нажать и двигать"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%e %b, %a"; + +Calendar._TT["WK"] = "нед"; +Calendar._TT["TIME"] = "ВремÑ:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ru_win_.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ru_win_.js new file mode 100644 index 0000000..de455af --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-ru_win_.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar RU language +// Translation: Sly Golovanov, http://golovanov.net, +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("âîñêðåñåíüå", + "ïîíåäåëüíèê", + "âòîðíèê", + "ñðåäà", + "÷åòâåðã", + "ïÿòíèöà", + "ñóááîòà", + "âîñêðåñåíüå"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("âñê", + "ïîí", + "âòð", + "ñðä", + "÷åò", + "ïÿò", + "ñóá", + "âñê"); + +// full month names +Calendar._MN = new Array +("ÿíâàðü", + "ôåâðàëü", + "ìàðò", + "àïðåëü", + "ìàé", + "èþíü", + "èþëü", + "àâãóñò", + "ñåíòÿáðü", + "îêòÿáðü", + "íîÿáðü", + "äåêàáðü"); + +// short month names +Calendar._SMN = new Array +("ÿíâ", + "ôåâ", + "ìàð", + "àïð", + "ìàé", + "èþí", + "èþë", + "àâã", + "ñåí", + "îêò", + "íîÿ", + "äåê"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Î êàëåíäàðå..."; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Êàê âûáðàòü äàòó:\n" + +"- Ïðè ïîìîùè êíîïîê \xab, \xbb ìîæíî âûáðàòü ãîä\n" + +"- Ïðè ïîìîùè êíîïîê " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " ìîæíî âûáðàòü ìåñÿö\n" + +"- Ïîäåðæèòå ýòè êíîïêè íàæàòûìè, ÷òîáû ïîÿâèëîñü ìåíþ áûñòðîãî âûáîðà."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Êàê âûáðàòü âðåìÿ:\n" + +"- Ïðè êëèêå íà ÷àñàõ èëè ìèíóòàõ îíè óâåëè÷èâàþòñÿ\n" + +"- ïðè êëèêå ñ íàæàòîé êëàâèøåé Shift îíè óìåíüøàþòñÿ\n" + +"- åñëè íàæàòü è äâèãàòü ìûøêîé âëåâî/âïðàâî, îíè áóäóò ìåíÿòüñÿ áûñòðåå."; + +Calendar._TT["PREV_YEAR"] = "Íà ãîä íàçàä (óäåðæèâàòü äëÿ ìåíþ)"; +Calendar._TT["PREV_MONTH"] = "Íà ìåñÿö íàçàä (óäåðæèâàòü äëÿ ìåíþ)"; +Calendar._TT["GO_TODAY"] = "Ñåãîäíÿ"; +Calendar._TT["NEXT_MONTH"] = "Íà ìåñÿö âïåðåä (óäåðæèâàòü äëÿ ìåíþ)"; +Calendar._TT["NEXT_YEAR"] = "Íà ãîä âïåðåä (óäåðæèâàòü äëÿ ìåíþ)"; +Calendar._TT["SEL_DATE"] = "Âûáåðèòå äàòó"; +Calendar._TT["DRAG_TO_MOVE"] = "Ïåðåòàñêèâàéòå ìûøêîé"; +Calendar._TT["PART_TODAY"] = " (ñåãîäíÿ)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Ïåðâûé äåíü íåäåëè áóäåò %s"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Çàêðûòü"; +Calendar._TT["TODAY"] = "Ñåãîäíÿ"; +Calendar._TT["TIME_PART"] = "(Shift-)êëèê èëè íàæàòü è äâèãàòü"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%e %b, %a"; + +Calendar._TT["WK"] = "íåä"; +Calendar._TT["TIME"] = "Âðåìÿ:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-si.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-si.js new file mode 100644 index 0000000..cb3dfb9 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-si.js @@ -0,0 +1,94 @@ +/* Slovenian language file for the DHTML Calendar version 0.9.2 +* Author David Milost , January 2004. +* Feel free to use this script under the terms of the GNU Lesser General +* Public License, as long as you do not remove or alter this notice. +*/ + // full day names +Calendar._DN = new Array +("Nedelja", + "Ponedeljek", + "Torek", + "Sreda", + "ÄŒetrtek", + "Petek", + "Sobota", + "Nedelja"); + // short day names + Calendar._SDN = new Array +("Ned", + "Pon", + "Tor", + "Sre", + "ÄŒet", + "Pet", + "Sob", + "Ned"); +// short month names +Calendar._SMN = new Array +("Jan", + "Feb", + "Mar", + "Apr", + "Maj", + "Jun", + "Jul", + "Avg", + "Sep", + "Okt", + "Nov", + "Dec"); + // full month names +Calendar._MN = new Array +("Januar", + "Februar", + "Marec", + "April", + "Maj", + "Junij", + "Julij", + "Avgust", + "September", + "Oktober", + "November", + "December"); + +// tooltips +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "O koledarju"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Za zadnjo verzijo pojdine na naslov: http://www.dynarch.com/projects/calendar/\n" + +"Distribuirano pod GNU LGPL. Poglejte http://gnu.org/licenses/lgpl.html za podrobnosti." + +"\n\n" + +"Izbor datuma:\n" + +"- Uporabite \xab, \xbb gumbe za izbor leta\n" + +"- Uporabite " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " gumbe za izbor meseca\n" + +"- Zadržite klik na kateremkoli od zgornjih gumbov za hiter izbor."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Izbor ćasa:\n" + +"- Kliknite na katerikoli del ćasa za poveć. le-tega\n" + +"- ali Shift-click za zmanj. le-tega\n" + +"- ali kliknite in povlecite za hiter izbor."; + +Calendar._TT["TOGGLE"] = "Spremeni dan s katerim se prićne teden"; +Calendar._TT["PREV_YEAR"] = "Predhodnje leto (dolg klik za meni)"; +Calendar._TT["PREV_MONTH"] = "Predhodnji mesec (dolg klik za meni)"; +Calendar._TT["GO_TODAY"] = "Pojdi na tekoći dan"; +Calendar._TT["NEXT_MONTH"] = "Naslednji mesec (dolg klik za meni)"; +Calendar._TT["NEXT_YEAR"] = "Naslednje leto (dolg klik za meni)"; +Calendar._TT["SEL_DATE"] = "Izberite datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Pritisni in povleci za spremembo pozicije"; +Calendar._TT["PART_TODAY"] = " (danes)"; +Calendar._TT["MON_FIRST"] = "Prikaži ponedeljek kot prvi dan"; +Calendar._TT["SUN_FIRST"] = "Prikaži nedeljo kot prvi dan"; +Calendar._TT["CLOSE"] = "Zapri"; +Calendar._TT["TODAY"] = "Danes"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; + +Calendar._TT["WK"] = "Ted"; \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sk.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sk.js new file mode 100644 index 0000000..4fe6a3c --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sk.js @@ -0,0 +1,99 @@ +// ** I18N + +// Calendar SK language +// Author: Peter Valach (pvalach@gmx.net) +// Encoding: utf-8 +// Last update: 2003/10/29 +// Distributed under the same terms as the calendar itself. + +// full day names +Calendar._DN = new Array +("NedeÄľa", + "Pondelok", + "Utorok", + "Streda", + "Ĺ tvrtok", + "Piatok", + "Sobota", + "NedeÄľa"); + +// short day names +Calendar._SDN = new Array +("Ned", + "Pon", + "Uto", + "Str", + "Ĺ tv", + "Pia", + "Sob", + "Ned"); + +// full month names +Calendar._MN = new Array +("Január", + "Február", + "Marec", + "AprĂ­l", + "Máj", + "JÄ‚ÅŸn", + "JÄ‚ÅŸl", + "August", + "September", + "OktÄ‚Å‚ber", + "November", + "December"); + +// short month names +Calendar._SMN = new Array +("Jan", + "Feb", + "Mar", + "Apr", + "Máj", + "JÄ‚ÅŸn", + "JÄ‚ÅŸl", + "Aug", + "Sep", + "Okt", + "Nov", + "Dec"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "O kalendári"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + +"PoslednÄ‚ÅŸ verziu nájdete na: http://www.dynarch.com/projects/calendar/\n" + +"DistribuovanĂ© pod GNU LGPL. ViÄŹ http://gnu.org/licenses/lgpl.html pre detaily." + +"\n\n" + +"VÄ‚Ëber dátumu:\n" + +"- PouĹľite tlaÄŤidlá \xab, \xbb pre vÄ‚Ëber roku\n" + +"- PouĹľite tlaÄŤidlá " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pre vÄ‚Ëber mesiaca\n" + +"- Ak ktorĂ©koÄľvek z tÄ‚Ëchto tlaÄŤidiel podržíte dlhšie, zobrazĂ­ sa rÄ‚Ëchly vÄ‚Ëber."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"VÄ‚Ëber ÄŤasu:\n" + +"- Kliknutie na niektorÄ‚ÅŸ poloĹľku ÄŤasu ju zvÄ‚Ëši\n" + +"- Shift-klik ju znĂ­Ĺľi\n" + +"- Ak podržíte tlaÄŤĂ­tko stlaÄŤenĂ©, posÄ‚ÅŸvanĂ­m menĂ­te hodnotu."; + +Calendar._TT["PREV_YEAR"] = "PredošlÄ‚Ë rok (podrĹľte pre menu)"; +Calendar._TT["PREV_MONTH"] = "PredošlÄ‚Ë mesiac (podrĹľte pre menu)"; +Calendar._TT["GO_TODAY"] = "PrejsĹĄ na dnešok"; +Calendar._TT["NEXT_MONTH"] = "Nasl. mesiac (podrĹľte pre menu)"; +Calendar._TT["NEXT_YEAR"] = "Nasl. rok (podrĹľte pre menu)"; +Calendar._TT["SEL_DATE"] = "ZvoÄľte dátum"; +Calendar._TT["DRAG_TO_MOVE"] = "PodrĹľanĂ­m tlaÄŤĂ­tka zmenĂ­te polohu"; +Calendar._TT["PART_TODAY"] = " (dnes)"; +Calendar._TT["MON_FIRST"] = "ZobraziĹĄ pondelok ako prvÄ‚Ë"; +Calendar._TT["SUN_FIRST"] = "ZobraziĹĄ nedeÄľu ako prvÄ‚ÅŸ"; +Calendar._TT["CLOSE"] = "ZavrieĹĄ"; +Calendar._TT["TODAY"] = "Dnes"; +Calendar._TT["TIME_PART"] = "(Shift-)klik/ĹĄahanie zmenĂ­ hodnotu"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "$d. %m. %Y"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %e. %b"; + +Calendar._TT["WK"] = "tÄ‚ËĹľ"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sp.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sp.js new file mode 100644 index 0000000..239d1b3 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sp.js @@ -0,0 +1,110 @@ +// ** I18N + +// Calendar SP language +// Author: Rafael Velasco +// Encoding: any +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("Domingo", + "Lunes", + "Martes", + "Miercoles", + "Jueves", + "Viernes", + "Sabado", + "Domingo"); + +Calendar._SDN = new Array +("Dom", + "Lun", + "Mar", + "Mie", + "Jue", + "Vie", + "Sab", + "Dom"); + +// full month names +Calendar._MN = new Array +("Enero", + "Febrero", + "Marzo", + "Abril", + "Mayo", + "Junio", + "Julio", + "Agosto", + "Septiembre", + "Octubre", + "Noviembre", + "Diciembre"); + +// short month names +Calendar._SMN = new Array +("Ene", + "Feb", + "Mar", + "Abr", + "May", + "Jun", + "Jul", + "Ago", + "Sep", + "Oct", + "Nov", + "Dic"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Información del Calendario"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"Nuevas versiones en: http://www.dynarch.com/projects/calendar/\n" + +"Distribuida bajo licencia GNU LGPL. Para detalles vea http://gnu.org/licenses/lgpl.html ." + +"\n\n" + +"Selección de Fechas:\n" + +"- Use \xab, \xbb para seleccionar el año\n" + +"- Use " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para seleccionar el mes\n" + +"- Mantenga presionado el botón del ratón en cualquiera de las opciones superiores para un acceso rapido ."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Selección del Reloj:\n" + +"- Seleccione la hora para cambiar el reloj\n" + +"- o presione Shift-click para disminuirlo\n" + +"- o presione click y arrastre del ratón para una selección rapida."; + +Calendar._TT["PREV_YEAR"] = "Año anterior (Presione para menu)"; +Calendar._TT["PREV_MONTH"] = "Mes Anterior (Presione para menu)"; +Calendar._TT["GO_TODAY"] = "Ir a Hoy"; +Calendar._TT["NEXT_MONTH"] = "Mes Siguiente (Presione para menu)"; +Calendar._TT["NEXT_YEAR"] = "Año Siguiente (Presione para menu)"; +Calendar._TT["SEL_DATE"] = "Seleccione fecha"; +Calendar._TT["DRAG_TO_MOVE"] = "Arrastre y mueva"; +Calendar._TT["PART_TODAY"] = " (Hoy)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "Mostrar %s primero"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "Cerrar"; +Calendar._TT["TODAY"] = "Hoy"; +Calendar._TT["TIME_PART"] = "(Shift-)Click o arrastra para cambar el valor"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%dd-%mm-%yy"; +Calendar._TT["TT_DATE_FORMAT"] = "%A, %e de %B de %Y"; + +Calendar._TT["WK"] = "Sm"; +Calendar._TT["TIME"] = "Hora:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sv.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sv.js new file mode 100644 index 0000000..db1f4b8 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-sv.js @@ -0,0 +1,93 @@ +// ** I18N + +// Calendar SV language (Swedish, svenska) +// Author: Mihai Bazon, +// Translation team: +// Translator: Leonard Norrgård +// Last translator: Leonard Norrgård +// Encoding: iso-latin-1 +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("söndag", + "måndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "lördag", + "söndag"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. +Calendar._SDN_len = 2; +Calendar._SMN_len = 3; + +// full month names +Calendar._MN = new Array +("januari", + "februari", + "mars", + "april", + "maj", + "juni", + "juli", + "augusti", + "september", + "oktober", + "november", + "december"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "Om kalendern"; + +Calendar._TT["ABOUT"] = +"DHTML Datum/tid-väljare\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"För senaste version gå till: http://www.dynarch.com/projects/calendar/\n" + +"Distribueras under GNU LGPL. Se http://gnu.org/licenses/lgpl.html för detaljer." + +"\n\n" + +"Val av datum:\n" + +"- Använd knapparna \xab, \xbb för att välja år\n" + +"- Använd knapparna " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " för att välja månad\n" + +"- Håll musknappen nedtryckt på någon av ovanstående knappar för snabbare val."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Val av tid:\n" + +"- Klicka på en del av tiden för att öka den delen\n" + +"- eller skift-klicka för att minska den\n" + +"- eller klicka och drag för snabbare val."; + +Calendar._TT["PREV_YEAR"] = "Föregående år (håll för menu)"; +Calendar._TT["PREV_MONTH"] = "Föregående månad (håll för menu)"; +Calendar._TT["GO_TODAY"] = "Gå till dagens datum"; +Calendar._TT["NEXT_MONTH"] = "Följande månad (håll för menu)"; +Calendar._TT["NEXT_YEAR"] = "Följande år (håll för menu)"; +Calendar._TT["SEL_DATE"] = "Välj datum"; +Calendar._TT["DRAG_TO_MOVE"] = "Drag för att flytta"; +Calendar._TT["PART_TODAY"] = " (idag)"; +Calendar._TT["MON_FIRST"] = "Visa måndag först"; +Calendar._TT["SUN_FIRST"] = "Visa söndag först"; +Calendar._TT["CLOSE"] = "Stäng"; +Calendar._TT["TODAY"] = "Idag"; +Calendar._TT["TIME_PART"] = "(Skift-)klicka eller drag för att ändra tid"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%A %d %b %Y"; + +Calendar._TT["WK"] = "vecka"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-tr.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-tr.js new file mode 100644 index 0000000..2164687 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-tr.js @@ -0,0 +1,58 @@ +////////////////////////////////////////////////////////////////////////////////////////////// +// Turkish Translation by Nuri AKMAN +// Location: Ankara/TURKEY +// e-mail : nuriakman@hotmail.com +// Date : April, 9 2003 +// +// Note: if Turkish Characters does not shown on you screen +// please include falowing line your html code: +// +// +// +////////////////////////////////////////////////////////////////////////////////////////////// + +// ** I18N +Calendar._DN = new Array +("Pazar", + "Pazartesi", + "Salý", + "Çarþamba", + "Perþembe", + "Cuma", + "Cumartesi", + "Pazar"); +Calendar._MN = new Array +("Ocak", + "Þubat", + "Mart", + "Nisan", + "Mayýs", + "Haziran", + "Temmuz", + "Aðustos", + "Eylül", + "Ekim", + "Kasým", + "Aralýk"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["TOGGLE"] = "Haftanýn ilk gününü kaydýr"; +Calendar._TT["PREV_YEAR"] = "Önceki Yýl (Menü için basýlý tutunuz)"; +Calendar._TT["PREV_MONTH"] = "Önceki Ay (Menü için basýlý tutunuz)"; +Calendar._TT["GO_TODAY"] = "Bugün'e git"; +Calendar._TT["NEXT_MONTH"] = "Sonraki Ay (Menü için basýlý tutunuz)"; +Calendar._TT["NEXT_YEAR"] = "Sonraki Yýl (Menü için basýlý tutunuz)"; +Calendar._TT["SEL_DATE"] = "Tarih seçiniz"; +Calendar._TT["DRAG_TO_MOVE"] = "Taþýmak için sürükleyiniz"; +Calendar._TT["PART_TODAY"] = " (bugün)"; +Calendar._TT["MON_FIRST"] = "Takvim Pazartesi gününden baþlasýn"; +Calendar._TT["SUN_FIRST"] = "Takvim Pazar gününden baþlasýn"; +Calendar._TT["CLOSE"] = "Kapat"; +Calendar._TT["TODAY"] = "Bugün"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y"; +Calendar._TT["TT_DATE_FORMAT"] = "d MM y, DD"; + +Calendar._TT["WK"] = "Hafta"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-zh.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-zh.js new file mode 100644 index 0000000..4a0feb6 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/calendar-zh.js @@ -0,0 +1,119 @@ +// ** I18N + +// Calendar ZH language +// Author: muziq, +// Encoding: GB2312 or GBK +// Distributed under the same terms as the calendar itself. + +// full day names +Calendar._DN = new Array +("ÐÇÆÚÈÕ", + "ÐÇÆÚÒ»", + "ÐÇÆÚ¶þ", + "ÐÇÆÚÈý", + "ÐÇÆÚËÄ", + "ÐÇÆÚÎå", + "ÐÇÆÚÁù", + "ÐÇÆÚÈÕ"); + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("ÈÕ", + "Ò»", + "¶þ", + "Èý", + "ËÄ", + "Îå", + "Áù", + "ÈÕ"); + +// full month names +Calendar._MN = new Array +("Ò»ÔÂ", + "¶þÔÂ", + "ÈýÔÂ", + "ËÄÔÂ", + "ÎåÔÂ", + "ÁùÔÂ", + "ÆßÔÂ", + "°ËÔÂ", + "¾ÅÔÂ", + "Ê®ÔÂ", + "ʮһÔÂ", + "Ê®¶þÔÂ"); + +// short month names +Calendar._SMN = new Array +("Ò»ÔÂ", + "¶þÔÂ", + "ÈýÔÂ", + "ËÄÔÂ", + "ÎåÔÂ", + "ÁùÔÂ", + "ÆßÔÂ", + "°ËÔÂ", + "¾ÅÔÂ", + "Ê®ÔÂ", + "ʮһÔÂ", + "Ê®¶þÔÂ"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "°ïÖú"; + +Calendar._TT["ABOUT"] = +"DHTML Date/Time Selector\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + +"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + +"\n\n" + +"Ñ¡ÔñÈÕÆÚ:\n" + +"- µã»÷ \xab, \xbb °´Å¥Ñ¡ÔñÄê·Ý\n" + +"- µã»÷ " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " °´Å¥Ñ¡ÔñÔ·Ý\n" + +"- ³¤°´ÒÔÉÏ°´Å¥¿É´Ó²Ëµ¥ÖпìËÙÑ¡ÔñÄê·Ý»òÔ·Ý"; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"Ñ¡Ôñʱ¼ä:\n" + +"- µã»÷Сʱ»ò·ÖÖÓ¿Éʹ¸ÄÊýÖµ¼ÓÒ»\n" + +"- °´×¡Shift¼üµã»÷Сʱ»ò·ÖÖÓ¿Éʹ¸ÄÊýÖµ¼õÒ»\n" + +"- µã»÷Í϶¯Êó±ê¿É½øÐпìËÙÑ¡Ôñ"; + +Calendar._TT["PREV_YEAR"] = "ÉÏÒ»Äê (°´×¡³ö²Ëµ¥)"; +Calendar._TT["PREV_MONTH"] = "ÉÏÒ»Ô (°´×¡³ö²Ëµ¥)"; +Calendar._TT["GO_TODAY"] = "תµ½½ñÈÕ"; +Calendar._TT["NEXT_MONTH"] = "ÏÂÒ»Ô (°´×¡³ö²Ëµ¥)"; +Calendar._TT["NEXT_YEAR"] = "ÏÂÒ»Äê (°´×¡³ö²Ëµ¥)"; +Calendar._TT["SEL_DATE"] = "Ñ¡ÔñÈÕÆÚ"; +Calendar._TT["DRAG_TO_MOVE"] = "Í϶¯"; +Calendar._TT["PART_TODAY"] = " (½ñÈÕ)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "×î×ó±ßÏÔʾ%s"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "¹Ø±Õ"; +Calendar._TT["TODAY"] = "½ñÈÕ"; +Calendar._TT["TIME_PART"] = "(Shift-)µã»÷Êó±ê»òÍ϶¯¸Ä±äÖµ"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%A, %b %eÈÕ"; + +Calendar._TT["WK"] = "ÖÜ"; +Calendar._TT["TIME"] = "ʱ¼ä:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/cn_utf8.js b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/cn_utf8.js new file mode 100644 index 0000000..a0ef7c6 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/lang/cn_utf8.js @@ -0,0 +1,123 @@ +// ** I18N + +// Calendar EN language +// Author: Mihai Bazon, +// Encoding: any +// Translator : Niko +// Distributed under the same terms as the calendar itself. + +// For translators: please use UTF-8 if possible. We strongly believe that +// Unicode is the answer to a real internationalized world. Also please +// include your contact information in the header, as can be seen above. + +// full day names +Calendar._DN = new Array +("\u5468\u65e5",//\u5468\u65e5 + "\u5468\u4e00",//\u5468\u4e00 + "\u5468\u4e8c",//\u5468\u4e8c + "\u5468\u4e09",//\u5468\u4e09 + "\u5468\u56db",//\u5468\u56db + "\u5468\u4e94",//\u5468\u4e94 + "\u5468\u516d",//\u5468\u516d + "\u5468\u65e5");//\u5468\u65e5 + +// Please note that the following array of short day names (and the same goes +// for short month names, _SMN) isn't absolutely necessary. We give it here +// for exemplification on how one can customize the short day names, but if +// they are simply the first N letters of the full name you can simply say: +// +// Calendar._SDN_len = N; // short day name length +// Calendar._SMN_len = N; // short month name length +// +// If N = 3 then this is not needed either since we assume a value of 3 if not +// present, to be compatible with translation files that were written before +// this feature. + +// short day names +Calendar._SDN = new Array +("\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d", + "\u5468\u65e5"); + +// full month names +Calendar._MN = new Array +("\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708"); + +// short month names +Calendar._SMN = new Array +("\u4e00\u6708", + "\u4e8c\u6708", + "\u4e09\u6708", + "\u56db\u6708", + "\u4e94\u6708", + "\u516d\u6708", + "\u4e03\u6708", + "\u516b\u6708", + "\u4e5d\u6708", + "\u5341\u6708", + "\u5341\u4e00\u6708", + "\u5341\u4e8c\u6708"); + +// tooltips +Calendar._TT = {}; +Calendar._TT["INFO"] = "\u5173\u4e8e"; + +Calendar._TT["ABOUT"] = +" DHTML \u65e5\u8d77/\u65f6\u95f4\u9009\u62e9\u63a7\u4ef6\n" + +"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) +"For latest version visit: \u6700\u65b0\u7248\u672c\u8bf7\u767b\u9646http://www.dynarch.com/projects/calendar/\u5bdf\u770b\n" + +"\u9075\u5faaGNU LGPL. \u7ec6\u8282\u53c2\u9605 http://gnu.org/licenses/lgpl.html" + +"\n\n" + +"\u65e5\u671f\u9009\u62e9:\n" + +"- \u70b9\u51fb\xab(\xbb)\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e00\u5e74\u5ea6.\n" + +"- \u70b9\u51fb" + String.fromCharCode(0x2039) + "(" + String.fromCharCode(0x203a) + ")\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e2a\u6708\u4efd.\n" + +"- \u957f\u65f6\u95f4\u6309\u7740\u6309\u94ae\u5c06\u51fa\u73b0\u66f4\u591a\u9009\u62e9\u9879."; +Calendar._TT["ABOUT_TIME"] = "\n\n" + +"\u65f6\u95f4\u9009\u62e9:\n" + +"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u589e\u52a0\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\n" + +"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u6309\u4f4fShift\u952e\u540e\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u51cf\u5c11\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)."; + +Calendar._TT["PREV_YEAR"] = "\u4e0a\u4e00\u5e74"; +Calendar._TT["PREV_MONTH"] = "\u4e0a\u4e2a\u6708"; +Calendar._TT["GO_TODAY"] = "\u5230\u4eca\u5929"; +Calendar._TT["NEXT_MONTH"] = "\u4e0b\u4e2a\u6708"; +Calendar._TT["NEXT_YEAR"] = "\u4e0b\u4e00\u5e74"; +Calendar._TT["SEL_DATE"] = "\u9009\u62e9\u65e5\u671f"; +Calendar._TT["DRAG_TO_MOVE"] = "\u62d6\u52a8"; +Calendar._TT["PART_TODAY"] = " (\u4eca\u5929)"; + +// the following is to inform that "%s" is to be the first day of week +// %s will be replaced with the day name. +Calendar._TT["DAY_FIRST"] = "%s\u4e3a\u8fd9\u5468\u7684\u7b2c\u4e00\u5929"; + +// This may be locale-dependent. It specifies the week-end days, as an array +// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 +// means Monday, etc. +Calendar._TT["WEEKEND"] = "0,6"; + +Calendar._TT["CLOSE"] = "\u5173\u95ed"; +Calendar._TT["TODAY"] = "\u4eca\u5929"; +Calendar._TT["TIME_PART"] = "(\u6309\u7740Shift\u952e)\u5355\u51fb\u6216\u62d6\u52a8\u6539\u53d8\u503c"; + +// date formats +Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; +Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e\u65e5"; + +Calendar._TT["WK"] = "\u5468"; +Calendar._TT["TIME"] = "\u65f6\u95f4:"; diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/menuarrow.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/menuarrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..ed2dee0e6368d201bf5d32833884c7c1da6c7424 GIT binary patch literal 68 zcmZ?wbhEHbWM^Py_{hZ2(9rPi-LwDy|1&T!DE?$&WME)o&;ha;K=KSsqAVN&i(DE6 VRJ~d>0vEY-3aNTcS;53$4FHxP5xxKb literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/menuarrow2.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/menuarrow2.gif new file mode 100644 index 0000000000000000000000000000000000000000..40c0aadfc6e62e7cdf4a0dc4a3a3d735c6995b76 GIT binary patch literal 49 zcmZ?wbhEHbWM^PyXkcV;a&r3r|G(l-7DfgJMg|=QAOOiQFmbfVR-Qb-pUlW$4FDM} B3akJC literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/multiple-dates.html b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/multiple-dates.html new file mode 100644 index 0000000..9f1e1f9 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/multiple-dates.html @@ -0,0 +1,82 @@ + + + Sample for the multiple dates feature + + + + + + + + + + + + + + +

Sample for the multiple dates feature

+ +

+ Starting version 0.9.7, + the calendar is able to handle multiple dates selection, in either + flat or popup form. For this to happen one needs to pass the + "multiple: true" parameter to + Calendar.setup and to install an onUpdate + handler that watches for modifications. +

+ + [open calendar...] + +
+ + + +
+
mishoo
+ Last modified: Thu Mar 3 20:17:42 EET 2005 + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/release-notes.html b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/release-notes.html new file mode 100644 index 0000000..b6adeb2 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/release-notes.html @@ -0,0 +1,435 @@ + + + + jscalendar release notes + + + + + +
+ The Coolest DHTML Calendar
+ © Dynarch.com 2002 and later. +
+

jscalendar release notes

+ +

This release compiled at Tuesday, 13 Jan 2009 (13:30).

+ +

1.0

+ +
    + +
  • + Added support for multiple dates selection. In this mode the + calendar will allow the user to select more than one date, and + will maintain an array of selected dates that can be + investigated from your custom handlers. Sample in multiple-dates.html. +
  • + +
  • + Support for “day infoâ€. Using this feature you can display + custom information for certain dates. Sample in dayinfo.html. Note that if the text + is really big the calendar layout might appear somehow broken; + this is something that should be easy to fix in the CSS file. +
  • + +
  • + Clicking on “Today†will now close the calendar if the current + date is already selected. +
  • + +
  • + The “first day of week†setting can now be defined in the + language file--after all, it is locale-specific. The new + parameter is “Calendar._FDâ€. Language files should be + updated, but the calendar will not complain nor fail to + function if the parameter is not present. +
  • + +
  • + Some fixes to make the thing work in Safari. It now seems to + be properly supported, please let me know if you encounter any + problems. +
  • + +
  • + New skin: Aqua theme, appropriate for MacOSX fan sites :-) + This theme is located in “skins/aqua/theme.css†(in the + future, all themes will go to this directory). +
  • + +
  • + Bug fixes. +
      +
    • + Keyboard operation now functions normally when the + calendar is displaying days from adjacent months; it might + even work correctly for months containing disabled dates + :). This fix was originally developed under contract for + The + Zapatec Calendar. Zapatec kindly allowed us to + include the bugfixes back in the open source calendar. +
    • +
    • + Fixed the time selection bug: the previous version would + reset the time to current time when a new date was + clicked. +
    • +
    • + Parsing hours like "12:XX pm" would wrongfully replace + "pm" with "am"--fixed. +
    • +
    • + Fixed critical bugs in parseDate function that would + initialize the calendar with 'NaN' values in all cells if + the string to be parsed is not a valid date. +
    • +
    • + The golbal variable that we are using was renamed to + “_dynarch_popupCalendar†to minimize the risk of name + clashes. It's still difficult to get rid of it. +
    • +
    • + Added z-index property to drop-down menus style. +
    • +
    • + The calendar will update an input field even in flat mode, + if an input field was passed. Also, the “showOthers†+ parameter will be effective in both popup and flat mode. +
    • +
    • + Others, probably. +
    • +
    +
  • + +
  • + Documentation & sample files updated. +
  • + +
+ +

0.9.6

+ +
    + +
  • + "Smart" (TM :-) positioning algorithm. The new algorithm will + try to keep the calendar in the browser view, which is helpful + in situations when the input field is near the bottom or the + right edge. This code is only tested with IE and Mozilla, but + it should work with other browsers too. Many thanks to Sunny Chowdhury for sponsoring + this feature! +
  • + +
  • + Support for IE5/Win is back. I also want to thank Janusz + Piwowarski for keeping his eye on the CVS ;-) He reviewed my + IE5-related changes and sent me a much cleaner patch. +
  • + +
  • + The calendar will now allow any day of week to be "the first + day of week". This was requested long time ago, by someone + whose name I forgot (sorry). The reason was that in certain + countries weeks start on Saturday. So I thought that instead + of having a "mondayFirst" and a "saturdayFirst" parameter, + :-), it's better to have a "firstDayOfWeek" parameter; now + it's present and its meaning is: "0 for Sunday", "1 for + Monday", "2 for Tuesday", etc. The equivalent parameter for + Calendar.setup is "firstDay". The end user can also change + it very easy: click on the day name in the calendar display. +
  • + +
  • + The above feature triggered one important change: the + notion of "weekend" is now defined in the language file. + Added parameters: + +
    +          Calendar._TT["WEEKEND"] = "0,6";
    +          Calendar._TT["DAY_FIRST"] = "Display %s first";
    + + "WEEKEND" specifies a string with comma-separated numbers from + 0 to 7; they define what days are marked as "weekend". 5 and + 6 mean, of course, "Sunday" and "Saturday". Day first is the + tooltip displayed when a day name is hovered; "%s" will get + replaced with the day name. Updated languages are "en" and + "ro", which I maintain. Please note that languages wich are + not updated will not work. If yours is one of them, + please consider fixing it and sending me the fix so that I can + include it in the distro. +
  • + +
  • + The calendar can now display days from the months adjacent to + the currently displayed one. This is optional, of course, and + the parameter name is "showsOtherMonths" (or "showOthers" in + Calendar.setup). All theme files were updated. +
  • + +
  • + Displays "Time:" near the time selector, only if defined in + the language file. +
  • + +
  • + Some bugs fixed in the date parsing code (which has also been + rewritten a little bit cleaner). +
  • + +
  • + Calendar.setup will now configure the calendar to trigger the + input fields' "onchange" event, if specified, when a date is + selected. +
  • + +
  • + New parameter in Calendar.setup: "cache" (defaults to + false). If set to true then the popup calendar object + will be "cached", meaning, it will be created only once, no + matter how many input fields are there in the page. Sometimes + this is not desirable, which is why I've added this + parameter. Please note that it defaults to "false" (thus the + default behavior has changed). +
  • + +
  • + Added a simple PHP wrapper. It provides code which loads all + the required scripts and theme file, and one function which + creates and configures an input field for date input. It + takes care of creating and assigning unique ID-s for the + calendar fields and it also creates the "Calendar.setup" code. + Functions to create more specialized fields can be added very + easily. This feature was requested by the FreeMED.org project + (thanks for donating!). +
  • + +
+ +

Wow, there were quite some changes :-D Enjoy it!

+ +

0.9.5

+ +

+ This release's primary goal is to fix a wrong license statement which + can be found in some files from 0.9.4. For instance in README or + calendar.js, the statement was that the code is distributed under the + GNU GPL; that's because I had plans to change the license, then + changed my mind but unfortunately I committed files so. I am sorry + for this inconvenience, please use the latest (0.9.5) release which is + fully covered by LGPL. +

+ +

Other changes:

+ +
    + +
  • + Fixed an annoying bug that prevented the calendar to display + correctly when it was configured for an input field inside a + scrolling area. Many thanks to Ian Barrack (Simban.com) who pointed it up and + donated quite some money for the Calendar project! +
  • + +
  • + All examples use UTF-8 now; the translations may not be all + up-to-date, but I strongly suggest everyone to use + UTF-8; other encodings are a plain mess. So far I know for sure + that Romanian translation will work with UTF-8 and not + anymore with ISO-8859-2. Other translations are probably + usable under UTF-8, but if your preferred language isn't... ;-) + please make it and send it to me for inclusion. +
  • + +
  • + Fixed small bug in the documentation (one footnote didn't appear + where it should have). +
  • + +
  • + Updated translations: DE, ES, HU, IT, RO. Thanks to everyone who + sent translations! +
  • + +
+ +

0.9.4

+ +

New stuff

+ +
    + +
  • Supports time selection. Yes. ;-) This work has been largely + sponsored by Himanshukumar Shah (thank you!). See + the docs and example files for details on how to setup.
  • + +
  • Easy to link 2 or more fields by using the new + onUpdate parameter of Calendar.setup. This + is useful, say, to automatically set a value in a second field based + on the value selected in the first field. See the documentation and + first sample in simple-1.html.
  • + +
  • Other Calendar.setup low-level parameters, for those + wanting to have the complete control: onSelect and + onClose. The handlers are called when something is + selected in the calendar or when the calendar is closed.
  • + +
  • The translation files can optionally include the short day names + and the short month names. That's because in some languages, like + German, the short form is not the first 3 letters of the entire name + but only the first 2. Also in other languages short names can't be + as easily derived from the full name by just calling substr, so this + patch solves the problem.
  • + +
  • Implemented a nice way to make some dates "special" (look + different). Specifically, the setDisabledHandler method + was replaced with the more general setDateStatusHandler + method (the old one is still available for backwards compatibility but + will be removed). More details about this in the + documentation. Also see simple-3.html + for a live sample.
  • + +
  • Date parsing and formatting engine is now rewritten and supports a + subset of strftime format specifiers from ANSI C. This + makes it possible to use dates like "YYYYMMDD" (the corresponding + format for this would be "%Y%m%d"). Details in the documentation. + Please note that the new engine is not compatibile with older + calendar releases!
  • + +
  • Along with the new date parser I workarounded an unpleasant crash + that occurred in IE when certain accented characters appeared in the + texts. I think German was one of the language with such problems, and + the workaround was to use the letter without an accent. Well, now you + can translate to whatever you want.
  • + +
  • "Fixes" (I mean, "horrible workarounds") for Konqueror (and + hopefully Safari). Unfortunately, this otherwise excellent browser + still has some bugs that keep the calendar from working + exactly as it should.. But they're going to be fixed, + right? ;-)
  • + +
  • CSS themes got pretty much modified too so if you wrote your theme + you need to update it. Aside for the time selector support, the CSS + themes contain a simple hack that makes the navigation buttons show + a little arrow in the lower-right corner which indicates that if one + holds the mouse a menu will appear.
  • + +
+ +

Translation files

+ +

The translation files need to be updated in order for the calendar to + work properly. Currently the only updated files are calendar-en.js + (main file) and calendar-ro.js (well, yes, I am a Romanian ;-).

+ +

Specifically, they need the following:

+ +
    + +
  • Correct date format, according with the new format specifiers + introduced in 0.9.4. Details about the available format specifiers + in the documentation
  • + +
  • Short day or month names, if required. If they can be + derived by taking the first N letters of the full name then a simple + Calendar._SDN_len = N or Calendar._SMN_len = N will suffice. If N + is 3 then nothing needs to be done as we take it for granted if no + other option is offered ;-)
  • + +
  • We have some new texts that shows short usage information as well + as copyright information.
  • + +
+ +

If your favorite language is not there yet, or it is but not updated + according to the main calendar-en.js file, then please consider + translating calendar-en.js and send the translation back to me so that + I include it in the official distribution.

+ +

Bug status

+ +

Check SourceForge, + I didn't keep track. However, there were a lot of bugfixes.

+ +

0.9.3

+ +

New stuff

+ +
    + +
  • Opera 7 compatibility — keyboard navigation is + still not available; text selection can't be disabled, leading to an + ugly effect when walking through the month/year menus.
  • + +
  • Ability to align the calendar relative to the input field (or any + other element). Vertical: top, center, bottom. Horizontal: left, + center, right. This is established as a new parameter for + showAtElement.
  • + +
  • Added dateClicked property (boolean). This can be + inspected in the "onSelect" handler to determine if a date was + really clicked or the user only changed month/year using the menus. + You need to check this for "single-click" calendars and + only close/hide the calendar if it's true.
  • + +
  • Full documentation in HTML + and PDF format is now available in the + distribution archive.
  • + +
  • New language definition files: HU, HR, PT, ZH. Thanks those who + submitted!
  • + +
+ +

Bug status

+ +

This covers only those bugs that have been reported at SourceForge.

+ +
    + +
  1. #703,238 — fixed
  2. +
  3. #703,814 — fixed
  4. +
  5. #716,777 — closed (was fixed already in 0.9.2-1)
  6. +
  7. #723,335 — fixed
  8. +
  9. #715,122 — feature request; implemented.
  10. +
  11. #721,206 — fixed (added "refresh()" function)
  12. +
  13. #721,833 — fixed (bug concerning the "yy" format + parsing)
  14. +
  15. #721,833 — won't fix (we won't set the time to + midnight; time might actually be useful when we implement support + for time selection). + +
+ +
+
Mihai Bazon
+ + +Last modified on Wed Oct 29 02:37:07 2003 + + + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-1.html b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-1.html new file mode 100644 index 0000000..285bff6 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-1.html @@ -0,0 +1,244 @@ + + + + + +Simple calendar setups [popup calendar] + + + + + + + + + + + + + + + + + +

DHTML Calendar — for the impatient

+ +
+

+ This page lists some common setups for the popup calendar. In + order to see how to do any of them please see the source of this + page. For each example it's structured like this: there's the + <form> that contains the input field, and following there is + the JavaScript snippet that setups that form. An example of + flat calendar is available in another page. +

+

+ The code in this page uses a helper function defined in + "calendar-setup.js". With it you can setup the calendar in + minutes. If you're not that impatient, ;-) complete documenation is + available. +

+
+ + + +
+ +

Basic setup: one input per calendar. Clicking in the input field +activates the calendar. The date format is "%m/%d/%Y %I:%M %p". The +calendar defaults to "single-click mode".

+ +

The example below has been updated to show you how to create "linked" +fields. Basically, when some field is filled with a date, the other +is updated so that the difference between them remains one week. The +property useful here is "onUpdate".

+ +
+ + +
+ + + + + +
+ +

Input field with a trigger button. Clicking the button activates +the calendar. Note that this one needs double-click (singleClick parameter +is explicitely set to false). Also demonstrates the "step" parameter +introduced in 0.9.6 (show all years in drop-down boxes, instead of every +other year as default).

+ +
+ +
+ + + + + +
+ +

Input field with a trigger image. Note that the Calendar.setup +function doesn't care if the trigger is a button, image, or anything else. +Also in this example we setup a different alignment, just to show how it's +done. The input field is read-only (that is set from HTML).

+ +
+ + + +
+
+ + + + + +
+ +

Hidden field, display area. The calendar now puts the date into 2 +elements: one is an input field of type "hidden"—so that the user +can't directly see or modify it— and one is a <span> element in +which the date is displayed. Note that if the trigger is not specified the +calendar will use the displayArea (or inputField as in the first example). +The display area can have it's own format. This is useful if, for instance, +we need to store one format in the database (thus pass it in the input +field) but we wanna show a friendlier format to the end-user.

+ +
+ +
+ +

Your birthday: + Click to open date selector.

+ + + + + +
+ +

Hidden field, display area, trigger image. Very similar to the +previous example. The difference is that we also have a trigger image.

+ +
+ +
+ +

Your birthday: -- not entered -- .

+ + + + + +
+ +

Hidden field, display area. Very much like the previous examples, +but we now disable some dates (all weekends, that is, Saturdays and +Sundays).

+ +
+ +
+ +

Your birthday: + Click to open date selector.

+ + + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-2.html b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-2.html new file mode 100644 index 0000000..1cbe522 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-2.html @@ -0,0 +1,108 @@ + + + + + +Simple calendar setup [flat calendar] + + + + + + + + + + + + + + + + + +

DHTML Calendar — for the impatient

+ +
+

+ This page demonstrates how to setup a flat calendar. Examples of + popup calendars are available in another page. +

+

+ The code in this page uses a helper function defined in + "calendar-setup.js". With it you can setup the calendar in + minutes. If you're not that impatient, ;-) complete documentation is + available. +

+
+ + + +
+ +
+ + + +

The positioning of the DIV that contains the calendar is entirely your +job. For instance, the "calendar-container" DIV from this page has the +following style: "float: right; margin-left: 1em; margin-bottom: 1em".

+ +

Following there is the code that has been used to create this calendar. +You can find the full description of the Calendar.setup() function +in the calendar documentation.

+ +
<div style="float: right; margin-left: 1em; margin-bottom: 1em;"
+id="calendar-container"></div>
+
+<script type="text/javascript">
+  function dateChanged(calendar) {
+    // Beware that this function is called even if the end-user only
+    // changed the month/year.  In order to determine if a date was
+    // clicked you can use the dateClicked property of the calendar:
+    if (calendar.dateClicked) {
+      // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
+      var y = calendar.date.getFullYear();
+      var m = calendar.date.getMonth();     // integer, 0..11
+      var d = calendar.date.getDate();      // integer, 1..31
+      // redirect...
+      window.location = "/" + y + "/" + m + "/" + d + "/index.php";
+    }
+  };
+
+  Calendar.setup(
+    {
+      flat         : "calendar-container", // ID of the parent element
+      flatCallback : dateChanged           // our callback function
+    }
+  );
+</script>
+ + + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-3.html b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-3.html new file mode 100644 index 0000000..753ca43 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/simple-3.html @@ -0,0 +1,130 @@ + + + + + +Simple calendar setup [flat calendar] + + + + + + + + + + + + + + + + + + + +

DHTML Calendar — for the impatient

+ +
+

+ This page demonstrates how to setup a flat calendar. Examples of + popup calendars are available in another page. +

+

+ The code in this page uses a helper function defined in + "calendar-setup.js". With it you can setup the calendar in + minutes. If you're not that impatient, ;-) complete documenation is + available. +

+
+ + + +
+ +
+ + + +

The positioning of the DIV that contains the calendar is entirely your +job. For instance, the "calendar-container" DIV from this page has the +following style: "float: right; margin-left: 1em; margin-bottom: 1em".

+ +

Following there is the code that has been used to create this calendar. +You can find the full description of the Calendar.setup() function +in the calendar documenation.

+ +
<div style="float: right; margin-left: 1em; margin-bottom: 1em;"
+id="calendar-container"></div>
+
+<script type="text/javascript">
+  function dateChanged(calendar) {
+    // Beware that this function is called even if the end-user only
+    // changed the month/year.  In order to determine if a date was
+    // clicked you can use the dateClicked property of the calendar:
+    if (calendar.dateClicked) {
+      // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
+      var y = calendar.date.getFullYear();
+      var m = calendar.date.getMonth();     // integer, 0..11
+      var d = calendar.date.getDate();      // integer, 1..31
+      // redirect...
+      window.location = "/" + y + "/" + m + "/" + d + "/index.php";
+    }
+  };
+
+  Calendar.setup(
+    {
+      flat         : "calendar-container", // ID of the parent element
+      flatCallback : dateChanged           // our callback function
+    }
+  );
+</script>
+ + + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/active-bg.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/active-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..d608c54698e081a3deae0f1b9b827484deaeacce GIT binary patch literal 89 zcmZ?wbhEHb3xI7cXAAbm`*d3l}e6x_tTajT<-q|NpP}lZBCift^8z p0SG{98JMLwcHQ}C;N`q}uj=cwv(saC#4b@4SZ=W5%`PM literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/hover-bg.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/hover-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..fbf94fc2c1891ff891f2d3c3208cf431c35a4628 GIT binary patch literal 89 zcmZ?wbhEHb-E$->CMz|NrfPt>_6 zHL)Z$MWH;iBts!2BUQoO(>H)Y2dIbvWC#PZ6vwVR9}T>mSMODQeRg(w%#PS4t~~0B LE8grwc6hbmm72G|20~mA|fB", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ + background: url("title-bg.gif") repeat-x 0 100%; color: #000; + font-weight: bold; +} + +.calendar .nav { + font-family: verdana,tahoma,sans-serif; +} + +.calendar .nav div { + background: transparent url("menuarrow.gif") no-repeat 100% 100%; +} + +.calendar thead tr { background: url("title-bg.gif") repeat-x 0 100%; color: #000; } + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + padding: 2px; + background: url("title-bg.gif") repeat-x 0 100%; color: #000; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #797979; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #c44; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background: url("hover-bg.gif"); + border-bottom: 1px solid #797979; + padding: 2px 2px 1px 2px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background: url("active-bg.gif"); color: #fff; + padding: 3px 1px 0px 3px; + border-bottom: 1px solid #797979; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: url("dark-bg.gif"); +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + font-family: verdana,tahoma,sans-serif; + width: 2em; + color: #000; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #999; +} +.calendar tbody .day.othermonth.oweekend { + color: #f99; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #797979; + background: url("dark-bg.gif"); +} + +.calendar tbody .rowhilite td, +.calendar tbody .rowhilite td.wn { + background: url("rowhover-bg.gif"); +} + +.calendar tbody td.today { font-weight: bold; /* background: url("today-bg.gif") no-repeat 70% 50%; */ } + +.calendar tbody td.hilite { /* Hovered cells */ + background: url("hover-bg.gif"); + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #c44; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border: 1px solid #797979; + padding: 1px 3px 1px 1px; + background: url("active-bg.gif"); color: #fff; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #565; + color: #fff; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + padding: 2px; + background: url("status-bg.gif") repeat-x 0 0; color: #000; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #afa; + border: 1px solid #084; + color: #000; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #7c7; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border-width: 0 1px 1px 1px; + border-style: solid; + border-color: #797979; + background: url("normal-bg.gif"); color: #000; + z-index: 100; + font-size: 90%; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: url("hover-bg.gif"); color: #000; +} + +.calendar .combo .active { + background: url("active-bg.gif"); color: #fff; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #797979; + padding: 1px 0px; + text-align: center; + background: url("dark-bg.gif"); +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 5px 0px 6px; + font-weight: bold; + background: url("normal-bg.gif"); color: #000; +} + +.calendar td.time .hour, +.calendar td.time .minute { + font-family: monospace; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + background: url("hover-bg.gif"); color: #000; +} + +.calendar td.time span.active { + background: url("active-bg.gif"); color: #fff; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/title-bg.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/aqua/title-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a541b3bc1e4bbee3268e8a5b431e2c7e067b3b9 GIT binary patch literal 116 zcmZ?wbhEHbWMmLyc+AI8Sy_4e_U#7`9z1*Y?D_NOFJ8QO`}Xa-ckkZ6fB*UO=PzHr zeEwc6hbmm72G|20~mA|fBtHB8VX&K*sP!FEoV37-@-w z0R<@%0vdJ3g^a|I?Pj7#(uKh`L|Finie4=6J7+yFJ!?;2&hK|#eqYx=!aJTkdGdK~ zpXAvT*|;uzpq}wF^XC|f7Hy%(3T3cCne7xg0NE&VQse^UpvX;;2at=R3KMyuTq^;2 zC|Y8oD$05(`vPTsz*a#S0tVY?u&+|C9=JNny<&2Wlxxu0Hl1B<&bOHJt%U0!T(_BC zgSodcw-fkw;8z2`7Wg+!zQf>qKnNTBb`ZKuVKa!`hOo;JcIVTBAiY~i59ZSeL+aC| z!@BeVWcDfiw+cT5^1&QG406AoIcj8%=$U~We@)9obve2q{HDt%A^V9eOz8`!W#PUo z{Glyegxu${_yBUTjF`%Z|48DTBtDfyM6y>wiIePzB&H=%lq8Adt`lWUQ^v6JD^_ko zVMxpW0>xpRzl-zJT46#fEanU@Jl2Z$aN#etkRrv0xcG#WQfd*YMOH0xfG5?`f?CQG zRZvSM70ars5}YAe!5FKgv{(qnpg$pmfIbJN473Ck12uqBc&`6pfd*o?R4~A_FpDaG zf^k#kwtL0q(ctCQJ>$_C|68Xo9Y5B%<>HN|rPXUc)#iLZ4#(@;I^sWF!BdIIrn4`- z_ReJJ%ebfY&*2}GiP+Mnwl{8s9^RRq>F%t|b=gjA`^L{W-2=&FGRjoj?dL}ulChUN ztGti>UrgEp&DJF~TgO`%XJ0rw;D5cjZkdINhI+^4JxpY(BDmw(Y^2$Dw;%8S`6J8C z+7+J0mD495S)75uciVQyzK?~28yvw)3bIF5-kaz;!0dbQmF@mI-kmt>7+F`d+N zt#PY&(k@T!8mH}j>(;M_TI-IV)AU=8{=a)`lc$<@jm#z)SE${(>{g=Z!tz!BW;gbH Q9Q54|91Yd!^&U{0QZjy A#Q*>R literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/menuarrow.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/menuarrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..40c0aadfc6e62e7cdf4a0dc4a3a3d735c6995b76 GIT binary patch literal 49 zcmZ?wbhEHbWM^PyXkcV;a&r3r|G(l-7DfgJMg|=QAOOiQFmbfVR-Qb-pUlW$4FDM} B3akJC literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/normal-bg.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/normal-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..f413e95d15ef1d094657564f76b6c56e3605116c GIT binary patch literal 50 zcmZ?wbhEHbi_@% literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/rowhover-bg.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/rowhover-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..55d38251c549991821f2c99f8cb5a95c557295cd GIT binary patch literal 50 zcmZ?wbhEHb_ AUH||9 literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/status-bg.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/status-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..8a0bb57b1df8bf3bfc42a0c2ecc7ab6b3b7cc25a GIT binary patch literal 149 zcmZ?wbhEHbWMmLyIKsg2?Af!24 + Copyright 2005 Marcus Bointon + Subject to the same license as The Coolest DHTML Calendar +*/ + +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #bdb2bf; + font-size: 12px; + color: #000; + cursor: default; + background: url("normal-bg.gif"); + font-family: Myriad, "trebuchet ms",verdana,tahoma,sans-serif; +} + +.calendar { + border-color: #797979; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ + background: url("title-bg.gif") repeat-x 0 100%; color: #000; + font-weight: bold; +} + +.calendar .nav { + font-family: Myriad, verdana,tahoma,sans-serif; +} + +.calendar .nav div { + background: transparent url("menuarrow.gif") no-repeat 100% 100%; +} + +.calendar thead tr { background: url("title-bg.gif") repeat-x 0 100%; color: #000; } + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + padding: 4px; + background: url("title-bg.gif") repeat-x 0 100%; color: #000; +} + +.calendar thead .headrow { /* Row containing navigation buttons */ +} + +.calendar thead .name { /* Cells containing the day names */ + border-bottom: 1px solid #797979; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #e22; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background: url("hover-bg.gif"); + border-bottom: 1px solid #797979; + padding: 2px 2px 1px 2px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background: url("active-bg.gif"); color: #fff; + padding: 2px 2px 1px 2px; + border-bottom: 1px solid #797979; +} + +.calendar thead .daynames { /* Row containing the day names */ + background: url("dark-bg.gif"); +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells containing month days dates */ + font-family: Myriad,verdana,tahoma,sans-serif; + width: 2em; + color: #000; + text-align: right; + padding: 3px 3px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #999; +} +.calendar tbody .day.othermonth.oweekend { + color: #f99; +} + +.calendar table .wn { + padding: 2px 1px 1px 1px; + border-right: 1px solid #797979; + background: url("dark-bg.gif"); +} + +.calendar tbody .rowhilite td, +.calendar tbody .rowhilite td.wn { + background: url("rowhover-bg.gif"); +} + +.calendar tbody td.today { font-weight: bold; } + +.calendar tbody td.hilite { /* Hovered cells */ + background: url("hover-bg.gif"); + padding: 2px 2px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells */ +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #e22; +} + +.calendar tbody td.selected { /* Cell showing selected date */ + font-weight: bold; + border: 1px solid #797979; + padding: 2px 2px 1px 1px; + background: url("active-bg.gif"); color: #fff; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The in footer (only one right now) */ + text-align: center; + background: #565; + color: #fff; +} + +.calendar tfoot .footrow td { /* The in footer (only one right now) */ + padding-top: 4px; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell */ + padding: 2px; + background: url("status-bg.gif") repeat-x 0 0; color: #000; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #afa; + border: 1px solid #084; + color: #000; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #7c7; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border-width: 0 1px 1px 1px; + border-style: solid; + border-color: #797979; + background: url("normal-bg.gif"); color: #000; + z-index: 100; + font-size: 90%; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: url("hover-bg.gif"); color: #000; +} + +.calendar .combo .active { + background: url("active-bg.gif"); color: #fff; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #797979; + padding: 1px 0px; + text-align: center; + background: url("dark-bg.gif"); +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 5px 0px 6px; + font-weight: bold; + background: url("normal-bg.gif"); color: #000; +} + +.calendar td.time .hour, +.calendar td.time .minute { + font-family: monospace; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + background: url("hover-bg.gif"); color: #000; +} + +.calendar td.time span.active { + background: url("active-bg.gif"); color: #fff; +} diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/title-bg.gif b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/skins/tiger/title-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..75bf48c0952b4307145d43f2cad4f2ea96263d7e GIT binary patch literal 149 zcmZ?wbhEHbWMmLyIKsg2?Af!24 + + + + JS Calendar (positioning test) + + + + + + + + + + + + +
+ + + + + + + +
+ + + diff --git a/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/test.php b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/test.php new file mode 100644 index 0000000..4ae18c9 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/test.php @@ -0,0 +1,116 @@ + + + + + +Test for calendar.php + + + section; it will "echo" code that loads the calendar +// scripts and theme file. +$calendar->load_files(); + +?> + + + + + + + +

Form submitted

+ + $val) { + echo htmlspecialchars($key) . ' = ' . htmlspecialchars($val) . '
'; +} ?> + + + +

Calendar.php test

+ +
+ Select language: +
+ NOTE: as of this release, 0.9.6, only "EN" and "RO", which I + maintain, function correctly. Other language files do not work + because they need to be updated. If you update some language file, + please consider sending it back to me so that I can include it in the + calendar distribution. +
+
+ +
+ + + + + + + +
+ Date 1: + + make_input_field( + // calendar options go here; see the documentation and/or calendar-setup.js + array('firstDay' => 1, // show Monday first + 'showsTime' => true, + 'showOthers' => true, + 'ifFormat' => '%Y-%m-%d %I:%M %P', + 'timeFormat' => '12'), + // field attributes go here + array('style' => 'width: 15em; color: #840; background-color: #ff8; border: 1px solid #000; text-align: center', + 'name' => 'date1', + 'value' => strftime('%Y-%m-%d %I:%M %P', strtotime('now')))); ?> +
+ +
+ + +
+ + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/jscolor/arrow.gif b/itf/static/js/html5Forms.js/shared/js/jscolor/arrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..246478a864f812d93d4cd0e0d0ad1c8e2d09c825 GIT binary patch literal 66 zcmZ?wbhEHbWM|-JSjfZx1poj4Utv=LM2bII7`Ygj7<53QAbAERVV@R>f}L*~a`L;Z PKCZl?^}@uHk--`OML81Y literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscolor/cross.gif b/itf/static/js/html5Forms.js/shared/js/jscolor/cross.gif new file mode 100644 index 0000000000000000000000000000000000000000..0ee9c7ac517bee40b78aea03afa809631f0b69fa GIT binary patch literal 83 zcmZ?wbhEHb + + jscolor demo + + + + + + Click here: + + + diff --git a/itf/static/js/html5Forms.js/shared/js/jscolor/hs.png b/itf/static/js/html5Forms.js/shared/js/jscolor/hs.png new file mode 100644 index 0000000000000000000000000000000000000000..3d94486cedaf7111d010fdaf2cefad45fd1f878b GIT binary patch literal 2684 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 YzFqsNg>|5V=vOIWZ|#VBZRvIQe;Bk#LI3~& literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscolor/hv.png b/itf/static/js/html5Forms.js/shared/js/jscolor/hv.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5e01f8bcecc4cf835e8eeeaa43ef2c06789022 GIT binary patch literal 2865 zcmX9=3pmqV7@teXHB3Y-6(VIKN(`gs(lEJ2EJSn5Crm8<3KhyeDHUOICnT3LV_lSr zSZ;GyqBJp=+1PCR_SJKqbI$X;=RD_m-{1TDz3)kPaYD#Qs!D=DAQ^i*TUWu}ESNzO z!h$tb?&uc~NOHs8*4pjL*kZxr-PxxyX>x_gxykAYer+%xw7GJL6<~$lv;J_uukT@e zT+7b}$(pn*(JJ8$DZ#LZ01jlU-F%s?>x-3}&1jWkz{Hc;TVcidNj^67rKf!1D*@3) ztLL+`4RJ%9hMug+6V6!!-IHycuV!0OlQmpmv2CKSg0YG1{n}Dwm~{0fWmk@tnE%bH zGDMD}$zh}Xd*A5Jr>Ab?KaI7@rj$4go;`Iq6;(c5H(>=6GfP&HNa3NNYQLnDvJ2ne z$YJeDOOojN`RsDxcPJ(@V2^adMpBgs?_RszQhhwQTbkTUT9<$&gblmnY#tn#SD%?s z6!FjP;K)%vq`iXljQbV;EA`q3gN>D#kt_%-rrtu}_V)B!9x+O;F>_Uw;U$2LUW(r( zZ^t$jiL0NIPPJC#r9ftBYTo7JNd@BVMwfPoS>#W-s{js57)P8TQqF2LKJSC~q zN`(OhzStrI{*42`M}?+OHN|N(nHmc2&ss7X>pqp|EuFchzf#w`Q<>0h788{$3pLsi z{A+Y8H$ZvOeD+cX_=w?G*WmD7#5x;KQ;esP!0)6)^5AH8-y+H+(ltKN1HTE6jI?K z(Oj2zOym!q0yMO-dc+a4KFGVLQdOCayj7RKSbo5}XS%`Er&=Enk8l=Lt4N_|ws%>z zDTw$}Y`Nm#m5bv zhmbvJfbg?pPsmqI$V;VUb6K4%(8Blyamyoc^3Mt~#nxOV2-1;QS z7!g7Xk6~wu3v&9INnRdHE*gAiCyeFJfduHa!!F*?W}`Rm+67%Q2s@LIH)iL^`wkK? zP=B5?DxX)2ei6KWxu`4O*JwZU+*(Cn+LV2vEPKLR@_s$KUT7@2PHFKwyIUh>^m?5T z#Wg9M+ONj0h5LZ>!IpK?OV*wMW)AaJ>s;#DyjnhJJV%E}HpnL*e41CBd!#oRt0hRq zD7&FLe2(1tZe#9{PBC=l7=zkzp0E>J}%G@Q)V(&5;V; z_Ip{Z1E&&~f`Si(E^g}CJnwWVfQ{%Unn?l%XMGXgcA?zDBpPe^pO`J?UGQi2^T4)IUfoOnd(>JAQ8aPg@ zB_;;xwvXzblZt7u^BsB>aU@zJE1ch*TlQwuWu7BDuKT{66^RATo0B+Y!@Lhy1GSwWwEi=Q+}{?yp8BIm>I-u0&;G(EAzl`dWB zRwuQl%yBKwtv`^NR}gNuzg>8Y(x1DoZboBm7h9&Lhd6FL<64*y8ZDcoR+2S>La>P{ zdT}{ovrGh|#CyWM!R~Nh2aG>ZjO+}-icsKGb<8`S26!F3nT0k<6$)RZuei(y1^m-V z`FzfUFvRX2AB~LzUAD`t4sh4+X?+2kj20+cq*#lahA)7AosJ-k#=;GD*U}97uFLKj zo^@6(zQe&aeK^$2IN*IzWO-uxdlY3#5IvJ?Va5_yC8^$xf6c)Wz8!vpPzq^I#s8-J zYyM?GrR0`h}1un-M;JJa=H9Ncb^MF#<$~pqrt4epF8nadCmVNKJuIWM9YdYW&cwO1A~wUN zrd-jpV#03i+W0W%1&nO}Uy!h7u>^0`~OuH_{)(AjBe;hsQ!*)mO_DzpGRC zyox}(f&d2Gpi6^iw#eB7bVT;3FFa@cC>tM0 zh`Tj?={tK()4_woqpfX-$RrW>1rj>)NVFkyuySiiw7RSW_`4Px7jCb2c4SAc`*^t$*(d zB&ak&1Rbch68*E0=N1vmji9yfXFnH>R$*ue>|7dPIO)*efxInfOwf5~K+Ou1gVxLJ znHJS9zagvG#*KbWDL=8YuMi#xgFQZk9Mq{0A}gF)8u?-xvaEZdtqyUFRTrLq*p?!~??u&DrIz2ow@FRy0XX+-+%7G>uU0&kTN1W1G| zr>H6)4|9Ji%2`d{EBb%`9?5PNx968;9+OmY4|DC?&+M;;jN=L6in4xY&Q$twq0QFAeZuQ15|q?2tO{QUL* E0LKozl>h($ literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/jscolor/jscolor.js b/itf/static/js/html5Forms.js/shared/js/jscolor/jscolor.js new file mode 100644 index 0000000..1d7713b --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/jscolor/jscolor.js @@ -0,0 +1,840 @@ +/** + * jscolor, JavaScript Color Picker + * + * @version 1.3.1 + * @license GNU Lesser General Public License, http://www.gnu.org/copyleft/lesser.html + * @author Jan Odvarko, http://odvarko.cz + * @created 2008-06-15 + * @updated 2010-01-23 + * @link http://jscolor.com + */ + + +var jscolor = { + + + dir : '', // location of jscolor directory (leave empty to autodetect) + bindClass : 'color', // class name + binding : true, // automatic binding via + preloading : true, // use image preloading? + + + install : function() { + jscolor.addEvent(window, 'load', jscolor.init); + }, + + + init : function() { + if(jscolor.binding) { + jscolor.bind(); + } + if(jscolor.preloading) { + jscolor.preload(); + } + }, + + + getDir : function() { + if(!jscolor.dir) { + var detected = jscolor.detectDir(); + jscolor.dir = detected!==false ? detected : 'jscolor/'; + } + return jscolor.dir; + }, + + + detectDir : function() { + var base = location.href; + + var e = document.getElementsByTagName('base'); + for(var i=0; i vs[a] ? + (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) : + tp[a], + -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ? + (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) : + (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c) + ]; + drawPicker(pp[a], pp[b]); + } + }; + + + this.importColor = function() { + if(!valueElement) { + this.exportColor(); + } else { + if(!this.adjust) { + if(!this.fromString(valueElement.value, leaveValue)) { + styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor; + styleElement.style.color = styleElement.jscStyle.color; + this.exportColor(leaveValue | leaveStyle); + } + } else if(!this.required && /^\s*$/.test(valueElement.value)) { + valueElement.value = ''; + styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor; + styleElement.style.color = styleElement.jscStyle.color; + this.exportColor(leaveValue | leaveStyle); + + } else if(this.fromString(valueElement.value)) { + // OK + } else { + this.exportColor(); + } + } + }; + + + this.exportColor = function(flags) { + if(!(flags & leaveValue) && valueElement) { + var value = this.toString(); + if(this.caps) { value = value.toUpperCase(); } + if(this.hash) { value = '#'+value; } + valueElement.value = value; + } + if(!(flags & leaveStyle) && styleElement) { + styleElement.style.backgroundColor = + '#'+this.toString(); + styleElement.style.color = + 0.213 * this.rgb[0] + + 0.715 * this.rgb[1] + + 0.072 * this.rgb[2] + < 0.5 ? '#FFF' : '#000'; + } + if(!(flags & leavePad) && isPickerOwner()) { + redrawPad(); + } + if(!(flags & leaveSld) && isPickerOwner()) { + redrawSld(); + } + }; + + + this.fromHSV = function(h, s, v, flags) { // null = don't change + h<0 && (h=0) || h>6 && (h=6); + s<0 && (s=0) || s>1 && (s=1); + v<0 && (v=0) || v>1 && (v=1); + this.rgb = HSV_RGB( + h===null ? this.hsv[0] : (this.hsv[0]=h), + s===null ? this.hsv[1] : (this.hsv[1]=s), + v===null ? this.hsv[2] : (this.hsv[2]=v) + ); + this.exportColor(flags); + }; + + + this.fromRGB = function(r, g, b, flags) { // null = don't change + r<0 && (r=0) || r>1 && (r=1); + g<0 && (g=0) || g>1 && (g=1); + b<0 && (b=0) || b>1 && (b=1); + var hsv = RGB_HSV( + r===null ? this.rgb[0] : (this.rgb[0]=r), + g===null ? this.rgb[1] : (this.rgb[1]=g), + b===null ? this.rgb[2] : (this.rgb[2]=b) + ); + if(hsv[0] !== null) { + this.hsv[0] = hsv[0]; + } + if(hsv[2] !== 0) { + this.hsv[1] = hsv[1]; + } + this.hsv[2] = hsv[2]; + this.exportColor(flags); + }; + + + this.fromString = function(hex, flags) { + var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i); + if(!m) { + return false; + } else { + if(m[1].length === 6) { // 6-char notation + this.fromRGB( + parseInt(m[1].substr(0,2),16) / 255, + parseInt(m[1].substr(2,2),16) / 255, + parseInt(m[1].substr(4,2),16) / 255, + flags + ); + } else { // 3-char notation + this.fromRGB( + parseInt(m[1].charAt(0)+m[1].charAt(0),16) / 255, + parseInt(m[1].charAt(1)+m[1].charAt(1),16) / 255, + parseInt(m[1].charAt(2)+m[1].charAt(2),16) / 255, + flags + ); + } + return true; + } + }; + + + this.toString = function() { + return ( + (0x100 | Math.round(255*this.rgb[0])).toString(16).substr(1) + + (0x100 | Math.round(255*this.rgb[1])).toString(16).substr(1) + + (0x100 | Math.round(255*this.rgb[2])).toString(16).substr(1) + ); + }; + + + function RGB_HSV(r, g, b) { + var n = Math.min(Math.min(r,g),b); + var v = Math.max(Math.max(r,g),b); + var m = v - n; + if(m === 0) { return [ null, 0, v ]; } + var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m); + return [ h===6?0:h, m/v, v ]; + } + + + function HSV_RGB(h, s, v) { + if(h === null) { return [ v, v, v ]; } + var i = Math.floor(h); + var f = i%2 ? h-i : 1-(h-i); + var m = v * (1 - s); + var n = v * (1 - s*f); + switch(i) { + case 6: + case 0: return [v,n,m]; + case 1: return [n,v,m]; + case 2: return [m,v,n]; + case 3: return [m,n,v]; + case 4: return [n,m,v]; + case 5: return [v,m,n]; + } + } + + + function removePicker() { + delete jscolor.picker.owner; + document.getElementsByTagName('body')[0].removeChild(jscolor.picker.boxB); + } + + + function drawPicker(x, y) { + if(!jscolor.picker) { + jscolor.picker = { + box : document.createElement('div'), + boxB : document.createElement('div'), + pad : document.createElement('div'), + padB : document.createElement('div'), + padM : document.createElement('div'), + sld : document.createElement('div'), + sldB : document.createElement('div'), + sldM : document.createElement('div') + }; + for(var i=0,segSize=4; i",d.insertBefore(c.lastChild,d.firstChild)}function h(){var a=k.elements;return typeof a=="string"?a.split(" "):a}function i(a){var b={},c=a.createElement,e=a.createDocumentFragment,f=e();a.createElement=function(a){var e=(b[a]||(b[a]=c(a))).cloneNode();return k.shivMethods&&e.canHaveChildren&&!d.test(a)?f.appendChild(e):e},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+h().join().replace(/\w+/g,function(a){return b[a]=c(a),f.createElement(a),'c("'+a+'")'})+");return n}")(k,f)}function j(a){var b;return a.documentShived?a:(k.shivCSS&&!e&&(b=!!g(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),f||(b=!i(a)),b&&(a.documentShived=b),a)}var c=a.html5||{},d=/^<|^(?:button|form|map|select|textarea)$/i,e,f;(function(){var a=b.createElement("a");a.innerHTML="",e="hidden"in a,f=a.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}()})();var k={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:j};a.html5=k,j(b)}(this,b),e._version=d,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+q.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return o.call(a)=="[object Function]"}function e(a){return typeof a=="string"}function f(){}function g(a){return!a||a=="loaded"||a=="complete"||a=="uninitialized"}function h(){var a=p.shift();q=1,a?a.t?m(function(){(a.t=="c"?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){a!="img"&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l={},o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};y[c]===1&&(r=1,y[c]=[],l=b.createElement(a)),a=="object"?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),a!="img"&&(r||y[c]===2?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i(b=="c"?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),p.length==1&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&o.call(a.opera)=="[object Opera]",l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return o.call(a)=="[object Array]"},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f7)};d.historymanagement=function(){return!!(i.history&&history.pushState)};d.draganddrop=function(){return u("drag")&&u("dragstart")&&u("dragenter")&&u("dragover")&&u("dragleave")&&u("dragend")&&u("drop")};d.websockets=function(){return"WebSocket"in i};d.rgba=function(){m.cssText="background-color:rgba(150,255,150,.5)";return(""+m.backgroundColor).indexOf("rgba")!==-1};d.hsla=function(){m.cssText="background-color:hsla(120,40%,100%,.5)";return(""+ + m.backgroundColor).indexOf("rgba")!==-1};d.multiplebgs=function(){m.cssText="background:url(//:),url(//:),red url(//:)";return/(url\s*\(.*?){3}/.test(m.background)};d.backgroundsize=function(){return r("backgroundSize")};d.borderimage=function(){return r("borderImage")};d.borderradius=function(){return r("borderRadius","",function(a){return(""+a).indexOf("orderRadius")!==-1})};d.boxshadow=function(){return r("boxShadow")};d.opacity=function(){var a=y.join("opacity:.5;")+"";m.cssText=a;return(""+m.opacity).indexOf("0.5")!== + -1};d.cssanimations=function(){return r("animationName")};d.csscolumns=function(){return r("columnCount")};d.cssgradients=function(){var a=("background-image:"+y.join("gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:")+y.join("linear-gradient(left top,#9f9, white);background-image:")).slice(0,-17);m.cssText=a;return(""+m.backgroundImage).indexOf("gradient")!==-1};d.cssreflections=function(){return r("boxReflect")};d.csstransforms=function(){return!!C(["transformProperty", + "WebkitTransform","MozTransform","OTransform","msTransform"])};d.csstransforms3d=function(){var a=!!C(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);if(a){var b=document.createElement("style"),c=e.createElement("div");b.textContent="@media ("+y.join("transform-3d),(")+"modernizr){#modernizr{height:3px}}";e.getElementsByTagName("head")[0].appendChild(b);c.id="modernizr";s.appendChild(c);a=c.offsetHeight===3;b.parentNode.removeChild(b);c.parentNode.removeChild(c)}return a}; + d.csstransitions=function(){return r("transitionProperty")};d.fontface=function(){var a;if(/*@cc_on@if(@_jscript_version>=5)!@end@*/0)a=true;else{var b=e.createElement("style"),c=e.createElement("span"),h,t=false,g=e.body,o,w;b.textContent="@font-face{font-family:testfont;src:url('data:font/ttf;base64,AAEAAAAMAIAAAwBAT1MvMliohmwAAADMAAAAVmNtYXCp5qrBAAABJAAAANhjdnQgACICiAAAAfwAAAAEZ2FzcP//AAMAAAIAAAAACGdseWYv5OZoAAACCAAAANxoZWFk69bnvwAAAuQAAAA2aGhlYQUJAt8AAAMcAAAAJGhtdHgGDgC4AAADQAAAABRsb2NhAIQAwgAAA1QAAAAMbWF4cABVANgAAANgAAAAIG5hbWUgXduAAAADgAAABPVwb3N03NkzmgAACHgAAAA4AAECBAEsAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAACAAMDAAAAAAAAgAACbwAAAAoAAAAAAAAAAFBmRWQAAAAgqS8DM/8zAFwDMwDNAAAABQAAAAAAAAAAAAMAAAADAAAAHAABAAAAAABGAAMAAQAAAK4ABAAqAAAABgAEAAEAAgAuqQD//wAAAC6pAP///9ZXAwAAAAAAAAACAAAABgBoAAAAAAAvAAEAAAAAAAAAAAAAAAAAAAABAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEACoAAAAGAAQAAQACAC6pAP//AAAALqkA////1lcDAAAAAAAAAAIAAAAiAogAAAAB//8AAgACACIAAAEyAqoAAwAHAC6xAQAvPLIHBADtMrEGBdw8sgMCAO0yALEDAC88sgUEAO0ysgcGAfw8sgECAO0yMxEhESczESMiARDuzMwCqv1WIgJmAAACAFUAAAIRAc0ADwAfAAATFRQWOwEyNj0BNCYrASIGARQGKwEiJj0BNDY7ATIWFX8aIvAiGhoi8CIaAZIoN/43KCg3/jcoAWD0JB4eJPQkHh7++EY2NkbVRjY2RgAAAAABAEH/+QCdAEEACQAANjQ2MzIWFAYjIkEeEA8fHw8QDxwWFhwWAAAAAQAAAAIAAIuYbWpfDzz1AAsEAAAAAADFn9IuAAAAAMWf0i797/8zA4gDMwAAAAgAAgAAAAAAAAABAAADM/8zAFwDx/3v/98DiAABAAAAAAAAAAAAAAAAAAAABQF2ACIAAAAAAVUAAAJmAFUA3QBBAAAAKgAqACoAWgBuAAEAAAAFAFAABwBUAAQAAgAAAAEAAQAAAEAALgADAAMAAAAQAMYAAQAAAAAAAACLAAAAAQAAAAAAAQAhAIsAAQAAAAAAAgAFAKwAAQAAAAAAAwBDALEAAQAAAAAABAAnAPQAAQAAAAAABQAKARsAAQAAAAAABgAmASUAAQAAAAAADgAaAUsAAwABBAkAAAEWAWUAAwABBAkAAQBCAnsAAwABBAkAAgAKAr0AAwABBAkAAwCGAscAAwABBAkABABOA00AAwABBAkABQAUA5sAAwABBAkABgBMA68AAwABBAkADgA0A/tDb3B5cmlnaHQgMjAwOSBieSBEYW5pZWwgSm9obnNvbi4gIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UuIEtheWFoIExpIGdseXBocyBhcmUgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDMuYmFlYzJhOTJiZmZlNTAzMiAtIHN1YnNldCBvZiBKdXJhTGlnaHRiYWVjMmE5MmJmZmU1MDMyIC0gc3Vic2V0IG9mIEZvbnRGb3JnZSAyLjAgOiBKdXJhIExpZ2h0IDogMjMtMS0yMDA5YmFlYzJhOTJiZmZlNTAzMiAtIHN1YnNldCBvZiBKdXJhIExpZ2h0VmVyc2lvbiAyIGJhZWMyYTkyYmZmZTUwMzIgLSBzdWJzZXQgb2YgSnVyYUxpZ2h0aHR0cDovL3NjcmlwdHMuc2lsLm9yZy9PRkwAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMAA5ACAAYgB5ACAARABhAG4AaQBlAGwAIABKAG8AaABuAHMAbwBuAC4AIAAgAFIAZQBsAGUAYQBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGUAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALgAgAEsAYQB5AGEAaAAgAEwAaQAgAGcAbAB5AHAAaABzACAAYQByAGUAIAByAGUAbABlAGEAcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAEcAUABMACAAdgBlAHIAcwBpAG8AbgAgADMALgBiAGEAZQBjADIAYQA5ADIAYgBmAGYAZQA1ADAAMwAyACAALQAgAHMAdQBiAHMAZQB0ACAAbwBmACAASgB1AHIAYQBMAGkAZwBoAHQAYgBhAGUAYwAyAGEAOQAyAGIAZgBmAGUANQAwADMAMgAgAC0AIABzAHUAYgBzAGUAdAAgAG8AZgAgAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAASgB1AHIAYQAgAEwAaQBnAGgAdAAgADoAIAAyADMALQAxAC0AMgAwADAAOQBiAGEAZQBjADIAYQA5ADIAYgBmAGYAZQA1ADAAMwAyACAALQAgAHMAdQBiAHMAZQB0ACAAbwBmACAASgB1AHIAYQAgAEwAaQBnAGgAdABWAGUAcgBzAGkAbwBuACAAMgAgAGIAYQBlAGMAMgBhADkAMgBiAGYAZgBlADUAMAAzADIAIAAtACAAcwB1AGIAcwBlAHQAIABvAGYAIABKAHUAcgBhAEwAaQBnAGgAdABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAAAAAgAAAAAAAP+BADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQACAQIAEQt6ZXJva2F5YWhsaQ==')}"; + e.getElementsByTagName("head")[0].appendChild(b);c.setAttribute("style","font:99px _,arial,helvetica;position:absolute;visibility:hidden");if(!g){g=s.appendChild(e.createElement("fontface"));t=true}c.innerHTML="........";c.id="fonttest";g.appendChild(c);h=c.offsetWidth*c.offsetHeight;c.style.font="99px testfont,_,arial,helvetica";a=h!==c.offsetWidth*c.offsetHeight;var v=function(){if(g.parentNode){a=j.fontface=h!==c.offsetWidth*c.offsetHeight;s.className=s.className.replace(/(no-)?fontface\b/,"")+ + (a?" ":" no-")+"fontface"}};setTimeout(v,75);setTimeout(v,150);addEventListener("load",function(){v();(w=true)&&o&&o(a);setTimeout(function(){t||(g=c);g.parentNode.removeChild(g);b.parentNode.removeChild(b)},50)},false)}j._fontfaceready=function(p){w||a?p(a):(o=p)};return a||h!==c.offsetWidth};d.video=function(){var a=e.createElement("video"),b=!!a.canPlayType;if(b){b=new Boolean(b);b.ogg=a.canPlayType('video/ogg; codecs="theora"');b.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"');b.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return b}; + d.audio=function(){var a=e.createElement("audio"),b=!!a.canPlayType;if(b){b=new Boolean(b);b.ogg=a.canPlayType('audio/ogg; codecs="vorbis"');b.mp3=a.canPlayType("audio/mpeg;");b.wav=a.canPlayType('audio/wav; codecs="1"');b.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")}return b};d.localStorage=function(){return"localStorage"in i&&i.localStorage!==null};d.sessionStorage=function(){try{return"sessionStorage"in i&&i.sessionStorage!==null}catch(a){return false}};d.webworkers=function(){return!!i.Worker}; + d.applicationCache=function(){var a=i.applicationCache;return!!(a&&typeof a.status!="undefined"&&typeof a.update=="function"&&typeof a.swapCache=="function")};d.svg=function(){return!!e.createElementNS&&!!e.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect};d.smil=function(){return!!e.createElementNS&&/SVG/.test(M.call(e.createElementNS("http://www.w3.org/2000/svg","animate")))};d.svgclippaths=function(){return!!e.createElementNS&&/SVG/.test(M.call(e.createElementNS("http://www.w3.org/2000/svg", + "clipPath")))};for(var z in d)if(O(d,z))N.push(((j[z.toLowerCase()]=d[z]())?"":"no-")+z.toLowerCase());j[E]||P();j.addTest=function(a,b){a=a.toLowerCase();if(!j[a]){b=!!b();s.className+=" "+(b?"":"no-")+a;j[a]=b;return j}};m.cssText="";D=n=null;(function(){var a=e.createElement("div");a.innerHTML="";return a.childNodes.length!==1})()&&function(a,b){function c(f,k){if(o[f])o[f].styleSheet.cssText+=k;else{var l=t[G],q=b[A]("style");q.media=f;l.insertBefore(q,l[G]);o[f]=q;c(f,k)}}function h(f, + k){for(var l=new RegExp("\\b("+w+")\\b(?!.*[;}])","gi"),q=function(B){return".iepp_"+B},x=-1;++x\\s*$","i");g.innerHTML=f.outerHTML.replace(/\r|\n/g," ").replace(l,f.currentStyle.display=="block"?"":"");l=g.childNodes[0];l.className+=" iepp_"+q;l=p[p.length]=[f,l];f.parentNode.replaceChild(l[1],l[0])}h(b.styleSheets,"all")});a.attachEvent("onafterprint", + function(){for(var f=-1,k;++f={0,1}|<={0,1})\s*/g; + var leftBkRe = /\(/g; + var rightBkRe = /\)/g; + var reRe = /~ \"([^\"]*)\"/g; + var equalsRe = / == /g; + var quotedStringRe = /"[^"]*"/g; + var quotedStringOneOnlyRe = /"[^"]*"/; + var placeHolderString = '_pLaCeHoLdEr_'; + var placeHolderRe = new RegExp(placeHolderString); + + var nodesWithEventsAttached = new Array(); + + var inputsToClear; + + var req = null; + + var nameCounter = 0; + var CSSHelpers, StringHelpers, XMLHelpers, DOMHelpers; + /* + * Things to look into: + * + * I don't think you need the options.isPageLoad checks inside + * setFormElementsInside() since we are setting doClear accordingly. + */ + me.init = function(reset){ + if (EventHelpers.hasPageLoadHappened(arguments) && !reset) { + return; + } + + visibleIfNodes = CSSHelpers.getElementsByClassName(document, 'visibleIf'); + mandatoryNodes = CSSHelpers.getElementsByClassName(document, 'mandatoryIf'); + + removeDisabledNodes(); + me.refreshPage({ + isPageLoad: true + }); + setMandatoryStates(); + setEvents(); + //strutsHelpers.populateDynamicFormElements(); + } + + function removeDisabledNodes(){ + + for (var i = 0; i < visibleIfNodes.length; i++) { + var node = visibleIfNodes[i]; + + var els = getAllFormElementsIn(node) + + for (var j = 0; j < els.length; j++) { + var el = els[j]; + el.disabled = false; + + } + } + } + + function refreshPageEvent(e){ + me.refreshPage(); + } + + me.refreshPage = function(options){ + + changedInput = this; + + inputsToClear = new Array(); + qsSb = new StringBuffer(); + for (var i = 0; i < visibleIfNodes.length; i++) { + setVisibility(visibleIfNodes[i], options); + + } + + + if (!(options && !options.isPageLoaded)) { + for (i in inputsToClear) { + var el = inputsToClear[i]; + if (i != 0) { + qsSb.append('&'); + } + qsSb.append(i).append('='); + } + + var qs = qsSb.toString(); + + + if (qsSb.getLength() > 0) { + + var url = DOMHelpers.getDatasetItem(document.body, 'visibleif-deletedataurl'); + + if (url) { + req = XMLHelpers.getXMLHttpRequest(url, deleteRequestHandler, 'GET', qs); + } + + } + + + + for (var i = 0; i < mandatoryNodes.length; i++) { + setMandatoryStates(mandatoryNodes[i], options); + + } + } + + var formNodes = document.getElementsByTagName('form'); + + for (var i=0; i 0) { + + var fieldNode = parentForm[inputVars[j]]; + //var fieldNode = document.getElementById(inputVars[j]); + + if (fieldNode != null) { + if (fieldNode.nodeName != "SELECT" && fieldNode.length) { + for (var k = 0; k < fieldNode.length; k++) { + + EventHelpers.addEvent(fieldNode[k], 'click', refreshPageEvent); + + } + } else { + + EventHelpers.addEvent(fieldNode, 'change', refreshPageEvent); + } + + if (fieldNode.type == 'text') { + + EventHelpers.addEvent(fieldNode, 'change', refreshPageEvent); + } + + if (fieldNode.type == 'checkbox') { + EventHelpers.addEvent(fieldNode, 'click', refreshPageEvent); + } + } + + } + } + } + } + } + } + + } + + function updateVisibilityProperties(formNode){ + var fields = formNode.elements; + + for (var i = 0; i < fields.length; i++) { + var field = fields[i] + if (!isVisible(field) && !CSSHelpers.isMemberOfClass(field, 'visibleIf-submitIfInvisible')) { + CSSHelpers.addClass(field, 'visibleIf-notSubmitted'); + field.disabled = true; + } else { + CSSHelpers.removeClass(field, 'visibleIf-notSubmitted'); + field.disabled = false; + } + } + } + + function formSubmitEvent(e){ + + if (CSSHelpers.isMemberOfClass(this, 'visibleIf-submitInvisibleData')) { + return; + } + + updateVisibilityProperties(this); + } + + function isVisible(node){ + return node.offsetWidth != 0; + } + + + + function setVisibility(node, options){ + var rule = getRule(node, 'visibleIf-rule') + + if (rule == null) { + throw "There is no rule for with the node with the following HTML:" + XMLHelpers.getOuterXML(node); + } + + var isRuleTrue = evaluateRule(DOMHelpers.getAncestorByTagName(node, 'form'), rule); + + + if (isRuleTrue) { + CSSHelpers.addClass(node, 'visibleIf-visible'); + setFormElementsInside(node, false, options); + } else { + CSSHelpers.removeClass(node, 'visibleIf-visible'); + + if (options && options.isPageLoad) { + setFormElementsInside(node, false, options); + } else { + setFormElementsInside(node, true, options); + } + } + } + + function setMandatoryState(node){ + var rule = getRule(node, 'mandatoryIf-rule') + + if (rule == null) { + throw "There is no rule for with the node with the following HTML:" + XMLHelpers.getOuterXML(node); + } + + + var isRuleTrue = evaluateRule(DOMHelpers.getAncestorByTagName(node, 'form'), getRule(node, rule)); + + + if (isRuleTrue) { + CSSHelpers.addClass(node, 'mandatoryIf-mandatory'); + //setFormElementsInside(node, false); + } else { + CSSHelpers.removeClass(node, 'mandatoryIf-mandatory'); + //setFormElementsInside(node, true); + } + + } + + + function evaluateRule(parentForm, rule){ //node, ruleNode) { + //var rule = getRuleString(ruleNode); + + if (rule == "") { + return true; + } else { + + + if (rule != null) { + + //var parentForm = DOMHelpers.getAncestorByTagName(node, 'form'); + if (!parentForm) { + throw "Error: the rule " + rule + " is not attached to a form." + } + + var stringToEval; + + var formElem = parentForm[rule.name]; + + // first, replace all quoted strings with placeholders: + var diddledRule = rule.replace(quotedStringRe, placeHolderString); + + // next, grab all those quoted strings + var quotedVals = rule.match(quotedStringRe); + + + var formId = parentForm.id; + + if (!formId) { + formId = 'visibleIf-form' + nameCounter; + parentForm.id = formId; + + nameCounter++; + } + + + // now replace all variables with javascript form element values + stringToEval = diddledRule.replace(leftBkRe, '( ').replace(rightBkRe, ' )').replace(varRe, 'getFieldValue(document.getElementById("' + + formId + + '")["$1"]) ').replace(reRe, '.match(/$1/)'); + + // now, replace placeholders back to the original strings. + if (quotedVals) { + for (var i = 0; i < quotedVals.length; i++) { + stringToEval = stringToEval.replace(placeHolderRe, quotedVals[i]); + } + } + + + try { + if (eval(stringToEval)) { + return true; + } else { + return false; + } + } + catch (ex) { + //alert('Bad equation: ' + stringToEval) + return false; + } + } + } + } + + + function setFormElementsInside(node, doClear, options){ + + + + if (!options) { + options = {}; + } + + var formElements = getAllFormElementsIn(node); + + for (var i = 0; i < formElements.length; i++) { + + + var el = formElements[i]; + + + /* Let's disable them so they aren't submitted + if (!CSSHelpers.isMemberOfClass(node, 'visibleIf-ignoreDisableAttr')) { + + el.disabled = doClear ? "disabled" : ""; + + if (CSSHelpers.isMemberOfClass(el, 'streetName')) { + jslog.debug(el.disabled); + } + }*/ + if (el != changedInput) { + + switch (el.nodeName) { + case "INPUT": + switch (el.type) { + + case "checkbox": + if (el.checked) { + if (doClear) { + + if (!CSSHelpers.isMemberOfClass(el, 'visibleIf-doNotReset')) { + // cache the value + formCache.setValue(el.name, el.value); + el.checked = false; + addToInputToClear(el); + } + + } else if (formCache.getValue(el.name) == el.value) { + //el.checked = true; + + } + } + break; + case "radio": + + if (doClear) { + + if (!CSSHelpers.isMemberOfClass(el, 'visibleIf-doNotReset')) { + + // cache the value + if (el.checked) { + formCache.setValue(el.name, el.value); + el.checked = false; + } + addToInputToClear(el); + + } + + } else if (formCache.getValue(el.name) == el.value) { + //el.checked = true; + + } + + break; + + case "file": + + // do nothing to avoid a security error. + break; + case "hidden": + // don't do anything + break; + default: + if (doClear) { + + /* + * The following code is for use with a seperate + * JavaScript library, fileChanger.js. If + * it's a fileChanger widget, we need to do an Ajax call + */ + if (CSSHelpers.isMemberOfClass(el, 'fileList_fileDisplay')) { + CSSHelpers.removeClass(el, 'fileList_fileDisplay'); + el.disabled = false; + el.name = el.name.replace("_ignore", "") + var html = XMLHelpers.getOuterXML(el).replace(/text/, 'file'); + el.parentNode.innerHTML = html; + + // insert ajax call to delete file here. + url = config.getScriptedValue('visibleIf.urls.deleteFiles', { + files: StringHelpers.urlencode(el.value), + formProperty: el.name + }) + req = XMLHelpers.getXMLHttpRequest(url, deleteRequestHandler); + } + + + // cache the value + formCache.setValue(el.name, el.value); + if (options.isPageLoad) { + el.value = DOMHelpers.getAttributeValue(el, 'value'); + if (el.value == "null") { + el.value = ""; + } + } else if (!CSSHelpers.isMemberOfClass(el, 'visibleIf-doNotReset')) { + el.value = ""; + addToInputToClear(el); + } + + } else { + //el.value = formCache.getValue(el.name); + } + break; + } + break; + case "TEXTAREA": + if (doClear) { + // cache the value + formCache.setValue(el.name, el.value); + if (options.isPageLoad) { + //el.value = DOMHelpers.getAttributeValue(el, 'value'); + } else if (!CSSHelpers.isMemberOfClass(el, 'visibleIf-doNotReset')) { + el.value = ""; + addToInputToClear(el); + } + } else { + //el.value = formCache.getValue(el.name); + } + + break; + case "SELECT": + if (doClear) { + + if (!CSSHelpers.isMemberOfClass(el, 'visibleIf-doNotReset')) { + // cache the value + formCache.setValue(el.name, el.selectedIndex); + + // TODO: should this be 0 or -1? + el.selectedIndex = 0; + addToInputToClear(el); + } + + el.disabled = true; + + } else { + //el.selectedValue = formCache.getValue(el.name); + el.disabled = false; + } + break; + + + } + } + + } + + + + + + + + } + + function addToInputToClear(el){ + if (!inputsToClear[el.name]) { + inputsToClear[el.name] = el; + } + } + + function deleteRequestHandler(){ + + if (!req) { + return; + } + + // only if req shows "complete" + if (req.readyState == ReadyState.COMPLETED) { + // only if "OK" + //DebugHelpers.log(req.getAllResponseHeaders()); + + if (req.status == HttpCode.OK || req.status == HttpCode.LOCAL_OK) { + // whatever + //jslog.debug('Deleted Successfully') + } else { + throw "Something bad happened. HTTP Status: " + req.status; + + } + } + } + + + function getInputVars(rule){ + rule = rule.replace(leftBkRe, '( ').replace(rightBkRe, ' )'); + var vars = rule.match(varRe); + + if (vars == null) { + return new Array(); + } + + for (var i = 0; i < vars.length; i++) { + vars[i] = vars[i].trim(); + } + + + return vars; + + } + + + function getFieldValue(formElementNode){ + var r = ""; + var type; + + type = formElementNode.type + + if (!type) { + if (formElementNode.length) + type = formElementNode[0].type; + } + + + switch (type) { + + case 'text': + case 'hidden': + case 'password': + case 'textarea': + case 'select-one': + r = formElementNode.value; + case 'checkbox': + if (formElementNode.checked) { + r = formElementNode.value; + } + break; + case 'radio': + for (var i = 0; i < formElementNode.length; i++) { + if (formElementNode[i].checked) { + r = formElementNode[i].value; + break; + } + } + + + } + + if (formElementNode.length) { + for (var i = 0; i < formElementNode.length; i++) { + if (formElementNode[i].checked) { + r = formElementNode[i].value; + } + } + + } + + return r.replace('\n', '').replace(' ', ''); + } + + function getAllFormElementsIn(node){ + if (!node) { + node = document; + } + + var r = new Array(); + + var elems = { + inputs: node.getElementsByTagName('input'), + selects: node.getElementsByTagName('select'), + textareas: node.getElementsByTagName('textarea') + }; + + for (var i in elems) { + var elem = elems[i]; + for (j = 0; j < elem.length; j++) { + r.push(elem[j]); + } + } + + return r; + } + + + /* Helper routines */ + if (window.CSSHelpers) { + CSSHelpers = window.CSSHelpers; + } else { + CSSHelpers = new function(){ + var me = this; + var blankRe = new RegExp('\\s'); + + /** + * Generates a regular expression string that can be used to detect a class name + * in a tag's class attribute. It is used by a few methods, so I + * centralized it. + * + * @param {String} className - a name of a CSS class. + */ + function getClassReString(className){ + return '\\s' + className + '\\s|^' + className + '\\s|\\s' + className + '$|' + '^' + className + '$'; + } + + function getClassPrefixReString(className){ + return '\\s' + className + '-[0-9a-zA-Z_]+\\s|^' + className + '[0-9a-zA-Z_]+\\s|\\s' + className + '[0-9a-zA-Z_]+$|' + '^' + className + '[0-9a-zA-Z_]+$'; + } + + + + /** + * Make an HTML object be a member of a certain class. + * + * @param {Object} obj - an HTML object + * @param {String} className - a CSS class name. + */ + me.addClass = function(obj, className){ + if (blankRe.test(className)) { + return; + } + + // only add class if the object is not a member of it yet. + if (!me.isMemberOfClass(obj, className)) { + obj.className += " " + className; + } + } + + /** + * Make an HTML object *not* be a member of a certain class. + * + * @param {Object} obj - an HTML object + * @param {Object} className - a CSS class name. + */ + me.removeClass = function(obj, className){ + + if (blankRe.test(className)) { + return; + } + + + var re = new RegExp(getClassReString(className), "g"); + + var oldClassName = obj.className; + + + if (obj.className) { + obj.className = oldClassName.replace(re, ''); + } + + + } + + /** + * Given an HTML element, find all child nodes of a specific class. + * + * With ideas from Jonathan Snook + * (http://snook.ca/archives/javascript/your_favourite_1/) + * Since this was presented within a post on this site, it is for the + * public domain according to the site's copyright statement. + * + * @param {Object} obj - an HTML element. If you want to search a whole document, set + * this to the document object. + * @param {String} className - the class name of the objects to return + * @return {Array} - the list of objects of class cls. + */ + me.getElementsByClassName = function(obj, className){ + if (obj.getElementsByClassName) { + return DOMHelpers.nodeListToArray(obj.getElementsByClassName(className)) + } else { + var a = []; + var re = new RegExp(getClassReString(className)); + var els = DOMHelpers.getAllDescendants(obj); + + for (var i = 0, j = els.length; i < j; i++) { + if (re.test(els[i].className)) { + a.push(els[i]); + + } + } + return a; + } + } + + /** + * Determines if an HTML object is a member of a specific class. + * @param {Object} obj - an HTML object. + * @param {Object} className - the CSS class name. + */ + me.isMemberOfClass = function(obj, className){ + + if (blankRe.test(className)) + return false; + + var re = new RegExp(getClassReString(className), "g"); + + return (re.test(obj.className)); + } + } + } + + if (window.DOMHelpers) { + DOMHelpers = window.DOMHelpers; + } else { + DOMHelpers = new function(){ + + var me = this; + /** + * Given an tag, find the first ancestor tag of a given tag name. + * + * @param {Object} obj - a HTML or XML tag. + * @param {String} tagName - the name of the ancestor tag to find. + * @return {Object} - the ancestor tag, or null if not found. + */ + /** + * Returns all children of an element. Needed if it is necessary to do + * the equivalent of getElementsByTagName('*') for IE5 for Windows. + * + * @param {Object} e - an HTML object. + */ + me.getAllDescendants = function(obj){ + return obj.all ? obj.all : obj.getElementsByTagName('*'); + } + + me.getAncestorByTagName = function(obj, tagName){ + + for (var node = obj.parentNode; node.nodeName.toLowerCase() != 'body'; node = node.parentNode) { + + if (tagName.toLowerCase() == node.nodeName.toLowerCase()) { + return node; + } + + } + return null; + } + + /** + * Given an HTML or XML object, find the an attribute by name. + * + * @param {Object} obj - a DOM object. + * @param {String} attrName - the name of an attribute inside the DOM object. + * @return {Object} - the attribute object or null if there isn't one. + */ + me.getAttributeByName = function(obj, attrName){ + var i; + + var attributes = obj.attributes; + for (i = 0; i < attributes.length; i++) { + var attr = attributes[i] + if (attr.nodeName == attrName && attr.specified) { + return attr; + } + } + return null; + } + + /** + * Given an HTML or XML object, find the value of an attribute. + * + * @param {Object} obj - a DOM object. + * @param {String} attrName - the name of an attribute inside the DOM object. + * @return {String} - the value of the attribute. + */ + me.getAttributeValue = function(obj, attrName){ + var attr = me.getAttributeByName(obj, attrName); + + if (attr != null) { + return attr.nodeValue; + } else { + return null; + } + } + + me.getDatasetItem = function(obj, name){ + var r = DOMHelpers.getAttributeValue(obj, 'data-' + name); + + if (!r) { + r = DOMHelpers.getAttributeValue(obj, 'data-' + name.toLowerCase()) + } + return r; + } + + /****** + * Converts a DOM live node list to a static/dead array. Good when you don't + * want the thing you are iterating in a for loop changing as the DOM changes. + * + * @param {Object} nodeList - a node list (like one returned by document.getElementsByTagName) + * @return {Array} - an array of nodes. + * + *******/ + me.nodeListToArray = function(nodeList){ + var ary = []; + for (var i = 0, len = nodeList.length; i < len; i++) { + ary.push(nodeList[i]); + } + return ary; + } + + } + } + + if (window.StringHelpers) { + StringHelpers = window.StringHelpers; + } else { + StringHelpers = new function(){ + var me = this; + me.initWhitespaceRe = /^\s\s*/; + me.endWhitespaceRe = /\s\s*$/; + me.whitespaceRe = /\s/; + + me.unentify = function(s){ + + return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); + } + + me.urlencode = function(str){ + return escape(str).replace('+', '%2B').replace('%20', '+').replace('*', '%2A').replace('/', '%2F').replace('@', '%40'); + } + + } + } + + if (window.XMLHelpers) { + XMLHelpers = window.XMLHelpers; + } else { + XMLHelpers = new function(){ + var me = this; + + /** + * Given an XML node, return the XML inside as a string and the XML string of the node itself. + * Similar to Internet Explorer's outerHTML property, except it is for XML, not HTML. + * Created with information from http://www.codingforums.com/showthread.php?t=31489 + * and http://www.mercurytide.co.uk/whitepapers/issues-working-with-ajax/ + * + * @param {Object} node - a DOM object. + * @param {Object} options - a JS object containing options. To date, + * the only one supported is "insertClosingTags", when set to + * true, converts self closing tags, like , to . + * @return {String} - the XML String inside the object. + */ + me.getOuterXML = function(node, options){ + var r; + // Internet Explorer + if (node.xml) { + r = node.xml; + + // Everyone else + } else if (node.outerHTML) { + r = node.outerHTML; + } else if (window.XMLSerializer) { + + var serializer = new XMLSerializer(); + var text = serializer.serializeToString(node); + r = text; + } else { + return null; + } + + /* + * If the XML is actually HTML and you are inserting it into an HTML + * document, you must use the "insertClosingTags" option, otherwise + * Opera will not like you, especially if you have empty tags. + */ + if (options) { + if (options.insertClosingTags) { + r = r.replace(selfClosingTagRe, "<$1>"); + } + } + return r; + } + + /** + * Wrapper for XMLHttpRequest Object. Grabbing data (XML and/or text) from a URL. + * Grabbing data from a URL. Input is one parameter, url. It returns a request + * object. Based on code from + * http://www.xml.com/pub/a/2005/02/09/xml-http-request.html. IE caching problem + * fix from Wikipedia article http://en.wikipedia.org/wiki/XMLHttpRequest + * + * @param {String} url - the URL to retrieve + * @param {Function} processReqChange - the function/method to call at key events of the URL retrieval. + * @param {String} method - (optional) "GET" or "POST" (default "GET") + * @param {String} data - (optional) the CGI data to pass. Default null. + * @param {boolean} isAsync - (optional) is this call asyncronous. Default true. + * + * @return {Object} a XML request object. + */ + me.getXMLHttpRequest = function(url, processReqChange) //, method, data, isAsync) + { + var argv = me.getXMLHttpRequest.arguments; + var argc = me.getXMLHttpRequest.arguments.length; + var httpMethod = (argc > 2) ? argv[2] : 'GET'; + var data = (argc > 3) ? argv[3] : ""; + var isAsync = (argc > 4) ? argv[4] : true; + + var req; + // branch for native XMLHttpRequest object + if (window.XMLHttpRequest) { + req = new XMLHttpRequest(); + // branch for IE/Windows ActiveX version + } else if (window.ActiveXObject) { + try { + req = new ActiveXObject('Msxml2.XMLHTTP'); + } + catch (ex) { + req = new ActiveXObject("Microsoft.XMLHTTP"); + } + // the browser doesn't support XML HttpRequest. Return null; + } else { + return null; + } + + if (isAsync) { + req.onreadystatechange = processReqChange; + } + + if (httpMethod == "GET" && data != "") { + url += "?" + data; + } + + req.open(httpMethod, url, isAsync); + + //Fixes IE Caching problem + req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); + req.send(data); + + return req; + } + + } + } + + /* + * stringBuffer - ideas from + * http://www.multitask.com.au/people/dion/archives/000354.html + */ + function StringBuffer(){ + var me = this; + + var buffer = []; + + + me.append = function(string){ + buffer.push(string); + return me; + } + + me.appendBuffer = function(bufferToAppend){ + buffer = buffer.concat(bufferToAppend); + } + + me.toString = function(){ + return buffer.join(""); + } + + me.getLength = function(){ + return buffer.length; + } + + me.flush = function(){ + buffer.length = 0; + } + + } + + /* + * Adding trim method to String Object. Ideas from + * http://www.faqts.com/knowledge_base/view.phtml/aid/1678/fid/1 and + * http://blog.stevenlevithan.com/archives/faster-trim-javascript + */ + String.prototype.trim = function(){ + var str = this; + + // The first method is faster on long strings than the second and + // vice-versa. + if (this.length > 6000) { + str = this.replace(StringHelpers.initWhitespaceRe, ''); + var i = str.length; + while (StringHelpers.whitespaceRe.test(str.charAt(--i))) + ; + return str.slice(0, i + 1); + } else { + return this.replace(StringHelpers.initWhitespaceRe, '').replace(StringHelpers.endWhitespaceRe, ''); + } + }; + +} + +var formCache = new function(){ + var me = this; + var values = new Array(); + + me.setValue = function(name, value){ + values[name] = value; + } + + me.getValue = function(name){ + if (values[name] == undefined) { + return ""; + } else { + return values[name]; + } + } +} + +EventHelpers.addPageLoadEvent('visibleIf.init'); + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/.DS_Store b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..72a32cf10859c540b3e8b4eda3787deaca8cdf5e GIT binary patch literal 6148 zcmeHKPiz!b82`TQ0yB&wuP9Le5Ep7hV?(w`sqs(PZd-x^w$LqGq_)iNJnY2Tna#Y} zU9=PyuSBC44@3hu;>E-W;!&ef;>ko~f+youFP^-3@OyvO*c6W#HS;C!{l53UfAfCx z=gk8EEVuk&00saSHHrC+)ZIp;UA8rnGcyuV<%l7H1_;#Xt4CNc&x2L5df$amL< z4sfW!Y52?gE1I=1u95YFS~CnpS}cB#xxW0m^&2dbyXLDwI3#`Ecvk~IU0P(@mY4U8?j0(OjI0b5miG;lI=Xjs zWyL08pITdX?tbQA#alkRa_+n)5b1lP#5LH13#8m;J)vlu_2jPh*7HMeJ@!V&aqoWq z(BZ8|#ugcC34V-+UK+IdgqL!$$TkUD-*fdinof8-;GIR*U-!a#i=6ma7|sN*aZ#D@Ub16TQN*|eMm1*up5hv-m3Y-flzxLWJYfLp|usF^WL1^37 ztxc?d^F8-&*}83D$0LsyN1ob0IaiMx4IZUp-lr=$68pjFfcq!qU_9Z}`xQZTXG5>X z!^$gk$Et0euM&9;z91bBdm^1`@`(H2-FN>34{moJa%ahrpE==)I*`Z?^3lL zh@cj7w!!YlAxnAhbRTvYTI{;5hP&LyT$ZDuwhpX zicp5*umDYX6)wU%a2c+_b@&)=z}N6C{0P6mukaiEj(N0k0C(Un9L7=Hk7HQINj!j4 zcodIe1!r*qPoal(^s#|4HZehgXYm}K#|!v6Uc@)>O?(UA#!L7vzK56b3cimY;zxK5 zZ{R2R8Gepm;FtIneuKC0Cw+yv-h=!?@8UJ$&#T9GVq{8N&Yeh}<;)n!82C>!Aioa< zY7$EZyBgJ}gF5;9AnkdHQb?C)35f-RC4*g!WFbKvN~lB895GOb(|p1Bl?-+@>Tp0+ znev#*Xig}os?&TyxdWCoW_`v$#=vR@`t*>={eSZB&;P4~vQfrB#=!rI0nAU#Oq6L! zW^Y}yIJwsrsGXuFMf!C$su1eTcB~Y+6%SBTLbifb2ulXL8fk_k`w>tyWL?I + + + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/.mymetadata b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/.mymetadata new file mode 100644 index 0000000..0e2fe5e --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/.mymetadata @@ -0,0 +1,13 @@ + + + + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/.project b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/.project new file mode 100644 index 0000000..1878e08 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/.project @@ -0,0 +1,38 @@ + + + webforms2 + + + + + + com.genuitec.eclipse.j2eedt.core.WebClasspathBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.genuitec.eclipse.j2eedt.core.J2EEProjectValidator + + + + + com.genuitec.eclipse.j2eedt.core.DeploymentDescriptorValidator + + + + + org.eclipse.wst.validation.validationbuilder + + + + + + com.genuitec.eclipse.j2eedt.core.webnature + org.eclipse.jdt.core.javanature + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/DTD/xhtml1-strict-wf2.dtd b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/DTD/xhtml1-strict-wf2.dtd new file mode 100644 index 0000000..153c8d8 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/DTD/xhtml1-strict-wf2.dtd @@ -0,0 +1,1075 @@ + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/DTD/xhtml1-transitional-wf2.dtd b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/DTD/xhtml1-transitional-wf2.dtd new file mode 100644 index 0000000..5ae33c2 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/DTD/xhtml1-transitional-wf2.dtd @@ -0,0 +1,1294 @@ + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/META-INF/MANIFEST.MF b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/META-INF/MANIFEST.MF new file mode 100644 index 0000000..5e94951 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/WEB-INF/web.xml b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/WEB-INF/web.xml new file mode 100644 index 0000000..cb0657f --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/WEB-INF/web.xml @@ -0,0 +1,10 @@ + + + + index.jsp + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/index.jsp b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/index.jsp new file mode 100644 index 0000000..d871e53 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/WebRoot/index.jsp @@ -0,0 +1,26 @@ +<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> +<% +String path = request.getContextPath(); +String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; +%> + + + + + + + My JSP 'index.jsp' starting page + + + + + + + + + + This is my JSP page.
+ + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/pack.pl b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/pack.pl new file mode 100644 index 0000000..8df6483 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/pack.pl @@ -0,0 +1,269 @@ + +use File::Copy; + +@commonVarNames = qw( +xhr +processAttr +parent +attrName +attr +distance +evt +btnType +attrValue +addEvt +moveEvt +isValid +refNode +removeEvt +attrs +sibling +minAttrNode +maxAttrNode +rtNestedDepth +repetitionTemplates +eventSet +isTimeRelated +IDAttrValue +formElements +handleRepetitionEvent +funcBody +deprecatedAttrs +indexAttr +attrVal +reTemplateName +results +invalidIndicator +doCheckPrecision +typeArg +IDAttrName +xmlDoc +elementArg + +code +funcMatches +hasChecked +canBubbleArg +valueAttrNode +repeatTemplateAttr +doMaxLengthCheck +isRequired + +handlerAttr +isDateRelated +matches +onremovedAttr +isNumberRelated +currentBlockCount +count +isRadioOrCheckbox +isNotEqual +isFileInput +isTemplate +elNames +allElements +oninvalidAttr +attrExpr +hasIndex +addBtns +thisAttrValue +cancelableArg +btns +doCheckRange +doRequiredCheck +zeroPoint +invalidIndicators +indicatorTimeoutId +indicatorIntervalId +addInvalidIndicator +createLI +clearInvalidIndicators +cloneNode_customAttrs +cloneNode_skippedAttrs +cloneNode_rtEventHandlerAttrs +getRepetitionBlock +getHtmlTemplate +getFormElements +getElementsByTagNames +getElementsByTagNamesAndAttribute +arrayHasItem +getElementStyle +createMiscFunctions +ISO8601RegExp +parseISO8601 +validateDateTimeType +zeroPad +dateToISO8601 +namespaceURIArg +initAutofocusElement +isInitialized +applyValidityInterface +controlCheckValidity +controlSetCustomValidity +formCheckValidity +createValidityState +loadDataURI +numberRegExp +onsubmitValidityHandler +constructRepetitionBlock +clickRepetitionButton +constructRepetitionButton +constructRepetitionTemplate +sortNodes +updateValidityState +urlRegExp +valueToWF2Type +emailRegExp +hasInvalidState +libpath +DOMException +isInitialized +updateAddButtons +updateMoveButtons +property +visitedParents +rePattern +patternAttr +hasInvalidIndicator +prefillSelectElements +prefillFormElements +hasElementExtensions +hasGettersAndSetters +); +#onDOMContentLoaded + +push @commonVarNames, '(?<=2\.|\s\s)cloneNode'; #\$wf2\.|\s +push @commonVarNames, '(?<=2\.|\s\s)createElement'; +push @commonVarNames, '(?<=2\.|\s\s)addRepetitionBlock(?!:1)'; +push @commonVarNames, '(?<=2\.|\s\s)addRepetitionBlockByIndex(?!:1)'; +push @commonVarNames, '(?<=2\.|\s\s)removeRepetitionBlock(?!:1)'; +push @commonVarNames, '(?<=2\.|\s\s)moveRepetitionBlock(?!:1)'; + +%replacements = ( + 'RepetitionElement.REPETITION_NONE' => 0, + 'RepetitionElement.REPETITION_TEMPLATE' => 1, + 'RepetitionElement.REPETITION_BLOCK' => 2, + 'XPathResult.ORDERED_NODE_SNAPSHOT_TYPE' => 7 +); + +open IN, "webforms2_src.js"; +$source = join "", ; +close IN; + +$source =~ m{^(.+?)(\s+if\(!window\.\$wf2\).+$)}s; +$header = $1; +$code = $2; + + +#strip all comments +open NOCOM, ">webforms2-nocomments.js"; +$nocoms = $code; +$nocoms =~ s{\s*(?webforms2-nocomments-nowhitespace.js"; +$nowhite = $nocoms; +$nowhite =~ s{ +}{ }g; +$nowhite =~ s{ +,}{,}g; +$nowhite =~ s{^\s+}{}gm; #remove all non-newline whitespace +$thisHeader = $header; +$thisHeader =~ s{\bwebforms.+?js\b}{webforms2-nocomments-nowhitespace.js}; +print NOWHITE $thisHeader . "\n" . $nowhite; +close NOWHITE; + +open MAINS, ">webforms2.js"; +$thisHeader = $header; +$thisHeader =~ s{\bwebforms.+?js\b}{webforms2.js}; +print MAINS $thisHeader . "\n\n" . $nowhite; +close MAINS; + +#shorten long variable names +open SHORT, ">webforms2-nocomments-nowhitespace-shortnames.js"; +$short = $nocoms; +$count = 0; +foreach(@commonVarNames){ + $re = /\W/ ? $_ : '(? 1024){ + $lineSize = 0; + $newShort .= $_ . "\n"; + } + else { + $newShort .= $_; + } + +} + +$thisHeader = $header; +$thisHeader =~ s{\bwebforms.+?js\b}{webforms2-nocomments-nowhitespace-shortnames.js}; +print SHORT $thisHeader . "\n\n" . $newShort; +close SHORT; + + +#open MAINS, ">webforms2-p.js"; +#$thisHeader = $header; +#$thisHeader =~ s{\bwebforms.+?js\b}{webforms2-p.js}; +#print MAINS $thisHeader . "\n\n" . $newShort; +#close MAINS; + + + + +#use Dean Edward's packer to condense the code +open PACKED, ">webforms2-p.js"; +$packed = jsPack($short); +$thisHeader = $header; +$thisHeader =~ s{\bwebforms.+?js\b}{webforms2-p.js}; +print PACKED $thisHeader . "\n\n" . $packed; +close PACKED; +sub jsPack { + open TEMP, ">~topack.js"; + print TEMP shift; + close TEMP; + + chdir('./packer.perl/'); + my $packed = `perl jsPacker.pl -q -f -e0 -i ../~topack.js`; #-e62 -f #-e62 + chdir('..'); + + unlink "~topack.js"; + return $packed; +} + + + +exit; + +#$source =~ s{(/\*\@cc_on \@\*/\n/\*\@if \(\@_win32\).+?/\*\@end \@\*/)} +# {MSIE_ONDOMCONTENTLOADED();}s; +#(?=/\*\s+cssQuery) + + +#$source =~ s{var RepetitionElement.+?(?=/\*\@cc_on \@\*/)} +# {SOURCE1}es; +#$source =~ s{var RepetitionElement.+?(?=/\*\@cc_on \@\*/)} +# {SOURCE1}es; +#$source =~ s{(?<=/\*\@cc_on \@\*/\n/\*\@if \(\@_win32\))(.+?)(?=/\*\@end \@\*/)} +# {SOURCE2}es; diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/project.kpf b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/project.kpf new file mode 100644 index 0000000..cc305d0 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/project.kpf @@ -0,0 +1,7 @@ + + + + + 1 + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-msie_init.js b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-msie_init.js new file mode 100644 index 0000000..93af8ca --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-msie_init.js @@ -0,0 +1,4 @@ +//Loaded dynamically in MSIE by script[defer] tag which emulated DOMContentLoaded event. See +if(!window.ValidityState) + throw Error("Validation error: You must include the file 'wf2-validation.js' to enable the functionality. The file you included is loaded dynamically for MSIE."); +window.ValidityState.__initDescendents(); \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/001.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/001.html new file mode 100644 index 0000000..b3785a9 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/001.html @@ -0,0 +1,114 @@ + + + + + Test Page + + + + + + + + + + + +
If you were using Internet Explorer 6 on a Windows machine or Opera 9, this demo would actually work!
+ + + + +

Validation

+ +

WF2 introduces built-in validation on the client-side.

+

In this example, the input field is declared "required", which means the form cannot be submitted if the field is empty. Instead an error message will be displayed to the user.

+ +
+
+ + +
+
+ +

The code looks like this: +

+<form>
+  <input name="textfield" type="text" required>
+  <button type=submit>Submit me</button>
+</form>
+
+ +

This field requires a number between 18 and 99: + +

+
+ Age: + +
+
+ +

The code looks like this: +

+<form>
+  Age:  <input name="age"  type="number" min="18" max="99" required>
+  <button type=submit>Submit me</button>
+</form>
+
+ +

Here is a sample form using an assortment of the new validation constraints:

+ +
+
+

(must be an email adress)

+

(must be an URI)

+

(must be between 18 and 90)

+

(decimal, will be rounded to two decimals)

+

+ +
+
+ +

(There are also several date and time related controls, but they are described in a seperate section.)

+ + +

Custom validation

+ +

Of course, the built-in types and constraints cannot cover every use case. Therefore it is possible to hook custom code into the validation system. + +

+
+ + Number: + +
+
+ + +

The code for the control looks like this: +

+<input name="num" type="number" onchange="if(isSquareNumber(value)) setCustomValidity('Must be a square number'); else setCustomValidity()">
+
+ +

The method setCustomValidity called with an error message, indicates that the control is not valid. +The message will be display, if the user tries to submit the form. If setCustomValidity is called without an argument, the field is considered valid again

+ + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/002.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/002.html new file mode 100644 index 0000000..a139f7e --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/002.html @@ -0,0 +1,12 @@ + + + Test 2 + + + +
+ + +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/003.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/003.html new file mode 100644 index 0000000..dcaa98f --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/003.html @@ -0,0 +1,115 @@ + + + Test 3 + + + + + + + + +
+
+
+
+ +
+
+ + +
+ Event Log + + + + + + + + + + +
#TypeElementInvalid states
+
(Click the add button above to fire events)
+
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/demo.css b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/demo.css new file mode 100644 index 0000000..deb6537 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/demo.css @@ -0,0 +1,44 @@ +body { + font-family: georgia; + font-size: 10pt; + margin: 2em; + margin-left: 4em; + } +h1, h2 { + font-family: trebuchet ms; +} + +form { + margin: 0 + } +.example { + background: #e8e8e8; + font-family: verdana; + width: 400px; + padding: 1em; + margin: 1em; +} +p { + width: 500px; +} + +pre { + margin-left: 2em; +} +pre, code { + color: teal; +} + +pre strong { + background: yellow; +} + + + .sidemenu { float:right; width:200px; border: solid black 2px; padding: 1em;} + .sidemenu div { } + .sidemenu div.current a { background: blue; color: white; } + .sidemenu a { text-decoration: none; font-weight: bold; } + + #platformWarning { + position:absolute;left:0;top:0;width:100%;background:yellow;border:solid 1px;font-family:verdana; font-size: 8pt; + } \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/jsUnitCore.js b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/jsUnitCore.js new file mode 100644 index 0000000..02f0402 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation-testcases/jsUnitCore.js @@ -0,0 +1,422 @@ +/* jsUnit */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Edward Hieatt code. + * + * The Initial Developer of the Original Code is + * Edward Hieatt, edward@jsunit.net. + * Portions created by the Initial Developer are Copyright (C) 2001 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Edward Hieatt, edward@jsunit.net (original author) + * Bob Clary, bc@bclary.com + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + + +var JSUNIT_UNDEFINED_VALUE; +var isTestPageLoaded = false; + +//hack for NS62 bug +function jsUnitFixTop() { + var tempTop = top; + if (!tempTop) { + tempTop = window; + while (tempTop.parent) { + tempTop = tempTop.parent; + if (tempTop.top && tempTop.top.jsUnitTestSuite) { + tempTop = tempTop.top; + break; + } + } + } + try { + window.top = tempTop; + } catch (e) {} +} + +jsUnitFixTop(); + +function _displayStringForValue(aVar) { + if (aVar === null) + return 'null'; + + if (aVar === top.JSUNIT_UNDEFINED_VALUE) + return 'undefined'; + + return aVar; +} + +function fail(failureMessage) { + throw new JsUnitException(null, failureMessage); +} + +function error(errorMessage) { + var errorObject = new Object(); + errorObject.description = errorMessage; + errorObject.stackTrace = getStackTrace(); + throw errorObject; +} + +function argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) { + return args.length == expectedNumberOfNonCommentArgs + 1; +} + +function commentArg(expectedNumberOfNonCommentArgs, args) { + if (argumentsIncludeComments(expectedNumberOfNonCommentArgs, args)) + return args[0]; + + return null; +} + +function nonCommentArg(desiredNonCommentArgIndex, expectedNumberOfNonCommentArgs, args) { + return argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) ? + args[desiredNonCommentArgIndex] : + args[desiredNonCommentArgIndex - 1]; +} + +function _validateArguments(expectedNumberOfNonCommentArgs, args) { + if (!( args.length == expectedNumberOfNonCommentArgs || + (args.length == expectedNumberOfNonCommentArgs + 1 && typeof(args[0]) == 'string') )) + error('Incorrect arguments passed to assert function'); +} + +function _assert(comment, booleanValue, failureMessage) { + if (!booleanValue) + throw new JsUnitException(comment, failureMessage); +} + +function assert() { + _validateArguments(1, arguments); + var booleanValue=nonCommentArg(1, 1, arguments); + + if (typeof(booleanValue) != 'boolean') + error('Bad argument to assert(boolean)'); + + _assert(commentArg(1, arguments), booleanValue === true, 'Call to assert(boolean) with false'); +} + +function assertTrue() { + _validateArguments(1, arguments); + var booleanValue=nonCommentArg(1, 1, arguments); + + if (typeof(booleanValue) != 'boolean') + error('Bad argument to assertTrue(boolean)'); + + _assert(commentArg(1, arguments), booleanValue === true, 'Call to assertTrue(boolean) with false'); +} + +function assertFalse() { + _validateArguments(1, arguments); + var booleanValue=nonCommentArg(1, 1, arguments); + + if (typeof(booleanValue) != 'boolean') + error('Bad argument to assertFalse(boolean)'); + + _assert(commentArg(1, arguments), booleanValue === false, 'Call to assertFalse(boolean) with true'); +} + +function assertEquals() { + _validateArguments(2, arguments); + var var1=nonCommentArg(1, 2, arguments); + var var2=nonCommentArg(2, 2, arguments); + _assert(commentArg(2, arguments), var1 === var2, 'Expected ' + var1 + ' (' + typeof(var1) + ') but was ' + _displayStringForValue(var2) + ' (' + typeof(var2) + ')'); +} + +function assertNotEquals() { + _validateArguments(2, arguments); + var var1=nonCommentArg(1, 2, arguments); + var var2=nonCommentArg(2, 2, arguments); + _assert(commentArg(2, arguments), var1 !== var2, 'Expected not to be ' + _displayStringForValue(var2)); +} + +function assertNull() { + _validateArguments(1, arguments); + var aVar=nonCommentArg(1, 1, arguments); + _assert(commentArg(1, arguments), aVar === null, 'Expected null but was ' + _displayStringForValue(aVar)); +} + +function assertNotNull() { + _validateArguments(1, arguments); + var aVar=nonCommentArg(1, 1, arguments); + _assert(commentArg(1, arguments), aVar !== null, 'Expected not to be null'); +} + +function assertUndefined() { + _validateArguments(1, arguments); + var aVar=nonCommentArg(1, 1, arguments); + _assert(commentArg(1, arguments), aVar === top.JSUNIT_UNDEFINED_VALUE, 'Expected undefined but was ' + _displayStringForValue(aVar)); +} + +function assertNotUndefined() { + _validateArguments(1, arguments); + var aVar=nonCommentArg(1, 1, arguments); + _assert(commentArg(1, arguments), aVar !== top.JSUNIT_UNDEFINED_VALUE, 'Expected not to be undefined'); +} + +function assertNaN() { + _validateArguments(1, arguments); + var aVar=nonCommentArg(1, 1, arguments); + _assert(commentArg(1, arguments), isNaN(aVar), 'Expected NaN'); +} + +function assertNotNaN() { + _validateArguments(1, arguments); + var aVar=nonCommentArg(1, 1, arguments); + _assert(commentArg(1, arguments), !isNaN(aVar), 'Expected not NaN'); +} + +function isLoaded() { + return isTestPageLoaded; +} + +function setUp() { +} + +function tearDown() { +} + +function getFunctionName(aFunction) { + var name = aFunction.toString().match(/function (\w*)/)[1]; + + if ((name == null) || (name.length == 0)) + name = 'anonymous'; + + return name; +} + +function getStackTrace() { + var result = ''; + + if (typeof(arguments.caller) != 'undefined') { // IE, not ECMA + for (var a = arguments.caller; a != null; a = a.caller) { + result += '> ' + getFunctionName(a.callee) + '\n'; + if (a.caller == a) { + result += '*'; + break; + } + } + } + else { // Mozilla, not ECMA + // fake an exception so we can get Mozilla's error stack + var testExcp; + try + { + foo.bar; + } + catch(testExcp) + { + var stack = parseErrorStack(testExcp); + for (var i = 1; i < stack.length; i++) + { + result += '> ' + stack[i] + '\n'; + // result = stack.join('\n'); + } + } + } + + return result; + +} + +function parseErrorStack(excp) +{ + var stack = []; + var name; + + if (!excp || !excp.stack) + { + return stack; + } + + var stacklist = excp.stack.split('\n'); + + for (var i = 0; i < stacklist.length - 1; i++) + { + var framedata = stacklist[i]; + + name = framedata.match(/^(\w*)/)[1]; + if (!name) { + name = 'anonymous'; + } + + stack[stack.length] = name; + } + // remove top level anonymous functions to match IE + + while (stack.length && stack[stack.length - 1] == 'anonymous') + { + stack.length = stack.length - 1; + } + return stack; +} + +function JsUnitException(comment, message) { + this.isJsUnitException = true; + this.comment = comment; + this.jsUnitMessage = message; + this.stackTrace = getStackTrace(); +} + +function warn() { + if (top.tracer != null) + top.tracer.warn(arguments[0], arguments[1]); +} + +function inform() { + if (top.tracer != null) + top.tracer.inform(arguments[0], arguments[1]); +} + +function info() { + inform(arguments[0], arguments[1]); +} + +function debug() { + if (top.tracer != null) + top.tracer.debug(arguments[0], arguments[1]); +} + +function setjsUnitTracer(ajsUnitTracer) { + top.tracer=ajsUnitTracer; +} + +function trim(str) { + if (str == null) + return null; + + var startingIndex = 0; + var endingIndex = str.length-1; + + while (str.substring(startingIndex, startingIndex+1) == ' ') + startingIndex++; + + while (str.substring(endingIndex, endingIndex+1) == ' ') + endingIndex--; + + if (endingIndex < startingIndex) + return ''; + + return str.substring(startingIndex, endingIndex+1); +} + +function isBlank(str) { + return trim(str) == ''; +} + +// the functions push(anArray, anObject) and pop(anArray) +// exist because the JavaScript Array.push(anObject) and Array.pop() +// functions are not available in IE 5.0 + +function push(anArray, anObject) { + anArray[anArray.length]=anObject; +} +function pop(anArray) { + if (anArray.length>=1) { + delete anArray[anArray.length - 1]; + anArray.length--; + } +} + +// safe, strict access to jsUnitParmHash +function jsUnitGetParm(name) +{ + if (typeof(top.jsUnitParmHash[name]) != 'undefined') + { + return top.jsUnitParmHash[name]; + } + return null; +} + +if (top && typeof(top.xbDEBUG) != 'undefined' && top.xbDEBUG.on && top.testManager) +{ + top.xbDebugTraceObject('top.testManager.containerTestFrame', 'JSUnitException'); + // asserts + top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_displayStringForValue'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'error'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'argumentsIncludeComments'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'commentArg'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'nonCommentArg'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_validateArguments'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_assert'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assert'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertTrue'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertEquals'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotEquals'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNull'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotNull'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertUndefined'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotUndefined'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNaN'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotNaN'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'isLoaded'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'setUp'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'tearDown'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'getFunctionName'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'getStackTrace'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'warn'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'inform'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'debug'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'setjsUnitTracer'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'trim'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'isBlank'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'newOnLoadEvent'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'push'); + top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'pop'); +} + +function newOnLoadEvent() { + isTestPageLoaded = true; +} + +function jsUnitSetOnLoad(windowRef, onloadHandler) +{ + var isKonqueror = navigator.userAgent.indexOf('Konqueror/') != -1 || + navigator.userAgent.indexOf('Safari/') != -1; + + if (typeof(windowRef.attachEvent) != 'undefined') { + // Internet Explorer, Opera + windowRef.attachEvent("onload", onloadHandler); + } else if (typeof(windowRef.addEventListener) != 'undefined' && !isKonqueror){ + // Mozilla, Konqueror + // exclude Konqueror due to load issues + windowRef.addEventListener("load", onloadHandler, false); + } else if (typeof(windowRef.document.addEventListener) != 'undefined' && !isKonqueror) { + // DOM 2 Events + // exclude Mozilla, Konqueror due to load issues + windowRef.document.addEventListener("load", onloadHandler, false); + } else if (typeof(windowRef.onload) != 'undefined' && windowRef.onload) { + windowRef.jsunit_original_onload = windowRef.onload; + windowRef.onload = function() { windowRef.jsunit_original_onload(); onloadHandler(); }; + } else { + // browsers that do not support windowRef.attachEvent or + // windowRef.addEventListener will override a page's own onload event + windowRef.onload=onloadHandler; + } +} + +jsUnitSetOnLoad(window, newOnLoadEvent); diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation.css b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation.css new file mode 100644 index 0000000..e3086c4 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation.css @@ -0,0 +1,60 @@ +input.wf2_invalid, textarea.wf2_invalid, select.wf2_invalid { background-color:#FFCCCC; } + +.wf2_errorMsg +{ + position:absolute; display:inline; border:dotted 1px red; background-color:white; padding:.25em; + padding-left:.5em; + /*padding-right:3em;*/ + cursor:default; + background-color:#FFCCCC; + font-size:smaller; + opacity:.5; + filter: alpha(opacity=50); +} +.wf2_firstErrorMsg +{ + opacity:1; + filter: alpha(opacity=100); +} + +.wf2_errorMsg:hover +{ + /*background-color:Black; + color:White; + opacity:.4;*/ + opacity:1 !important; + z-index:1000 !important; +} + +.wf2_errorMsg ol +{ + list-style-position:inside; + margin:0; + padding:0; +} +.wf2_errorMsg ol.single +{ + list-style:none; +} +.wf2_errorMsg ol.single li +{ + margin:0; + padding:0; +} + +.wf2_errorMsg a.closeErrorMsg +{ + display:none; + + position:absolute; + top:.25em; + right:.5em; + text-decoration:none; + color:gray; + font-size:13pt; +} +.wf2_errorMsg a.closeErrorMsg:hover +{ + color:Red; + font-weight:bold; +} \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation.js b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation.js new file mode 100644 index 0000000..cf2af9e --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/proto-validation/wf2-validation.js @@ -0,0 +1,659 @@ + +//How can we emulate the :invalid selector, even with an "invalid" class name? +//We need to be able to remove this + +if(!window.ValidityState && document.implementation && document.implementation.hasFeature && !document.implementation.hasFeature("WebForms", "2.0")){ + var clearErrorIndicators = function(){ + //while(document.body.lastChild.className && document.body.lastChild.className.indexOf("wf2_errorMsg") != -1){ + // document.body.removeChild(document.body.lastChild); + //} + var insts = ValidityState.__invalidInstances; + while(insts.length){ + if(insts[0].errorMsg && insts[0].errorMsg.parentNode) + insts[0].errorMsg.parentNode.removeChild(insts[0].errorMsg); + window.clearInterval(insts[0].intervalId); + insts[0].srcElement.className = insts[0].srcElement.className.replace(/\s?wf2_invalid/, ""); //([^\b]\s)? + insts.shift(); + } + } + if(document.addEventListener){ + document.addEventListener("mousedown", clearErrorIndicators, false); + document.addEventListener("keydown", clearErrorIndicators, false); + } + else if(document.attachEvent){ + document.attachEvent("onmousedown", clearErrorIndicators); + document.attachEvent("onkeydown", clearErrorIndicators); + } + + + var ValidityState = { + __invalidInstances : [], //{srcElement:..., intervalCounter:[1-5], errorMsg:[],intervalId:#} + __initDescendents : function(context){ + context = (context || document); + var i,j, form, forms = context.getElementsByTagName('form'); + for(i = 0; form = forms[i]; i++){ + if(form.checkValidity) + continue; + form.checkValidity = ValidityState._form_checkValidity; + if(form.addEventListener) + form.addEventListener('submit', ValidityState.__onsubmitHandler, false); + else + form.attachEvent('onsubmit', ValidityState.__onsubmitHandler); + } + + var tagNames = ["input","select","textarea","button"]; + var controls = context.getElementsByTagName([i]) + for(i = 0; i < tagNames.length; i++){ + controls = context.getElementsByTagName(tagNames[i]); + for(j = 0; control = controls[j]; j++){ + ValidityState._applyValidityInterface(control); + ValidityState._updateValidityState.apply(control); //control._updateValidityState(); + } + } + }, + + __onsubmitHandler : function(event){ + var form = event.currentTarget || event.srcElement; + if(!form.checkValidity()){ + if(event.preventDefault) + event.preventDefault(); + event.returnValue = false + return false; + } + event.returnValue = true; + return true; + }, + + + _control_setCustomValidity : function(error){ + if(error){ + this.validationMessage = String(error); + this.validity.customError = true; + } + else { + this.validationMessage = ""; + this.validity.customError = false; + } + this.validity.valid = !( + this.validity.typeMismatch + || this.validity.rangeUnderflow + || this.validity.rangeOverflow + || this.validity.tooLong + || this.validity.patternMismatch + || this.validity.valueMissing + || this.validity.customError + ); + }, + + _form_checkValidity : function(){ + var invalidElements = []; + var i,valid = true; + for(i = 0; el = this.elements[i]; i++){ + if(el.checkValidity && el.willValidate == true){ + if(!el.checkValidity()){ + //invalidElements.push(el); + valid = false; + } + } + } + + //if(invalidElements.length) + // invalidElements[0].focus(); + + if(!valid){ + //var base_zIndex = 100; + var insts = ValidityState.__invalidInstances; + //insts[0].errorMsg.style.zIndex = base_zIndex + insts.length; + insts[0].errorMsg.className += " wf2_firstErrorMsg"; + //for(i = 1; i < insts.length; i++){ + // insts[i].errorMsg.style.zIndex = base_zIndex + insts.length - i; + //} + + var el = insts[0].srcElement; + if(el.style.display == 'none' || !el.offsetParent){ + while(el && (el.nodeType != 1 || (el.style.display == 'none' || !el.offsetParent))) + el = el.previousSibling; + var cur = el; + var top = 0; + if(cur && cur.offsetParent) { + top = cur.offsetTop; + while (cur = cur.offsetParent) + top += cur.offsetTop; + } + window.scrollTo(0, top); + } + else el.focus(); + } + + //while(insts.length){ + // insts[0].errorMsg.parentNode.removeChild(insts[0].errorMsg); + // window.clearInterval(insts[0].intervalId); + // insts[0].srcElement.className = insts[0].srcElement.className.replace(/\s?wf2_invalid/, ""); //([^\b]\s)? + // insts.shift(); + //} + + return valid; + }, + + _control_checkValidity : function(){ + //ValidityState._updateValidityState.apply(this, [{currentTarget:this}]); + //ValidityState._updateValidityState({currentTarget:this}); + + this._updateValidityState(); + if(this.validity.valid){ + return true; + } + + + var canceled = false; + + var evt; + try { + if(document.createEvent) + evt = document.createEvent("UIEvents"); //document.createEvent("RepetitionEvent") + else if(document.createEventObject) + evt = document.createEventObject(); + evt.initEvent("invalid", true /*canBubble*/, true /*cancelable*/); + evt.srcElement = this; + if(this.dispatchEvent) + canceled = !this.dispatchEvent(evt); + else if(this.fireEvent){ + //console.warn("fireEvent('oninvalid') for MSIE is not yet working"); + //this.fireEvent('oninvalid', invalidEvt); + } + } + catch(err){ + evt = new Object(); + if(evt.initEvent) + evt.initEvent("invalid", true /*canBubble*/, true /*cancelable*/); + else { + evt.type = "invalid"; + evt.cancelBubble = false; + } + evt.srcElement = this; + } + + //Add support for event handler set with HTML attribute + var oninvalidAttr = this.getAttribute('oninvalid'); + if(oninvalidAttr && (!this.oninvalid || typeof this.oninvalid != 'function')) //in MSIE, attribute == property + this.oninvalid = new Function('event', oninvalidAttr); + + //Dispatch events for the old event model (extension to spec + if(this.oninvalid) + canceled = this.oninvalid(evt) === false || canceled; + + //do default action + if(!canceled){ + + //NOTE: currently an element which has an intrinsit invalid state will persist in that state until + // the new newsletter is loaded and the person blurs or changes the content of a text box + // Furthermore, the following removal of the error messages should be held by the validation + // implementation. The notices could be shown only when focus remains on an element. + // Add focus and blur events to determine when a box is shown or deleted? + + //if(!this.className.match(/\bwf2_invalid\b/)) + // this.className += " wf2_invalid"; //substitute for :invalid pseudo class + + //show contextual help message + var msg = document.createElement('div'); + msg.className = "wf2_errorMsg"; + //msg.title = "Close"; + msg.id = (this.id || this.name) + "_wf2_errorMsg"; //QUESTION: does this work for MSIE? + msg.onmousedown = function(){ + this.parentNode.removeChild(this); + }; + + function createLI(text){ + var li = document.createElement('li'); + li.appendChild(document.createTextNode(text)); + return li; + } + + var ol = document.createElement('ol'); + if(this.validity.valueMissing) + ol.appendChild(createLI('The value must be supplied.')); + if(this.validity.typeMismatch) + ol.appendChild(createLI("The value is invalid for the type '" + this.getAttribute('type') + "'.")); + if(this.validity.rangeUnderflow) + ol.appendChild(createLI('The value must be greater than ' + this.getAttribute('min') + ".")); + if(this.validity.rangeOverflow) + ol.appendChild(createLI('The value must be less than ' + this.getAttribute('min') + ".")); + if(this.validity.stepMismatch) + ol.appendChild(createLI('The value has a step mismatch; it must be a value by adding multiples of ' + this.getAttribute('step') + " to " + this.getAttribute('min') + ".")); + if(this.validity.tooLong) + ol.appendChild(createLI('The value is too long.')); + if(this.validity.patternMismatch) + ol.appendChild(createLI('The value does not match the pattern (regular expression) "' + this.getAttribute('pattern') + '".')); + if(this.validity.customError) + ol.appendChild(createLI(this.validationMessage)); + + if(ol.childNodes.length == 1) + ol.className = "single"; + + msg.appendChild(ol); + //remove existing error message + if(document.getElementById(msg.id)) + document.body.removeChild(document.getElementById(msg.id)); + //this.parentNode.insertBefore(msg, this); //Inserting error message next to element in question causes problems when the element has a positioned containing block + if(ValidityState.__invalidInstances.length) //insert before other error messages so that it appears on top + document.body.insertBefore(msg, ValidityState.__invalidInstances[ValidityState.__invalidInstances.length-1].errorMsg); + else //insert at the end of the document + document.body.insertBefore(msg, null); + //this.wf2_errorMsg = msg; + + //if(this.style.display == 'none' || !this.offsetParent){ + // var prevEl = this.previousSibling; + // var nextEl = this.nextSibling; + // var prevCount = 0, nextCount = 0; + // while(prevEl && (prevEl.nodeType != 1 || (prevEl.style.display == 'none' || !prevEl.offsetParent)) && ++prevCount) + // prevEl = prevEl.previousSibling; + // while(nextEl && (nextEl.nodeType != 1 || (nextEl.style.display == 'none' || !nextEl.offsetParent)) && ++nextCount) + // nextEl = nextEl.nextSibling; + // + // if(prevEl && prevCount > nextCount) + // + //} + var el = this.parentNode; + while(el && (el.nodeType != 1 || (el.style.display == 'none' || el.style.visibility == 'hidden' || !el.offsetParent))) + el = el.parentNode; + + var top = left = 0; + var cur = el; + if(cur && cur.offsetParent) { + left = cur.offsetLeft; + top = cur.offsetTop; + while (cur = cur.offsetParent) { + left += cur.offsetLeft; + top += cur.offsetTop; + } + top += el.offsetHeight; + } + msg.style.top = top + "px"; + msg.style.left = left + "px"; + + //NOTE: delete this element after click or after timeout? + var i = ValidityState.__invalidInstances.length; + var srcElement_id = this.id || this.name; + var errorMsg_id = msg.id; + //var _this = this; + ValidityState.__invalidInstances.push({ + srcElement : this, + errorMsg : msg, + intervalId : window.setInterval(function(){ + var _this = ValidityState.__invalidInstances[i].srcElement; //closure??? + if(++ValidityState.__invalidInstances[i].intervalCounter % 2){ + _this.className = _this.className.replace(/\s?wf2_invalid/, ""); // + if(ValidityState.__invalidInstances[i].intervalCounter > 4){ + window.clearInterval(ValidityState.__invalidInstances[i].intervalId); + window.setTimeout(function(){ + if(!ValidityState.__invalidInstances[i]) + return; + var msg = document.getElementById(errorMsg_id); + if(msg) + msg.parentNode.removeChild(msg); + ValidityState.__invalidInstances[i].errorMsg = null; + }, 4000); + } + } + else { + if(!_this.className.match(/\bwf2_invalid\b/)) + _this.className += " wf2_invalid"; //substitute for :invalid pseudo class + } + //console.info("Flasher " + i + ": " + ValidityState.__invalidInstances[i].intervalCounter); + //console.info(_this) + }, 500), + intervalCounter : 0 + }); + if(!this.className.match(/\bwf2_invalid\b/)) + this.className += " wf2_invalid"; + } + + return false; + }, + + _updateValidityState : function(){ //should be called "live" + + //valueMissing -- The control has the required attribute set but it has not been satisfied. + this.validity.valueMissing = Boolean(this.getAttributeNode('required') && (this.options ? this.selectedIndex == -1 : !this.value)); + if(!this.validity.valueMissing){ + if(!this.value){ + this.validity = { + typeMismatch : false, + rangeUnderflow : false, + rangeOverflow : false, + stepMismatch : false, + tooLong : false, + patternMismatch : false, + valueMissing : false, + customError : false, + valid : true + }; + } + else { + //patternMismatch -- The value of the control with a pattern attribute doesn't match the pattern. + // If the control is empty, this flag must not be set. + var pattern; + if(pattern = this.getAttribute('pattern')){ + if(!/^\^/.test(pattern)) pattern = "^" + pattern; + if(!/\$$/.test(pattern)) pattern += "$"; + var rePattern = new RegExp(pattern); + this.validity.patternMismatch = (rePattern ? !rePattern.test(this.value) : false); + } + + //typeMismatch -- The data entered does not match the type of the control. For example, if the UA + // allows uninterpreted arbitrary text entry for month controls, and the user has entered SEP02, + // then this flag would be set. This code is also used when the selected file in a file upload + // control does not have an appropriate MIME type. If the control is empty, this flag must not be set. + + //NOTE: this will not work for DATE types + var step,min,max; + if(/^-?\d+(.\d+)?(e-?\d+)?$/.test(String(this.getAttribute("step")))) + step = Number(this.getAttribute("step")); + if(/^-?\d+(.\d+)?(e-?\d+)?$/.test(String(this.getAttribute("min")))) + min = Number(this.getAttribute("min")); + if(/^-?\d+(.\d+)?(e-?\d+)?$/.test(String(this.getAttribute("max")))) + max = Number(this.getAttribute("max")); + + + var type = this.getAttribute('type'); + switch(type){ + case 'date': + case 'datetime': + case 'datetime-local': + //code from http://delete.me.uk/2005/03/iso8601.html + var regexp = "(\d\d\d\d)(-(0\d|1[0-2])(-(0\d|[1-2]\d|3[0-1])" + + "(T(0\d|1\d|2[0-4]):([0-5]\d)(:([0-5]\d)(\.(\d+))?)?" + + "(Z)?"; + var d = string.match(new RegExp(regexp)); + if(!d){ + this.validity.typeMismatch = true; + break; + } + + //Verify that the number of days in the month are valid + if(d[5]){ + var date = new Date(d[1], d[3]-1, d[5]); + if(date.getMonth() != d[3]-1){ + this.validity.typeMismatch = true; + break; + } + } + + switch(type){ + case 'date': + if(d[6]) //if time field present + this.validity.typeMismatch = true; + break; + case 'datetime': + if(!d[14]) //if missing Z + this.validity.typeMismatch = true; + break; + case 'datetime-local': + if(d[14]) //if Z provided + this.validity.typeMismatch = true; + break; + } + + if(this.getAttribute("step") != 'any'){ + if(step == undefined) + step = 60; + + //... + } + break; + //this.validity.typeMismatch = !/^\d\d\d\d-(0\d|1[0-2])-(0\d|[1-2]\d|3[0-1])$/.test(this.value); + //break; + case 'month': + this.validity.typeMismatch = !/^\d\d\d\d-(0\d|1[0-2])$/.test(this.value); + break; + case 'week': + this.validity.typeMismatch = !/^\d\d\d\d-W(0[1-9]|[1-4]\d|5[0-2])$/.test(this.value); + break; + case 'time': + this.validity.typeMismatch = !/^(0\d|1\d|2[0-4]):[0-5]\d(:[0-5]\d(.\d+)?)?$/.test(this.value); + break; + case 'number': + case 'range': + this.validity.typeMismatch = !/^-?\d+(.\d+)?(e-?\d+)?$/.test(this.value); + if(!this.validity.typeMismatch && this.getAttribute("step") != 'any'){ + if(step == undefined) + step = 1; + var val = Number(this.value); + this.validity.stepMismatch = (val == parseInt(val) && step != parseInt(step)); + this.validity.rangeUnderflow = (min != undefined && val < min); + this.validity.rangeOverflow = (max != undefined && val > max); + } + break; + case 'email': + this.validity.typeMismatch = !/^.+@.+$/.test(this.value); + break; + case 'url': + this.validity.typeMismatch = !/^(http|ftp):\/\/.+$/i.test(this.value); + break; + } + } + } + + + //rangeUnderflow -- The numeric, date, or time value of a control with a min attribute is lower than + // the minimum, or a file upload control has fewer files selected than the minimum. If the control + // is empty or if the typeMismatch flag is set, this flag must not be set. + + //rangeOverflow -- The numeric, date, or time value of a control with a max attribute is higher than + // the maximum, or a file upload control has more files selected than the maximum. If the control + // is empty or if the typeMismatch flag is set, this flag must not be set. + + //stepMismatch -- The value is not one of the values allowed by the step attribute, and the UA will + // not be rounding the value for submission. Empty values and values that caused the typeMismatch + // flag to be set must not cause this flag to be set. + + //tooLong -- The value of a control with a maxlength attribute is longer than the attribute allows, + // and the value of the control doesn't exactly match the control's default value. + + + //customError -- The control was marked invalid from script. See the definition of the setCustomValiditiy() method. + + //with(this.validity){ + // valid = !(typeMismatch || rangeUnderflow || rangeOverflow || tooLong || patternMismatch || valueMissing || customError); + //} + this.validity.valid = !( + this.validity.typeMismatch + || this.validity.rangeUnderflow + || this.validity.rangeOverflow + || this.validity.tooLong + || this.validity.patternMismatch + || this.validity.valueMissing + || this.validity.customError + ); + + //This is now done onmousedown or onkeydown, just as Opera does + //if(this.validity.valid){ + // this.className = this.className.replace(/\s*\binvalid\b\s*/g, " "); //substitute for :invalid pseudo class + // //if(this.wf2_errorMsg){ + // // this.wf2_errorMsg.parentNode.removeChild(this.wf2_errorMsg); + // // this.wf2_errorMsg = null; + // //} + // var errMsg = document.getElementById((this.id || this.name) + "_wf2_errorMsg"); + // if(errMsg) + // errMsg.parentNode.removeChild(errMsg); + //} + }, + + _applyValidityInterface : function(node){ + if(node.validity && typeof node.validity.typeMismatch != 'undefined') //MSIE needs the second test for some reason + return; + + //if(node.id == "section-CONTENT0") + // alert(/(hidden|button|reset|add|remove|move-up|move-down)/.test(node.getAttribute('type')) || !node.name || node.disabled); + + node.validationMessage = ""; + + //ValidityState interface + node.validity = { + typeMismatch : false, + rangeUnderflow : false, + rangeOverflow : false, + stepMismatch : false, + tooLong : false, + patternMismatch : false, + valueMissing : false, + customError : false, + valid : true + }; + + node.willValidate = true; + + if(node.nodeName.toLowerCase() == 'button'){ + node.setCustomValidity = function(error){ + throw Error("NOT_SUPPORTED_ERR"); + } + node.checkValidity = function(){ + return true; + } + return node; + } + node._updateValidityState = ValidityState._updateValidityState; + node.setCustomValidity = ValidityState._control_setCustomValidity; + node.checkValidity = ValidityState._control_checkValidity; + + if(/(hidden|button|reset|add|remove|move-up|move-down)/.test(node.getAttribute('type')) || !node.name || node.disabled) + node.willValidate = false; + else if(window.RepetitionElement) { + var parent = node; + while(parent = parent.parentNode){ + if(parent.repetitionType == RepetitionElement.REPETITION_TEMPLATE){ + node.willValidate = false; + break; + } + } + } + + //var handler = function(event){ + // return (event.currentTarget || event.srcElement)._updateValidityState(); + //}; + + ////attempt to check validity live + //if(document.addEventListener){ + // node.addEventListener('change', handler, false); + // node.addEventListener('blur', handler, false); + // node.addEventListener('keyup', handler, false); + //} + //else if(window.attachEvent){ + // node.attachEvent('onchange', handler); + // node.attachEvent('onblur', handler); + // node.attachEvent('onkeyup', handler); + //} + //else { + // + //} + + return node; + } +// , +// +// __createElementWithName : function(type, name){ +// throw Error("__createElementWithName not yet created. Browser-specific code defined immediately below."); +// } + } +////createElementWithName code by Anthony Lieuallen +//(function(){ +// try { +// var el = document.createElement('
'); +// if(el.tagName.toLowerCase() == 'div' || el.name != 'foo'){ +// throw 'create element error'; +// } +// RepetitionElement.__createElementWithName = function(tag, name){ +// return document.createElement('<'+tag+' name="'+name+'">'); +// }; +// } +// catch(err){ +// RepetitionElement.__createElementWithName = function(tag, name){ +// var el = document.createElement(tag); +// el.setAttribute('name', name); +// //el.name = name; +// return el; +// }; +// } +//})(); + + //(function(){ + //add invalid style to document + + var match, dirname = ''; //get path to source directory + var scripts = document.getElementsByTagName('head')[0].getElementsByTagName('script'); + for(var i = 0; i < scripts.length; i++){ + if(match = scripts[i].src.match(/^(.*)wf2-validation[^\/]+$/)) + dirname = match[1]; + } + + var style = document.createElement('link'); + style.setAttribute('type', "text/css"); + style.setAttribute('rel', "stylesheet"); + style.setAttribute('href', dirname + "wf2-validation.css"); + + var head = document.getElementsByTagName('head')[0]; + head.insertBefore(style, head.firstChild) + +if(document.addEventListener){ + //onDOMload for Gecko and Opera + document.addEventListener("DOMContentLoaded", function(){ + ValidityState.__initDescendents(document); + }, false); + + //for other browsers which do not support DOMContentLoaded use the following as a fallback to be called hopefully before all other onload handlers + window.addEventListener("load", function(){ + ValidityState.__initDescendents(document); + }, false); +} +////old event model used as a last-resort fallback +//else if(window.onload){ //if(window.onload != RepetitionElement._init_document) +// var oldonload = window.onload; +// window.onload = function(){ +// ValidityState.__initDescendents(); +// oldonload(); +// }; +//} +//else window.onload = ValidityState.__initDescendents; + +//onDOMload for Safari +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + clearInterval(_timer); + delete _timer; + ValidityState.__initDescendents(document); // call the onload handler + } + }, 10); +} +//onDOMload for Internet Explorer (formerly using conditional comments) +else if(/MSIE/i.test(navigator.userAgent) && !document.addEventListener && window.attachEvent){ + //This following attached onload handler will attempt to be the first onload handler to be called and thus + // initiate the repetition model as early as possible if the DOMContentLoaded substitute fails. + window.attachEvent("onload", function(){ + ValidityState.__initDescendents(document); + }); + + //document.getElementsByTagName('*')[0].addBehavior(dirname + 'repetition-model.htc'); //use this if Behaviors are employed in 0.9 + document.write(" + + + + + + + +
+ +

Web Forms 2.0 Test Case 1: Spec Example: Sample Order Form

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following is the first example from the specification:

+ + + +
+
+ + +

Sample Order Form

+
+ + + + + + + + + + + + + + +
ProductQuantity
+

+

+
+ + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/002.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/002.html new file mode 100644 index 0000000..22abb53 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/002.html @@ -0,0 +1,71 @@ + + + + + Test Case 2: Spec Example: Repeated rows « Web Forms 2.0 Test Suite + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 2: Spec Example: Repeated rows

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following example from the specification "shows how to use repetition templates to dynamically add rows to a form in a table":

Initially, two rows would be visible, each with two text input controls, the first row having the values "John Smith" and "2", the second row having the values "" (a blank text field) and "1". The second row is the result of the (implied) repeat-start attribute adding a repetition block when the document was loaded.

If the "Add Row" button is pressed, a new row is added. The first such row would have the index 2 (since there are already two repetition blocks numbered 0 and 1) and so the controls would be named "name_2" and "count_2" respectively.

If the "Delete Row" button above is pressed, the row is removed.

+ + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + +
NameNumber of Cats
+

+ + +

+
+ + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/003.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/003.html new file mode 100644 index 0000000..776eb26 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/003.html @@ -0,0 +1,65 @@ + + + + + Test Case 3: Spec Example: Solar system « Web Forms 2.0 Test Suite + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 3: Spec Example: Solar system

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following is the specification's example of nested repetition elements:

The previous example does not demonstrate nested repeat blocks, reordering repetition blocks, and inserting new repetition blocks in the middle of the existing sequence, all of which are possible using the facilities described above. This example shows nested repeats.

Note that to uniquely identify each nested repeat (which is required since the add buttons are dependent on IDs to specify which template should have a block added), the IDs of the nested templates are specified in terms of the ancestor template's ID, using the index substitution feature.

+ + + +
+
+ + +
+

Solar system

+

+

Planets

+
    +
  1. + +

    Moons

    +
      +
    • + + +
    • +
    +

    +

    +
  2. +
+

+

+
+ + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/004.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/004.html new file mode 100644 index 0000000..1bc040d --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/004.html @@ -0,0 +1,310 @@ + + + + + Test Case 4: Movement Buttons and Canceling Default Action « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 4: Movement Buttons and Canceling Default Action

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following demonstrates the use of all of the repetition model buttons—add, remove, move-up and move-down—as well as the various ways to cancel the default action of these repetition buttons. It also provides examples of customized addition buttons.

+ + + +
+
+ + + + +

Note: Buttons with ellipses will confirm the action.

+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
No onclick handler » +
+
onclick HTML attr. » +
+
onclick DOM property » + +
DOM Event Level 2 click »
(native implementations only)
+ +
+
+ +

Form addition buttons (RepeatMax = 5):

+ + + + + + + + + + + + + + + + + +
No onclick handler »
onclick HTML attr. »
onclick DOM property »
DOM Event Level 2 click »
(native implementations only)
+

Other addition buttons: + + +

+ + +
+ + + + + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/005.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/005.html new file mode 100644 index 0000000..1d0f86a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/005.html @@ -0,0 +1,259 @@ + + + + + Test Case 5: Repetition Index in Attributes « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 5: Repetition Index in Attributes

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

For all attributes in a block, template name is to be replaced with the block's current repetition index. The first section below is a test case taken from: <http://simon.html5.org/test/webforms2/repetition/addition/001.htm>; the second section contains a more thorough test case. It demonstrates Opera bug #230280 and this implementation's issue #7. The specification defines the correct behavior in 3.6.1. Addition:

...any occurrences of a string consisting of an opening square bracket (U+005B, "[") or a modifier letter half triangular colon (U+02D1, "ˑ"), the template's name, and a closing square bracket (U+005D, "]") or a middle dot (U+00B7, "·"), are replaced by the new repetition block's index. This is performed regardless of the types, names, or namespaces of attributes, and is done to all descendants, even those inside nested forms, nested repetition templates, and so forth.

+ + + +
+
+ + +

Test Case from simon.html5.org

+
+
+ + +
TEST
+
+ +

The above should be exactly equivalent to the following:

+ +
+ + +
TEST
+ + +
TEST
+
+
+ +
+

Extensive Attribute Test

+ +

Whereas every attribute which contains "[j]" should be replaced with the repetition index (0), +it is likely, due to Opera bug #230280 and my issue #7, +the specified behavior will fail in style and non-CDATA attributes (note that a '1' is also included as "1[j]" so the value of "10" should appear in each attribute):

+ + +
+
+ + + + + + + + + + + + + + + + + + +
T + + + +
+ + (This field has access key set to 1[j]) + + +
+ + + +
+
+ Image 1[j] + test +
rowspancolspan + +
+ q +
+
test
+ + + + test + +
    + +
+ +
+
+
+ + +

Test results

+ + + + + + + +
AttributeValue of attribute (should contain '10')
+

Test result: working...

+
    +
  1. working...
  2. +
+ + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/006.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/006.html new file mode 100644 index 0000000..b5f58d5 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/006.html @@ -0,0 +1,228 @@ + + + + + Test Case 6: Repetition Events « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 6: Repetition Events

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following demonstrates the handling of repetition events, using both the DOM Level 2 event model and the traditional event model; the MSIE's proprietary event model is not demonstrated.

+ + + +
+
+ + + +
+
+ Event model options +
+ + Unsupported by this browser +
+
+ (extension provided by implementation)
+
+ +

+
    +
  • + + + +
  • +
+
+
+ +
+ Event Log + + + + + + + + + + +
#TypeElementModel
+
(Click the add button above to fire events)
+
+ + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/007.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/007.html new file mode 100644 index 0000000..e80ea15 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/007.html @@ -0,0 +1,153 @@ + + + + + Test Case 7: Repetition Event Handler Attributes « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 7: Repetition Event Handler Attributes

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following demonstrates the handling of repetition events handled by onadded, onmoved, and onremoved HTML attributes set on a repetition template which handle their respective events. This is made possible by extension to the specification, found in this implementation.

+ + + +
+
+ + + +
+

+
    +
  • + + + +
  • +
+
+
+ +
+ Event Log + + + + + + + + + +
#TypeElement
+
(Click the add button above to fire events)
+
+ + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/008.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/008.html new file mode 100644 index 0000000..ddc9050 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/008.html @@ -0,0 +1,82 @@ + + + + + Test Case 8: Initialization Time « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 8: Initialization Time

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following test verifies whether or not the repetition template is initialized before the user's onload fires.

+ + + +
+
+ + +

Test result: loading page...

+ +
+
+
+ + + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/009.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/009.html new file mode 100644 index 0000000..0db240a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/009.html @@ -0,0 +1,79 @@ + + + + + Test Case 9: Repetition Buttons « Web Forms 2.0 Test Suite + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 9: Repetition Buttons

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following test verifies whether repetition buttons can be created using either button or input elements. + +

+ +
+
+ + + +
+
    +
  1. + + + + +
  2. +
+

+
+ +

The preceding DIV should appear exactly as the one below:

+ +
+
    +
  1. + + + + +
  2. +
+

+
+ + + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/010.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/010.html new file mode 100644 index 0000000..ef28296 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/010.html @@ -0,0 +1,73 @@ + + + + + Test Case 10: Orphan Repetition Blocks « Web Forms 2.0 Test Suite + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 10: Orphan Repetition Blocks

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following demonstrates prefilled orphaned repetition blocks.

+ + + +
+
+ + + +

The following blocks are prefilled and orphaned.

+
+
    +
  1. + Orphan 1: + + + +
  2. +
  3. + Orphan 2: + + + +
  4. +
  5. + Orphan 3: + + + +
  6. +
+
+ + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/011.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/011.html new file mode 100644 index 0000000..1dd3f15 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/011.html @@ -0,0 +1,121 @@ + + + + + Test Case 11: Disabled Form Fields in Template « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 11: Disabled Form Fields in Template

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following verifies that form fields within a repetition template are not successful. It also tests whether form fields disabled in the repetition template are also disabled in each instantiated repetition block, but note: for this to work in this implementation, authors must include a class name of "disabled" on all disabled elements in the repetition template element to ensure that they are also disabled in each repetition block. This is due to an issue in Firefox which is detailed in issue #9.

+ + + +
+
+ + + + + +
+
    +
  1. + Not disabled element:
    + Disabled element: (this should not be successful in form submission) +
  2. +
+ + +
+ +

Test results

+
    +
  1. Form fields in repetition template should not be 'successful' (there should not be any querystring parameters with keys such as submitted[i]; these fields should not be submitted): + + Press 'submit form' to test... + Passed + Failed! + +

  2. + +
  3. Form fields in the repetition template which are originally flagged as disabled should be disabled in each instantiated repetition block: + + Press 'submit form' to test... + Passed + Failed! + +

  4. +
+ + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/012.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/012.html new file mode 100644 index 0000000..46513b9 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/012.html @@ -0,0 +1,102 @@ + + + + + Test Case 12: repeat-min, repeat-max, and repeat-start attributes « Web Forms 2.0 Test Suite + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 12: repeat-min, repeat-max, and repeat-start attributes

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following verifies that the repeat-min, repeat-max, and repeat-start attributes work correctly. The event log utilizes the onadd and onremove extensions to the repetition model specification.

+ + + +
+
+ + + +

For the following repetition template:

+
    +
  • repeat-min = 1
  • +
  • repeat-max = 5
  • +
  • repeat-start = 3
  • +
+ +
+
+ # +
+
+

+ +
+ Event Log + + + + + + + + + +
#TyperepetitionBlocks.length
+
(Click the add button above to fire events)
+
+ + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013.html new file mode 100644 index 0000000..dff7e02 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013.html @@ -0,0 +1,116 @@ + + + + + Test Case 13: Repeated Photo Albums « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 13: Repeated Photo Albums

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following demonstrates repetition model-driven content in nested repetition templates. Note the use of repetition indexes in img[src], img[alt], and img[repeat-start] attributes, as well as in the background-image CSS property within a style attribute. If your browser supports addEventListener, you will see a dynamic count of the photos in an album, and you will be able to delete a photo by clicking it. There are only images for numbers from 0 to 16. Opera 9.02 does not display the repetition model-driven background image, and furthermore it does not correctly initialize the nested repetition template; this is probably due to the repetition index appearing in the repeat-start which Opera requires to be an integer.

+ + + +
+
+ + + +
+
+ Album #[albums] Photo album # +
+

There are currently 0 photo(s) in this album. Click on a photo to delete it.

+ (max-repeat = 17; repeat-start = repetitionIndex) +
+ Image in album [albums], with repetition index [album[albums].photos] +
+
+
+
+

+ +

Graphics from <http://school.discovery.com/clipart/category/letr0.html>.

+ + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/0.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/0.gif new file mode 100644 index 0000000000000000000000000000000000000000..9fda3c1384bf85400e130e2bf664022280347f8a GIT binary patch literal 5123 zcmWkxcTiJ_*S#;jyd)1$q%Hvg0Z~IhK*Z%yqzGcb0)k+uBDPSLMG-gj&?6vXTLYq^ z%eoO!Sr_%uk)lD+wHvIsYl$wOB8vI^-9PT!IcLtCnLBf4?)3}sbzKq@0bAh{z|$vB zVdpYin0FuU!{|0>Tnp(-;b9us&4PV_FqNkdvj<@i%6x_f1}7&c;nxtz^WiMDJO~HN zp*%l7uNj)BVYsNTb3w(@WJOic+A#HI|a?-B{55ud> zNtlGCrtm&HAM$^#sBMK-xE$+ZFEr3Mh=j=Z@O}a&V1;GMrmfxG-GTlAum|4)TcA7u zVukRnAUr&L24)ff9zA*lr`E3Z3kENX>FH@$Z{OP53Ty0Oudfeyt3f?FI=U-s*K>IO z2Hxz3tPdYPz`JZcIto@CXp6F(XYCGdeX72Fu~Zn$|8W=UD+^{49dt}=!M*+5VsK4Sb`oaD>cJY;0gnq zg8>j75}0s+MSA=8EgTogvT`z$Q@oZe3x!ZvqJQhwEx57OZ=D}Z{vv@L@TCy`&4L}S zmz5Xb<#)S{#C>k9xLhVj7+v?ZV|1#LNKi$Plk+9J>vfL5mcF1Z%}X5t_CRtz6<{lO1r zis%L$xGL_3D}&$J$$XG4A5p13efo3*u3v-x!~5zs!p0-VkMs=nynOLu5iI%ypPs-I zS&a-f+J-~O{o8lNabj@bN_Om!{+zWLl6+tVd@O+r8y`G)fcZMXH`&dxn~T5^{+7VE zLZbc3@!yYwHvhYu_IrWW{4?eI3}FAi_PW(U0*t8O}KdPiK zJ3CB|xy`S#drq`&4l(k)ci3&YOoSP2{E-?nSzb!sK0Bp6O4LEyvrgW%d5e2%1Y`e=}C!*h`Zco2);KM@or_>$qDNH>6=t!oA{vDRDHl z>C)*vp?S1nbK9yB<+Zfe zb!T5(KWZG9Smr8BxK?$(r4g@QOrDAUsuhHH`OaEBlYE3ZIVD@X+d9am|4j3b!imxH zSC6ln9k3#wpPcJYW=wkLyAKRCT$|ky zc^cI!6JH$1S;K37juH;1hu0T6B{l`Im6Lf=EZxehhh3}yHi=5yiR@a*@SI40E$rw4G%m=v)TLFDx-xw6SFu4Vdx4cS_9M+!}+9|N+Z1>k3dFzEO)2-ier1KETv4A%~V64j_))7 zze%ntlD9`?V+zTn2bFXz?rC()G0WIsF0~~oL)q5KkJbJbDY%$D&dpJ+&1?(~> z=D)5Pm^AM;bOBF5RzCoeWw&}fpGE%q-zq)*4VqQF$mVeg@44%1CH2JAdrj-}OZCHs z=>a*b9QB1=^<{Sd#i3?1u1|QhnIWuPIj6U&0JHHC;S@KlKHj58BrojspZ9xf@8&!8 zXQ^@Bf|VvIV?yr*k&nV|*q>_z>MYh!0~GD=9?$jQ8cZ}P2l?J$Upz~M=cKeFo)x6J zbCZvDFVb?j3(#4PBvx*lLlLqaE0*!k6S)kF0+Xl97c6pD_;_?QFH3T?NSfPkd}yj= z!Z_PUBC~zg-|6+Z`P0KL523y2@8WYuGYgTrF)voZCZGC#+6gRX=vZHT9K~WuyAIuA zL1qrIp~dOJ^klZ9C!(8is%2n9d6z{2zfKfe?;vl!S;e+dpozji4yP1y2j|KAkZm8U zd;T4JdBcS|qdrTpb%`}xK2Z42fLi5WIJjGfx?!q|dd1*}M$5Actzs;U4Q;^Q-q>m=|J6UHwCH*POL(&CKfAPIo>2+LI1Ham4$}4-ZSE2Jnt~4wjr_@QQ6zu~( z${VPd-P~W$?cd}SG0C9T@$=lLa8~fIJKd${ZXvZvnbVBL+bfJ}F!2<7|l>Pr_nme~c{{Zip{4nVd^E4EKfU zlzdd&VAed*_s?`<(VnvLiqT_I+uUb`P>+*!-F^ANW}qxAA)`fhiqb+!S`tvd}B<5>x2cpfH3FUS5T4WoB91?+dg&i`G>NI{h zdnvL&UsSeT^oL1{oHT2)r!sy>!TCm<#3W7iane!PSr_j?kvQoJ!KCG1x@$af$!XS8 zozM5ZJouQsSB^sGn?aH7rSN0%vl`4?`nx!~2r0F#I)A;)+pe>t@TWE}=y)BuBv^hm zl|gWfRQnxp0{LYtpLO83y$;jr(sff_SOiWs{=b)$Xq|4PSb^VM$VW}Wp=RHNAL0}i zg1zoEdtgJ>nJO{gp3z`PbtTMN2%j{i1xg*K89mBrMdaR5DGGbNr8^7P56R4iHOs9j zsjTtkr@X)RlYbnLteH8bFk5URqc_Rf<=W3NNQ{Kwz1AsA7rZBt{C%!0j2{`9e#)LJ z>Q%VTV&n?n>l7LEIfDS>DG(<2-@>M*`Ph;*-qag!iWaxuDKj((Wbv`eF^)SZ>DmnnW?Fs+kwaNSsYBS)ILDv)VQOjZbw56UQ^$htO1 z&iGxaE@2^0BXWwj-O71U6_bB;`l()N+xnV{5a}M*HxdDUW=e#`8nsyFv)8=4_@IkKgx)4Wr_bgFxDh8yT@-PQFlWeu4g6pwp6 zP?i}kh@&}SjFQVu_3=ZV+Ui&7cc^YqVz26qH7boVsg+pe3|%A#xqCV^Dsl{M$(Sc5 zo4cYT(fF0ZOkk6E_>*Px?iiGxB8(VW_Vz4>)&* zZi;(3l$@1r0Hc}~IN#)lGlYon-sV?K`;^}Dt|6tK{4 z&o}wWNK{Eb7g7=Atm+?hfSO=Sc6~2``W2FTB*Gj}<}wwpUKA zn{)MKn$bo7j!k|u)aA?Dj~$vQ();F_)Ax9!*n;kRH)`uvgioBCBcvH_5Et&*{iApB z)%VPP^JSvgMXX(_JoA4#OQI(&s!xbtHRiC3IX!z=r^R`1jNb@*p7Pm|b(71&%~_i= zAJbf4^5|Cyl!sluw`EtDT9y)A{8(>^bDL z`A8$R<2FjcsaYyscv0pyq103@3hE}!DCm&H*1pW%rQ$uqccgrbVEWkHRNP@&1{&6%o-+^QmdFtQ{BJ_GyW5t&+x8 zt{Z#Gag`teQgRQ@bya2Es|`DZhYv`Z2^uCtB{b?>6^gUxNh$MPIqKzJ2G+1e%*~Kf zH@-|>CTCw%r#j~{f73AIFT_sB*{xVmq7}{*WNVPL@Xu`Yu3-{tXK%l z`!aJ?;vTg$Axu^9sV?}TiuVBz|NBnGbb5rjgh5hqGR1xZyqL+1<%<%XgvlqBtb49D zj~1*zN#@tgpaRU+<>~^ zj1X}|-UnfkG%6(HXQ7-ums0b)-p=D{dG}A`lOozJ8~c82SEPa@Zlk(=7ND4H&1YUP z!L27Moj=gm?2Y~si{7~ax(u?_dFrUVHfxkaXjp>vtL|Y{QP-R;V1BTK6rf>Dky+xV zt()&s6nye?5%m{E?EDLiqc|hA*l}3J3?*_Zq0m7Utd~b0Vbp|4DbMBH9a40AaprL~ z(F zSs)2}C}$S~qAYeCQlXnPOt%&p*(j?PL%gfm!K29apUQaE3%LJr7q-!Qh|tF`1nV^c zaeVXzk)@}EfPtff=gFZ8TFB{!pwkh5uC@yX@*yVV{lvOOVY`HPYAOKvNH{?>^mNT!pNxe_&HAAjj< zB|{`NZNC(ot>VpA@nmw+yV_F)1*olvA(a@`#j|>(ls~0MGQ_NfHY-|1%(c=Vif~FJ z&g{d^=(nH?s?cl2sEdl{G?#J3=1g7-+8sk;N=XciKb6S3afeq#aQPUdW30Zt^u%1$ zX0G+!aTAeN7v-x%2~L0Mu>hZryw6;T<`Fy!SLT2npp-!#OX_A{pW6 zB_LnX&>RUz8?oVeI2#l;X9vz)A|cCgilZ2qfGojy@uH+oeY6>4HuD+kffgePdAs1^ z`PGXz3COj&;1@`X7tR0vlgF#*w?)QLIHW6?5enu#9L!bJ-xZt=1+`8>iIS6V*P=FJ z7N{AiHfOGZV}|GATt34_biq+V&W?mM71dl$x)EYMm|~_HY5(eJdc)k=Ar>7{pi=^J zoftmI+YG8uii&qytARWTJG8{H9)~CusY=S5k}#uj&NYlPA~7AVH`|!2GW>j4$ZR?HkBOpO#!qozj7Nzn?# z0_V86v!gLmBhb!;u+oG2Fv5T%A>Wfjc?u<-Fz}PZFBtgnsmnvzr$gr?sOhLI6iZZ- z&gC)Wig`LfqpL{qN@l5qER~Xqq_BxkReoQPggq~nk)mFfHLgs-(Qa(cLN%l1HRGuA zz(NH(0h`kmLA#`2Ez}%s`>G$J9ysG}H}3<p(Xv37Zol zqMdD~T~g7q)ZDisx|QJi)32Ok1oeQNxq+azOWBSw8(VJa@-&n-%~E3x<(mc;m}3r} zdcyZhOB56X5!o2i@m4TA6cmuqzwN&9rCAp<9noDjGAn9CKYPUB$cWM95tD}_2BsJ+ F{eOj?9hU$A literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/1.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/1.gif new file mode 100644 index 0000000000000000000000000000000000000000..f931d174f660fd3a1b68b7267e806b16f5a957cc GIT binary patch literal 4187 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 M=f5^lH861fA8~}cTL1t6 literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/10.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/10.gif new file mode 100644 index 0000000000000000000000000000000000000000..3bb8bb59c0d124be2be1e2fa2b5db3162ecd7f74 GIT binary patch literal 4295 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 C5m5aA literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/12.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/12.gif new file mode 100644 index 0000000000000000000000000000000000000000..3124e1f3981de62bf35c122c5b25a6d52f3fb652 GIT binary patch literal 5762 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 literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/13.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/13.gif new file mode 100644 index 0000000000000000000000000000000000000000..a2eda86f0197b58e225217da332b17709de9bf25 GIT binary patch literal 7221 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 literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/14.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/14.gif new file mode 100644 index 0000000000000000000000000000000000000000..9fa9bbfd9e63fe2cf8fe61dc20dec390252f7fea GIT binary patch literal 6733 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 MCfB%46aZ8I56WklYybcN literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/16.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/16.gif new file mode 100644 index 0000000000000000000000000000000000000000..44200c6f3140d016ec58b3e46aeaaa2e4df0315d GIT binary patch literal 3479 zcmWlYc{tRI_s7qS!HjLjAlqOF*|H4DSelQqH!ahUC~0h$ge>JM(b%`aDC;dnB&F^h zDoatuPPz@%H!U=l`q6Epjc(KYy6@NXoacG}^FDu^^Y-%bbfAXpg&6n-U(fX~&Lzg|Au^%84yNC4psNV2~wnfD?T4W~M8w z!CDEF$b&owfn(0F3agLdaRC&3hR+2*e+F1UA|$3bgJ*7TG9(j$2)5e(=5P~k(t#d& z=T0od4!{6py1|FE-v$SbRGiP{ zXYlM6+zRjS4-*LNv;ZVrkmOcu1z5{Uc7igA#06aXpifRk3d zF62^xvII-@P_HTnFn^S;4{D$my$RgG{RupYcYp`*fCa25J3uMO{ALTgVRs0GK&Wl3 zJ#2^V;SjEFVFAH5(Gcwo-qIi~EhmQnqM)H6Ed_YM6ZG`Z7z~)Ndk61&pohcZ(CPF% zHz@P~t|#Qsq1Y3OJRsK%^4+1p9b_?3-~l;qumUS3UXbqwY-=d-gb(l`+Z77kA(swZ z54aB3-@@AiaNs?>2TAD^Oz9E8%Mh;qLc*Jc*>33m2|sz>&H_Spu1GuJdBMmp`1_oal3+Opwwn}7ByTGs^i~iR8_bbVQ6iUjcxY%UJjua=r$jE{q{N$G}ZU$hY3ikH)r+@vx z-7t82{1v=n$}$5WfTjoVE(3J%P~wyQYx}RO{t`&^*D(JXu=sEM*9pK%K#U`K^Xmjz zSQWFN5q^Dt9%22~v)-*228%RoqhE})HVl`N-3m!QZH=R+O?H~c91fO`-ngo>E#L#O%Zg!bHeQ{O zr2*CGfQOxJGoJZfmhI!z!{i#oanI1(MDywU7uM_pm1R*S-BL51;q%7GT`NVFy7Bab z8==#wX}uQnQdV+R6kUz3xfS$BL3dh1`p+=lHl5$UbUM2pWJ%k1xHwBbXs5mZuq+{T za}$kJrhTR1^F7ySBF)DwXo!BdOK#yxc(fs?sYJGqXp!TsA=D)hbrV9K=X9`nN

+yR*TZc^SRR2=zh)WTZD8oj5 z{woEH?b(Qm>f_|(*f57W6_sQOb`oDPx^*Rr7Aluopjwd_GJVH4z&0mV{7Ap3yJoMw zfU&a|F0Pa0KipYLJ2x`UDBgm_ZF=8RE~VG*PA`zz-;7N-`1;_Rs^gfkq}I$=#9Olda2@UCK!m{O04a&17-+sFY}zAjaft#{ea6^@$A4C z*@KTuEorPil1yU!1l~Mcz6GaC8RKOb8Tk4x=_hmV_{>#^b}bb)cmxHSao-&Dk!}nY z#Tk1WI`O%A-VfoeKNOwEFdX^%Wz~|3y0S5{S=Gwo^{Jg)pMc6{)XaC$ zotXiy?Oxu5+K?S?+lxBA0MQxYm?ti!{2s1~=e_}{Gpjl4CbdZPH?+vj&~x9JT(Qjg zOSG%dI0I#THdSbBmLNky6)Nrw_}`FZEMAG#gOMpCPiGOT^pE+9ZCIinCLTVd_{FkSbeBLfo)T@;)JnHf!T{XHMeGt zF>%AyR}&Ba;5neI@B)dBeet-K{IuX!O|BMPI)_ZmM4HC8Ku}Cb?jP^;<<-GTwD# z!(Wt-u9d8dmkgV2q!W9x<#cWjNMSp#>}Do3F~hjWDf&68O`8%9{N7_4mfV!An-3tmorgFl~mmj8ghwRB74GUxOt+ZEKCacig>y_%re|gZ_`-Z&4o5 z?&G|9uVv%A1nmY)6~gIa>8LWFl=)`(xOyH4h>7aBR~^&Zr*gX1ed>GOuH!5Nj|jMy ztle^^KvO>O0t)qK{IfT~9eO$(?Rt_kS>SI&IO= ze~}27K*ktT&pj45HNC0BPjEO=))oIX1ZTXnXA!TG^18(*Vm(RQHY{d z(nsoYTXqYO)lzH*Yrj_xILR}Jcn2+m-?W$X=Z)4;1<YvSestBO9FPT6ZBM=+8r$8NP2L)H+?f9!ws`%_!L`mfXI1{zF@g zpWWPZQQQFWQIYzA@L8j*M@vRLC=IO$kzSr`Z#-zWp_(vCks@Ss(I9(c@;Z@hQp0#} zqZ={2FjF}@(4-wc`R`EpzFr%LZNSSc+}GWi)^&}MTsK?q518>)cY%pYLeRXSe2zpv zgOM1;3d$E?Hz$p1&(+49erYJ3vy1iRR!qUhti9-ugcRB{FY`0cvv+5sd})6#a~Psf z^|D@!v0Z|<)5lQ0n4E3!UC?{s@a-9^<>XH7jMhHks!AEsr-qHsYQM*+5({Omzb_YK z5!2h7B;VVV<202Nyk)413)`;p72`g;X|{V9f;rSBM}(IAr7s73zmi zev@ULv{~n~ThlR8+LFLA<6&+J@dE^z5TTTqfWl1Soe})+2=-pQf|w`!JW{vC-;l&p z`_557nP7a_N@6zJ1Ho{F_?zTRv9+QHfn(L11AJ6>r0(Vb{dK}auRb1^=P8VIU_I*O z_6hL|LPgpXIy^qr6+um$iajept5dLB*$LdK{E{Q9`6bO5*#f$jC0yzCYD1W6y literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/2.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/2.gif new file mode 100644 index 0000000000000000000000000000000000000000..c6544fec1f34a4e70d3cb4d6ca72aad78a9514b3 GIT binary patch literal 4846 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 literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/4.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/4.gif new file mode 100644 index 0000000000000000000000000000000000000000..215096f5d37467f1cbcb97b763a3e89026c511ac GIT binary patch literal 4882 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 literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/5.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/5.gif new file mode 100644 index 0000000000000000000000000000000000000000..d9f8e4eb31f74df2496411c36a1a46bbfeefd53e GIT binary patch literal 5113 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 E0j!=}E&u=k literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/7.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/7.gif new file mode 100644 index 0000000000000000000000000000000000000000..f595fb65e6a61dfca0aa474dee2a303b4882154a GIT binary patch literal 5219 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 C8Dg>k literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/8.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/8.gif new file mode 100644 index 0000000000000000000000000000000000000000..5fe6259eb4b02a9de746d3d9b3f57209b120f5cd GIT binary patch literal 5759 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 pr4SV)Sl&YD#%e%5S<18#Nf1NC&`bH z=GcVw@8}~Sr1J0^Zsa=2GJNl3HIPfhpVCfg$5u z7_bj+xSbP&SMROPd}d`Xw+gnF9I^~F%omaOxgLW6MI##DCa0bPC9ksg__FKPZOTzI zgOdwmFcQ&LKrX|j+q>Z#TS+m_yDr$XjdEBPW~J+V$*^hg-Dxu{f?_3y&QEV^>W4WD zES66@W2m_l5Ywd%%X0SQavSHW3V)U~o_@Ew%8$Bb6sV?}CYUa>f0pO)1CS(`d2PCvYZI zs}>v$CnCoO&~IPj&yry+w_~Uzk>} zQSZ(;`y$yVD)vyU)lyvg)a+fhkr@**#xZv(xv8ze7!Y&W8U-@r0sviPgw$R?e8Vax zbzpn&H@c;QuHX@i{Aqy-dOKh9lQiC)e>Rs$@R4wC^RW~@wMpP~`$@f|)H&JJ{B{xo zYa#ci;iA((JwkU^Q4TO5qx9138aF1lNGj1dpg_(q*x$hb)W>xGR_jF3`O&uXMdr;y z$%#))=oyMcu~YKyz_<)W`N&Pnb57kUNyyQoipmFU!YL^YR$p+*m!Ci5N{e_+Hs)qn z$hUF$Fr=ur(MZfpCYU=n^i0F~5^5s<5>IkznSpdS6RKA&i&A0dx%=8(4pn~B*yV7+ zQ*{~*M+fmTw#yZ_ySuNA*mvN2v@yh#h;%Sd@?ugtl-MF1Lsd|?;_8`_tI0-=;j2A1 z%ZWljL2>K=fO}r1qZ0W0k!zoa%PeGwRDO#1sB&JJH@z4JXfbwZ$q*b=?{zzr z{Hi_*5N^H1w4NMu`y8=NK8n0X1*fK1~|HiPp|6$Oxg;Aobowc>8?T7eKp@q&$uC8bW0^ecvDvGhx^FA9LbOyZB%y4coY)Uox(SD*C0M&0oXacKLc4 ztxyT#aNA*UPW+vImVYSK%KRa2GOVD+G3{CpB2j>HSwMZLPVkrAgvS|#o6mB@vLbI) zeRc>u%Z2k9lsGQb%S9`3l*J?s@rhgbP_ty`zlpA_=ja^&m~{lrKmpeLgvASpLD%%p zsTB1J#G4uSlM-teTuf)A)~J@`t}wLt6=Ero!|y0v5|WM-+lv$H;$64cx3y~(TW9i< zc$BBt^o8;zNes#f9G!xRS>8{MPD3>`;t4h-K(r){zsOLr^bak~j}ZAcM>LK}ImjmD zZ)T1Haubj8w+myx6O|-uxs$>lWoRnADMm7Ks2m;R67DgL5gE~w4gaoq^5G&hr9z7E z{3)TyB`f2HGBe6W=JL1a-Bj>*wG)lRrp_@Bqp8^n8I;0CDKca02D8U|pVyiV{vK`o zfPGYT!T4V-(}6K&f#NTo==qcOoxR@7u3%aLLz9t6k*{W8Y;w1Sh9^#OkrCGeumdOh zNyhG}7I&NOBH=`X3aChcgz~YITr=icVu}E<`2$@q84FV`Huik=x9NX3nVbnl4W;ne ztrWV15x_%p?Q`RNA6KowW+kr!JqdY=*Li^6BBvB9msEXZ|0<(~)Y~*@Ipqo{fg2a{ zHZJt#(*1pw1WE|IFOq^t#5EEcRS5Q}(8yGcYjSL-bb;GJVvdSfq9X1D*f9lhyGrvI zpvt8*hgdC?%tqEq>F)vcJx{|iZb3Odeoa1pL#DC)AaN6$RPRY@mJ%-T^iOVlU#A31 zB%~+G5Zg|zWT5xU3S=Fww{_(G)x62p`pLFilQ&;X-kP73FaFTw`N2|)0o?xwi$@na literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/9.gif b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/013/9.gif new file mode 100644 index 0000000000000000000000000000000000000000..cdf3610c89471daa69283184413155feb80cb05c GIT binary patch literal 4813 zcmWkudpwi-1OC46?t8~(GS`?yBbO=URyKqpMq(XK&83pih)PM@TpEhEQ0sJ?OGV|J zQMrW9*xb6V(&cn6t)z?UG+otM?bq-5JfG+DdH#C-d7dYHS(vY1%10G?K@bp~MNLWei|)2;z9ykq6zHJtadj41%N6cmWX;&*lHAC@OMIJ=Ak@FxJv zBO?v1`ANyi69AOO`A+Uj`S$Ibp=tBB^736#-eV$ur!cCmtxdvPqypfP^ylK@;x}*J z^a9}K?;qo7?_fszek8N*$dSOg7NTgMF97u9MQb#gj=nyHLgD2fXg7D>RCUV3hYwp@ zTTuYM0l=O;>*dRr*NYP#O-^1ZT2&C?$@g(AT;^$QLV1R!6>KkzkB@&dJ^c#+=K#P! zPzL}_0Ib`PF|aL;3_%qY75l2IPZlJXCxzwYY+k&0$qO{~*|TTInoozt$N%i>^!3Y^ z-rnA|{wy*=e*5+<9U*=@lx}D*e0^}k(iJOq?A*D`ow=ABEDZJ7%3HL|)wXv_G>$}W z>*-0^ym@3t{Nu-uJsFhCmoNW!Jc|y%%<*h*CSx`LJ`R@uR0-5-^}UKU9}aFXG~^i0 zZPkbp*$cgs7TUIEgwsj5FGn|Fjj1*KKyhjLi@No1Ytu{1%3sy4(>HGB%(D()*&qbm zsf-A7W3s!wIS!A5a5%$>Y{SW1L$lCuJj-w_%g~%_IG$}dy`?`t#&9yva4Prnp^T|l zuayP7?74!BH|bAg>l<XNzWyK%XGILJTf~nE4*32f^hDOJJ9mmi;><91 ztcP7Z|0m_pNV#~o_aa|^Z|}m$g+(zw;+mSG<({KsV{N%BY;5h$oIU%wHf3~Y{Dr)j zzFi3)8*;uH4C7+{rQu-!fZ+#!;OHj%FW4Uz0N4M^|2F}M2Jnq!6QPg~ln_l_l1CK{ zsy#G^XxawAjG z?G)zR1GdE3{%Vof&(nD0E2pe zBN*r7jDo9n$QC{yJxp6PH)1sRnbgK_&yA<3@bp=Sb5hg!346i41JK)_BJ9JWDpB57 z<9v2v<%v=kT)*Pd#EQQk5AkD~*0gnx*WQqxbu2E+fL!7cIp>ddc_@h-Hz=Jsgd~FG zB?smiJ~*4R1!Z`_u?489QE~05rM|R*uFtba(SF0qW&xO${-ai>bOFIl#82$$mmf;) zTvj&A)bu-(zXTRbTpN^>whIcC@mj6+s$^vPKozd*^}Cy;vl93X)H%e#8dG>u41!+! zPDJJnJx*=Rg_<+wc)0vxA;LMi1mjs8K_eNoD{qmAdWw(=F6!Qg2c}Ti9P{?^+e7r- zMLZ?JPTy2j7N6jk0@8F%E2!V&l{J0?A5te}hN4t4H8_eVq3B&XQRcsf3L;65iY%_q zt>qu6aI6jVgc3{zN|lR{1rK7^)p?3dPN05H?z40y9On1<6gzfxTz6!XfzQMS_yT2& zMQDCI*>qZ<3Ue|S%EL^&Ul??Q2Wp?KUU5O;DI67JuriNit!VVYJD;N z@l6x`_?E0w46l?@YM1Ud92BS*S2&w0+lgCk&Y{5kTl3j}FTJ{~z+(@OcZASdbkN{@ zS$+cvH$3ORn{F-{E#jbm6!wE|H36Yqk8N7*GD$Md4@kmz2IIqp3 za}f?xlJ2UfDO;Nu-Fguq%4#D|UHVIMRnqoad6WKeI<3O$h3y-k-ejRN#;rX+)_9hQ z(xlwkG1*XcjvA>`jj=mfqN@7d8MKOO*P`8SdYLu{cULbHsQ#3x+`5=YXz#=(YM#>C zdHW37N|oxGAbNG5DW|?y1}`N`+1zbzQOw(ePNw`P!^0%D0LIJ@-QP1zVl5t+e;#{S z#x#ivSbxuB!vNm$x0S6`i1S|iDq37bN(~$(s2`iO`fWccXy@y8WAZYao4=0e1-C0q zurF5LG~bT~i$5eZ9>@1x5UB=kz{YXaRAMejN(Z~%S7GKxC>?hPrZW5=$c*wFX?jos+KAQ=W>Kw=nK)_riL359WV=2SH%JcyIPzXgPZn?<;S2V?*>H-;zK>r_ytg zU>zlOd$6SfE=@|lz8nX*-cPlT_Dc53es-CY>oi=w6vD-`N0%(nbmm`tJnNPP(ISKA zwJ+BmbDxH{7p7E(b-Ut@u!dzh?Uf7S9q<#g$|6 z#3!W`ist79>d`~AqPU7co8bV9%iM{ zpAMKxnjy$rDZp|iT9&)(l z<)0Qpvd1XoHCH6&{G%i}o?BH+0TzAx;*#y~HjF@ec7 z-YOlNohpzfcYMTUfr0y|8A$JYO{8}o@J)y{nk5(Q$!wXvm5ItSlS}N{yUVi_sTIws z(MK+13?~}C3ZnaF3|)-dLxk_@rP;^%`wt3?Qm>qQKmqV@b)`p;i`-~%uqU`TBiP*K zevO&>@r9fck%NXweeQ-okab<;09H706SWq(N>#)Bbn(}74R%RVH*Xyx?A7a+~O`}xtUjBUoKF)#4WK$bkfOzXJ3Mf_D}B%AE2KucG$hy z{r5Qvu}Rl4TZc9G@(!6xNGz?y-{XF{{!@sNxx)3%qJxvO&pn70HSMrWXMWg?_QT4iZ-2_nhoAYqMQq3Z#=gi@J^4N3 zy*VH5+aHs-CQ17>nku()wbQ@;93f)R#V(osnhN; zyz`4}fM+DQ^U@NM&8|#SncR+~P!BKUe%s>NPdxk)_az8|v78WnX?U^O0py6%Vbxu# z;x0Ap0z9(;BiJU)GQ*kkkhQb|t9qj;Iqp6i$(ko>PN4jFSl+a!^&a>jZ3_#mny$qb zj3gv?VuzlyPKbz!Z0t7LI@=j)FN&PvfH!QYU6^(@4ttP?t-Md&cZl@IXP>ecg~6S>dJt;%c|OiG)ayn2wDWdM1ylHHL?#P7uxj|t++ z2fO^XBbPbY8)-X6nlN@vREEsC2X(Atl5;s_Xm0gMeB^eoye49utVHCEt)LMC z?pLP2BQ0UNgq+{@E-f@tOSx*Ek%}|=TZw-=S+z=n96|jzIV5=tND>YZvqU}2*`9JE zy|z@tx4$Gpf|ar8UE%T&Xv1@{2!~+{ohKsfqw^y^;>9DiiRBYj-E!h_6O5jNeeT_~B~~JNJqZf-t@tjwB^wJv1>k3fx#4hQ!0B zcHyg?>oiitQAxE2D3e#IDo2JGI3G0SvUzm%*7>cW zdp?mZ4P~zN0;x7r-ihFKTDMDzI7QacptiZ3PsXo_}xpLFIdaE)*loFqCaDyHt<lrpkcWR zOe6=30f>SPnexcYDd|K3v~L}3LnGM8_nZ_FUu)p~Y>W%oQ&rn^Egk9+IQ26zLJpyT ziT&c^w7nIgE2+PMW=0;eM9!20aw#A~C}O7|H87D$9br;V5*g$hDq|6eh{OcIf=9(N zG0BAs-E=rt9;E;!?~oI2)1V4VkglYz6rOe#G$(W{<^Y&1w|3THV>CDk%91dN?eaa< zQ!OJ>C_qGZyny8c(@F08DMwbf!EXU1Ud2sg`cts(J1u=$LQ)IWG|DtOKY@qZ1o8?X0ML? z@C@-888;ORn}{H+hFmj&$^6O2rIFKv&ant+8NS7e9jg~gaW_%&OC{x#27CDn6~`vM zz$tdq+R|?$4BC0Nq1JZWP^2oPi*W?mg;3lMv|C(7JdW@B$Gb4gf0&D3tT;wbH&yGnt53B)4m!{aP2<6Q?0sC}uYU5TG+2)xa$x zO8OZM^kn|!CJj!;CO3)ZO+}u(`l{uPHPUs)oebMUf!pU O`b! literal 0 HcmV?d00001 diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/014.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/014.html new file mode 100644 index 0000000..9ed4ce5 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/014.html @@ -0,0 +1,69 @@ + + + + + Test Case 14: Exceptions in Repetition Events « Web Forms 2.0 Test Suite + + + + + + + + + + + + +

+ +

Web Forms 2.0 Test Case 14: Exceptions in Repetition Events

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following demonstrates that the repetition model code does not fail when a user-supplied event handler raises an exception.

+ + + +
+
+ + +

Note that the there should be errors raised whenever repetition behavior is envoked. An event handler createRuntimeException purposely raises a runtime error.

+
    +
  1. + + + + +
  2. +
+ + + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/015.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/015.html new file mode 100644 index 0000000..1d549c2 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/015.html @@ -0,0 +1,78 @@ + + + + + Test Case 15: Required Elements in Repeated Blocks « Web Forms 2.0 Test Suite + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 15: Required Elements in Repeated Blocks

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following demonstrates using the required attribute on controls within a repetition template. The autofocus attribute is also included an input.

+ + + +
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
NameNumber of Cats
+

+ + +

+
+ + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/016.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/016.html new file mode 100644 index 0000000..c6020fe --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/016.html @@ -0,0 +1,57 @@ + + + + + Test Case 16: Autofocus on unfocusable form control « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 16: Autofocus on unfocusable form control

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following tests whether the hidden INPUT element below is incorrectly (attempted to be) focused upon. Attempting to focus on hidden form controls raises an exception in MSIE.

+ + + +
+
+ + + +

The following form, containing an input element with an autofocus attribute, is set to not display with CSS.

+
+ +
+ + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/017.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/017.html new file mode 100644 index 0000000..e504c2c --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/017.html @@ -0,0 +1,324 @@ + + + + + Test Case 17: Form validation « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 17: Form validation

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The following tests all of the form validation controls.

+ + + +
+
+ + + +
+ invalid Event model options +
+ + Unsupported by this browser +
+
+
+
+ + + + + + +
+
+
+ +
+ Calendar controls +
    +
  • type=datetime
  • +
  • type=datetime-local
  • +
  • type=date (no step)
  • +
  • type=month step=2
  • +
  • type=week step=2
  • +
  • type=time step=any
  • +
+
+
+ Text input +
    +
  • type=text (required)
  • +
  • type=text (pattern="\d\d\d-\d\d-\d\d\d\d")
  • +
  • type=text (required pattern="\(\d\d\d\) \d\d\d-\d\d\d\d")
  • +
  • type=email (required, overriding oninvalid)
  • +
  • type=text (required)
  • +
  • type=text (pattern="")
  • +
  • type=url (required pattern)
  • +
  • (length should be 7) maxlength=10 (QUESTION: what about when maxlength < len(defaultValue))
  • +
  • type=range default step = 1
  • +
  • type=number min=-127, max=128, step=0.5
  • +
+
+ +
+ Non-input required +

Favorite color: + + +

+

Favorite food: + + +

+ +

Movies:

+
+
+
+
+
+ Event Log +
+ +
+
+ Form is valid! +
+ + + + + + + + + + + +
#TypeElementModel
+
(Click the "check validity" button above to fire events)
+
+
+ + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/018.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/018.html new file mode 100644 index 0000000..20a6be6 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/018.html @@ -0,0 +1,115 @@ + + + + + Test Case 18: Input Controls in Nested Repetition Blocks « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 18: Input Controls in Nested Repetition Blocks

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

Testing various types of input controls in nested repetition blocks.

+ + + +
+
+ + +
+

Solar system

+

+

Planets

+
    +
  1. + + + +
    + Class: + +
    + +
    +
    +
    + +
    + Moons +
      +
    • + + Class: + + + + +
    • +
    +

    +
    +

    +
  2. +
+

+

+
+ + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-colors.xml b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-colors.xml new file mode 100644 index 0000000..8c33384 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-colors.xml @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-formdata.xml b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-formdata.xml new file mode 100644 index 0000000..1f2b0f8 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-formdata.xml @@ -0,0 +1,16 @@ + + + + + + index (pre-filled) + index 101 + test + test + + green + blue + evening + Fridays are awesome! + 2007-W01 + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-statesAndProvinces.xml b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-statesAndProvinces.xml new file mode 100644 index 0000000..99adcca --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019-statesAndProvinces.xml @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019.html new file mode 100644 index 0000000..c7d9315 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/019.html @@ -0,0 +1,405 @@ + + + + + Test Case 19: Prefilling form data « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 19: Prefilling form data

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

Regarding fetching data from external resources, the specification states:

There are two scenarios where authors may wish data to be fetched from an external file to fill forms. In the first, a select's options are replaced by options from an external file. In the second, a form's values are prefilled from an external data source.

In both cases, the prefilling may either be full, in which case the previous contents are removed first, or incremental, in which case the fetched data is in addition to the data already in the form.

+ + + +
+
+ + +

Filling select elements

+
+ +

States and provinces: (3 states, 2 provinces)

+ +

Colors: (there should be 8 colors, 5 provided incrementally)

+ + +

+
+ +

Seeding a form with initial values

+

The formdata XML file associated with the following form first + clears all of the existing repetition blocks. Then it adds two repetition blocks + with indexes 100 and 101. Then it prefills the values of these two repetition blocks.

+
+
    +
  1. + + + + +
  2. +
  3. + + + + +
  4. +
  5. + + + + +
  6. +
  7. + + + + +
  8. +
  9. + + + + +
  10. +
+ + +

+

+ +

Last two checkboxes below should be checked (prefilling failed if only "Red" is checked): + + + +

+ +

The "Evening" button should be selected (prefilling failed if "Afternoon" is checked): + + + + +

+ +

+

+
+ + +

Setting data DOM property dynamically on select elements

+ +

The following tests are adapted from an example in the Filling select elements section. + The eight following select elements should have exactly the same contents. Note that only the first four will work in Internet Explorer 7.

+ +
    +
  1. + Loading... + Before onload, data DOM attribute set on statically created element: + +
  2. + + +
  3. + Loading... + Before onload, data content attribute set on statically created element: + +
  4. + + +
  5. + Loading... + Before onload, select element dynamically created; data DOM attribute set: +
  6. + + +
  7. + Loading... + Before onload, select element dynamically created; data content attribute set with setAttribute(...): +
  8. + + +
  9. + Loading... + After onload, data DOM attribute set on statically created element: +
  10. + + +
  11. + Loading... + After onload, data content attribute set on statically created element: +
  12. + + +
  13. + Loading... + After onload, select element dynamically created; data DOM attribute set: +
  14. + + +
  15. + Loading... + After onload, select element dynamically created; data content attribute set with setAttribute(...): +
  16. + + +
+ + + + + + + + + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/020.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/020.html new file mode 100644 index 0000000..71ad29a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/020.html @@ -0,0 +1,84 @@ + + + + + Test Case 20: Creating Repetition Templates Dynamically « Web Forms 2.0 Test Suite + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 20: Creating Repetition Templates Dynamically

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +
+ + + +
+
+ + + + + +

The following statement, "We are quintuplits", should be repeated five times:

+
+ +
+ + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/021.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/021.html new file mode 100644 index 0000000..5e9cc17 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/021.html @@ -0,0 +1,79 @@ + + + + + Test Case 21: "required" attribute on checkboxes and radio buttons « Web Forms 2.0 Test Suite + + + + + + + + + + + + + +
+ +

Web Forms 2.0 Test Case 21: "required" attribute on checkboxes and radio buttons

+

+ This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

+ +

The specification states:

For checkboxes, the required attribute shall only be satisfied when one or more of the checkboxes with that name in that form are checked.

For radio buttons, the required attribute shall only be satisfied when exactly one of the radio buttons in that radio group is checked.

Specifying a required attribute on a checkbox only makes sense when there are multiple checkboxes defined to be in a group by providing each with the same name attribute (as the quote from the specification makes reference to). In Opera 9.23 when a required attribute is specified on either one or all radio buttons in a group, the form validates if one of the buttons is checked. With regard to a group of checkboxes, however, when the required attribute is defined on one checkbox, that one specific checkbox must be checked in order for the form to validate in Opera. If the required attribute is defined on all checkboxes in the group, then the form only validates if every checkbox is checked. Opera's implementation, then, is faulty, since it does not make sense to present the user with a single checkbox that must always be checked, and since the specification states that UAs must apply the required attribute onto the entire group of checkboxes, not every single one individually.

+ +

+ +
+
+ + + +
+
+ required attribute set all controls in a group +

Favorite color: + + +

+

Favorite food: + + +

+
+ +
+ required attribute set on last control of a group +

Favorite color: + + +

+

Favorite food: + + +

+
+

+
+ + + +
+ Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/index.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/index.html new file mode 100644 index 0000000..2cf379b --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/index.html @@ -0,0 +1,45 @@ + + + + + + Web Forms 2.0 Test Suite + + +

Web Forms 2.0 Test Suite

+

The following test suite is compiled in order to give examples of what the Web Forms 2.0 specification + is designed to do. Its purpose is also to test the implementations as found in Opera and also the + cross-browser Web Forms 2.0 implementation.

+ +
    +
  1. Spec Example: Sample Order Form
  2. +
  3. Spec Example: Repeated rows: Dynamically adding table rows
  4. +
  5. Spec Example: Solar system: Nesting repetition elements two levels deep
  6. +
  7. Movement Buttons and Canceling Default Action
  8. +
  9. Repetition Index in Attributes: Replacing template name block's current repetition index in all attributes
  10. +
  11. Repetition Events: Demonstrating the handling of added, removed, and moved events
  12. +
  13. Repetition Event Handler Attributes: Demonstrating the use of the onadd, onremove, and onmove attribute handler extensions
  14. +
  15. Initialization Time: Verifies whether or not the repetition template is initialized before onload.
  16. +
  17. Repetition Buttons: Demonstrates repetition buttons created with BUTTON and INPUT elements.
  18. +
  19. Orphan Repetition Blocks
  20. +
  21. Disabled Form Fields in Template
  22. +
  23. repeat-min, repeat-max, and repeat-start attributes
  24. +
  25. Repeated Photo Albums: Demonstrates repetition model-driven content in nested repetition templates.
  26. +
  27. Exceptions in Repetition Events
  28. +
  29. Required Elements in Repeated Blocks
  30. +
  31. Autofocus on unfocusable form control
  32. +
  33. Form validation
  34. +
  35. Input Controls in Nested Repetition Blocks
  36. +
  37. Prefilling form data
  38. +
  39. Creating Repetition Templates Dynamically
  40. +
  41. "required" attribute on checkboxes and radio buttons
  42. + +
+
+ Test suite powered by cross-browser Web Forms 2.0 implementation
+ Version: 0.5.2 (2007-11-29) changelog +
+ Weston Ruter +
+ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/testcase.css b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/testcase.css new file mode 100644 index 0000000..58db76f --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/testcase.css @@ -0,0 +1,38 @@ +#testSuiteNote { + border:dotted 1px gray; + padding:1em; + background-color:#EEE; + margin-bottom:1em; +} +#testSuiteNote h1 { + margin:0; + margin-bottom:1pt; + font-size:medium; +} +#testSuiteNote p.purpose +{ + margin-top:0; + font-style:italic; +} + +.testSuiteNavigation { + text-align:center; +} +.testSuiteNavigation a +{ + +} +.testSuiteNavigation a.prev, +.testSuiteNavigation a.index +{ + margin-right:1ex; +} +.testSuiteNavigation a.next, +.testSuiteNavigation a.index +{ + margin-left:1ex; +} + +#testSuiteNote hr { + display:none; +} \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/001.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/001.html new file mode 100644 index 0000000..a5e1364 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/001.html @@ -0,0 +1,38 @@ + + + + Spec Example: Sample Order Form + + + + + +
+

The following is the first example from the specification:

+
+ + +

Sample Order Form

+
+ + + + + + + + + + + + + + +
ProductQuantity
+

+

+
+ + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/002.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/002.html new file mode 100644 index 0000000..955b191 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/002.html @@ -0,0 +1,53 @@ + + + + Spec Example: Repeated rows + + + + + + + +
+

The following example from the specification "shows how to use repetition templates to dynamically add rows to a form in a table": + +

+

Initially, two rows would be visible, each with two text input controls, the first row having the values "John Smith" and "2", the second row having the values "" (a blank text field) and "1". The second row is the result of the (implied) repeat-start attribute adding a repetition block when the document was loaded.

+

If the "Add Row" button is pressed, a new row is added. The first such row would have the index 2 (since there are already two repetition blocks numbered 0 and 1) and so the controls would be named "name_2" and "count_2" respectively.

+

If the "Delete Row" button above is pressed, the row is removed.

+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + +
NameNumber of Cats
+

+ + +

+
+ + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/003.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/003.html new file mode 100644 index 0000000..2417c09 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/003.html @@ -0,0 +1,46 @@ + + + + Spec Example: Solar system + + + + + + +
+

The following is the specification's example of nested + repetition elements:

+ +
+

The previous example does not demonstrate nested repeat blocks, reordering repetition blocks, and inserting new repetition blocks in the middle of the existing sequence, all of which are possible using the facilities described above. This example shows nested repeats.

+

Note that to uniquely identify each nested repeat (which is required since the add buttons are dependent on IDs to specify which template should have a block added), the IDs of the nested templates are specified in terms of the ancestor template's ID, using the index substitution feature.

+
+
+ + +
+

Solar system

+

+

Planets

+
    +
  1. + +

    Moons

    +
      +
    • + + +
    • +
    +

    +

    +
  2. +
+

+

+
+ + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/004.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/004.html new file mode 100644 index 0000000..92e88f8 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/004.html @@ -0,0 +1,285 @@ + + + Movement Buttons and Canceling Default Action + + + + + + + + + + +
+

The following demonstrates the use of all of the repetition model buttons—add, remove, move-up and move-down—as well as the various ways to cancel the default action of these repetition buttons. + It also provides examples of customized addition buttons.

+
+ + + + +

Note: Buttons with ellipses will confirm the action.

+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
No onclick handler » +
+
onclick HTML attr. » +
+
onclick DOM property » + +
DOM Event Level 2 click »
(native implementations only)
+ +
+
+ +

Form addition buttons (RepeatMax = 5):

+ + + + + + + + + + + + + + + + + +
No onclick handler »
onclick HTML attr. »
onclick DOM property »
DOM Event Level 2 click »
(native implementations only)
+

Other addition buttons: + + +

+ + +
+ + + + + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/005.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/005.html new file mode 100644 index 0000000..875741d --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/005.html @@ -0,0 +1,245 @@ + + + + Repetition Index in Attributes + + + + + + + + + + + +
+

For all attributes in a block, template name is to be replaced with the block's current repetition index. The first section below is a test case taken from: <http://simon.html5.org/test/webforms2/repetition/addition/001.htm>; the second section contains a more thorough test case. + It demonstrates Opera bug #230280 and this implementation's issue #7. The specification defines the correct behavior in 3.6.1. Addition:

+ +
+

...any occurrences of a string consisting of an opening square bracket (U+005B, "[") or a modifier + letter half triangular colon (U+02D1, "ˑ"), the template's name, and a closing square bracket (U+005D, "]") + or a middle dot (U+00B7, "·"), are replaced by the new repetition block's index. This is performed regardless + of the types, names, or namespaces of attributes, and is done to all descendants, even those inside nested forms, + nested repetition templates, and so forth.

+
+
+ + +

Test Case from simon.html5.org

+
+
+ + +
TEST
+
+ +

The above should be exactly equivalent to the following:

+ +
+ + +
TEST
+ + +
TEST
+
+
+ +
+

Extensive Attribute Test

+ +

Whereas every attribute which contains "[j]" should be replaced with the repetition index (0), +it is likely, due to Opera bug #230280 and my issue #7, +the specified behavior will fail in style and non-CDATA attributes (note that a '1' is also included as "1[j]" so the value of "10" should appear in each attribute):

+ + +
+
+ + + + + + + + + + + + + + + + + + +
T + + + +
+ + (This field has access key set to 1[j]) + + +
+ + + +
+
+ Image 1[j] + test +
rowspancolspan + +
+ q +
+
test
+ + + + test + +
    + +
+ +
+
+
+ + +

Test results

+ + + + + + + +
AttributeValue of attribute (should contain '10')
+

Test result: working...

+
    +
  1. working...
  2. +
+ + + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/006.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/006.html new file mode 100644 index 0000000..98d398a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/006.html @@ -0,0 +1,203 @@ + + + Repetition Events + + + + + + + + + + + +
+

The following demonstrates the handling of repetition events, using both the DOM Level 2 event model and the traditional event model; the MSIE's proprietary event model is not demonstrated.

+
+ + + +
+
+ Event model options +
+ + Unsupported by this browser +
+
+ (extension provided by implementation)
+
+ +

+
    +
  • + + + +
  • +
+
+
+ +
+ Event Log + + + + + + + + + + +
#TypeElementModel
+
(Click the add button above to fire events)
+
+ + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/007.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/007.html new file mode 100644 index 0000000..b7bb0b9 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/007.html @@ -0,0 +1,129 @@ + + + Repetition Event Handler Attributes + + + + + + + + + + + +
+

The following demonstrates the handling of repetition events handled by onadded, onmoved, and onremoved + HTML attributes set on a repetition template which handle their respective events. This is made possible by extension to the specification, found in this implementation.

+
+ + + +
+

+
    +
  • + + + +
  • +
+
+
+ +
+ Event Log + + + + + + + + + +
#TypeElement
+
(Click the add button above to fire events)
+
+ + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/008.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/008.html new file mode 100644 index 0000000..6763b33 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/008.html @@ -0,0 +1,56 @@ + + + Initialization Time + + + + + + + + + + +
+

The following test verifies whether or not the repetition template is initialized before the user's onload fires.

+
+ + +

Test result: loading page...

+ +
+
+
+ + + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/009.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/009.html new file mode 100644 index 0000000..3336be9 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/009.html @@ -0,0 +1,64 @@ + + + Repetition Buttons + + + + + + + + + + +
+

The following test verifies whether repetition buttons can be created using either button or input elements. + +

+ + + +
+
    +
  1. + + + + +
  2. +
+

+
+ +

The preceding DIV should appear exactly as the one below:

+ +
+
    +
  1. + + + + +
  2. +
+

+
+ + + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/010.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/010.html new file mode 100644 index 0000000..ed60b6a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/010.html @@ -0,0 +1,50 @@ + + + Orphan Repetition Blocks + + + + + + + + + + +
+

The following demonstrates prefilled orphaned repetition blocks.

+ +
+ + + +

The following blocks are prefilled and orphaned.

+
+
    +
  1. + Orphan 1: + + + +
  2. +
  3. + Orphan 2: + + + +
  4. +
  5. + Orphan 3: + + + +
  6. +
+
+ + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/011.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/011.html new file mode 100644 index 0000000..e0b87e1 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/011.html @@ -0,0 +1,99 @@ + + + Disabled Form Fields in Template + + + + + + + + + + + +
+

The following verifies that form fields within a repetition template are not successful. It also tests whether form fields disabled + in the repetition template are also disabled in each instantiated repetition block, but note: for this to work in this implementation, authors must + include a class name of "disabled" on all disabled elements in the repetition template element to ensure that they are also disabled in each repetition block. This is due to an issue in Firefox which is detailed in issue #9.

+
+ + + + + +
+
    +
  1. + Not disabled element:
    + Disabled element: (this should not be successful in form submission) +
  2. +
+ + +
+ +

Test results

+
    +
  1. Form fields in repetition template should not be 'successful' (there should not be any querystring parameters with keys such as submitted[i]; these fields should not be submitted): + + Press 'submit form' to test... + Passed + Failed! + +

  2. + +
  3. Form fields in the repetition template which are originally flagged as disabled should be disabled in each instantiated repetition block: + + Press 'submit form' to test... + Passed + Failed! + +

  4. +
+ + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/012.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/012.html new file mode 100644 index 0000000..c6a8e82 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/012.html @@ -0,0 +1,79 @@ + + + repeat-min, repeat-max, and repeat-start attributes + + + + + + + + + + +
+

The following verifies that the repeat-min, repeat-max, and repeat-start attributes work correctly. + The event log utilizes the onadd and onremove extensions to the repetition model specification.

+
+ + + +

For the following repetition template:

+
    +
  • repeat-min = 1
  • +
  • repeat-max = 5
  • +
  • repeat-start = 3
  • +
+ +
+
+ # +
+
+

+ +
+ Event Log + + + + + + + + + +
#TyperepetitionBlocks.length
+
(Click the add button above to fire events)
+
+ + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/013.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/013.html new file mode 100644 index 0000000..3a97f4d --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/013.html @@ -0,0 +1,92 @@ + + + Repeated Photo Albums + + + + + + + + + + + +
+

The following demonstrates repetition model-driven content in nested repetition templates. Note the use of repetition indexes in img[src], img[alt], and img[repeat-start] attributes, as well as in the background-image CSS property within a style attribute. If your browser supports addEventListener, you will see a dynamic count of the photos in an album, and you will be able to delete a photo by clicking it. There are only images for numbers from 0 to 16. Opera 9.02 does not display the repetition model-driven background image, and furthermore it does not correctly initialize the nested repetition template; this is probably due to the repetition index appearing in the repeat-start which Opera requires to be an integer.

+
+ + + +
+
+ Album #[albums] Photo album # +
+

There are currently 0 photo(s) in this album. Click on a photo to delete it.

+ (max-repeat = 17; repeat-start = repetitionIndex) +
+ Image in album [albums], with repetition index [album[albums].photos] +
+
+
+
+

+ +

Graphics from <http://school.discovery.com/clipart/category/letr0.html>.

+ + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/014.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/014.html new file mode 100644 index 0000000..6499854 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/014.html @@ -0,0 +1,44 @@ + + + Exceptions in Repetition Events + + + + + + + + + +
+

The following demonstrates that the repetition model code does not fail when a user-supplied event handler raises an exception.

+
+ + +

Note that the there should be errors raised whenever repetition behavior is envoked. An event handler createRuntimeException purposely raises a runtime error.

+
    +
  1. + + + + +
  2. +
+ + + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/015.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/015.html new file mode 100644 index 0000000..70fccd6 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/015.html @@ -0,0 +1,54 @@ + + + Required Elements in Repeated Blocks + + + + + + + + + +
+

The following demonstrates using the required attribute on controls within a repetition template. + The autofocus attribute is also included an input.

+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
NameNumber of Cats
+

+ + +

+
+ + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/016.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/016.html new file mode 100644 index 0000000..815b8f3 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/016.html @@ -0,0 +1,33 @@ + + + Autofocus on unfocusable form control + + + + + + + + + + + +
+

The following tests whether the hidden INPUT element below is incorrectly (attempted to be) focused upon. Attempting to focus on hidden form controls raises an exception in MSIE.

+
+ + + +

The following form, containing an input element with an autofocus attribute, is set to not display with CSS.

+
+ +
+ + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/017.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/017.html new file mode 100644 index 0000000..622741c --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/017.html @@ -0,0 +1,301 @@ + + + + Form validation + + + + + + + + + + + +
+

The following tests all of the form validation controls.

+
+ + + +
+ invalid Event model options +
+ + Unsupported by this browser +
+
+
+
+ + + + + + +
+
+
+ +
+ Calendar controls +
    +
  • type=datetime
  • +
  • type=datetime-local
  • +
  • type=date (no step)
  • +
  • type=month step=2
  • +
  • type=week step=2
  • +
  • type=time step=any
  • +
+
+
+ Text input +
    +
  • type=text (required)
  • +
  • type=text (pattern="\d\d\d-\d\d-\d\d\d\d")
  • +
  • type=text (required pattern="\(\d\d\d\) \d\d\d-\d\d\d\d")
  • +
  • type=email (required, overriding oninvalid)
  • +
  • type=text (required)
  • +
  • type=text (pattern="")
  • +
  • type=url (required pattern)
  • +
  • (length should be 7) maxlength=10 (QUESTION: what about when maxlength < len(defaultValue))
  • +
  • type=range default step = 1
  • +
  • type=number min=-127, max=128, step=0.5
  • +
+
+ +
+ Non-input required +

Favorite color: + + +

+

Favorite food: + + +

+ +

Movies:

+
+
+
+
+
+ Event Log +
+ +
+
+ Form is valid! +
+ + + + + + + + + + + +
#TypeElementModel
+
(Click the "check validity" button above to fire events)
+
+
+ + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/018.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/018.html new file mode 100644 index 0000000..96ab524 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/018.html @@ -0,0 +1,92 @@ + + + + Input Controls in Nested Repetition Blocks + + + + + + + + + + + +
+

Testing various types of input controls in nested repetition blocks.

+
+ + +
+

Solar system

+

+

Planets

+
    +
  1. + + + +
    + Class: + +
    + +
    +
    +
    + +
    + Moons +
      +
    • + + Class: + + + + +
    • +
    +

    +
    +

    +
  2. +
+

+

+
+ + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-colors.xml b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-colors.xml new file mode 100644 index 0000000..8c33384 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-colors.xml @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-formdata.xml b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-formdata.xml new file mode 100644 index 0000000..1f2b0f8 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-formdata.xml @@ -0,0 +1,16 @@ + + + + + + index (pre-filled) + index 101 + test + test + + green + blue + evening + Fridays are awesome! + 2007-W01 + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-statesAndProvinces.xml b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-statesAndProvinces.xml new file mode 100644 index 0000000..99adcca --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019-statesAndProvinces.xml @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019.html new file mode 100644 index 0000000..c9a0f2a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/019.html @@ -0,0 +1,388 @@ + + + + Prefilling form data + + + + + + + + + + + +
+

Regarding fetching data from external resources, the specification states:

+ +
+

There are two scenarios where authors may wish data to be fetched from an external file to fill forms. In the first, a select's options are replaced by options from an external file. In the second, a form's values are prefilled from an external data source.

+ +

In both cases, the prefilling may either be full, in which case the previous contents are removed first, or incremental, in which case the fetched data is in addition to the data already in the form.

+
+
+ + +

Filling select elements

+
+ +

States and provinces: (3 states, 2 provinces)

+ +

Colors: (there should be 8 colors, 5 provided incrementally)

+ + +

+
+ +

Seeding a form with initial values

+

The formdata XML file associated with the following form first + clears all of the existing repetition blocks. Then it adds two repetition blocks + with indexes 100 and 101. Then it prefills the values of these two repetition blocks.

+
+
    +
  1. + + + + +
  2. +
  3. + + + + +
  4. +
  5. + + + + +
  6. +
  7. + + + + +
  8. +
  9. + + + + +
  10. +
+ + +

+

+ +

Last two checkboxes below should be checked (prefilling failed if only "Red" is checked): + + + +

+ +

The "Evening" button should be selected (prefilling failed if "Afternoon" is checked): + + + + +

+ +

+

+
+ + +

Setting data DOM property dynamically on select elements

+ +

The following tests are adapted from an example in the Filling select elements section. + The eight following select elements should have exactly the same contents. Note that only the first four will work in Internet Explorer 7.

+ +
    +
  1. + Loading... + Before onload, data DOM attribute set on statically created element: + +
  2. + + +
  3. + Loading... + Before onload, data content attribute set on statically created element: + +
  4. + + +
  5. + Loading... + Before onload, select element dynamically created; data DOM attribute set: +
  6. + + +
  7. + Loading... + Before onload, select element dynamically created; data content attribute set with setAttribute(...): +
  8. + + +
  9. + Loading... + After onload, data DOM attribute set on statically created element: +
  10. + + +
  11. + Loading... + After onload, data content attribute set on statically created element: +
  12. + + +
  13. + Loading... + After onload, select element dynamically created; data DOM attribute set: +
  14. + + +
  15. + Loading... + After onload, select element dynamically created; data content attribute set with setAttribute(...): +
  16. + + +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/020.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/020.html new file mode 100644 index 0000000..0e30d79 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/020.html @@ -0,0 +1,69 @@ + + + + Creating Repetition Templates Dynamically + + + + + + + +
+ + +
+ +
+
+ + + + + +

The following statement, "We are quintuplits", should be repeated five times:

+
+ +
+ + + + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/021.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/021.html new file mode 100644 index 0000000..ffaf751 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/021.html @@ -0,0 +1,82 @@ + + + + "required" attribute on checkboxes and radio buttons + + + + + + + + + + + +
+

The specification states:

+
+

For checkboxes, the required + attribute shall only be satisfied when one or more of the checkboxes with + that name in that form are checked.

+

For radio buttons, the required + attribute shall only be satisfied when exactly one of the radio buttons in + that radio group is checked.

+
+ +

+ Specifying a required attribute on a checkbox only makes sense when there + are multiple checkboxes defined to be in a group by providing each with the same name attribute + (as the quote from the specification makes reference to). + In Opera 9.23 when a required attribute is specified on either one or all radio buttons in a group, + the form validates if one of the buttons is checked. With regard to a group of checkboxes, however, when the + required attribute is defined on one checkbox, that one specific checkbox must be + checked in order for the form to validate in Opera. If the required attribute is defined on all checkboxes + in the group, then the form only validates if every checkbox is checked. Opera's implementation, then, + is faulty, since it does not make sense to present the user with a single checkbox that must always be checked, + and since the specification states that UAs must apply the required attribute onto the entire group + of checkboxes, not every single one individually. +

+ + + +

+ + + +
+
+ required attribute set all controls in a group +

Favorite color: + + +

+

Favorite food: + + +

+
+ +
+ required attribute set on last control of a group +

Favorite color: + + +

+

Favorite food: + + +

+
+

+
+ + + + + diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/compile.pl b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/compile.pl new file mode 100644 index 0000000..bf946ce --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/compile.pl @@ -0,0 +1,141 @@ + + +use Win32::File qw/GetAttributes SetAttributes ARCHIVE NORMAL/; + + +while(1){ + @files = grep /^\d/, sort <*.html>; + $doupdate = 0; + foreach(@files){ + GetAttributes($_, $attrib); + if($attrib & ARCHIVE){ + $doupdate++; + } + } + GetAttributes("index.template.html", $attrib); + $doupdate++ if($attrib & ARCHIVE); + GetAttributes("testcase.template.html", $attrib); + $doupdate++ if($attrib & ARCHIVE); + + + if(!$doupdate){ + sleep 1; + next; + } + + + open S, "testcase.template.html"; + $testcaseTemplate = join "", ; + close S; + $counter = 1; + + open S, "../../webforms2.js"; + $s = join '', ; + $s =~ /Version:\s+(.+?)\s+\((.+?)\)/; + $implementationVersion = $1; + $implementationDate = $2; + close S; + + %testcases = (); + + for($i = 0; $i < @files; $i++){ + #next if not $files[$i] =~ /011/; #REMOVE + + print "$files[$i]\n"; + $testcaseNumber = sprintf("%03d", $counter); + + $testcasePage = $testcaseTemplate; + + open FILE, $files[$i]; + $_ = join '', ; + close FILE; + + m{(.+?)}s; + $testcaseTitle = $1; + $testcasePage =~ s{__testcaseTitle__}{$testcaseTitle}g; + + + m{
(.+?)
}s; + $testcaseDesc = $1; + $testcaseDesc =~ s{\s+}{ }g; + $testcasePage =~ s{__testcaseDesc__}{$testcaseDesc}; + + #__testcaseShortDesc__ + m{}s; + $testcaseShortDesc = $1; + $testcasePage =~ s{__testcaseShortDesc__}{$testcaseShortDesc}g; + + $testcases{$testcaseNumber} = { + title => $testcaseTitle, + shortDesc => $testcaseShortDesc + }; + + m{(.+?)}s; + $testcaseCode = $1; + $testcasePage =~ s{__testcaseCode__}{$testcaseCode}; + + m{(.+?)}s; + $testcaseHeadCode = $1; + $testcasePage =~ s{__testcaseHeadCode__}{$testcaseHeadCode}; + + $testcasePage =~ s{__testcaseNumber__}{$counter}eg; + + $testcasePage =~ s{__implementationVersion__}{$implementationVersion}g; + $testcasePage =~ s{__implementationDate__}{$implementationDate}g; + + if($i == 0){ + $testcasePage =~ s{(.+?)}{}g; + } + $testcasePage =~ s{__previousNumber__}{sprintf("%03d", $counter-1)}ge; + $testcasePage =~ s{__previousTitle__}{getPageTitle(sprintf("%03d.html", $counter-1))}ge; + if($i == @files-1){ + $testcasePage =~ s{(.+?)}{}g; + } + $testcasePage =~ s{__nextNumber__}{sprintf("%03d", $counter+1)}ge; + $testcasePage =~ s{__nextTitle__}{getPageTitle(sprintf("%03d.html", $counter+1))}ge; + + open OUT, ">../$testcaseNumber.html"; + print OUT $testcasePage; + close OUT; + SetAttributes($files[$i], NORMAL); + + $counter++; + } + + SetAttributes("index.template.html", NORMAL); + SetAttributes("testcase.template.html", NORMAL); + + + #TEST SUITE INDEX + + open S, "index.template.html"; + $indexTemplate = join "", ; + close S; + + $list = ""; + foreach(sort keys %testcases){ + $list .= "
  • " . $testcases{$_}{title} . ""; + + $list .= ": " . $testcases{$_}{shortDesc} if $testcases{$_}{shortDesc}; + + $list .= "
  • \n"; + } + + $indexTemplate =~ s{__testcaseList__}{$list}; + $indexTemplate =~ s{__implementationVersion__}{$implementationVersion}g; + $indexTemplate =~ s{__implementationDate__}{$implementationDate}g; + + open OUT, ">../index.html"; + print OUT $indexTemplate; + close OUT; + + #exit; #REMOVE +} + + +sub getPageTitle { + open FILE, shift; + $_ = join('', ); + m{(.+?)}s; + return $1; +} diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/index.template.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/index.template.html new file mode 100644 index 0000000..f0fea2a --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/index.template.html @@ -0,0 +1,24 @@ + + + + + + Web Forms 2.0 Test Suite + + +

    Web Forms 2.0 Test Suite

    +

    The following test suite is compiled in order to give examples of what the Web Forms 2.0 specification + is designed to do. Its purpose is also to test the implementations as found in Opera and also the + cross-browser Web Forms 2.0 implementation.

    + +
      + __testcaseList__ +
    +
    + Test suite powered by cross-browser Web Forms 2.0 implementation
    + Version: __implementationVersion__ (__implementationDate__) changelog +
    + Weston Ruter +
    + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/testcase.template.html b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/testcase.template.html new file mode 100644 index 0000000..2dd64b6 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/testsuite/~testcases/testcase.template.html @@ -0,0 +1,43 @@ + + + + + Test Case __testcaseNumber__: __testcaseTitle__ « Web Forms 2.0 Test Suite + + + + + + + + __testcaseHeadCode__ + + +
    + +

    Web Forms 2.0 Test Case __testcaseNumber__: __testcaseTitle__

    +

    + This test case demonstrates functionality of the Web Forms 2.0 specification and tests the compliance of + this cross-browser Web Forms 2.0 implementation.

    + + __testcaseDesc__ + + + +
    +
    + +__testcaseCode__ + +
    + Web Forms 2.0 implementation
    + Version: __implementationVersion__ (__implementationDate__) changelog +
    + Weston Ruter +
    + + \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/validationPointer.png b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/validationPointer.png new file mode 100644 index 0000000000000000000000000000000000000000..d293f7a837cf67d3c0284163644045e76537fea3 GIT binary patch literal 688 zcmV;h0#E&kP)&fA00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyY! z6($w%Z^HWk001I%MObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakAa8CUVIWOmV~41B zLjV8*0!c(cR5;7ElgnxvQ5?qqXD%ScB#uz4sg@?aJxB{(4|I{mKp()h4sECbH?9pObxadRp0A1Nhn@(H1DX3$du`-O#oLd)Onnt3jm;)bwIOlxlcfNB0*swL5&BvR1 zg-wm^cKc(!UO(Ezi#9PChB5FwFCL9XDMCogX0weOO==j%z;T?o@B84ouE-dBSE*Ev zZY*i7R_hFh!z9LdYDNfTS%z3FMuQ;Ga=Bb%tI%q-%3armIdHK6LLf;JD2hVEFx2w- zd}Axna=FYM#{ojfm2+fShIl+qF~*v%>np+HI$)_(n%K521wjCm(km5)A^5&8L?RJ2 zl}cHyR?FN7S}Yd1-S10b7y@H#r6^;7F^2JYEM(FdRfycOet!RE{ui`xa>D!P=YTN= z#`#+DnFt{;nM{Ny4m}gC89psC&tM%Q`j9 zmC)D6$Gp?&B8&-e&VX|cjPXUisA)R3G|o8(j0yO@FC1jjY9e#r`ts@T9WP$*3+?6Z z;oanK+qQvH3fpKL03=a_L?S`kzdG87_ir2jBz^wu>7?83PVaE-kzQYf5b!)t*uQgI zO{VWzXP-|^r0aTYG#a^s!Qj#lMgW}8>U`g5RxgbMT$sz3U#loWOi=&;8oN6?ul@kT W&B3loM5s;x0000 + * Copyright: 2007, Weston Ruter + * License: GNU General Public License, Free Software Foundation + * + * + * The comments contained in this code are largely quotations from the + * WebForms 2.0 specification: + * + * Usage: + */ + + +if(document.implementation && document.implementation.hasFeature && + !document.implementation.hasFeature('WebForms', '2.0')) +{ + //get path to source directory + var scripts = document.getElementsByTagName('head')[0].getElementsByTagName('script'), match, dirname = ''; + for(var i = 0; i < scripts.length; i++){ + if(match = scripts[i].src.match(/^(.*)webforms2-loader\.js$/)) + dirname = match[1]; + } + + //load script + if(document.write) + document.write(""); + else { + var script = document.createElement('script'); + script.setAttribute('type', 'text/javascript'); + script.setAttribute('src', dirname + 'webforms2-p.js'); + document.getElementsByTagName('head')[0].appendChild(script); + } +} diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2-msie.js b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2-msie.js new file mode 100644 index 0000000..fd4c88d --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2-msie.js @@ -0,0 +1 @@ +$wf2.onDOMContentLoaded(); \ No newline at end of file diff --git a/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2-p.js b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2-p.js new file mode 100644 index 0000000..ed28247 --- /dev/null +++ b/itf/static/js/html5Forms.js/shared/js/weston.ruter.net/webforms2/webforms2-p.js @@ -0,0 +1,56 @@ +if(!window.$wf2){var $wf2={};document.implementation&&document.implementation.hasFeature&&!document.implementation.hasFeature("WebForms","2.0")&&($wf2={version:"0.5.4",isInitialized:!1,libpath:"",globalEvent:null,hasElementExtensions:window.HTMLElement&&HTMLElement.prototype,hasGettersAndSetters:$wf2.__defineGetter__&&$wf2.__defineSetter__,hasBadImplementation:0=k.value)break}else if(c.name==n){if(k){if(++p-1a.max;a.validity.stepMismatch=!$wf2.isValidNumber(a)}else if("file"==e)a.min=b&&/^\d+$/.test(b.value)?Number(b.value):0,a.max=d&&/^\d+$/.test(d.value)?Number(d.value):1;else if(b&&(a.min=$wf2.parseISO8601(b.value,e),a.validity.rangeUnderflow=a.min&&a.wf2Valuea.max;if(!g&&!f&&o&&!a.validity.rangeUnderflow&&!a.validity.rangeOverflow){var l=$wf2.getOriginalAttrNode(a,"step");a.step=l?"any"== +l.value?"any":$wf2.numberRegExp.test(l.value)&&0a.maxLength}}else if(b&&$wf2.numberRegExp.test(b.value)&&(a.min=Number(b.value)),d&&$wf2.numberRegExp.test(d.value)&&(a.max=Number(d.value)),l&&$wf2.numberRegExp.test(l.value))a.step=Number(l.value);a.validity.valid=!$wf2.hasInvalidState(a.validity);a.validity.valid? +($wf2.css.removeClass(a,"wf2_invalid"),$wf2.css.addClass(a,"wf2_valid")):($wf2.css.removeClass(a,"wf2_valid"),$wf2.css.addClass(a,"wf2_invalid"))}},isValidNumber:function(a){a=(parseFloat(a.wf2Value)-parseFloat(a.min))/parseFloat(a.step);return a==parseInt(a)},applyValidityInterface:function(a){if($wf2.hasBadImplementation){if("submit"==a.type||"button"==a.type)a.formNoValidate=!0}else if(a.validity&&void 0!==a.validity.typeMismatch)return a;a.validationMessage="";a.validity=$wf2.createValidityState(); +a.willValidate=!0;var b=a.nodeName.toLowerCase();if("button"==b||"fieldset"==b)return a.setCustomValidity=function(){throw $wf2.DOMException(9);},a.checkValidity=function(){return!0},a;a.setCustomValidity||(a.setCustomValidity=$wf2.controlSetCustomValidity);a.checkValidity=$wf2.controlCheckValidity;if(/(hidden|button|reset|add|remove|move-up|move-down)/.test(a.getAttribute("type")?a.getAttribute("type").toLowerCase():a.type)||!a.name||a.disabled)a.willValidate=!1;else if(window.RepetitionElement)for(b= +a;b=b.parentNode;)if(b.repetitionType==RepetitionElement.REPETITION_TEMPLATE){a.willValidate=!1;break}b=function(a){return $wf2.updateValidityState(a.currentTarget||a.srcElement)};document.addEventListener?(a.addEventListener("change",b,!1),a.addEventListener("blur",b,!1),a.addEventListener("keyup",b,!1)):window.attachEvent&&(a.attachEvent("onchange",b),a.attachEvent("onblur",b),a.attachEvent("onkeyup",b));return a},onsubmitValidityHandler:function(a){for(var b=a.currentTarget||a.srcElement,d=0;d< +$wf2.callBeforeValidation.length;d++)$wf2.callBeforeValidation[d](a);b.checkValidity()?b=a.returnValue=!0:(a.preventDefault&&a.preventDefault(),b=a.returnValue=!1);for(d=0;d<$wf2.callAfterValidation.length;d++)$wf2.callAfterValidation[d](a,b);return b},controlSetCustomValidity:function(a){a?(this.validationMessage=""+a,this.validity.customError=!0):(this.validationMessage="",this.validity.customError=!1);this.validity.valid=!$wf2.hasInvalidState(this.validity)},hasInvalidState:function(a){return a.typeMismatch|| +a.rangeUnderflow||a.rangeOverflow||a.stepMismatch||a.tooLong||a.patternMismatch||a.valueMissing||a.customError},createValidityState:function(){return{typeMismatch:!1,rangeUnderflow:!1,rangeOverflow:!1,stepMismatch:!1,tooLong:!1,patternMismatch:!1,valueMissing:!1,customError:!1,valid:!0}},invalidIndicators:[],indicatorTimeoutId:null,indicatorIntervalId:null,stepUnits:{datetime:"second","datetime-local":"second",time:"second",date:"day",week:"week",month:"month"},invalidMessages:{valueMissing:"Please fill out this field.", +typeMismatch:"Please enter a valid %s.",rangeUnderflow:"The value must be equal to or greater than %s.",rangeOverflow:"The value must be equal to or less than %s.",stepMismatch:"The value has a step mismatch; it must be a certain number multiples of %s from %s.",tooLong:"The value is too long. The field may have a maximum of %s characters but you supplied %s. Note that each line-break counts as two characters.",patternMismatch:"Please match the requested format."},valueToWF2Type:function(a,b){switch((""+ +b).toLowerCase()){case "datetime":case "datetime-local":case "date":case "month":case "week":case "time":return $wf2.dateToISO8601(a,b);default:return a}},addInvalidIndicator:function(a){console.log("addInvalidIndicator");var b=document.createElement("div");b.className="wf2_errorMsg";var d=document.createElement("div");d.className="wf2_errorMsgContainer";b.appendChild(d);b.id=(a.id||a.name)+"_wf2_errorMsg";b.onmousedown=function(){this.parentNode.removeChild(this)};var c=a.getAttribute("type")?a.getAttribute("type").toLowerCase(): +a.type,e=document.createElement("ol");a.validity.customError?e.appendChild($wf2.createLI(a.validationMessage)):(a.validity.valueMissing&&e.appendChild($wf2.createLI($wf2.invalidMessages.valueMissing)),a.validity.typeMismatch&&e.appendChild($wf2.createLI($wf2.invalidMessages.typeMismatch.replace(/%s/,c))),a.validity.rangeUnderflow&&e.appendChild($wf2.createLI($wf2.invalidMessages.rangeUnderflow.replace(/%s/,$wf2.valueToWF2Type(a.min,c)))),a.validity.rangeOverflow&&e.appendChild($wf2.createLI($wf2.invalidMessages.rangeOverflow.replace(/%s/, +$wf2.valueToWF2Type(a.max,c)))),a.validity.stepMismatch&&e.appendChild($wf2.createLI($wf2.invalidMessages.stepMismatch.replace(/%s/,a.step+($wf2.stepUnits[c]?" "+$wf2.stepUnits[c]+"(s)":"")).replace(/%s/,$wf2.valueToWF2Type(a.wf2StepDatum,c)))),a.validity.tooLong&&e.appendChild($wf2.createLI($wf2.invalidMessages.tooLong.replace(/%s/,a.maxLength).replace(/%s/,a.wf2ValueLength?a.wf2ValueLength:a.value.length))),a.validity.patternMismatch&&e.appendChild($wf2.createLI($wf2.invalidMessages.patternMismatch.replace(/%s/, +a.title?a.title:' "'+a.getAttribute("pattern")+'"'))));1==e.childNodes.length&&(e.className="single");d.appendChild(e);d=document.body?document.body:document.documentElement;$wf2.invalidIndicators.length?d.insertBefore(b,$wf2.invalidIndicators[$wf2.invalidIndicators.length-1].errorMsg):d.insertBefore(b,null);for(d=a;d&&(1!=d.nodeType||"none"==d.style.display||"hidden"==d.style.visibility||!d.offsetParent);)d=d.parentNode;c=left=0;if((e=d)&&e.offsetParent){left=e.offsetLeft;for(c=e.offsetTop;e=e.offsetParent;)left+= +e.offsetLeft,c+=e.offsetTop;c+=d.offsetHeight}b.style.top=c+"px";b.style.left=left+"px";$wf2.invalidIndicators.push({target:a,errorMsg:b});$wf2.css.addClass(a,"wf2_invalid");null==$wf2.indicatorIntervalId&&($wf2.indicatorIntervalId=setInterval(function(){for(var a,b=0;a=$wf2.invalidIndicators[b];b++)$wf2.css.isMemberOfClass(a.target,"wf2_invalid")?$wf2.css.removeClass(a.target,"wf2_invalid"):$wf2.css.addClass(a.target,"wf2_invalid")},500))},clearInvalidIndicators:function(){clearTimeout($wf2.indicatorTimeoutId); +$wf2.indicatorTimeoutId=null;clearInterval($wf2.indicatorIntervalId);$wf2.indicatorIntervalId=null;for(var a;a=$wf2.invalidIndicators[0];)a.errorMsg&&a.errorMsg.parentNode&&a.errorMsg.parentNode.removeChild(a.errorMsg),$wf2.invalidIndicators.shift()},cloneNode_customAttrs:{type:1,template:1,repeat:1,"repeat-template":1,"repeat-min":1,"repeat-max":1,"repeat-start":1,value:1,"class":1,required:1,pattern:1,form:1,autocomplete:1,autofocus:1,inputmode:1,max:1,min:1,step:1,onmoved:1,onadded:1,onremoved:1, +onadd:1,onremove:1,onmove:1},cloneNode_skippedAttrs:{name:1,"class":1,"for":1,style:1,checked:1,addRepetitionBlock:1,addRepetitionBlockByIndex:1,moveRepetitionBlock:1,removeRepetitionBlock:1,repetitionBlocks:1,setCustomValidity:1,checkValidity:1,validity:1,validationMessage:1,willValidate:1,wf2StepDatum:1,wf2Value:1,wf2Initialized:1,wf2ValueLength:1},cloneNode_rtEventHandlerAttrs:{onmoved:1,onadded:1,onremoved:1,onadd:1,onremove:1,onmove:1},cloneNode:function(a,b,d){d||(d=0);var c,e,f;switch(a.nodeType){case 1:var g= +"template"==a.getAttribute("repeat");g&&d++;c=[];a.name&&(c.name=b?b(a.name):a.name);"radio"==a.type&&(c.type=a.type);a.checked&&(c.checked="checked");c=$wf2.createElement(a.nodeName,c);for(e=0;f=a.attributes[e];e++)if((f.specified||$wf2.cloneNode_customAttrs[f.name])&&!$wf2.cloneNode_skippedAttrs[f.name]&&(!g||1d&&0===f.name.indexOf("on")&&"function"==typeof a[f.name]){var m=b(a[f.name].toString().match(/{((?:.|\n)+)}/)[1]),m=b(m);c[f.name]=new Function("event", +m)}else m=a.getAttribute(f.name),m=b?b(m):m,c.setAttribute(f.name,m);if(a.className)if(g=b?b(a.className):a.className,c.getAttributeNode("class"))for(e=0;e');if("div"!=a.tagName.toLowerCase()|| +"foo"!=a.name)throw"create element error";return function(a,b){var e="<"+a,f;for(f in b)e+=" "+f+'="'+b[f]+'"';e+=">";"input"!=a.toLowerCase()&&(e+="");return document.createElement(e)}}catch(b){return function(a,b){var e=document.createElement(a),f;for(f in b)e.setAttribute(f,b[f]);return e}}}(),sortNodes:function(){var a=document.documentElement.firstChild;if(a.sourceIndex)return function(a,d){return a.sourceIndex-d.sourceIndex};if(a.compareDocumentPosition)return function(a,d){return 3- +(a.compareDocumentPosition(d)&6)}}(),createLI:function(a){var b=document.createElement("li");b.appendChild(document.createTextNode(a));return b},ISO8601RegExp:/^(?:(\d\d\d\d)-(W(0[1-9]|[1-4]\d|5[0-2])|(0\d|1[0-2])(-(0\d|[1-2]\d|3[0-1])(T(0\d|1\d|2[0-4]):([0-5]\d)(:([0-5]\d)(\.(\d+))?)?(Z)?)?)?)|(0\d|1\d|2[0-4]):([0-5]\d)(:([0-5]\d)(\.(\d+))?)?)$/,parseISO8601:function(a,b){var d=$wf2.validateDateTimeType(a,b);if(!d)return null;var c=new Date(0),e=8;if(d[15]){if(b&&"time"!=b)return null;e=15}else{c.setUTCFullYear(d[1]); +if(d[3]){if(b&&"week"!=b)return null;c.setUTCDate(c.getUTCDate()+(8-c.getUTCDay())%7+7*(d[3]-1));return c}c.setUTCMonth(d[4]-1);d[6]&&c.setUTCDate(d[6])}d[e+0]&&c.setUTCHours(d[e+0]);d[e+1]&&c.setUTCMinutes(d[e+1]);d[e+2]&&c.setUTCSeconds(d[e+3]);d[e+4]&&c.setUTCMilliseconds(Math.round(1E3*Number(d[e+4])));d[4]&&d[e+0]&&!d[e+6]&&c.setUTCMinutes(c.getUTCMinutes()+c.getTimezoneOffset());return c},validateDateTimeType:function(a,b){var d=!1,c=$wf2.ISO8601RegExp.exec(a);if(!c||!b)return c;b=b.toLowerCase(); +if("week"==b)d=0===c[2].toString().indexOf("W");else if("time"==b)d=!!c[15];else if("month"==b)d=!c[5];else if(c[6])if((new Date(c[1],c[4]-1,c[6])).getMonth()!=c[4]-1)d=!1;else switch(b){case "date":d=c[4]&&!c[7];break;case "datetime":d=!!c[14];break;case "datetime-local":d=c[7]&&!c[14]}return d?c:null},zeroPad:function(a,b){b||(b=2);for(var d=a.toString();d.length<\/script>");document.write(" + * + * Changelog: + * version 0.5.4 - initial release by Weston Ruter + * version 0.6 - refactored for use with HTML5Widgets by Zoltan Hawryluk (July 27th, 2010) + * version 0.6.1 - updated to deal with WebKit's half-implemented WebForms 2 Implementation (Sept 10, 2010) + * version 0.7 - abug fixes with nested repetition models by Zoltan Hawryluk. + * version 0.7.1 - updated to dual MIT/GPL 2.0 license. + * version 1.0 - Updated to mimic CSS validation pseudo-classes, support for newer browsers + * native support (IE10, Firefox 4, Webkit, Opera 11.11). This version does rely on + * the WebForms.js framework. + */ + +if(!window.$wf2){ +var $wf2 = {}; + +if(document.implementation && document.implementation.hasFeature && + !document.implementation.hasFeature('WebForms', '2.0')){ + +$wf2 = { + version : '0.5.4', + isInitialized : false, + libpath : '', + globalEvent: null, + + hasElementExtensions : (window.HTMLElement && HTMLElement.prototype), + hasGettersAndSetters : ($wf2.__defineGetter__ && $wf2.__defineSetter__), + + hasBadImplementation: navigator.userAgent.indexOf('WebKit') > 0, + + // WebKit less than 534 doesn't show validation UI - we need to check for this (from http://stackoverflow.com/questions/6030522/html5-form-validation-modernizr-safari) + hasNativeBubbles: navigator.userAgent.indexOf('WebKit') < 0 || parseInt(navigator.userAgent.match(/AppleWebKit\/([^ ]*)/)[1].split('.')[0]) > 534, + + callBeforeValidation : new Array(), + callAfterValidation : new Array(), + callAfterDOMContentLoaded: new Array(), + + + onDOMContentLoaded : function(){ + + if($wf2.isInitialized) + return; + + $wf2.isInitialized = true; //Safari needs this here for some reason + + var i,j,k,node; + + //set global event for fireEvent method + if (document.createEventObject){ + // dispatch for IE + $wf2.globalEvent = document.createEventObject(); + } else if (document.createEvent) { + $wf2.globalEvent = document.createEvent("HTMLEvents"); + } + + //Include stylesheet + var style = document.createElement('link'); + style.setAttribute('type', 'text/css'); + style.setAttribute('rel', 'stylesheet'); + style.setAttribute('href', $wf2.libpath + 'webforms2.css'); + var parent = document.getElementsByTagName('head')[0]; + if(!parent) + parent = document.getElementsByTagName('*')[0]; + parent.insertBefore(style, parent.firstChild); + + //The zero point for datetime controls is 1970-01-01T00:00:00.0Z, for datetime-local is + // 1970-01-01T00:00:00.0, for date controls is 1970-01-01, for month controls is 1970-01, for week + // controls is 1970-W01 (the week starting 1969-12-29 and containing 1970-01-01), and for time controls + // is 00:00. + $wf2.zeroPoint = {}; + $wf2.zeroPoint.datetime = $wf2.parseISO8601("1970-01-01T00:00:00.0Z"); + $wf2.zeroPoint['datetime-local'] = $wf2.parseISO8601("1970-01-01T00:00:00.0"); + $wf2.zeroPoint.date = $wf2.zeroPoint.datetime; //parseISO8601("1970-01-01"); //.zeroPointDatetime; //1970-01-01 (UTC) + $wf2.zeroPoint.month = $wf2.zeroPoint.datetime; //parseISO8601("1970-01"); //1970-01 (UTC) + $wf2.zeroPoint.week = $wf2.parseISO8601("1970-W01"); //(UTC) + $wf2.zeroPoint.time = $wf2.zeroPoint.datetime; //parseISO8601("00:00"); //00:00 (UTC) + + //## Fetching data from external resources ################################## + $wf2.xhr = null; + if(window.XMLHttpRequest) + $wf2.xhr = new XMLHttpRequest(); + else if(window.ActiveXObject){ + try { + $wf2.xhr = new ActiveXObject("Msxml2.XMLHTTP"); + } catch(e){ + try { + $wf2.xhr = new ActiveXObject("Microsoft.XMLHTTP"); + } catch(e){} + } + } + if($wf2.xhr){ + $wf2.prefillSelectElements(); + $wf2.prefillFormElements(); + } + + //Initialize Repetition Behaviors **************************************** + //Before load events are fired, but after the entire document has been parsed and after forms with data + // attributes are prefilled (if necessary), UAs must iterate through every node in the document, depth + // first, looking for templates so that their initial repetition blocks can be created. ... UAs should not + // specifically wait for images and style sheets to be loaded before creating initial repetition blocks + // as described above. + if (window.$wf2Rep) { + $wf2.initRepetitionBlocks(); + $wf2.initRepetitionTemplates(); + $wf2.initRepetitionButtons('add'); + $wf2.initRepetitionButtons('remove'); + $wf2.initRepetitionButtons('move-up'); + $wf2.initRepetitionButtons('move-down'); + $wf2.updateAddButtons(); + $wf2.updateMoveButtons(); + } + // Initialize Non-Repetition Behaviors **************************************** + if(document.addEventListener){ + document.addEventListener('mousedown', $wf2.clearInvalidIndicators, false); + document.addEventListener('keydown', $wf2.clearInvalidIndicators, false); + } + else if(document.attachEvent){ + document.attachEvent('onmousedown', $wf2.clearInvalidIndicators); + document.attachEvent('onkeydown', $wf2.clearInvalidIndicators); + } + + $wf2.initNonRepetitionFunctionality(); + + for (var i=0; i<$wf2.callAfterDOMContentLoaded.length; i++) { + $wf2.callAfterDOMContentLoaded[i](); + } + + + }, + + + + + + + /*############################################################################################## + # Section: Fetching data from external resources + ##############################################################################################*/ + + prefillSelectElements : function(){ + //If a select element or a datalist element being parsed has a data attribute, then as soon + // as the element and all its children have been parsed and added to the document, the + // prefilling process described here should start. + var select, selects = $wf2.getElementsByTagNames.apply(document.documentElement, ['select', 'datalist']); //$wf2.getElementsByTagNamesAndAttribute.apply(document.documentElement, [['select', 'datalist']]); //, 'data' + for(var i = 0; select = selects[i]; i++){ + //If a select element or a datalist element has a data attribute, it must be a URI or + // IRI that points to a well-formed XML file whose root element is a select element + // in the http://www.w3.org/1999/xhtml namespace. The MIME type must be an XML MIME + // type [RFC3023], preferably application/xml. It should not be application/xhtml+xml + // since the root element is not html. + //UAs must process this file if it has an XML MIME type [RFC3023], if it is a well-formed + // XML file, and if the root element is the right root element in the right namespace. + // If any of these conditions are not met, UAs must act as if the attribute was not + // specified, although they may report the error to the user. UAs are expected to + // correctly handle namespaces, so the file may use prefixes, etc. + var xmlDoc = $wf2.loadDataURI(select); + if(///\bxml\b/.test(xhr.getResponseHeader('Content-Type') && + xmlDoc && + xmlDoc.documentElement && + /:?\bselect$/i.test(xmlDoc.documentElement.nodeName) && + xmlDoc.documentElement.namespaceURI == 'http://www.w3.org/1999/xhtml' + ) + { + var root = xmlDoc.documentElement; + //1. Unless the root element of the file has a type attribute with the exact literal + // string incremental, the children of the select or datalist element in the original + // document must all be removed from the document. + if(root.getAttribute('type') != 'incremental'){ + while(select.lastChild) + select.removeChild(select.lastChild); + } + + //2. The entire contents of the select element in the referenced document are imported + // into the original document and appended as children of the select or datalist + // element. (Even if importing into a text/html document, the newly imported nodes + // will still be namespaced.) + //3. All nodes outside the select (such as style sheet processing instructions, whitespace + // text nodes, and DOCTYPEs) are ignored, as are attributes (other than type) on the + // select element. + node = root.firstChild; + while(node){ + //select.appendChild(node.cloneNode(true)); //MSIE BUG: Throws "No such interface supported" exception + select.appendChild($wf2.cloneNode(node)); + node = node.nextSibling; + } + } + } + }, + + prefillFormElements : function(){ + //-- Seeding a form with initial values ------------------------------- + //Before load events are fired, but after the entire document has been parsed and after select + // elements have been filled from external data sources (if necessary), forms with data attributes + // are prefilled. + var frm, frms = document.getElementsByTagName('form'); //$wf2.getElementsByTagNamesAndAttribute.apply(document.documentElement, [['form'], 'data']); + for(var i = 0; frm = frms[i]; i++){ + //If a form has a data attribute, it must be a URI or IRI that points to a well-formed XML file + // whose root element is a formdata element in the http://n.whatwg.org/formdata namespace. The + // MIME type must be an XML MIME type [RFC3023], preferably application/xml. + //UAs must process this file if these conditions are met. If any of these conditions are not met, + // UAs must act as if the attribute was not specified, although they may report the error to + // the user. UAs are expected to correctly handle namespaces, so the file may use prefixes, etc. + var xmlDoc = $wf2.loadDataURI(frm); + if(///\bxml\b/.test(xhr.getResponseHeader('Content-Type') && + xmlDoc && + xmlDoc.documentElement && + /:?\bformdata$/.test(xmlDoc.documentElement.nodeName) && + xmlDoc.documentElement.namespaceURI == 'http://n.whatwg.org/formdata' + ) + { + var rt; + var root = xmlDoc.documentElement; + //1. Unless the root element has a type attribute with the exact literal string incremental, + // the form must be reset to its initial values as specified in the markup. + if(root.getAttribute('type') != 'incremental') + frm.reset(); + + //The algorithm must be processed in the order given above, meaning any clear elements are + // handled before any repeat elements which are handled before the field elements, regardless + // of the order in which the elements are given. (Note that this implies that this process + // cannot be performed incrementally.) + + //clear elements in the http://n.whatwg.org/formdata namespace that are children of + // the root element, have a non-empty template attribute, have no other non-namespaced + // attributes (ignoring xmlns attributes), and have no content, must be processed...: + //The template attribute should contain the ID of an element in the document. If the + // template attribute specifies an element that is not a repetition template, then + // the clear element is ignored. + var clr, clrs = root.getElementsByTagName('clear'); //getElementsByTagNameNS('http://n.whatwg.org/formdata', 'clr') + for(j = 0; clr = clrs[j]; j++){ + if(clr.namespaceURI == 'http://n.whatwg.org/formdata' && + clr.parentNode == root && + !clr.firstChild && + (rt = document.getElementById(clr.getAttribute('template'))) && + rt.getAttribute('repeat') == 'template' + /*Examining of non-namespaced attributes skipped*/ + ) + { + //The user must make a note of the list of repetition blocks associated with that + // template that are siblings of the template, and must then go through this list, + // removing each repetition block in turn. + //Note that we cannot use rt.repetitionBlocks since the repetition behavior has + // not yet been initialized. + var attr,node,next; + node = rt.parentNode.firstChild; + while(node){ + if(node.nodeType == 1 && (attr = node.getAttributeNode('repeat')) && attr.value != 'template'){ + next = node.nextSibling; + node.parentNode.removeChild(node); + node = next; + } + else node = node.nextSibling; + } + } + } + + //repeat elements in the http://n.whatwg.org/formdata namespace that are children of + // the root element, have a non-empty template attribute and an index attribute that + // contains only one or more digits in the range 0-9 with an optional leading minus + // sign (U+002D, "-"), have no other non-namespaced attributes (ignoring xmlns + // attributes), and have no content, must be processed as follows: + //The template attribute should contain the ID of an element in the document. If the + // template attribute specifies an element that is not a repetition template, then + // the repeat element is ignored. + var index, rpt, rpts = root.getElementsByTagName('repeat'); + for(j = 0; rpt = rpts[j]; j++){ + if(rpt.namespaceURI == 'http://n.whatwg.org/formdata' && + rpt.parentNode == root && + !rpt.firstChild && + (rt = document.getElementById(rpt.getAttribute('template'))) && + rt.getAttribute('repeat') == 'template' && + /^-?\d+$/.test(index = rpt.getAttribute('index')) + /*Examining of non-namespaced attributes skipped*/ + ) + { + //If the template attribute specifies a repetition template and that template + // already has a repetition block with the index specified by the index attribute, + // then the element is ignored. + //for(j = 0; j < rt.repetitionBlocks.length; j++){ + // if(rt.repetitionBlocks[j].repetititionIndex == index){ + // hasIndex = true; + // break; + // } + //} + var hasIndex,attr,node,next; + node = rt.parentNode.firstChild; + while(node){ + if(node.nodeType == 1 && (attr = node.getAttributeNode('repeat')) && attr.value == index){ + hasIndex = true; + break; + } + node = node.nextSibling; + } + + if(!hasIndex){ + //Otherwise, the specified template's addRepetitionBlockByIndex() method is + // called, with a null first argument and the index specified by the repeat + // element's index attribute as the second. + $wf2.addRepetitionBlockByIndex.apply(rt, [null, index]); + } + } + } + + //field elements in the http://n.whatwg.org/formdata namespace that are children of + // the root element, have a non-empty name attribute, either an index attribute + // that contains only one or more digits in the range 0-9 or no index attribute at + // all, have no other non-namespaced attributes (ignoring xmlns attributes), and + // have either nothing or only text and CDATA nodes as children, must be used to + // initialize controls... + var fld, flds = root.getElementsByTagName('field'); + var formElements = $wf2.getFormElements.apply(frm); + for(j = 0; fld = flds[j]; j++){ + var indexAttr = fld.getAttributeNode('index'); + var name = fld.getAttribute('name'); + if(!name || (indexAttr && !/^\d+$/.test(indexAttr.value))) + /*Examining of non-namespaced attributes skipped*/ + /*Verification of the presence of text and CDATA nodes below*/ + continue; + //First, the form control that the field references must be identified. + var value = ''; + for(k = 0; node = fld.childNodes[k]; k++){ + if(node.nodeType == 3 /*text*/ || node.nodeType == 4 /*CDATA*/) + value += node.data; + else break; //only text and CDATA nodes allowed + } + var ctrl, count = 0; + for(k = 0; ctrl = formElements[k]; k++){ + //console.info(ctrl.name + ' == ' + name) + if(ctrl.type == 'image'){ + //For image controls, instead of using the name given by the name attribute, + // the field's name is checked against two names, the first being the value + // of the name attribute with the string .x appended to it, and the second + // being the same but with .y appended instead. If an image control's name + // is the empty string (e.g. if its name attribute is omitted) then the + // names x and y must be used instead. Thus image controls are handled as + // if they were two controls. + if(ctrl.name ? + (ctrl.name + '.x' == name || ctrl.name + '.y' == name) + : (name == 'x' || name == 'y') ){ + + if(!indexAttr || ++count-1 >= indexAttr.value) + break; + } + } + //This is done by walking the list of form controls associated with the form until + // one is found that has a name exactly equal to the name given in the field + // element's name attribute, skipping as many such matches as is specified in + // the index attribute, or, if the index attribute was omitted, skipping over + // any type="radio" and type="checkbox" controls that have the exact name given + // but have a value that is not exactly the same as the contents of the field element. + // SPECIFICATION DEFICIENCY: Note that this is not completely true. If the value of + // a field element is empty, then it should not be skipped if it associated with + // a radio button or checkbox. For example, the specification states four paragraphs + // later, "The only values that would have an effect in this example are "", which + // would uncheck the checkbox, and "green", which would check the checkbox." + else if(ctrl.name == name){ + if(indexAttr){ + if(++count-1 < indexAttr.value) + continue; + } + else if((ctrl.type == 'radio' || ctrl.type == 'checkbox') && + (value && ctrl.value != value)) + continue; + break; + } + } + + //If the identified form control is a file upload control, a push button control, or + // an image control, then the field element is now skipped. + if(ctrl.type == 'file' || ctrl.type == 'button' || ctrl.type == 'image') + continue; + + //Next, if the identified form control is not a multiple-valued control (a multiple- + // valued control is one that can generate more than one value on submission, such + // as a ), or if it is a multiple-valued control but it + // is the first time the control has been identified by a field element in this + // data file that was not ignored, then it is set to the given value (the contents + // of the field element), removing any previous values (even if these values were + // the result of processing previous field elements in the same data file). + if(!ctrl.getAttributeNode('multiple') || !ctrl.wf2Prefilled){ + //If the element cannot be given the value specified, the field element is + // ignored and the control's value is left unchanged. For example, if a + // checkbox has its value attribute set to green and the field element + // specifies that its value should be set to blue, it won't be changed from + // its current value. (The only values that would have an effect in this + // example are "", which would uncheck the checkbox, and "green", which would + // check the checkbox.) + if(ctrl.type == 'checkbox' || ctrl.type == 'radio'){ + if(!value) + ctrl.checked = false; + else if(ctrl.value == value) + ctrl.checked = true; + else break; + } + else if(ctrl.nodeName.toLowerCase() == 'select'){ + ctrl.selectedIndex = -1; + for(var opt,k = 0; opt = ctrl.options[k]; k++){ + if(opt.value ? opt.value == value : opt.text == value){ + opt.selected = true; + break; + } + } + } + //Another example would be a datetime control where the specified value is + // outside the range allowed by the min and max attributes. The format + // must match the allowed formats for that type for the value to be set. + else { + ctrl.value = value; + $wf2.updateValidityState(ctrl); + if(!ctrl.validity.valid){ + ctrl.value = ctrl.defaultValue; + $wf2.updateValidityState(ctrl); + } + } + ctrl.wf2Prefilled = true; //TRACE + } + //Otherwise, this is a subsequent value for a multiple-valued control, and the + // given value (the contents of the field element) should be added to the list of + // values that the element has selected. + //If the element is a multiple-valued control and the control already has the given + // value selected, but it can be given the value again, then that occurs. + else if(ctrl.getAttributeNode('multiple')){ + for(var opt,k = 0; opt = ctrl.options[k]; k++){ + if(!opt.selected && (opt.value ? opt.value == value : opt.text == value)){ + opt.selected = true; + break; + } + } + } + + //if(ctrl){ + // + //} + } + + //A formchange event is then fired on all the form controls of the form. + var formElements = $wf2.getFormElements.apply(frm); + for(j = 0; j < formElements.length; j++){ + //onformchange(); + //fireEvent() + } + } + } + }, + + /*############################################################################################## + # Section: Repetition Model + ##############################################################################################*/ + + //## REPETITION TEMPLATE ############################################################# + repetitionTemplates:[], + constructRepetitionTemplate : function(){ + if(this.wf2Initialized) + return; + this.wf2Initialized = true; //SAFARI needs this to be here for some reason... + + this.style.display = 'none'; //This is also specified via a stylesheet + this.repetitionType = RepetitionElement.REPETITION_TEMPLATE; + if(!this.repetitionIndex) + this.repetitionIndex = 0; + this.repetitionTemplate = null; //IMPLEMENT GETTER + if(!this.repetitionBlocks) + this.repetitionBlocks = []; //IMPLEMENT GETTER + var _attr; + this.repeatStart = /^\d+$/.test(_attr = this.getAttribute('repeat-start')) ? parseInt(_attr) : 1; + this.repeatMin = /^\d+$/.test(_attr = this.getAttribute('repeat-min')) ? parseInt(_attr) : 0; + this.repeatMax = /^\d+$/.test(_attr = this.getAttribute('repeat-max')) ? parseInt(_attr) : Number.MAX_VALUE; //Infinity; + + if(!this.addRepetitionBlock) this.addRepetitionBlock = function(refNode, index){ + return $wf2.addRepetitionBlock.apply(this, [refNode, index]); //wrapper to save memory? + }; + if(!this.addRepetitionBlockByIndex) + this.addRepetitionBlockByIndex = this.addRepetitionBlock/*ByIndex*/; //one method implements both algorithms + + //Any form controls inside a repetition template are associated with their forms' templateElements + // DOM attributes, and are not present in the forms' elements DOM attributes. + + //On the HTMLFormElement, the templateElements attribute contains the list of form controls associated + // with this form that form part of repetition templates. It is defined in more detail in the section + // on the repetition model. (Image controls are part of this array, when appropriate.) The controls + // in the elements and templateElements lists must be in document order. + var frm = this; + while(frm = frm.parentNode){ + if(frm.nodeName.toLowerCase() == 'form') + break; + } + + var _templateElements; + //IMAGE???, fieldset not included + if(frm && (_templateElements = $wf2.getElementsByTagNames.apply(this, ['button','input','select','textarea','isindex'])).length){ + //INCORRECT IMPLEMENTATION: this should append the new elements onto the frm.templateElements array and then sort them in document order? + //each time that a nesting repetition block is instantiated, the form's templateElemenents property becomes invalid + + //frm.templateElements = _templateElements; + + //Controls in the templateElements attribute cannot be successful; controls inside repetition templates can never be submitted. + // Therefore disable all elements in the template; however, due to the issue below, the original disabled state must be stored in the field's class attribute as "disabled" + // this storing of the original disabled state will enable the elements in cloned blocks to be disabled as originally coded in the template + //ISSUE: inputs retain disabled (but not defaultDisabled) attribue after returning to page from back button or reload + // see http://weblogs.mozillazine.org/gerv/archives/2006/10/firefox_reload_behaviour.html + // As a workaround... this implementation requires that authors, in addition to supplying a DISABLED attribute (for Opera), to include a class name "disabled" + for(var el, i = 0; el = _templateElements[i]; i++) + el.disabled = true; + + //IMPLEMENTATION DEFICIENCY: unable to remove frm.templateElements from frm.elements + } + + //Repetition blocks without a repeat-template attribute are associated with their first following sibling + // that is a repetition template, if there is one. + var attr,sibling = this.parentNode.firstChild; + while(sibling && sibling != this){ + if(sibling.nodeType == 1 && (attr = sibling.getAttributeNode('repeat')) && /^-?\d+$/.test(attr.value) && !sibling.getAttribute('repeat-template')){ + //if(sibling.repetitionType == RepetitionElement.REPETITION_BLOCK && !sibling.getAttribute('repeat-template')){ + //console.info(sibling) + sibling.repetitionTemplate = this; + sibling.setAttribute('repeat-template', this.id); + this.repetitionBlocks.push(sibling); + } + sibling = sibling.nextSibling; + } + //while(sibling = sibling.previousSibling){ + // if(sibling.repetitionType == RepetitionElement.REPETITION_BLOCK && !sibling.getAttribute('repeat-template')){ + // sibling.repetitionTemplate = this; + // sibling.setAttribute('repeat-template', this.id); + // this.repetitionBlocks.unshift(sibling); + // } + //} + + //the UA must invoke the template's replication behaviour as many times as the repeat-start attribute + // on the same element specifies (just once, if the attribute is missing or has an invalid value). + // Then, while the number of repetition blocks associated with the repetition template is less than + // the template's repeat-min attribute, the template's replication behaviour must be further invoked. + // (Invoking the template's replication behaviour means calling its addRepetitionBlock() method). + //for(var i = 0; i < Math.max(this.repeatStart, this.repeatMin); i++) + for(var i = 0; (i < this.repeatStart || this.repetitionBlocks.length < this.repeatMin); i++) + if (!this.addRepetitionBlock()) { + break; + } + + $wf2.repetitionTemplates.push(this); + this.wf2Initialized = true; + }, + + initRepetitionTemplates : function(parentNode){ + //UAs must iterate through every node in the document, depth first, looking for templates so that their + // initial repetition blocks can be created. + //var repetitionTemplates = cssQuery("*[repeat=template]", parentNode); + var repetitionTemplates = $wf2.getElementsByTagNamesAndAttribute.apply((parentNode || document.documentElement), [['*'], 'repeat', 'template']); + for(var i = 0, rt; i < repetitionTemplates.length; i++) + $wf2.constructRepetitionTemplate.apply(repetitionTemplates[i]); + }, + + + //## REPETITION BLOCK ############################################################# + constructRepetitionBlock : function(){ + if(this.wf2Initialized) + return; + + this.style.display = ''; //This should preferrably be specified via a stylesheet + this.repetitionType = RepetitionElement.REPETITION_BLOCK; + var _attr; + this.repetitionIndex = /^\d+$/.test(_attr = this.getAttribute('repeat')) ? parseInt(_attr) : 0; + this.repetitionBlocks = null; + + //find this block's repetition template + this.repetitionTemplate = null; //IMPLEMENT GETTER + var node; + + if((node = document.getElementById(this.getAttribute('repeat-template'))) && + node.getAttribute('repeat') == 'template') + { + this.repetitionTemplate = node; + } + else { + node = this; + while(node = node.nextSibling){ + if(node.nodeType == 1 && node.getAttribute('repeat') == 'template'){ + this.repetitionTemplate = node; + break; + } + } + } + + if(!this.removeRepetitionBlock) this.removeRepetitionBlock = function(){ + return $wf2.removeRepetitionBlock.apply(this); //wrapper to save memory + }; + if(!this.moveRepetitionBlock) this.moveRepetitionBlock = function(distance){ + return $wf2.moveRepetitionBlock.apply(this, [distance]); //wrapper to save memory + }; + this.wf2Initialized = true; + }, + + initRepetitionBlocks : function(parentNode){ + //var repetitionBlocks = cssQuery('*[repeat]:not([repeat="template"])', parentNode); //:not([repeat="template"]) + var repetitionBlocks = $wf2.getElementsByTagNamesAndAttribute.apply((parentNode || document.documentElement), [['*'], 'repeat', 'template', true]); + for(var i = 0; i < repetitionBlocks.length; i++) + $wf2.constructRepetitionBlock.apply(repetitionBlocks[i]); + }, + + + //## Repetition buttons ############################################################# + repetitionButtonDefaultLabels : { + 'add' : 'Add', + 'remove' : 'Remove', + 'move-up' : 'Move-up', + 'move-down' : 'Move-down' + }, + + constructRepetitionButton : function(btnType){ + if(this.wf2Initialized) + return; + this.htmlTemplate = $wf2.getHtmlTemplate(this); //IMPLEMENT GETTER + if(!this.firstChild) + this.appendChild(document.createTextNode($wf2.repetitionButtonDefaultLabels[btnType])); + + //user agents must automatically disable remove, move-up, and move-down buttons when they are not in a repetition + // block. [NOT IMPLEMENTED:] This automatic disabling does not affect the DOM disabled attribute. It is an intrinsic property of these buttons. + if(btnType != 'add') + this.disabled = !$wf2.getRepetitionBlock(this); + //user agents must automatically disable add buttons (irrespective of the value of the disabled + // DOM attribute [NOT IMPLEMENTED]) when the buttons are not in a repetition block that has an + // associated template and their template attribute is either not specified or does not have + // an ID that points to a repetition template... + else { + var rb; + this.disabled = !(((rb = $wf2.getRepetitionBlock(this)) && rb.repetitionTemplate) + || + this.htmlTemplate + ); + } + + if(this.addEventListener) + this.addEventListener('click', $wf2.clickRepetitionButton, false); + else if(this.attachEvent) + this.attachEvent('onclick', $wf2.clickRepetitionButton); + else this.onclick = $wf2.clickRepetitionButton; + + this.wf2Initialized = true; + }, + + initRepetitionButtons : function(btnType, parent){ + var i; + if(!parent) + parent = document.documentElement; + + //change INPUTs to BUTTONs + var inpts = $wf2.getElementsByTagNamesAndAttribute.apply(parent, [['input'], 'type', btnType]); + for(i = 0; i < inpts.length; i++){ + var btn = document.createElement('button'); + for(var j = 0, attr; attr = inpts[i].attributes[j]; j++) + btn.setAttribute(attr.nodeName, inpts[i].getAttribute(attr.nodeName)); //MSIE returns correct value with getAttribute but not nodeValue + inpts[i].parentNode.replaceChild(btn, inpts[i]); + btn = null; + } + + //construct all buttons + var btns = $wf2.getElementsByTagNamesAndAttribute.apply(parent, [['button'], 'type', btnType]); + for(var i = 0; i < btns.length; i++) + $wf2.constructRepetitionButton.apply(btns[i], [btnType]); + }, + + clickRepetitionButton : function(e){ + if(e && e.preventDefault) + e.preventDefault(); //Keep default submission behavior from executing + + //If the event is canceled (btn.returnValue === false, set within onclick handler), then the default action will not occur. + var btn; + if(e && e.target) + btn = e.target; + else if(window.event) + btn = event.srcElement; + else if(this.nodeName.toLowerCase() == 'button') + btn = this; + var btnType = String(btn.getAttribute('type')).toLowerCase(); + + //Prevent the onclick handler from firing afterwards (would fire after movement action) + // ISSUE: This only works in Firefox + if(btn.onclick){ + btn._onclick = btn.onclick; + btn.removeAttribute('onclick'); + btn.onclick = null; + } + + //Terminate if an onclick handler was called beforehand and returned a false value + // passed via the button's returnValue property. Handlers defined by HTML attributes + // are called before those assigned by onclick DOM properties. + if(btn.returnValue !== undefined && !btn.returnValue){ + btn.returnValue = undefined; + return false; + } + + //Ensure that a user-supplied onclick handler is fired before the repetition behavior is executed + // and terminate if this onclick handler returns a false value + // Note that handlers defined in onclick HTML attributes are executed before clickRepetitionButton + if(btn._onclick && btn.returnValue === undefined){ // && !btn.getAttributeNode("onclick") //&& btn.hasAttribute && !btn.hasAttribute("onclick") //NOTE: MSIE fires this afterwards??? btn.returnValue = btn._onclick(e); + btn.returnValue = btn._onclick(e); + if(btn.returnValue !== undefined && !btn.returnValue){ + btn.returnValue = undefined; + return false; + } + } + btn.returnValue = undefined; + + //ISSUE: How do we ensure that the MSIE and DOM Level 2 Event handlers are executed beforehand? + + var block; + if(btnType != 'add'){ + block = $wf2.getRepetitionBlock(btn); + + //user agents must automatically disable remove, move-up, and move-down buttons when they are not in a repetition + // block. [NOT IMPLEMENTED:] This automatic disabling does not affect the DOM disabled attribute. It is an intrinsic property of these buttons. + this.disabled = !block; + + if(block){ + if(btnType.indexOf('move') === 0){ + block._clickedMoveBtn = btn; + block.moveRepetitionBlock(btnType == 'move-up' ? -1 : 1); + } + else if(btnType == 'remove'){ + block.removeRepetitionBlock(); + } + } + } + else { + var rt; + //If an add button with a template attribute is activated, and its template attribute gives the ID + // of an element in the document that is a repetition template as defined above, then that + // template's replication behaviour is invoked. (Specifically, in scripting-aware environments, + // the template's addRepetitionBlock() method is called with a null argument.) In the case of + // duplicate IDs, the behaviour should be the same as with getElementById(). + if(btn.htmlTemplate) + rt = btn.htmlTemplate; + else { + //If an add button without a template attribute is activated, and it has an ancestor that is a + // repetition block that is not an orphan repetition block, then the repetition template associated + // with that repetition block has its template replication behaviour invoked with the respective + // repetition block as its argument. (Specifically, in scripting-aware environments, the template's + // addRepetitionBlock() method is called with a reference to the DOM Element node that represents + // the repetition block.) + block = $wf2.getRepetitionBlock(btn); + if(block && block.repetitionTemplate) + rt = block.repetitionTemplate; + } + if(rt) + rt.addRepetitionBlock(); + else + btn.disabled = true; //NOTE: THIS IS NOT A VALID IMPLEMENTATION + } + return false; + }, + + //## AddRepetitionBlock algorithm ############################################################# + + //Element addRepetitionBlock(in Node refNode); + addRepetitionBlock : function(refNode, index){ //addRepetitionBlockByIndex functionalty enabled if @index defined + //if(refNode && !refNode.nodeType) + // throw Error("Exception: WRONG_ARGUMENTS_ERR"); + + //if(this.repetitionType == RepetitionElement.REPETITION_TEMPLATE) + if(this.getAttribute('repeat') != 'template') + throw $wf2.DOMException(9); //NOT_SUPPORTED_ERR + + //if addRepetitionBlock called before repetition constructors called (by pre-filling forms) + if(!this.repetitionBlocks) + this.repetitionBlocks = []; + if(!this.repetitionIndex) + this.repetitionIndex = 0; + if(!this.repeatMin) + this.repeatMin = 0; + if(!this.repeatMax) + this.repeatMax = Number.MAX_VALUE; + if(!this.repeatStart) + this.repeatStart = 1; + + //1. If the template has no parent node or its parent node is not an element, then the method must abort + // the steps and do nothing. + if(this.parentNode == null) + return null; + + //[furthermore, if this template is the child of another template (not the child of an instance, a block) return false] + var node = this; + while(node = node.parentNode){ + //if(node.repetitionType == RepetitionElement.REPETITION_TEMPLATE) + if(node.nodeType == 1 && node.getAttribute('repeat') == 'template') + return false; + } + + //2. The template examines its preceding siblings, up to the start of the parent element. For each sibling + // that is a repetition block whose associated template is this template, if the repetition block's index + // is greater than or equal to the template's index, then the template's index is increased to the repetition + // block's index plus one. The total number of repetition blocks associated with this template that were + // found is used in the next step. + //QUESTION: Why not just use this.repetitionBlocks.length???????????? + var sibling = this.previousSibling; + var currentBlockCount = 0; + while(sibling != null){ + if(sibling.nodeType == 1){ + var repeatAttr,repeatTemplateAttr; + repeat = parseInt(sibling.getAttribute('repeat')); + repeatTemplateAttr = sibling.getAttributeNode('repeat-template'); + + //if(sibling.repetitionType == RepetitionElement.REPETITION_BLOCK && sibling.repetitionTemplate == this) + if(!isNaN(repeat) && (!repeatTemplateAttr || repeatTemplateAttr.value == this.id)) + { + //Old Note: sibling.getAttribute('repeat') is used instead of sibling.repetitionIndex because appearantly + // the sibling is not yet bound to the document and so the getters are not available + //this.repetitionIndex = Math.max(this.repetitionIndex, parseInt(sibling.getAttribute('repeat'))+1); + this.repetitionIndex = Math.max(this.repetitionIndex, repeat+1); + currentBlockCount++; + } + } + sibling = sibling.previousSibling; + } + + //3. If the repetition template has a repeat-max attribute and that attribute's value is less than or equal + // to the number of repetition blocks associated with this template that were found in the previous step, + // the UA must stop at this step, returning a null value. + if(this.repeatMax <= currentBlockCount) + return null; + + //4. If this algorithm was invoked via the addRepetitionBlockByIndex() method, and the value of the method's + // index argument is greater than the template's index, then the template's index is set to the value of the + // method's index argument. + if(index !== undefined && index > this.repetitionIndex) + this.repetitionIndex = index; + + //(the following steps are out of order to facilitate a custom cloneNode to cope for MSIE and Gecko issues) + + //9. If the new repetition block has an ID attribute (that is, an attribute specifying an ID, regardless + // of the attribute's namespace or name), then that attribute's value is used as the template name in + // the following steps. Otherwise, the template has no name. (If there is more than one ID attribute, + // the "first" one in terms of node order is used. [DOM3CORE]) + // [Since this step was moved here, it uses 'this' and not 'block', which hasn't been created yet] + //var IDAttr = block.getAttributeNode('id') ? block.getAttributeNode('id') : block.getAttributeNode('name'); //DETECT ID TYPE For others? + var IDAttrName = this.getAttribute('id') ? 'id' : this.getAttribute('name') ? 'name' : ''; //NOTE: hasAttribute not implemented in MSIE + var IDAttrValue = this.getAttribute(IDAttrName); + + //5. A clone of the template is made. The resulting element is the new repetition block element. + // [Note that the DOM cloneNode method is not invoked in this implementation due to MSIE + // errors, such as not being able to modify the name attribute of an existing node and strange Gecko behavior + // regarding the inconsistant correspondence of an input node's value attribute and value property. + // Instead of invoking the native cloneNode method, each element is copied manually when it is iterated over.] + // [Note: step 11 of the the specification's algorithm has been merged into step 5. See note at step 11 below] + //(11). If the template has a name and it is not being ignored (see the previous two steps), then, for every + // attribute on the new element, and for every attribute in every descendant of the new element: if the + // attribute starts with a zero-width non-breaking space character (U+FEFF) then that character is + // removed from the attribute; otherwise, any occurrences of a string consisting of an opening square + // bracket (U+005B, "[") or a modifier letter half triangular colon (U+02D1), the template's name, + // and a closing square bracket (U+005D, "]") or a middle dot (U+00B7), are replaced by the new + // repetition block's index. This is performed regardless of the types, names, or namespaces of attributes, + // and is done to all descendants, even those inside nested forms, nested repetition templates, and so forth. + var block; + + //(10). If the template has a name (see the previous step), and that name contains either an opening square + // bracket (U+005B, "[") a modifier letter half triangular colon (U+02D1), a closing square bracket + // (U+005D, "]") or a middle dot (U+00B7), then the template's name is ignored for the purposes of + // [this] step. + var replaceValue = this.repetitionIndex; + var reTemplateName, processAttr; + if(IDAttrValue && !/\u005B|\u02D1|\u005D|\u00B7/.test(IDAttrValue)){ //VALID LOGIC? + reTemplateName = new RegExp("(\\[|\u02D1)" + IDAttrValue + "(\\]|\u00B7)", 'g'); //new RegExp('(\\u005B|\\u02D1)' + IDAttrValue + '(\\u005D|\\u00B7)', 'g'); + processAttr = function(attrVal){ //Function that processes an attribute value as defined in step 11 + if(!attrVal) + return attrVal; + attrVal = attrVal.toString(); + if(attrVal.indexOf("\uFEFF") === 0) + return attrVal.replace(/^\uFEFF/, ''); + return attrVal.replace(reTemplateName, replaceValue); + }; + } + block = $wf2.cloneNode(this, processAttr); + block.wf2Initialized = false; + reTemplateName = null; + + //6. If this algorithm was invoked via the addRepetitionBlockByIndex() method, the new repetition block + // element's index is set to the method's index argument. Otherwise, the new repetition block element's + // index is set to the template's index. [Note: if called by addRepetitionBlockByIndex() then the + // template's repetitionIndex has already been set to the index argument. Redundant algorithm step.] + //block.repetitionIndex = this.repetitionIndex; //this is set in the constructor for the repetitionBlock + //7. If the new repetition block element is in the http://www.w3.org/1999/xhtml namespace, then the + // repeat attribute in no namespace on the cloned element has its value changed to the new block's + // index. Otherwise, the repeat attribute in the http://www.w3.org/1999/xhtml namespace has its value + // changed to the new block's index. + //if(block.namespaceURI == 'http://www.w3.org/1999/xhtml') + block.setAttribute('repeat', this.repetitionIndex); //when inserted into DOM, constructor sets block.repetitionIndex + //else + // block.setAttributeNS('http://www.w3.org/1999/xhtml', 'repeat', this.repetitionIndex); + + //8. If the new repetition block element is in the http://www.w3.org/1999/xhtml namespace, then any + // repeat-min, repeat-max, or repeat-start attributes in no namespace are removed from the element. + // Otherwise, any repeat-min, repeat-max, or repeat-start attributes in the http://www.w3.org/1999/xhtml + // namespace are removed instead. + + //if(block.namespaceURI == 'http://www.w3.org/1999/xhtml'){ + block.removeAttribute('repeat-min'); + block.removeAttribute('repeat-max'); + block.removeAttribute('repeat-start'); + //} + //else { + // block.removeAttributeNS('http://www.w3.org/1999/xhtml', 'repeat-min'); + // block.removeAttributeNS('http://www.w3.org/1999/xhtml', 'repeat-max'); + // block.removeAttributeNS('http://www.w3.org/1999/xhtml', 'repeat-start'); + //} + + //(steps 9 and 10 moved to before step 5 (operates on this repetition template, and not on cloned block)) + + + //11. (Note: the algorithm below which most closely follows the algorithm as described in the specification, + // this has been merged into the cloning of the template in step 5. This has been done because of MSIE + // errors, such as not being able to modify the name attribute of an existing node and strange Gecko behavior + // regarding the inconsistant correspondence of an input node's value attribute and value property.) + //if(IDAttrValue && !ignoreName){ + // var reTemplateName = new RegExp('(?:\\u005B|\\u02D1)' + IDAttrValue + '(?:\\u005D|\\u00B7)', 'g'); + // function processAttrs(node){ + // var i,attr; + // for(i = 0; node.attributes && i < node.attributes.length; i++){ + // if(!(attr = node.attributes[i]).nodeValue) + // continue; + // + // if(String(attr.nodeValue).indexOf("\uFEFF") === 0) + // attr.nodeValue = attr.nodeValue.replace(/^\uFEFF/, ''); + // + // else if(reTemplateName.test(attr.nodeValue)) + // attr.nodeValue = attr.nodeValue.replace(reTemplateName, block.getAttribute('repeat')); + // } + // for(i = 0; i < node.childNodes.length; i++) + // processAttrs(node.childNodes[i]); + // } + // processAttrs(block); + //} + + + //12. If the template has a name (see the earlier steps): If the new repetition block element is in the + // http://www.w3.org/1999/xhtml namespace, then the repeat-template attribute in no namespace on the + // cloned element has its value set to the template's name. Otherwise, the repeat-template attribute + // in the http://www.w3.org/1999/xhtml namespace has its value set to the template's name. (This + // happens even if the name was ignored for the purposes of the previous step.) + if(IDAttrName){ + //if(block.namespaceURI == "http://www.w3.org/1999/xhtml") + block.setAttribute('repeat-template', IDAttrValue); //block.setAttributeNS(null, 'repeat-template', IDAttr.nodeValue); + //else + // block.setAttributeNS('http://www.w3.org/1999/xhtml', 'repeat-template', IDAttr.nodeValue); + + + //13. The attribute from which the template's name was derived, if any, and even if it was ignored, is + // removed from the new repetition block element. (See the previous four steps.) + block.removeAttribute(IDAttrName); + } + + //14. If the first argument to the method was null, then the template once again crawls through its + // previous siblings, this time stopping at the first node (possibly the template itself) whose + // previous sibling is a repetition block (regardless of what that block's template is) or the first + // node that has no previous sibling, whichever comes first. The new element is the inserted into the + // parent of the template, immediately before that node. Mutation events are fired if appropriate. + if(!refNode){ + refNode = this; + while(refNode.previousSibling && refNode.previousSibling.repetitionType != RepetitionElement.REPETITION_BLOCK) + refNode = refNode.previousSibling; + this.parentNode.insertBefore(block, refNode); + this.repetitionBlocks.push(block); + } + //15. Otherwise, the new element is inserted into the parent of the node that was passed to the method + // as the first argument, immediately after that node (before the node's following sibling, if any). + // Mutation events are fired if appropriate. + else { + refNode.parentNode.insertBefore(block, refNode.nextSibling); + this.repetitionBlocks.push(block); + if($wf2.sortNodes) + this.repetitionBlocks.sort($wf2.sortNodes); + } + + //16. The template's index is increased by one. + this.repetitionIndex++; + + //[apply constructors to the new repetition block, and to the new remove buttons, add buttons, etc] + $wf2.constructRepetitionBlock.apply(block); + $wf2.initRepetitionTemplates(block); + + $wf2.initRepetitionButtons('add', block); + $wf2.initRepetitionButtons('remove', block); + $wf2.initRepetitionButtons('move-up', block); + $wf2.initRepetitionButtons('move-down', block); + + //In addition, user agents must automatically disable add buttons (irrespective of the value of the + // disabled DOM attribute) when the buttons are not in a repetition block that has an associated + // template and their template attribute is either not specified or does not have an ID that points + // to a repetition template, and, when the repetition template's repeat-max attribute is less than + // or equal to the number of repetition blocks that are associated with that template and that have + // the same parent. This automatic disabling does not affect the DOM disabled attribute. It is an + // intrinsic property of these buttons. + if($wf2.isInitialized){ //if buttons not yet initialized, will initially be called by _init_document + $wf2.updateAddButtons(this); + $wf2.updateMoveButtons(this.parentNode); + } + + //Setup block with the other WF2 behavior + $wf2.initNonRepetitionFunctionality(block); + //var els = $wf2.getElementsByTagNamesAndAttribute.apply(block, [['*'], "autofocus"]); //ISSUE: Any form control (except hidden and output controls) can have an autofocus attribute specified. //var elName = els[i].nodeName.toLowerCase(); if(elName == 'output' || (elName == 'input' && els[i].type == 'hidden')) + //for(var i = 0; i < els.length; i++) + // $wf2.initAutofocusElement(els[i]); + + //17. An added event with no namespace, which bubbles but is not cancelable and has no default action, + // must be fired on the repetition template using the RepetitionEvent interface, with the repetition + // block's DOM node as the context information in the element attribute. + var addEvt; + try { + if(document.createEvent) + addEvt = document.createEvent('UIEvents'); //document.createEvent("RepetitionEvent") + else if(document.createEventObject) + addEvt = document.createEventObject(); + RepetitionEvent._upgradeEvent.apply(addEvt); + addEvt.initRepetitionEvent('added', true /*canBubble*/, false /*cancelable*/, block); + if(this.dispatchEvent) + this.dispatchEvent(addEvt); + else if(this.fireEvent){ + //console.warn("fireEvent('onadd') for MSIE is not yet working"); + //this.fireEvent('onadded', addEvt); + } + } + catch(err){ + addEvt = new Object(); + RepetitionEvent._upgradeEvent.apply(addEvt); + addEvt.initRepetitionEvent('added', true /*canBubble*/, false /*cancelable*/, block); + } + + //Add support for event handler set with HTML attribute + var handlerAttr; + if((handlerAttr = this.getAttribute('onadded')) && (!this.onadded || typeof this.onadded != 'function')){ //in MSIE, attribute == property + this.onadded = new Function('event', handlerAttr); + } + //Deprecated + else if((handlerAttr = this.getAttribute('onadd')) && (!this.onadd || typeof this.onadd != 'function')){ + this.onadd = new Function('event', handlerAttr); + } + + try { + //Dispatch events for the old event model (extension to spec) + if(this.onadded){ + //this.onadded(addEvt); + this.onadded.apply(this, [addEvt]); //for some reason, exceptions cannot be caught if using the method above in MSIE + } + else if(this.onadd){ //deprecated + //this.onadd(addEvt); + this.onadd.apply(this, [addEvt]); + } + } + catch(err){ + //throw exception within setTimeout so that the current execution will not be aborted + setTimeout(function(){ + throw err; + }, 0); //using 0 milliseconds done at + } + + //18. The return value is the newly cloned element. + return block; + }, + //Element addRepetitionBlockByIndex(in Node refNode, in long index); + addRepetitionBlockByIndex : function(refNode, index){ + $wf2.addRepetitionBlock.apply(this, [refNode, index]) + }, + + //## RemoveRepetitionBlock algorithm ############################################################# + + //void removeRepetitionBlock(); + removeRepetitionBlock : function(){ + if(this.repetitionType != RepetitionElement.REPETITION_BLOCK) + throw $wf2.DOMException(9); //NOT_SUPPORTED_ERR + + //1. The node is removed from its parent, if it has one. Mutation events are fired if appropriate. + // (This occurs even if the repetition block is an orphan repetition block.) + var parentNode = this.parentNode; //save for updateMoveButtons + var block = parentNode.removeChild(this); + $wf2.updateMoveButtons(parentNode); + + //The following loop used to appear within step #3 below; + // this caused problems because the program state was incorrect when onremoved was called (repetitionBlocks was not modified) + if(this.repetitionTemplate != null){ + for(var i = 0; i < this.repetitionTemplate.repetitionBlocks.length; i++){ + if(this.repetitionTemplate.repetitionBlocks[i] == this){ + this.repetitionTemplate.repetitionBlocks.splice(i,1); + break; + } + } + } + + //2. If the repetition block is not an orphan, a removed event with no namespace, which bubbles but + // is not cancelable and has no default action, must be fired on the element's repetition template, + // using the RepetitionEvent interface, with the repetition block's DOM node as the context information + // in the element attribute. + if(this.repetitionTemplate != null){ + var removeEvt; + try { + if(document.createEvent) + removeEvt = document.createEvent('UIEvents'); //document.createEvent("RepetitionEvent") + else if(document.createEventObject) + removeEvt = document.createEventObject(); + RepetitionEvent._upgradeEvent.apply(removeEvt); + removeEvt.initRepetitionEvent('removed', true /*canBubble*/, false /*cancelable*/, this); + if(this.repetitionTemplate.dispatchEvent) + this.repetitionTemplate.dispatchEvent(removeEvt); + else if(this.repetitionTemplate.fireEvent){ + //console.warn("fireEvent('onremoved') for MSIE is not yet working"); + //this.repetitionTemplate.fireEvent('onremoved', removeEvt); + } + } + catch(err){ + removeEvt = new Object(); + RepetitionEvent._upgradeEvent.apply(removeEvt); + removeEvt.initRepetitionEvent('removed', true /*canBubble*/, false /*cancelable*/, this); + } + + //Add support for event handler set with HTML attribute + var handlerAttr; + if((handlerAttr = this.repetitionTemplate.getAttribute('onremoved')) && + (!this.repetitionTemplate.onremoved || typeof this.repetitionTemplate.onremoved != 'function')) //in MSIE, attribute == property + { + this.repetitionTemplate.onremoved = new Function('event', handlerAttr); + } + //Deprecated + else if((handlerAttr = this.repetitionTemplate.getAttribute('onremove')) && + (!this.repetitionTemplate.onremove || typeof this.repetitionTemplate.onremove != 'function')) + { + this.repetitionTemplate.onremove = new Function('event', handlerAttr); + } + + try { + //Dispatch events for the old event model (extension to spec) + if(this.repetitionTemplate.onremoved){ + //this.repetitionTemplate.onremoved(removeEvt); + this.repetitionTemplate.onremoved.apply(this, [removeEvt]); //for some reason, exceptions cannot be caught if using the method above in MSIE + } + else if(this.repetitionTemplate.onremove){ //deprecated + //this.repetitionTemplate.onremove(removeEvt); + this.repetitionTemplate.onremove.apply(this, [removeEvt]); + } + } + catch(err){ + //throw exception within setTimeout so that the current execution will not be aborted + setTimeout(function(){ + throw err; + }, 0); + } + } + + //3. If the repetition block is not an orphan, then while the remaining number of repetition blocks + // associated with the original element's repetition template and with the same parent as the template + // is less than the template's repeat-min attribute and less than its repeat-max attribute, the + // template's replication behaviour is invoked (specifically, its addRepetitionBlock() method is called). + if(this.repetitionTemplate != null){ +// //BUG: The following needs to be moved before the call to onremoved +// var t = this.repetitionTemplate; +// for(var i = 0; i < t.repetitionBlocks.length; i++){ +// if(t.repetitionBlocks[i] == this){ +// t.repetitionBlocks.splice(i,1); +// break; +// } +// } + if(this.repetitionTemplate.repetitionBlocks.length < this.repetitionTemplate.repeatMin + && this.repetitionTemplate.repetitionBlocks.length < this.repetitionTemplate.repeatMax) + { + this.repetitionTemplate.addRepetitionBlock(); + } + + //enable add buttons + if(this.repetitionTemplate.repetitionBlocks.length < this.repetitionTemplate.repeatMax){ + //var addBtns = cssQuery("button[type=add]"); + var addBtns = $wf2.getElementsByTagNamesAndAttribute.apply(document.documentElement, [['button'], 'type', 'add']); + for(i = 0; i < addBtns.length; i++){ + if(addBtns[i].htmlTemplate == this.repetitionTemplate) + addBtns[i].disabled = false; + } + } + } + }, + + //## MoveRepetitionBlock algorithm ############################################################# + + //void moveRepetitionBlock(in long distance); + moveRepetitionBlock : function(distance){ + if(this.repetitionType != RepetitionElement.REPETITION_BLOCK) + throw $wf2.DOMException(9); //NOT_SUPPORTED_ERR + + //1. If distance is 0, or if the repetition block has no parent, nothing happens and the algorithm ends here. + if(distance == 0 || this.parentNode == null) + return; + + //2. Set target, a reference to a DOM Node, to the repetition block being moved. + // [Furthermore, move the reference to this block in the template's repetitionBlocks HTMLCollection to + // reflect the new position that it is being moved to.] + var target = this; + if(this.repetitionTemplate){ + var pos = 0; + var rp = this.repetitionTemplate.repetitionBlocks; + while(pos < rp.length && rp[pos] != this) + pos++; + rp.splice(pos, 1); + rp.splice(distance < 0 ? Math.max(pos+distance, 0) : Math.min(pos+distance, rp.length), 0, this); + } + + //3. If distance is negative: while distance is not zero and target's previousSibling is defined and is + // not a repetition template, set target to this previousSibling and, if it is a repetition block, + // increase distance by one (make it less negative by one). + if(distance < 0){ + while(distance != 0 && target.previousSibling && + target.previousSibling.repetitionType != RepetitionElement.REPETITION_TEMPLATE) + { + target = target.previousSibling; + if(target.repetitionType == RepetitionElement.REPETITION_BLOCK) + distance++; + } + } + //4. Otherwise, distance is positive: while distance is not zero and target's nextSibling is defined + // and is not a repetition template, set target to this nextSibling and, if it is a repetition block, + // decrease distance by one. After the loop, set target to target's nextSibling (which may be null). + else { + while(distance != 0 && target.nextSibling && target.nextSibling.repetitionType != RepetitionElement.REPETITION_TEMPLATE){ + target = target.nextSibling; + if(target.repetitionType == RepetitionElement.REPETITION_BLOCK) + distance--; + } + target = target.nextSibling; + } + + //5. Call the repetition block's parent node's insertBefore() method with the newChild argument + // being the repetition block and the refChild argument being target (which may be null by this + // point). Mutation events are fired if appropriate. + this.parentNode.insertBefore(this, target); + + //Keep focus on the move button which was clicked + if(this._clickedMoveBtn){ + this._clickedMoveBtn.focus(); + this._clickedMoveBtn = null; + } + + //In addition, user agents must automatically disable move-up buttons (irrespective of the + // value of the disabled DOM attribute) when their repetition block could not be moved any + // higher according to the algorithm above, and when the buttons are not in a repetition + // block. Similarly, user agents must automatically disable move-down buttons when their + // repetition block could not be moved any lower according to the algorithm above, and + // when the buttons are not in a repetition block. This automatic disabling does not affect + // the DOM disabled attribute. It is an intrinsic property of these buttons. + $wf2.updateMoveButtons(this.parentNode); + + //6. A moved event with no namespace, which bubbles but is not cancelable and has no default action, + // must be fired on the element's repetition template (if it has one), using the RepetitionEvent + // interface, with the repetition block's DOM node as the context information in the element attribute. + if(this.repetitionTemplate != null){ + var moveEvt; + try { + if(document.createEvent) + moveEvt = document.createEvent('UIEvents'); //document.createEvent("RepetitionEvent") + else if(document.createEventObject) + moveEvt = document.createEventObject(); + RepetitionEvent._upgradeEvent.apply(moveEvt); + moveEvt.initRepetitionEvent('moved', true /*canBubble*/, false /*cancelable*/, this); + if(this.repetitionTemplate.dispatchEvent) + this.repetitionTemplate.dispatchEvent(moveEvt); + else if(this.repetitionTemplate.fireEvent){ + //console.warn("fireEvent('onmoved') for MSIE is not yet working"); + //this.fireEvent('onmoved', moveEvt); + } + } + catch(err){ + moveEvt = new Object(); + RepetitionEvent._upgradeEvent.apply(moveEvt); + moveEvt.initRepetitionEvent('moved', true /*canBubble*/, false /*cancelable*/, this); + } + + //Add support for event handler set with HTML attribute--------------------- + var handlerAttr; + if((handlerAttr = this.repetitionTemplate.getAttribute('onmoved')) && + (!this.repetitionTemplate.onmoved || typeof this.repetitionTemplate.onmoved != 'function')) //in MSIE, attribute == property + { + this.repetitionTemplate.onmoved = new Function('event', handlerAttr); + } + //Deprecated + else if(handlerAttr = this.repetitionTemplate.getAttribute('onmove')) + { + if(!this.repetitionTemplate.onmove || typeof this.repetitionTemplate.onmove != 'function'){ + this.repetitionTemplate.onmove = new Function('event', handlerAttr); + } + + //For MSIE, onmove is already an event, and attributes are equal to properties, so attribute value can be function. + // The 'event' argument must be added to the function argument list. + var funcMatches; + if(typeof handlerAttr == 'function' && (funcMatches = handlerAttr.toString().match(/^\s*function\s+anonymous\(\s*\)\s*\{((?:.|\n)+)\}\s*$/))){ + this.repetitionTemplate.onmove = new Function('event', funcMatches[1]); + } + } + + +// var onmovedAttr = this.repetitionTemplate.getAttribute('onmoved') +// || /* deprecated */ this.repetitionTemplate.getAttribute('onmove'); + + //For MSIE, onmove is already an event, and attributes are equal to properties, so attribute value can be function. + // The 'event' argument must be added to the function argument list. +// var funcMatches; +// if(typeof onmovedAttr == 'function' && (funcMatches = onmovedAttr.toString().match(/^\s*function\s+anonymous\(\s*\)\s*\{((?:.|\n)+)\}\s*$/))){ +// this.repetitionTemplate.onmoved = new Function('event', funcMatches[1]); +// } + + //If the onmove attribute has been set but the property (method) has not +// if(onmovedAttr && !this.repetitionTemplate.onmoved) +// this.repetitionTemplate.onmoved = new Function('event', onmovedAttr); + + //This need not be done in MSIE since onmove is already an event, and attributes == properties + //if(onmoveAttr && typeof onmoveAttr != 'function' /* for MSIE */ && + // (!this.repetitionTemplate.onmove || typeof this.repetitionTemplate.onmove != 'function') + // ){ + // this.repetitionTemplate.onmove = new Function('event', onmoveAttr); + //} + + try { + //Dispatch events for the old event model (extension to spec) + if(this.repetitionTemplate.onmoved){ + //this.repetitionTemplate.onmoved(moveEvt); + this.repetitionTemplate.onmoved.apply(this, [moveEvt]); + } + else if(this.repetitionTemplate.onmove){ //deprecated + //this.repetitionTemplate.onmove(moveEvt); + this.repetitionTemplate.onmove.apply(this, [moveEvt]); + } + } + catch(err){ + //throw exception within setTimeout so that the current execution will not be aborted + setTimeout(function(){ + throw err; + }, 0); //using 0 milliseconds done at + } + } + }, + + //## Other helper functions for the repetition model behaviors ############################## + getRepetitionBlock : function(node){ + while(node = node.parentNode){ + if(node.repetitionType == RepetitionElement.REPETITION_BLOCK){ + return node; + } + } + return null; + }, + + getHtmlTemplate : function(button){ + var attr = button.getAttribute('template'); + var node; + if(attr && (node = document.getElementById(attr)) && node.getAttribute('repeat') == 'template' /*node.repetitionType == RepetitionElement.REPETITION_TEMPLATE*/) + return node; + return null; + }, + + updateAddButtons : function(rt){ + //In addition, user agents must automatically disable add buttons (irrespective of the value of the + // disabled DOM attribute) when the buttons are not in a repetition block that has an associated + // template and their template attribute is either not specified or does not have an ID that points + // to a repetition template, and, when the repetition template's repeat-max attribute is less than + // or equal to the number of repetition blocks that are associated with that template and that have + // the same parent. This automatic disabling does not affect the DOM disabled attribute. It is an + // intrinsic property of these buttons. + + var repetitionTemplates = rt ? [rt] : $wf2.repetitionTemplates; + + //var btns = cssQuery("button[type=add]"); + var btns = $wf2.getElementsByTagNamesAndAttribute.apply(document.documentElement, [['button'], 'type', 'add']); + for(var i = 0; i < btns.length; i++){ + for(var t, j = 0; t = repetitionTemplates[j]; j++){ + if(btns[i].htmlTemplate == t && t.repetitionBlocks.length >= t.repeatMax){ + btns[i].disabled = true; + } + } + } + }, + + updateMoveButtons : function(parent){ + //In addition, user agents must automatically disable move-up buttons (irrespective of the value of + // the disabled DOM attribute) when their repetition block could not be moved any higher according + // to the algorithm above, and when the buttons are not in a repetition block. Similarly, user agents + // must automatically disable move-down buttons when their repetition block could not be moved any + // lower according to the algorithm above, and when the buttons are not in a repetition block. This + // automatic disabling does not affect the DOM disabled attribute. It is an intrinsic property of + // these buttons. + + var i; + var rbs = []; + + //update all move buttons if a repetition block's parent was not given + if(!parent){ + var visitedParents = []; + //var rbs = cssQuery('*[repeat]:not([repeat="template"])'); + //var rbs = $wf2.getElementsByProperty('repetitionType', RepetitionElement.REPETITION_BLOCK); + rbs = $wf2.getElementsByTagNamesAndAttribute.apply(document.documentElement, [['*'], 'repeat', 'template', true]); + for(i = 0; block = rbs[i]; i++){ + //if(!visitedParents.some(function(i){return i == block.parentNode})){ + if(!$wf2.arrayHasItem(visitedParents, block.parentNode)){ + $wf2.updateMoveButtons(block.parentNode); + visitedParents.push(block.parentNode); + } + } + return; + } + + //get all of the repetition block siblings + var j,btn,block; + var child = parent.firstChild; + while(child){ + if(child.repetitionType == RepetitionElement.REPETITION_BLOCK) + rbs.push(child); + child = child.nextSibling; + } + + //disable or enable movement buttons within each block + for(i = 0; block = rbs[i]; i++){ + //var moveUpBtns = cssQuery("button[type=move-up]", block); + var moveUpBtns = $wf2.getElementsByTagNamesAndAttribute.apply(block, [['button'], 'type', 'move-up']); + for(j = 0; btn = moveUpBtns[j]; j++){ + btn.disabled = + //if the button is not in a repetition block + !(rb = $wf2.getRepetitionBlock(btn)) + || + //when their repetition block could not be moved any lower + (i == 0); + } + //var moveDownBtns = cssQuery("button[type=move-down]", block); + var moveDownBtns = $wf2.getElementsByTagNamesAndAttribute.apply(block, [['button'], 'type', 'move-down']); + for(j = 0; btn = moveDownBtns[j]; j++){ + btn.disabled = + //if the button is not in a repetition block + !(rb = $wf2.getRepetitionBlock(btn)) + || + //when their repetition block could not be moved any higher + (i == rbs.length-1); + } + } + }, + + /*############################################################################################# + # Section: Extensions to the input element + ##############################################################################################*/ + + initNonRepetitionFunctionality : function(parent){ + parent = (parent || document.documentElement); + var i,j, frm, frms = parent.getElementsByTagName('form'); + for(i = 0; frm = frms[i]; i++){ + if(frm.checkValidity && !$wf2.hasBadImplementation) + continue; + frm.checkValidity = $wf2.formCheckValidity; + + if(frm.addEventListener) + frm.addEventListener('submit', $wf2.onsubmitValidityHandler, false); + else + frm.attachEvent('onsubmit', $wf2.onsubmitValidityHandler); + } + + var ctrl, ctrls = $wf2.getElementsByTagNames.apply(parent, ['input','select','textarea', 'button']);//parent.getElementsByTagName([i]); + for(i = 0; ctrl = ctrls[i]; i++){ + $wf2.applyValidityInterface(ctrl); + $wf2.updateValidityState(ctrl); //ctrl._updateValidityState(); + } + + //Autofocus ********************************************************** + //Authors must not set the autofocus attribute on multiple enabled elements in a document. + // If multiple elements with the autofocus attribute set are inserted into a document, each one + // will be processed as described above, as they are inserted. This means that during document + // load, for example, the last focusable form control in document order with the attribute set + // will end up with the focus. + var els = $wf2.getElementsByTagNamesAndAttribute.apply(document.documentElement, [['*'], 'autofocus']); //ISSUE: Any form control (except hidden and output controls) can have an autofocus attribute specified. //var elName = els[i].nodeName.toLowerCase(); if(elName == 'output' || (elName == 'input' && els[i].type == 'hidden')) + if(parent.getAttribute('autofocus')) + els.unshift(parent); + for(i = 0; i < els.length; i++) + $wf2.initAutofocusElement(els[i]); + + // Maxlength for textareas ****************************************************** + var textareas = $wf2.getElementsByTagNamesAndAttribute.apply(parent, [['textarea'], 'maxlength']); + if(parent.nodeName.toLowerCase() == 'textarea') + textareas.unshift(parent); + for(i = 0; i < textareas.length; i++) + textareas[i].maxLength = parseInt(textareas[i].getAttribute('maxlength')); + //TODO: we must dynamically apply this behavior for new textareas (via repetition model or eventlistener) + }, + + initAutofocusElement : function(el){ + //skip if already initialized + if(el.autofocus === false || el.autofocus === true) //(el.autofocus !== undefined) does not work due to MSIE's handling of attributes + return; + el.autofocus = true; + + //[autofocus if] the control is not disabled + if(el.disabled) + return; + + //[control] is of a type normally focusable in the user's operating environment + //Don't focus on the control if it is not visible or nor displayed + var node = el; + while(node && node.nodeType == 1){ + if($wf2.getElementStyle(node, 'visibility') == 'hidden' || $wf2.getElementStyle(node, 'display') == 'none') + return; + node = node.parentNode; + } + + //Then the UA should focus the control, as if the control's focus() method was invoked. + // UAs with a viewport should also scroll the document enough to make the control visible, + // [[even if it is not of a type normally focusable.]] //WHAT DOES THIS MEAN? + el.focus(); //BUG: in Gecko this does not work within DOMNodeInserted event handler, but the following does; setTimeout(function(){el.focus();}, 0); + + + }, + + /*############################################################################################# + # Section: Form Validation model + ##############################################################################################*/ + + formCheckValidity : function(){ + var i, el, valid = true; + + //When a form is submitted, user agents must act as if they used the following algorithm. + // First, each element in that form's elements list is added to a temporary list (note that + // the elements list is defined to be in document order). + + //An invalid event must be fired on each element that, when checked, is found to fail to + // comply with its constraints (i.e. each element whose validity.valid DOM attribute is + // false) and is still a member of the form after the event has been handled. + //var _elements = []; + var formElements = $wf2.getFormElements.apply(this); + //for(i = 0; i < formElements.length; i++) + // _elements.push(formElements[i]); + for(i = 0; el = formElements[i]; i++){ + var type = (el.getAttribute('type') ? el.getAttribute('type').toLowerCase() : el.type); + el.willValidate = !(/(hidden|button|reset|add|remove|move-up|move-down)/.test(type) || !el.name || el.disabled) + //Then, each element in this list whose willValidate DOM attribute is true is checked for validity + if(el.checkValidity && el.willValidate){ + if(!el.checkValidity() && el.checkValidity() != undefined) { + valid = false; + + + /* we change this to only show the first error. + if (!$wf2.showAllErrors) { + break; + } + */ + } + } + } + + if (!valid) { + $wf2.hiliteFirstError(); + } + return valid; + }, + + hiliteFirstError: function () { + + if($wf2.invalidIndicators.length){ //second condition needed because modal in oninvalid handler may cause indicators to disappear before this is reached + //$wf2.invalidIndicators[0].errorMsg.className += " wf2_firstErrorMsg"; + $wf2.css.addClass($wf2.invalidIndicators[0].errorMsg, "wf2_firstErrorMsg"); + //scroll to near the location where invalid control is + el = $wf2.invalidIndicators[0].target; + + var doScroll = (el.form.getAttribute('data-wf2-no-scroll-on-error') != 'true') + + if(el.style.display == 'none' || !el.offsetParent){ + while(el && (el.nodeType != 1 || (el.style.display == 'none' || !el.offsetParent))) + el = el.previousSibling; + var cur = el; + var top = 0; + if(cur && cur.offsetParent) { + top = cur.offsetTop; + while (cur = cur.offsetParent) + top += cur.offsetTop; + } + if (doScroll) { + scrollTo(0, top); + } + } + //focus on the first invalid control and make sure error message is visible + else { + + setTimeout( + function() { + el.focus(); + $wf2.fireEvent(el, 'focus'); + } + , 10) + + //NOTE: We should only do this if the control's style.bottom == 0 + if (doScroll) { + scrollBy(0, $wf2.invalidIndicators[0].errorMsg.offsetHeight); + } + } + } + + }, + + controlCheckValidity : function(){ + return $wf2.controlCheckValidityOfElement(this); + + }, + + controlCheckValidityOfElement: function (el) { + + + + $wf2.updateValidityState(el); + + if (el.validity.valid) { + + return true; + } + + var canceled = false; + + var evt; + try { + if(document.createEvent) + evt = document.createEvent('Events'); //document.createEvent("RepetitionEvent") + else if(document.createEventObject) + evt = document.createEventObject(); + evt.initEvent('invalid', true /*canBubble*/, true /*cancelable*/); + evt.srcElement = el; + if(el.dispatchEvent) + canceled = !el.dispatchEvent(evt); + else if(el.fireEvent){ + //console.warn("fireEvent('oninvalid') for MSIE is not yet working"); + //el.fireEvent('oninvalid', invalidEvt); + } + } + catch(err){ + evt = new Object(); + if(evt.initEvent) + evt.initEvent('invalid', true /*canBubble*/, true /*cancelable*/); + else { + evt.type = 'invalid'; + evt.cancelBubble = false; + } + evt.target = evt.srcElement = el; + } + + var oninvalidAttr = el.getAttribute('oninvalid'); + if(oninvalidAttr && (!el.oninvalid || typeof el.oninvalid != 'function')) //in MSIE, attribute == property + el.oninvalid = new Function('event', oninvalidAttr); + + try { + //Dispatch events for the old event model + if(el.oninvalid){ + //canceled = el.oninvalid(evt) === false || canceled; + canceled = el.oninvalid.apply(el, [evt]) === false || canceled; //for some reason, exceptions cannot be caught if using the method above in MSIE + } + } + catch(err){ + //throw exception within setTimeout so that the current execution will not be aborted + setTimeout(function(){ + throw err; + }, 0); + } + + //Determine if this radio/checkbox already has an invalid indicator + var hasInvalidIndicator = false; + if(el.type == 'radio' || el.type == 'checkbox'){ + for(var i = 0; i < $wf2.invalidIndicators.length; i++){ + if(el.form[el.name][0] == $wf2.invalidIndicators[i].target){ + hasInvalidIndicator = true; + break; + } + } + } + + //Do default action + if(!canceled && !hasInvalidIndicator) //(!(el.form && el.form[el.name]) || !el.form[el.name].wf2HasInvalidIndicator) + $wf2.addInvalidIndicator(el); + return false; + }, + + //Frequently used regular expressions //W(?:0[1-9]|[1-4]\d|5[0-2])| + //monthRegExp : /^\d\d\d\d-(0\d|1[0-2])$/, + //weekRegExp : /^(\d\d\d\d)-W(0[1-9]|[1-4]\d|5[0-2])$/, + //timeRegExp : /^(0\d|1\d|2[0-4]):([0-5]\d)(:[0-5]\d(.\d+)?)?$/, + numberRegExp : /^-?\d+(.\d+)?(e-?\d+)?$/, + //numberOrAnyRegExp : /^(any|-?\d+(.\d+)?(e-?\d+)?)$/i, + urlRegExp : /^(\w+):(\/\/)?.+$/i, + emailRegExp : /^\S+@\S+$/i, + + //Zero points for datetime-related types (set in onDOMContentLoaded function) +// zeroPointDatetime : null, +// zeroPointDatetimeLocal : null, +// zeroPointDate : null, +// zeroPointMonth : null, +// zeroPointWeek : null, +// zeroPointTime : null, + + copyOf: function(obj) { + if (obj !== null && obj !== undefined) { + var r = new Object(); + for (i in obj) { + + try { + r[i] = obj[i]; + } + catch (ex) { + // do nothing; + } + } + + } else { + r = null; + } + + return r; + }, + + getOriginalAttrNode: function (node, attrName) { + var r; + + /* var dataSetItemName = attrName + 'AttrNode'; + + if ($wf2.getDatasetItem(node, dataSetItemName) == null) { + r = $wf2.copyOf(node.getAttributeNode(attrName)); + $wf2.setDatasetItem(node, dataSetItemName, r.value); + } else { + r = $wf2.getDatasetItem(node, dataSetItemName); + if (r == 'null') { + r = null; + } + } */ + + r = $wf2.copyOf(node.getAttributeNode(attrName)); + + return r; + }, + + //This function is called "live" + updateValidityState : function(node){ + //if(node.form && node.form[node.name] && node.form[node.name].wf2HasInvalidIndicator) + // return; + + var minAttrNode, maxAttrNode, valueAttrNode; + + minAttrNode = $wf2.getOriginalAttrNode(node, 'min'); + maxAttrNode = $wf2.getOriginalAttrNode(node, 'max'); + stepAttrNode = $wf2.getOriginalAttrNode(node, 'step'); + valueAttrNode = $wf2.getOriginalAttrNode(node, 'value'); + + node.min = undefined; //wf2Min + node.max = undefined; //wf2Max + node.step = undefined; //wf2Step + + + + node.validity = $wf2.createValidityState(); + node.validity.customError = !!node.validationMessage; + + //var type = node.type ? node.type.toLowerCase() : 'text'; + //var type = (node.type ? node.getAttribute('type').toLowerCase() : + // (node.nodeName.toLowerCase() == 'input' ? 'text' : '')); + var type = (node.getAttribute('type') ? node.getAttribute('type').toLowerCase() : node.type); + var isTimeRelated = (type == 'datetime' || type == 'datetime-local' || type == 'time'); //datetime, datetime-local, time + var isDateRelated = (type == 'date' || type == 'month' || type == 'week'); //date, month, week + var isNumberRelated = (type == 'number' || type == 'range'); //number, range + var isFileInput = (type == 'file'); + var doCheckPrecision = (isTimeRelated || isDateRelated || isNumberRelated); //datetime, datetime-local, time, date, month, week, number, range + var doMaxLengthCheck = doCheckPrecision || node.nodeName.toLowerCase() == 'textarea'; //datetime, datetime-local, time, date, month, week, number, range, textarea + var doCheckRange = (doCheckPrecision || isFileInput); //datetime, datetime-local, time, date, month, week, number, range, file + var isRadioOrCheckbox = (type == 'radio' || type == 'checkbox'); + var doRequiredCheck = (doMaxLengthCheck || //datetime, datetime-local, time, date, month, week, number, range, textarea + isFileInput || + type == 'email' || + type == 'url' || + type == 'text' || + type == 'password'|| + type == 'tel' || + isRadioOrCheckbox); + + //If a control has its type attribute changed to another type, then the user agent must reinterpret the min and + // max attributes. If an attribute has an invalid value according to the new type, then the appropriate + // default must be used (and not, e.g., the default appropriate for the previous type). Control values that + // no longer match the range allowed for the control must be handled as described in the error handling section. + //if(!node.wf2PreviousType) + // node.wf2PreviousType == type; + //else if(type != node.wf2PreviousType){ + // throw Error("Currently unable to change the type of a control."); //TODO + //} + + if(type == 'range'){ + //For this type...min defaults to 0...and value defaults to the min value. + node.min = (minAttrNode && $wf2.numberRegExp.test(minAttrNode.value)) ? Number(minAttrNode.value) : 0; + if((!valueAttrNode || !valueAttrNode.specified) && node.value === '' && !node.wf2ValueProvided){ //(!valueAttrNode || !valueAttrNode.specified) && + node.setAttribute('value', node.min); + node.value = node.min; + node.wf2ValueProvided = true; + } + return; + } + + if ($wf2.css.isMemberOfClass(node, 'html5-hasPlaceholderText')) { + node.wf2Value = ''; + } else { + node.wf2Value = node.value; + } + //console.log("changing:", node.value, ", " , node.wf2Value) + + //valueMissing -- The control has the required attribute set but it has not been satisfied. + //The required attribute applies to all form controls except controls with the type hidden, + // image inputs, buttons (submit, move-up, etc), and select and output elements. For + // disabled or readonly controls, the attribute has no effect. + var type = (node.getAttribute('type') ? node.getAttribute('type').toLowerCase() : node.type); + node.willValidate = !(/(hidden|button|reset|add|remove|move-up|move-down)/.test(type) || !node.name || node.disabled); + if(doRequiredCheck && node.willValidate){ + //For checkboxes, the required attribute shall only be satisfied when one or more of + // the checkboxes with that name in that form are checked. + //For radio buttons, the required attribute shall only be satisfied when exactly one of + // the radio buttons in that radio group is checked. + if(isRadioOrCheckbox){ + if(node.form && node.form[node.name]){ + var isRequired = false; + var hasChecked = false; + + var inputs = node.form[node.name]; + + /* + * remember: the above expression may return an array + * or a single value. Must check for this. + */ + if (inputs.length == undefined) { + if (inputs.getAttributeNode('required')) + isRequired = true; + if (inputs.checked) + hasChecked = true; + } else { + for (var i = 0; i < inputs.length; i++) { + if (inputs[i].getAttributeNode('required')) + isRequired = true; + if (inputs[i].checked) + hasChecked = true; + } + } + node.validity.valueMissing = (isRequired && !hasChecked); + } + } + //The required attribute applies to all form controls except controls with the type hidden, + // image inputs, buttons (submit, move-up, etc), and select and output elements. For + // disabled or readonly controls, the attribute has no effect. + else if(node.getAttributeNode('required')){ + //if(node.options) + // node.validity.valueMissing = (node.selectedIndex == -1); + //For other controls, any non-empty value shall satisfy the required condition, + // including a simple whitespace character. + //else + node.validity.valueMissing = (node.wf2Value == ''); + } + //if(node.options ? node.selectedIndex == -1 : node.value === '') + // node.validity.valueMissing = true; + // + } + if(!node.validity.valueMissing && node.wf2Value){ + //patternMismatch -- The value of the control with a pattern attribute doesn't match the pattern. + // If the control is empty, this flag must not be set. + //If the pattern attribute is present but empty, it doesn't match any value, and thus the + // patternMismatch flag shall be set whenever the control's value isn't empty. + var patternAttr = node.getAttributeNode('pattern'); + if(patternAttr){ + //the pattern attribute must match the entire value, not just any subset (somewhat as if + // it implied a ^(?: at the start of the pattern and a )$ at the end). + var rePattern = new RegExp("^(?:" + patternAttr.value + ")$"); + //The pattern must be compiled with the global, ignoreCase, and multiline flags disabled + rePattern.global = false; + rePattern.ignoreCase = false; + rePattern.multiline = false; + //When the pattern is not a valid regular expression, it is ignored for the purposes of + // validation, as if it wasn't specified. + if(rePattern) + node.validity.patternMismatch = !rePattern.test(node.wf2Value); + } + + //typeMismatch -- The data entered does not match the type of the control. For example, if the UA + // allows uninterpreted arbitrary text entry for month controls, and the user has entered SEP02, + // then this flag would be set. This code is also used when the selected file in a file upload + // control does not have an appropriate MIME type. If the control is empty, this flag must not be set. + if(isDateRelated || isTimeRelated) { + //node.validity.typeMismatch = ((node.value = $wf2.parseISO8601(node.wf2Value, type)) == null); + //node.wf2Value = node.value; + } else { + switch(type){ + case 'number': + case 'range': + node.validity.typeMismatch = !$wf2.numberRegExp.test(node.wf2Value); + // if(!node.validity.typeMismatch && node.getAttribute("step") != 'any'){ + // if(node.step == undefined) + // node.step = 1; + // var val = Number(node.value); + // node.validity.stepMismatch = (val == parseInt(val) && node.step != parseInt(node.step)); + // } + break; + case 'email': + //An e-mail address, following the format of the addr-spec token defined in RFC 2822 section + // 3.4.1 [RFC2822], but excluding the CFWS subtoken everywhere, and excluding the FWS + // subtoken everywhere except in the quoted-string subtoken. UAs could, for example, offer + // e-mail addresses from the user's address book. (See below for notes on IDN.) + //http://www.ietf.org/rfc/rfc2822 + node.validity.typeMismatch = !$wf2.emailRegExp.test(node.wf2Value); + break; + case 'url': + //An IRI, as defined by [RFC3987] (the IRI token, defined in RFC 3987 section 2.2). UAs could, + // for example, offer the user URIs from his bookmarks. (See below for notes on IDN.) The value + // is called url (as opposed to iri or uri) for consistency with CSS syntax and because it is + // generally felt authors are more familiar with the term "URL" than the other, more technically + // correct terms. + //http://www.ietf.org/rfc/rfc3987 + node.validity.typeMismatch = !$wf2.urlRegExp.test(node.wf2Value); + break; + } + } + + if(!node.validity.patternMismatch && !node.validity.typeMismatch){ + //To limit the range of values allowed by some of the above types, two new attributes are introduced, which + // apply to the date-related, time-related, numeric, and file upload types: min and max + + //rangeUnderflow -- The numeric, date, or time value of a control with a min attribute is lower than + // the minimum, or a file upload control has fewer files selected than the minimum. If the control + // is empty or if the typeMismatch flag is set, this flag must not be set. + //rangeOverflow -- The numeric, date, or time value of a control with a max attribute is higher than + // the maximum, or a file upload control has more files selected than the maximum. If the control + // is empty or if the typeMismatch flag is set, this flag must not be set. + if(doCheckRange){ + if(isNumberRelated){ + //For numeric types (number and range) the value must exactly match the number type (numberRegExp) + if(type == 'range'){ + //For this type...max defaults to 100 + node.max = (maxAttrNode && $wf2.numberRegExp.test(maxAttrNode.value)) ? Number(maxAttrNode.value) : 100; + //node.min is set at the beginning of this function so that the min value can be set as the default value + } + else { + if(minAttrNode && $wf2.numberRegExp.test(minAttrNode.value)) + node.min = Number(minAttrNode.value); + if(maxAttrNode && $wf2.numberRegExp.test(maxAttrNode.value)) + node.max = Number(maxAttrNode.value); + if(stepAttrNode && $wf2.numberRegExp.test(stepAttrNode.value)) + node.step = Number(stepAttrNode.value); + } + node.validity.rangeUnderflow = (node.min != undefined && Number(node.wf2Value) < node.min); + node.validity.rangeOverflow = (node.max != undefined && Number(node.wf2Value) > node.max); + node.validity.stepMismatch = !$wf2.isValidNumber(node); + //console.log('first: ', node.validity.stepMismatch, ',', node.getAttribute('type')) + } + //For file types it must be a sequence of digits 0-9, treated as a base ten integer. + else if(type == 'file'){ + if(minAttrNode && /^\d+$/.test(minAttrNode.value)) + node.min = Number(minAttrNode.value); + //If absent, or if the minimum value is not in exactly the expected format, there + // is no minimum restriction, except for the ... file types, where the default is zero. + else node.min = 0; + if(maxAttrNode && /^\d+$/.test(maxAttrNode.value)) + node.max = Number(maxAttrNode.value); + //If absent, or if the maximum value is not in exactly the expected format, there is no + // maximum restriction (beyond those intrinsic to the type), except for ... the file + // type, where the default is 1. + else node.max = 1; + + //node.validity.rangeUnderflow = (node.min != undefined && Number(node.value) < node.min); + //node.validity.rangeOverflow = (node.max != undefined && Number(node.value) > node.max); + } + //Date related + else { + //For date and time types it must match the relevant format mentioned for that type, all fields + // having the right number of digits, with the right separating punctuation. + if(minAttrNode){ + node.min = $wf2.parseISO8601(minAttrNode.value, type); + node.validity.rangeUnderflow = (node.min && node.wf2Value < node.min); + } + if(maxAttrNode){ + node.max = $wf2.parseISO8601(maxAttrNode.value, type); + node.validity.rangeOverflow = (node.max && node.wf2Value > node.max); + } + } + } + //The step attribute controls the precision allowed for the date-related, time-related, and numeric types. + + //Note: webforms2 as of March 6, 2012 does not support step for time related inputs. Will revisit later. + if(!(isDateRelated || isTimeRelated) && doCheckPrecision && !node.validity.rangeUnderflow && !node.validity.rangeOverflow){ + //stepMismatch -- The value is not one of the values allowed by the step attribute, and the UA will + // not be rounding the value for submission. Empty values and values that caused the typeMismatch + // flag to be set must not cause this flag to be set. + + var stepAttrNode = $wf2.getOriginalAttrNode(node, 'step'); //node.getAttributeNode('step'); + + if(!stepAttrNode){ + //The step attribute [for types datetime, datetime-local, and time] ... defaulting to 60 (one minute). + //For time controls, the value of the step attribute is in seconds, although it may be a fractional + // number as well to allow fractional times. The default value of the step + // attribute for datetime, datetime-local and time controls is 60 (one minute). + //The step [for type date] attribute specifies the precision in days, defaulting to 1. + //The step [for type month] attribute specifies the precision in months, defaulting to 1. + //The step [for type week] attribute specifies the precision in weeks, defaulting to 1. + //For date controls, the value of the step attribute is in days, weeks, or months, for the date, + // week, and month types respectively. The format is a non-negative integer; one or more digits + // 0-9 interpreted as base ten. If the step is zero, it is interpreted as the default. The default + // for the step attribute for these control types is 1. + //The step [for types number and range] attribute specifies the precision, defaulting to 1. + node.step = isTimeRelated ? 60 : 1; + } + //The literal value 'any' may be used as the value of the step attribute. This keyword indicates that + // any value may be used (within the bounds of other restrictions placed on the control). + else if(stepAttrNode.value == 'any') + node.step = 'any'; //isStepAny = true; + //The format of the step attribute is the number format described above, except that + // the value must be greater than zero. + else if($wf2.numberRegExp.test(stepAttrNode.value) && stepAttrNode.value > 0) + node.step = Number(stepAttrNode.value); + else + node.step = isTimeRelated ? 60 : 1; + + if(node.step != 'any'){ + node.wf2StepDatum = null; + if(minAttrNode) + node.wf2StepDatum = node.min; + else if(maxAttrNode) + node.wf2StepDatum = node.max; + else + node.wf2StepDatum = $wf2.zeroPoint[type] ? $wf2.zeroPoint[type] : 0; + + //The zero point for datetime controls is 1970-01-01T00:00:00.0Z, for datetime-local is + // 1970-01-01T00:00:00.0, for date controls is 1970-01-01, for month controls is 1970-01, + // for week controls is 1970-W01 (the week starting 1969-12-29 and containing 1970-01-01), + // and for time controls is 00:00. + var _step = node.step; + if(type == 'month' && node.wf2StepDatum && node.wf2StepDatum.getUTCFullYear){ + //var month1 = node.wf2StepDatum.getUTCFullYear()*12 + node.wf2StepDatum.getUTCMonth(); + //var month2 = node.wf2Value.getUTCFullYear()*12 + node.wf2Value.getUTCMonth(); + //node.validity.stepMismatch = (month2 - month1)%_step != 0; + } + else { + switch(type){ + case 'datetime': + case 'datetime-local': + case 'time': + _step = parseInt(_step * 1000); //for millisecond comparisons + break; + case 'date': + _step = parseInt(_step * 24*60*60*1000); + break; + case 'week': + _step = parseInt(_step * 7*24*60*60*1000); + break; + } + + //For the control to be valid, the control's value must be an integral number of steps from the min value, + // or, if there is no min attribute, the max value, or if there is neither attribute, from the zero point. + //allow decimal places to the 1,000th place + node.validity.stepMismatch = (Math.round((node.wf2Value - node.wf2StepDatum)*1000) % Math.round(_step*1000)) != 0; + } + } + } + } + + //[TEXTAREA] tooLong -- The value of a control with a maxlength attribute is longer than the attribute allows, + // and the value of the control doesn't exactly match the control's default value. + //[The maxlength] attribute must not affect the initial value (the DOM defaultValue attribute). It must only + // affect what the user may enter and whether a validity error is flagged during validation. + if(doMaxLengthCheck && node.maxLength >= 0 && node.wf2Value != node.defaultValue){ + //A newline in a textarea's value must count as two code points for maxlength processing (because + // newlines in textareas are submitted as U+000D U+000A). [[NOT IMPLEMENTED: This includes the + // implied newlines that are added for submission when the wrap attribute has the value hard.]] + //var matches = node.value.match(/((? node.maxLength; + } + } else { + if(minAttrNode && $wf2.numberRegExp.test(minAttrNode.value)) + node.min = Number(minAttrNode.value); + if(maxAttrNode && $wf2.numberRegExp.test(maxAttrNode.value)) + node.max = Number(maxAttrNode.value); + if(stepAttrNode && $wf2.numberRegExp.test(stepAttrNode.value)) + node.step = Number(stepAttrNode.value); + } + + //customError -- The control was marked invalid from script. See the definition of the setCustomValiditiy() method. + //console.log('second: ', node.validity.stepMismatch) + node.validity.valid = !$wf2.hasInvalidState(node.validity); + if (node.validity.valid) { + $wf2.css.removeClass(node, 'wf2_invalid'); + $wf2.css.addClass(node, 'wf2_valid'); + //node.className = node.className.replace(/\s?wf2_invalid/g, "") + ' wf2_valid'; + //console.log('valid: ', node.className) + } else { + $wf2.css.removeClass(node, 'wf2_valid'); + $wf2.css.addClass(node, 'wf2_invalid'); + //node.className = node.className.replace(/\s?wf2_valid/g, "") + ' wf2_invalid'; + //console.log('not valid: ', node.className, 'value:', node.value, 'wtfValue:', node.wf2Value) + } + //This is now done onmousedown or onkeydown, just as Opera does + //if(node.validity.valid){ + // node.className = node.className.replace(/\s*\binvalid\b\s*/g, " "); //substitute for :invalid pseudo class + // //if(node.wf2_errorMsg){ + // // node.wf2_errorMsg.parentNode.removeChild(node.wf2_errorMsg); + // // node.wf2_errorMsg = null; + // //} + // var errMsg = document.getElementById((node.id || node.name) + '_wf2_errorMsg'); + // if(errMsg) + // errMsg.parentNode.removeChild(errMsg); + //} + }, + + // checks to see if a number node has a value that is valid. + isValidNumber: function (node) { + //console.log(node.wf2Value + ", " + node.min + ", " + node.max + ", " + node.step); + var n = (parseFloat(node.wf2Value) - parseFloat(node.min))/parseFloat(node.step); + //console.log('!' , n == parseInt(n)) + return (n == parseInt(n)); + }, + + applyValidityInterface : function(node){ + + /* Webkit browsers need this */ + if ($wf2.hasBadImplementation) { + + if (node.type == 'submit' || node.type == 'button') { + + node.formNoValidate=true; + + } + } + + /* ZOLTAN made a change here to ensure Google's unfinished native implementation is not used. */ + else if((node.validity && node.validity.typeMismatch !== undefined)) {//MSIE needs the second test for some reason + // console.log('bad implementation!! ' + node.id); + + return node; + } + node.validationMessage = ""; + + //ValidityState interface + node.validity = $wf2.createValidityState(); + node.willValidate = true; + + var nodeName = node.nodeName.toLowerCase(); + if(nodeName == 'button' || nodeName == 'fieldset'){ + node.setCustomValidity = function(error){ + throw $wf2.DOMException(9); //NOT_SUPPORTED_ERR + }; + node.checkValidity = function(){ + return true; + }; + return node; + } + //node._updateValidityState = $wf2._updateValidityState; + + if (!node.setCustomValidity) { + node.setCustomValidity = $wf2.controlSetCustomValidity; + } + + + node.checkValidity = $wf2.controlCheckValidity; + + + //var type = (node.type ? node.type.toLowerCase() : (nodeName == 'input' ? 'text' : '')); + var type = (node.getAttribute('type') ? node.getAttribute('type').toLowerCase() : node.type); + + if(/(hidden|button|reset|add|remove|move-up|move-down)/.test(type) || !node.name || node.disabled) + node.willValidate = false; + else if(window.RepetitionElement) { + var parent = node; + while(parent = parent.parentNode){ + if(parent.repetitionType == RepetitionElement.REPETITION_TEMPLATE){ + node.willValidate = false; + break; + } + } + } + + + /* ZOLTAN: validity */ + var handler = function(event){ + return $wf2.updateValidityState(event.currentTarget || event.srcElement); + }; + + //attempt to check validity live + if(document.addEventListener){ + node.addEventListener('change', handler, false); + node.addEventListener('blur', handler, false); + node.addEventListener('keyup', handler, false); + } + else if(window.attachEvent){ + node.attachEvent('onchange', handler); + node.attachEvent('onblur', handler); + node.attachEvent('onkeyup', handler); + } + else { + + } + + return node; + }, + + /* updateValidityState: function (node) { + if (node.checkValidity()){ + node.className = node.className.replace(/\s?wf2_invalid/, ""); + } else { + node.className += ' wf2_invalid'; + } + }, */ + + onsubmitValidityHandler : function(event){ + var frm = event.currentTarget || event.srcElement; + var r; + + // call routines other libraries have set to be run before + // validation. + for (var i=0; i<$wf2.callBeforeValidation.length; i++) { + $wf2.callBeforeValidation[i](event); + } + + /* ZOLTAN */ + if(!frm.checkValidity()){ + if(event.preventDefault) + event.preventDefault(); + event.returnValue = false; + r = false; + } else { + event.returnValue = true; + r = true; + } + + // call routines other libraries have set to be run before + // validation. + for (var i=0; i<$wf2.callAfterValidation.length; i++) { + $wf2.callAfterValidation[i](event, r); + } + + + + return r; + }, + + controlSetCustomValidity : function(error){ + if(error){ + this.validationMessage = String(error); + this.validity.customError = true; + } + else { + this.validationMessage = ""; + this.validity.customError = false; + } + this.validity.valid = !$wf2.hasInvalidState(this.validity); + }, + hasInvalidState : function(validity){ + return validity.typeMismatch + || validity.rangeUnderflow + || validity.rangeOverflow + || validity.stepMismatch + || validity.tooLong + || validity.patternMismatch + || validity.valueMissing + || validity.customError; + }, + createValidityState : function(){ + return { + typeMismatch : false, + rangeUnderflow : false, + rangeOverflow : false, + stepMismatch : false, + tooLong : false, + patternMismatch : false, + valueMissing : false, + customError : false, + valid : true + }; + }, + + //## Default action functions for invalid events ################################################## + + invalidIndicators : [], + indicatorTimeoutId : null, + indicatorIntervalId : null, + + stepUnits : { + 'datetime' : 'second', + 'datetime-local': 'second', + 'time': 'second', + 'date': 'day', + 'week': 'week', + 'month': 'month' + }, + + invalidMessages : { + valueMissing : 'Please fill out this field.', + typeMismatch : 'Please enter a valid %s.', + rangeUnderflow : 'The value must be equal to or greater than %s.', + rangeOverflow : 'The value must be equal to or less than %s.', + stepMismatch : 'The value has a step mismatch; it must be a certain number multiples of %s from %s.', + tooLong : 'The value is too long. The field may have a maximum of %s characters but you supplied %s. Note that each line-break counts as two characters.', + patternMismatch: 'Please match the requested format.' + }, + + valueToWF2Type : function(value, type){ + switch(String(type).toLowerCase()){ + case 'datetime': + case 'datetime-local': + case 'date': + case 'month': + case 'week': + case 'time': + return $wf2.dateToISO8601(value, type); + default: + return value; + } + }, + + addInvalidIndicator : function(target){ + //show contextual help message + var msg = document.createElement('div'); + msg.className = 'wf2_errorMsg'; + + /* Let's put in a container in here so IE9- can put a gradient filter in here. */ + var msgContainer = document.createElement('div'); + msgContainer.className = 'wf2_errorMsgContainer'; + msg.appendChild(msgContainer); + + + //msg.title = "Close"; + msg.id = (target.id || target.name) + '_wf2_errorMsg'; //QUESTION: does this work for MSIE? + msg.onmousedown = function(){ + this.parentNode.removeChild(this); + }; + //var type = String(target.getAttribute('type')).toLowerCase(); + //var type = (target.type ? target.type.toLowerCase() : (target.nodeName.toLowerCase() == 'input' ? 'text' : '')); + var type = (target.getAttribute('type') ? target.getAttribute('type').toLowerCase() : target.type); + var isDateTimeRelated = (type == 'datetime' || type == 'datetime-local' || type == 'time' || type == 'date' || type == 'month' || type == 'week'); + + var ol = document.createElement('ol'); + if(target.validity.customError) { + ol.appendChild($wf2.createLI(target.validationMessage)); + } else { + if(target.validity.valueMissing) + ol.appendChild($wf2.createLI($wf2.invalidMessages.valueMissing)); + if(target.validity.typeMismatch) + ol.appendChild($wf2.createLI($wf2.invalidMessages.typeMismatch.replace(/%s/, type))); + if(target.validity.rangeUnderflow) + ol.appendChild($wf2.createLI($wf2.invalidMessages.rangeUnderflow.replace(/%s/, $wf2.valueToWF2Type(target.min, type)))); + if(target.validity.rangeOverflow) + ol.appendChild($wf2.createLI($wf2.invalidMessages.rangeOverflow.replace(/%s/, $wf2.valueToWF2Type(target.max, type)))); + if(target.validity.stepMismatch) + ol.appendChild($wf2.createLI($wf2.invalidMessages.stepMismatch.replace(/%s/, target.step + ($wf2.stepUnits[type] ? ' ' + $wf2.stepUnits[type] + '(s)' : '')).replace(/%s/, $wf2.valueToWF2Type(target.wf2StepDatum, type)))); + if(target.validity.tooLong) + ol.appendChild($wf2.createLI($wf2.invalidMessages.tooLong.replace(/%s/, target.maxLength).replace(/%s/, target.wf2ValueLength ? target.wf2ValueLength : target.value.length))); + if(target.validity.patternMismatch) + ol.appendChild($wf2.createLI($wf2.invalidMessages.patternMismatch.replace(/%s/, target.title ? target.title : ' "' + target.getAttribute('pattern') + '"'))); + } + + if(ol.childNodes.length == 1) + ol.className = 'single'; + + msgContainer.appendChild(ol); + ////remove existing error message + //if(document.getElementById(msg.id)) + // document.documentElement.removeChild(document.getElementById(msg.id)); + //target.parentNode.insertBefore(msg, target); //Inserting error message next to element in question causes problems when the element has a positioned containing block + var parent = document.body ? document.body : document.documentElement; + if($wf2.invalidIndicators.length) //insert before other error messages so that it appears on top + parent.insertBefore(msg, $wf2.invalidIndicators[$wf2.invalidIndicators.length-1].errorMsg); + else //insert at the end of the document + parent.insertBefore(msg, null); + //target.wf2_errorMsg = msg; + //if(target.style.display == 'none' || !target.offsetParent){ + // var prevEl = target.previousSibling; + // var nextEl = target.nextSibling; + // var prevCount = 0, nextCount = 0; + // while(prevEl && (prevEl.nodeType != 1 || (prevEl.style.display == 'none' || !prevEl.offsetParent)) && ++prevCount) + // prevEl = prevEl.previousSibling; + // while(nextEl && (nextEl.nodeType != 1 || (nextEl.style.display == 'none' || !nextEl.offsetParent)) && ++nextCount) + // nextEl = nextEl.nextSibling; + // + // if(prevEl && prevCount > nextCount) + // + //} + var el = target; + while(el && (el.nodeType != 1 || (el.style.display == 'none' || el.style.visibility == 'hidden' || !el.offsetParent))) + el = el.parentNode; + + var top = left = 0; + var cur = el; + if(cur && cur.offsetParent){ + left = cur.offsetLeft; + top = cur.offsetTop; + while(cur = cur.offsetParent){ + left += cur.offsetLeft; + top += cur.offsetTop; + } + top += el.offsetHeight; + } + msg.style.top = top + 'px'; + msg.style.left = left + 'px'; + + $wf2.invalidIndicators.push({ + target : target, + errorMsg : msg + }); + //if(target.form && target.form[target.name]){ + // target.form[target.name].wf2HasInvalidIndicator = true; + // console.info('set') + //} + /* if(!target.className.match(/\bwf2_invalid\b/)) + target.className += " wf2_invalid"; */ + $wf2.css.addClass(target, 'wf2_invalid'); + + if($wf2.indicatorIntervalId == null){ + //var i = $wf2.invalidIndicators.length - 1; + $wf2.indicatorIntervalId = setInterval(function(){ + var invalidIndicator; + for(var i = 0; invalidIndicator = $wf2.invalidIndicators[i]; i++){ + + if (!$wf2.css.isMemberOfClass(invalidIndicator.target, 'wf2_invalid')) { + $wf2.css.addClass(invalidIndicator.target, 'wf2_invalid') + } else { + $wf2.css.removeClass(invalidIndicator.target, 'wf2_invalid'); + } + + + /* + if(!invalidIndicator.target.className.match(/\bwf2_invalid\b/)){ + invalidIndicator.target.className += " wf2_invalid"; + } + else { + invalidIndicator.target.className = invalidIndicator.target.className.replace(/\s?wf2_invalid/, ""); + } */ + } + + }, 500); + return; + // call routines other libraries have set to be run before + // validation. + setTimeout(function() { + for (var i=0; i<$wf2.callAfterValidation.length; i++) { + $wf2.callAfterValidation[i](null, false); + } + }, 1); + $wf2.indicatorTimeoutId = setTimeout($wf2.clearInvalidIndicators, 4000); + } + + }, + + clearInvalidIndicators : function(){ + clearTimeout($wf2.indicatorTimeoutId); + $wf2.indicatorTimeoutId = null; + clearInterval($wf2.indicatorIntervalId); + $wf2.indicatorIntervalId = null; + + var invalidIndicator; + while(invalidIndicator = $wf2.invalidIndicators[0]){ + if(invalidIndicator.errorMsg && invalidIndicator.errorMsg.parentNode) + invalidIndicator.errorMsg.parentNode.removeChild(invalidIndicator.errorMsg); + //clearInterval(insts[0].intervalId); + var target = invalidIndicator.target; + + // Removed by ZOLTAN. + // target.className = target.className.replace(/\s?wf2_invalid/, ""); //([^\b]\s)? + $wf2.invalidIndicators.shift(); + } + + }, + + /*############################################################################################## + # Other helper functions (not made into methods) + ##############################################################################################*/ + + cloneNode_customAttrs : { //FOR MSIE BUG: it cannot perceive the attributes that were actually specified + 'type':1,'template':1,'repeat':1,'repeat-template':1,'repeat-min':1, + 'repeat-max':1,'repeat-start':1,'value':1,'class':1,'required':1, + 'pattern':1,'form':1,'autocomplete':1,'autofocus':1,'inputmode':1, + 'max':1,'min':1,'step':1, + onmoved:1,onadded:1,onremoved:1, + onadd:1,onremove:1,onmove:1 //deprecated + }, + cloneNode_skippedAttrs : { + 'name':1, //due to MSIE bug, set via $wf2.createElement + 'class':1, //due to MSIE bug, set below (see http://www.alistapart.com/articles/jslogging) + 'for':1, //due to preceived MSIE bug, set below + 'style':1, //inline styles require special handling + 'checked':1, //set by $wf2.createElement due to MSIE bug creating INPUT@type=radio + + //for MSIE, properties (or methods) == attributes + addRepetitionBlock:1,addRepetitionBlockByIndex:1,moveRepetitionBlock:1, + removeRepetitionBlock:1, repetitionBlocks:1, + setCustomValidity:1,checkValidity:1,validity:1,validationMessage:1,willValidate:1, + wf2StepDatum:1,wf2Value:1,wf2Initialized:1,wf2ValueLength:1 + }, + cloneNode_rtEventHandlerAttrs : { + onmoved:1,onadded:1,onremoved:1, //don't copy Repetition old model event attributes not methods + onadd:1,onremove:1,onmove:1 //deprecated + //QUESTION: is this right??? + }, + + //The following cloneNode algorithm was designed to handle the attribute processing that the repetition + // model specifies. Gecko starts to have irratic behavior with a cloned input's value attribute and value + // property when using DOM cloneNode; furthermore, various MSIE bugs prevent its use of DOM cloneNode + cloneNode : function (node, processAttr, rtNestedDepth){ + if(!rtNestedDepth) + rtNestedDepth = 0; + var clone, i, attr; + switch(node.nodeType){ + case 1: /*Node.ELEMENT_NODE*/ + //if(node.nodeType == 1 /*Node.ELEMENT_NODE*/){ + var isTemplate = node.getAttribute('repeat') == 'template'; + if(isTemplate) + rtNestedDepth++; + //BROWSER BUGS: MSIE does not allow the setting of the node.name, except when creating the new node + // MSIE neither permits the standard DOM creation of radio buttons + var attrs = []; + if(node.name) + attrs.name = processAttr ? processAttr(node.name) : node.name; + if(node.type == 'radio') + attrs.type = node.type; + if(node.checked) + attrs.checked = 'checked'; + clone = $wf2.createElement(node.nodeName, attrs); + //clone = node.name ? + // $wf2.createElement(node.nodeName, attrs) + // : document.createElement(node.nodeName); + + for(i = 0; attr = node.attributes[i]; i++){ + + //MSIE ISSUE: Custom attributes specified do not have .specified property set to true? + //ISSUE: VALUE IS REPEATED IN MSIE WHEN VALUE ATTRIBUTE SET? + //if(attr.specified || node.getAttribute(attr.nodeName)) //$wf2.cloneNode_customAttrs[attr.nodeName] || + // if(window.console && console.info) console.info(node.nodeName + "@" + attr.nodeName + " -- " + attr.specified + " " + node.getAttribute(attr.nodeName) + "(" + typeof node.getAttribute(attr.nodeName) + ")
    "); + + //MSIE needs $wf2.cloneNode_customAttrs[attr.name] test since attr.specified does not work with custom attributes + //If the node is a template, the repetition event handlers should only be copied + // if the template is nested and is being cloned by a parent repetition template. + if((attr.specified || $wf2.cloneNode_customAttrs[attr.name]) + && !$wf2.cloneNode_skippedAttrs[attr.name] && ( + (!isTemplate || (rtNestedDepth > 1 || !$wf2.cloneNode_rtEventHandlerAttrs[attr.name])) // && + )) + { + + //MSIE BUG: when button[type=add|remove|move-up|move-down], then (attr.nodeValue and attr.value == 'button') but node.getAttribute(attr.nodeName) == 'add|remove|move-up|move-down' (as desired) + + //clone and process an event handler property (attribute); + // keep event handler attributes as plain text if nested repetition template + if(rtNestedDepth < 2 && (attr.name.indexOf('on') === 0) && (typeof node[attr.name] == 'function')){ + var funcBody = processAttr(node[attr.name].toString().match(/{((?:.|\n)+)}/)[1]); + funcBody = processAttr(funcBody); + clone[attr.name] = new Function('event', funcBody); + } + //clone and process other attributes + else { + var attrValue = node.getAttribute(attr.name); + attrValue = (processAttr ? processAttr(attrValue) : attrValue); + clone.setAttribute(attr.name, attrValue); + } + //console.log(StringHelpers.sprintf("AFTER attr: %s val: %s (%s)", attr.name, attr.value, processAttr(attrValue))) + } + } + //MSIE BUG: setAttribute('class') creates duplicate value attribute in MSIE; + //QUESTION: will setting className on this clonedNode still cause this error later on for users? will addClassName croak? Should it be improved? + //see: http://www.alistapart.com/articles/jslogging + if(node.className){ + var _className = (processAttr ? processAttr(node.className) : node.className); + if(clone.getAttributeNode('class')){ + for(i = 0; i < clone.attributes.length; i++) { + if(clone.attributes[i].name == 'class') + clone.attributes[i].value = _className; + } + } + else clone.setAttribute('class', _className); + } + + //Restore the template's elements to the originally coded disabled state (indicated by 'disabled' class name) + // All elements within the repetition template are disabled to prevent them from being successful. + if(!/\bdisabled\b/.test(node.className)) + clone.disabled = false; + + //Process the inline style + if(node.style && node.style.cssText){ + //clone.setAttribute('style', processAttr(node.style.cssText)); + clone.style.cssText = (processAttr ? processAttr(node.style.cssText) : node.style.cssText); + } + + //label's 'for' attribute, set here due to MSIE bug + if(node.nodeName && node.nodeName.toLowerCase() == 'label' && node.htmlFor) + clone.htmlFor = (processAttr ? processAttr(node.htmlFor) : node.htmlFor); + + + if(clone.nodeName.toLowerCase() == 'option'){ //MSIE clone element bug requires this + clone.selected = node.selected; + clone.defaultSelected = node.defaultSelected; + } + + for(i = 0; i < node.childNodes.length; i++){ + clone.appendChild($wf2.cloneNode(node.childNodes[i], processAttr, rtNestedDepth)); + } + break; + //MSIE BUG: The following three cases are for MSIE because when cloning nodes from XML + // files loaded via SELECT@data attribute, MSIE fails when performing appendChild. + case 3: /*Node.TEXT_NODE*/ + case 4: /*Node.CDATA_SECTION_NODE*/ + clone = document.createTextNode(node.data); + break; + case 8: /*Node.COMMENT_NODE*/ + clone = document.createComment(node.data); + break; + default: + clone = node.cloneNode(true) + } + //else clone = node.cloneNode(true); + return clone; + }, + + getFormElements : function(){ + var elements = []; + var allElements = $wf2.getElementsByTagNames.apply(this, ['input','output','select','textarea','button']); //fieldset + for(var i = 0; i < allElements.length; i++){ + var node = allElements[i].parentNode; + while(node && node.nodeType == 1 && node.getAttribute('repeat') != 'template') + node = node.parentNode; + if(!node || node.nodeType != 1) + elements.push(allElements[i]); + } + return elements; + }, + + loadDataURI : function(el){ + var uri = el.data || el.getAttribute('data'); + if(!uri) + return null; + var doc = null, matches; + try { + if(matches = uri.match(/^data:[^,]*xml[^,]*,((?:.|\n)+)/)){ + var xml = decodeURI(matches[1].replace(/%3D/ig, '=').replace(/%3A/ig, ':').replace(/%2F/ig, '/')); + if(window.DOMParser){ + var parser = new DOMParser(); + doc = parser.parseFromString(xml, 'text/xml'); + } + else if(window.ActiveXObject){ + doc = new ActiveXObject("Microsoft.XMLDOM"); + doc.async = 'false'; + doc.loadXML(xml); + } + } + else { + $wf2.xhr.open('GET', uri, false); + $wf2.xhr.send(null); //Note: if in Firefox and null not provided, and if Firebug is disabled, an error occurs + doc = $wf2.xhr.responseXML; + } + } + catch(e){ + return null; + } + return doc; + }, + + getAttributeByName: function (obj, attrName) { + var i; + + var attributes = obj.attributes; + for (i=0; i + if(el.currentStyle) + return el.currentStyle[property]; + else if(window.getComputedStyle) + return getComputedStyle(el, '').getPropertyValue(property); + else if(el.style) + return el.style[property]; + else return ''; + }, + + //createElement code based on Anthony Lieuallen's work + // The following function enables MSIE to create elements with the name attribute set, per MSDN: + // The NAME attribute cannot be set at run time on elements dynamically created with the + // createElement method. To create an element with a name attribute, include the attribute + // and value when using the createElement method. + // The same goes for creating radio buttons and creating defaultly checked checkboxes, + // per + createElement : (function(){ + try { + var el = document.createElement('
    '); //MSIE memory leak according to Drip + if(el.tagName.toLowerCase() != 'div' || el.name != 'foo') + throw 'create element error'; + + return function(tag, attrs){ + var html = '<' + tag; + for(var name in attrs) + html += ' ' + name + '="' + attrs[name] + '"'; + html += '>'; + if(tag.toLowerCase() != 'input') + html += ''; + return document.createElement(html); //'<'+tag+' name="'+name+'">' + }; + } + catch(err){ + return function(tag, attrs){ + var el = document.createElement(tag); + for(var name in attrs) + el.setAttribute(name, attrs[name]); + return el; + }; + } + })(), + + //Sort elements in document order (from ppk) + sortNodes : (function(){ + var n = document.documentElement.firstChild; + if(n.sourceIndex){ + return function (a,b){ + return a.sourceIndex - b.sourceIndex; + }; + } + else if(n.compareDocumentPosition){ + return function (a,b){ + return 3 - (a.compareDocumentPosition(b) & 6); + }; + } + })(), + + //Shortcut to create new list items; used by default invalid event handler in listing the errors + createLI : function(text){ + var li = document.createElement('li'); + li.appendChild(document.createTextNode(text)); + return li; + }, + + //Initially inspired by Paul Sowden + ISO8601RegExp : /^(?:(\d\d\d\d)-(W(0[1-9]|[1-4]\d|5[0-2])|(0\d|1[0-2])(-(0\d|[1-2]\d|3[0-1])(T(0\d|1\d|2[0-4]):([0-5]\d)(:([0-5]\d)(\.(\d+))?)?(Z)?)?)?)|(0\d|1\d|2[0-4]):([0-5]\d)(:([0-5]\d)(\.(\d+))?)?)$/, + parseISO8601 : function (str, type) { + var d = $wf2.validateDateTimeType(str, type); + if(!d) + return null; + + var date = new Date(0); + var _timePos = 8; + + if(d[15]){ //Time + if(type && type != 'time') // a time date + return null; + _timePos = 15; + } + else { + date.setUTCFullYear(d[1]); + + //ISO8601 Week + if(d[3]){ + if(type && type != 'week') + return null; + date.setUTCDate(date.getUTCDate() + ((8 - date.getUTCDay()) % 7) + (d[3]-1)*7); //set week day and week + return date; + } + //Other date-related types + else { + date.setUTCMonth(d[4] - 1); //Month must be supplied for WF2 + if(d[6]) + date.setUTCDate(d[6]); + } + } + + //Set time-related fields + if(d[_timePos+0]) date.setUTCHours(d[_timePos+0]); + if(d[_timePos+1]) date.setUTCMinutes(d[_timePos+1]); + if(d[_timePos+2]) date.setUTCSeconds(d[_timePos+3]); + if(d[_timePos+4]) date.setUTCMilliseconds(Math.round(Number(d[_timePos+4]) * 1000)); + + //Set to local time if date given, hours present and no 'Z' provided + if(d[4] && d[_timePos+0] && !d[_timePos+6]) + date.setUTCMinutes(date.getUTCMinutes()+date.getTimezoneOffset()); + + return date; + }, + + validateDateTimeType : function(value, type){ //returns RegExp matches + var isValid = false; + var d = $wf2.ISO8601RegExp.exec(value); //var d = string.match(new RegExp(regexp)); + if(!d || !type) + return d; + type = type.toLowerCase(); + + if(type == 'week') // a week date + isValid = (d[2].toString().indexOf('W') === 0); //valid if W present + else if(type == 'time') // a time date + isValid = !!d[15]; + else if(type == 'month') + isValid = !d[5]; + else { //a date related value + //Verify that the number of days in the month are valid + if(d[6]){ + var date = new Date(d[1], d[4]-1, d[6]); + if(date.getMonth() != d[4]-1) + isValid = false; + else switch(type){ + case 'date': + isValid = (d[4] && !d[7]); //valid if day of month supplied and time field not present + break; + case 'datetime': + isValid = !!d[14]; //valid if Z present + break; + case 'datetime-local': + isValid = (d[7] && !d[14]); //valid if time present and Z not provided + break; + } + } + } + return isValid ? d : null; + }, + + zeroPad : function(num, pad){ + if(!pad) + pad = 2; + var str = num.toString(); + while(str.length < pad) + str = '0' + str; + return str; + }, + + dateToISO8601 : function(date, type){ + type = String(type).toLowerCase(); + var ms = ''; + if(date.getUTCMilliseconds()) + ms = '.' + $wf2.zeroPad(date.getUTCMilliseconds(), 3).replace(/0+$/,''); + switch(type){ + case 'date': + return date.getUTCFullYear() + '-' + $wf2.zeroPad(date.getUTCMonth()+1) + '-' + $wf2.zeroPad(date.getUTCDate()); + case 'datetime-local': + return date.getFullYear() + '-' + $wf2.zeroPad(date.getMonth()+1) + '-' + $wf2.zeroPad(date.getDate()) + + 'T' + $wf2.zeroPad(date.getHours()) + ':' + $wf2.zeroPad(date.getMinutes()) + ':' + $wf2.zeroPad(date.getMinutes()) + ms + 'Z'; + case 'month': + return date.getUTCFullYear() + '-' + $wf2.zeroPad(date.getUTCMonth()+1); + case 'week': + var week1 = $wf2.parseISO8601(date.getUTCFullYear() + '-W01'); + return date.getUTCFullYear() + '-W' + $wf2.zeroPad(((date.valueOf() - week1.valueOf()) / (7*24*60*60*1000)) + 1); + case 'time': + return $wf2.zeroPad(date.getUTCHours()) + ':' + $wf2.zeroPad(date.getUTCMinutes()) + ':' + $wf2.zeroPad(date.getUTCMinutes()) + ms; + case 'datetime': + default: + return date.getUTCFullYear() + '-' + $wf2.zeroPad(date.getUTCMonth()+1) + '-' + $wf2.zeroPad(date.getUTCDate()) + + 'T' + $wf2.zeroPad(date.getUTCHours()) + ':' + $wf2.zeroPad(date.getUTCMinutes()) + ':' + $wf2.zeroPad(date.getUTCMinutes()) + ms + 'Z'; + } + }, + + /* + * Fires an event manually. + * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events + * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/ + * @param {Object} obj - a javascript object. + * @param {String} evType - an event attached to the object. + * @param {Function} fn - the function that is called when the event fires. + * + */ + fireEvent: function (element, event, options){ + + if(!element) { + return; + } + + if (document.createEventObject){ + return element.fireEvent('on' + event, $wf2.globalEvent); + } else{ + // dispatch for firefox + others + $wf2.globalEvent.initEvent(event, true, true); // event type,bubbling,cancelable + return !element.dispatchEvent($wf2.globalEvent); + } + }, + + //Emulation of DOMException + DOMException : function(code){ + var message = 'DOMException: '; + switch(code){ + case 1: message += 'INDEX_SIZE_ERR'; break; + case 9: message += 'NOT_SUPPORTED_ERR'; break; + case 11: message += 'INVALID_STATE_ERR'; break; + case 12: message += 'SYNTAX_ERR'; break; + case 13: message += 'INVALID_MODIFICATION_ERR'; break; + } + + var err = new Error(message); + err.code = code; + err.name = 'DOMException'; + + //Provide error codes and messages for the exception types that are raised by WF2 + err.INDEX_SIZE_ERR = 1; + err.NOT_SUPPORTED_ERR = 9; + err.INVALID_STATE_ERR = 11; + err.SYNTAX_ERR = 12; + err.INVALID_MODIFICATION_ERR = 13; + + //with($wf2.DOMException.prototype){ + // INDEX_SIZE_ERR = 1; + // DOMSTRING_SIZE_ERR = 2; + // HIERARCHY_REQUEST_ERR = 3; + // WRONG_DOCUMENT_ERR = 4; + // INVALID_CHARACTER_ERR = 5; + // NO_DATA_ALLOWED_ERR = 6; + // NO_MODIFICATION_ALLOWED_ERR = 7; + // NOT_FOUND_ERR = 8; + // NOT_SUPPORTED_ERR = 9; + // INUSE_ATTRIBUTE_ERR = 10; + // INVALID_STATE_ERR = 11; + // SYNTAX_ERR = 12; + // INVALID_MODIFICATION_ERR = 13; + // NAMESPACE_ERR = 14; + // INVALID_ACCESS_ERR = 15; + //}; + + return err; + }, + + css: new function () { + var me = this; + + var blankRe = new RegExp('\\s'); + + /** + * Generates a regular expression string that can be used to detect a class name + * in a tag's class attribute. It is used by a few methods, so I + * centralized it. + * + * @param {String} className - a name of a CSS class. + */ + + function getClassReString(className) { + return '\\s'+className+'\\s|^' + className + '\\s|\\s' + className + '$|' + '^' + className +'$'; + } + + function getClassPrefixReString(className) { + return '\\s'+className+'-[0-9a-zA-Z_]+\\s|^' + className + '[0-9a-zA-Z_]+\\s|\\s' + className + '[0-9a-zA-Z_]+$|' + '^' + className +'[0-9a-zA-Z_]+$'; + } + + + /** + * Make an HTML object be a member of a certain class. + * + * @param {Object} obj - an HTML object + * @param {String} className - a CSS class name. + */ + me.addClass = function (obj, className) { + + if (blankRe.test(className)) { + return; + } + + // only add class if the object is not a member of it yet. + if (!me.isMemberOfClass(obj, className)) { + obj.className += " " + className; + } + + } + + /** + * Make an HTML object *not* be a member of a certain class. + * + * @param {Object} obj - an HTML object + * @param {Object} className - a CSS class name. + */ + me.removeClass = function (obj, className) { + + if (blankRe.test(className)) { + return; + } + + + var re = new RegExp(getClassReString(className) , "g"); + + var oldClassName = obj.className; + + + if (obj.className) { + obj.className = oldClassName.replace(re, ' '); + } + + + } + + /** + * Determines if an HTML object is a member of a specific class. + * @param {Object} obj - an HTML object. + * @param {Object} className - the CSS class name. + */ + me.isMemberOfClass = function (obj, className) { + + if (blankRe.test(className)) + return false; + + var re = new RegExp(getClassReString(className) , "g"); + + return (re.test(obj.className)); + + + } + } +}; //End $wf2 = { + + +/*############################################################################################## + # Section: Repetition Model Definitions + ##############################################################################################*/ + +var RepetitionElement = { + REPETITION_NONE:0, + REPETITION_TEMPLATE:1, + REPETITION_BLOCK:2 +}; + +var RepetitionEvent = { + //the following takes a UIEvent and adds the required properties for a RepetitionEvent + _upgradeEvent : function(){ + this.initRepetitionEvent = RepetitionEvent.initRepetitionEvent; + this.initRepetitionEventNS = RepetitionEvent.initRepetitionEventNS; + }, + initRepetitionEvent : function(typeArg, canBubbleArg, cancelableArg, elementArg){ + if(this.initEvent) + this.initEvent(typeArg, canBubbleArg, cancelableArg); + else { //manually initialize event (i.e., for MSIE) + this.type = typeArg; + // switch(typeArg.toLowerCase()){ + // case 'added': + // this.type = 'add'; + // break; + // case 'removed': + // this.type = 'remove'; + // break; + // case 'moved': + // this.type = 'move'; + // break; + // } + //this.srcElement = elementArg.repetitionTemplate; + //this.cancelBubble = false; + //this.cancelable = cancelableArg; + //this.returnValue = false; + + if(!this.preventDefault) + this.preventDefault = function(){ + this.returnValue = false; + }; + if(!this.stopPropagation) + this.stopPropagation = function(){ + this.cancelBubble = true; + }; + } + this.element = elementArg; + this.relatedNode = elementArg; //for Opera (deprecated?) + }, + initRepetitionEventNS : function(namespaceURIArg, typeArg, canBubbleArg, cancelableArg, elementArg){ + throw Error("NOT IMPLEMENTED: RepetitionEvent.initRepetitionEventNS"); + //this.initEvent(namespaceURIArg, typeArg, canBubbleArg, cancelableArg); + //this.element = elementArg; + //this.relatedNode = elementArg; //for Opera (deprecated?) + } +}; + +/*############################################################################################## + # Change the prototypes of HTML elements + ##############################################################################################*/ + +//RepetitionElement interface must be implemented by all elements. +if(window.Element && Element.prototype){ + Element.prototype.REPETITION_NONE = RepetitionElement.REPETITION_NONE; + Element.prototype.REPETITION_TEMPLATE = RepetitionElement.REPETITION_TEMPLATE; + Element.prototype.REPETITION_BLOCK = RepetitionElement.REPETITION_BLOCK; + + Element.prototype.repetitionType = RepetitionElement.REPETITION_NONE; + Element.prototype.repetitionIndex = 0; + Element.prototype.repetitionTemplate = null; /*readonly*/ + Element.prototype.repetitionBlocks = null; /*readonly*/ + + Element.prototype.repeatStart = 1; + Element.prototype.repeatMin = 0; + Element.prototype.repeatMax = Number.MAX_VALUE; //Infinity; + + Element.prototype.addRepetitionBlock = $wf2.addRepetitionBlock; + Element.prototype.addRepetitionBlockByIndex = $wf2.addRepetitionBlockByIndex; + Element.prototype.moveRepetitionBlock = $wf2.moveRepetitionBlock; + Element.prototype.removeRepetitionBlock = $wf2.removeRepetitionBlock; +} + +/*############################################################################################## + # Set mutation event handlers to automatically add WF2 behaviors + ##############################################################################################*/ + +//When a form control is inserted into a document, the UA must check to see if it has [the autofocus] +// attribute set. If it does, and the control is not disabled, and it is of a type normally +// focusable in the user's operating environment, then the UA should focus the control, as if +// the control's focus() method was invoked. UAs with a viewport should also scroll the document +// enough to make the control visible, even if it is not of a type normally focusable. +//REVISE: there should be one handler for all attr events on the page. +if(document.addEventListener){ + document.addEventListener('DOMNodeInsertedIntoDocument', function(evt){ //DOMNodeInserted? DOMNodeInsertedIntoDocument + if(evt.target.nodeType == 1 && evt.target.hasAttribute('autofocus')){ + $wf2.initAutofocusElement(evt.target); + } + //[[UAs may ignore this attribute if the user has indicated (for example, by starting to type in a + // form control) that he does not wish focus to be changed.]] + }, false); + + //NOT CURRENTLY IMPLEMENTABLE: + // Setting the DOM attribute to true must set the content attribute to the value autofocus. + // Setting the DOM attribute to false must remove the content attribute. + + document.addEventListener('DOMAttrModified', function(evt){ + //The autofocus DOM attribute must return true when the content attribute is present (regardless + // of its value, even if it is the empty string), and false when it is absent. + if(evt.attrName == 'autofocus'){ + if(evt.attrChange == evt.ADDITION) + //evt.relatedNode.autofocus = true; + $wf2.initAutofocusElement(evt.target); + else if(evt.attrChange == evt.REMOVAL) + evt.target.autofocus = false; + } + }, false); +} + +/*################################################################################## + # Execute WF2 code onDOMContentLoaded + # Some of the following code was borrowed from Dean Edwards, John Resig, et al + ##################################################################################*/ + +(function(){ +//Get the path to the library base directory +var match; +//For some reason, if not using documentElement, scriptaculous fails to load if reference to +// webforms2 script placed beforehand in Firefox +var scripts = document.documentElement.getElementsByTagName('script'); +for(var i = 0; i < scripts.length; i++){ + if(match = scripts[i].src.match(/^(.*)webforms2[^\/]+$/)) + $wf2.libpath = match[1]; +} + +//The script has been included after the DOM has loaded (perhaps via Greasemonkey), so fire immediately +//NOTE: This does not work with XHTML documents in Gecko +if(document.body){ + $wf2.onDOMContentLoaded(); + return; +} + +var eventSet = 0; +if(document.addEventListener){ + //for Gecko and Opera + document.addEventListener('DOMContentLoaded', function(){ + $wf2.onDOMContentLoaded(); + }, false); + + //for other browsers which do not support DOMContentLoaded use the following as a fallback to be called hopefully before all other onload handlers + window.addEventListener('load', function(){ + $wf2.onDOMContentLoaded(); + }, false); + + eventSet = 1; +} + +//for Safari +if (/WebKit/i.test(navigator.userAgent)) { //sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + clearInterval(_timer); + delete _timer; + $wf2.onDOMContentLoaded(); + } + }, 10); + eventSet = 1; +} +//for Internet Explorer (formerly using conditional comments) //sniff +else if(/MSIE/i.test(navigator.userAgent) && !document.addEventListener && window.attachEvent){ + //This following attached onload handler will attempt to be the first onload handler to be called and thus + // initiate the repetition model as early as possible if the DOMContentLoaded substitute fails. + window.attachEvent('onload', function(){ + $wf2.onDOMContentLoaded(); + }); + + //Dean Edward's first solution: http://dean.edwards.name/weblog/2005/09/busted/ + //document.getElementsByTagName('*')[0].addBehavior(dirname + 'repetition-model.htc'); //use this if Behaviors are employed in 0.9 + document.write(" + + + +//$.webshims.polyfill('forms-ext'); + {% endblock %}

    jscalendar-1.0 +"It is happening again"