From a1ded1f981cbbd1beff0125c29dd110a69561d23 Mon Sep 17 00:00:00 2001 From: Thomas Davis Date: Thu, 1 May 2014 04:30:42 -0400 Subject: [PATCH] Updated packages via auto-update.js --- temp/autosize.js/1.17.2/dist.tar.gz | Bin 6876 -> 0 bytes .../1.17.2/package/autosize.jquery.json | 28 - temp/autosize.js/1.17.2/package/bower.json | 29 - temp/autosize.js/1.17.2/package/demo.html | 36 - .../1.17.2/package/jquery.autosize-min.js | 7 - .../1.17.2/package/jquery.autosize.js | 242 -- temp/autosize.js/1.17.2/package/package.json | 27 - temp/autosize.js/1.17.2/package/readme.md | 139 -- temp/idbwrapper/0.1.0/dist.tar.gz | Bin 35365 -> 0 bytes temp/idbwrapper/0.1.0/package/.npmignore | 2 - temp/idbwrapper/0.1.0/package/IDBStore.js | 464 ---- temp/idbwrapper/0.1.0/package/LICENSE | 19 - temp/idbwrapper/0.1.0/package/README.md | 313 --- .../0.1.0/package/example/basic/app.js | 94 - .../0.1.0/package/example/basic/index.html | 31 - .../0.1.0/package/example/basic/style.css | 86 - .../0.1.0/package/example/index.html | 22 - .../0.1.0/package/example/index/app.js | 163 -- .../0.1.0/package/example/index/index.html | 63 - .../0.1.0/package/example/index/style.css | 89 - .../package/example/lib/requirejs/require.js | 2013 ----------------- .../0.1.0/package/example/objectstore/app.js | 93 - .../package/example/objectstore/index.html | 57 - .../package/example/objectstore/style.css | 93 - .../package/example/quicktest/index.html | 105 - .../0.1.0/package/example/quicktest/style.css | 94 - .../0.1.0/package/example/style.css | 87 - temp/idbwrapper/0.1.0/package/package.json | 28 - temp/idbwrapper/0.1.1/dist.tar.gz | Bin 35353 -> 0 bytes temp/idbwrapper/0.1.1/package/.npmignore | 2 - temp/idbwrapper/0.1.1/package/IDBStore.js | 464 ---- temp/idbwrapper/0.1.1/package/LICENSE | 19 - temp/idbwrapper/0.1.1/package/README.md | 313 --- .../0.1.1/package/example/basic/app.js | 94 - .../0.1.1/package/example/basic/index.html | 31 - .../0.1.1/package/example/basic/style.css | 86 - .../0.1.1/package/example/index.html | 22 - .../0.1.1/package/example/index/app.js | 163 -- .../0.1.1/package/example/index/index.html | 63 - .../0.1.1/package/example/index/style.css | 89 - .../package/example/lib/requirejs/require.js | 2013 ----------------- .../0.1.1/package/example/objectstore/app.js | 93 - .../package/example/objectstore/index.html | 57 - .../package/example/objectstore/style.css | 93 - .../package/example/quicktest/index.html | 105 - .../0.1.1/package/example/quicktest/style.css | 94 - .../0.1.1/package/example/style.css | 87 - temp/idbwrapper/0.1.1/package/package.json | 24 - temp/idbwrapper/0.1.2/dist.tar.gz | Bin 35342 -> 0 bytes temp/idbwrapper/0.1.2/package/.npmignore | 2 - temp/idbwrapper/0.1.2/package/IDBStore.js | 463 ---- temp/idbwrapper/0.1.2/package/LICENSE | 19 - temp/idbwrapper/0.1.2/package/README.md | 313 --- .../0.1.2/package/example/basic/app.js | 94 - .../0.1.2/package/example/basic/index.html | 31 - .../0.1.2/package/example/basic/style.css | 86 - .../0.1.2/package/example/index.html | 22 - .../0.1.2/package/example/index/app.js | 163 -- .../0.1.2/package/example/index/index.html | 63 - .../0.1.2/package/example/index/style.css | 89 - .../package/example/lib/requirejs/require.js | 2013 ----------------- .../0.1.2/package/example/objectstore/app.js | 93 - .../package/example/objectstore/index.html | 57 - .../package/example/objectstore/style.css | 93 - .../package/example/quicktest/index.html | 105 - .../0.1.2/package/example/quicktest/style.css | 94 - .../0.1.2/package/example/style.css | 87 - temp/idbwrapper/0.1.2/package/package.json | 24 - temp/idbwrapper/0.1.3/dist.tar.gz | Bin 35355 -> 0 bytes temp/idbwrapper/0.1.3/package/.npmignore | 2 - temp/idbwrapper/0.1.3/package/IDBStore.js | 464 ---- temp/idbwrapper/0.1.3/package/LICENSE | 19 - temp/idbwrapper/0.1.3/package/README.md | 313 --- .../0.1.3/package/example/basic/app.js | 94 - .../0.1.3/package/example/basic/index.html | 31 - .../0.1.3/package/example/basic/style.css | 86 - .../0.1.3/package/example/index.html | 22 - .../0.1.3/package/example/index/app.js | 163 -- .../0.1.3/package/example/index/index.html | 63 - .../0.1.3/package/example/index/style.css | 89 - .../package/example/lib/requirejs/require.js | 2013 ----------------- .../0.1.3/package/example/objectstore/app.js | 93 - .../package/example/objectstore/index.html | 57 - .../package/example/objectstore/style.css | 93 - .../package/example/quicktest/index.html | 105 - .../0.1.3/package/example/quicktest/style.css | 94 - .../0.1.3/package/example/style.css | 87 - temp/idbwrapper/0.1.3/package/package.json | 24 - temp/idbwrapper/0.1.4/dist.tar.gz | Bin 35350 -> 0 bytes temp/idbwrapper/0.1.4/package/.npmignore | 2 - temp/idbwrapper/0.1.4/package/IDBStore.js | 464 ---- temp/idbwrapper/0.1.4/package/LICENSE | 19 - temp/idbwrapper/0.1.4/package/README.md | 313 --- .../0.1.4/package/example/basic/app.js | 94 - .../0.1.4/package/example/basic/index.html | 31 - .../0.1.4/package/example/basic/style.css | 86 - .../0.1.4/package/example/index.html | 22 - .../0.1.4/package/example/index/app.js | 163 -- .../0.1.4/package/example/index/index.html | 63 - .../0.1.4/package/example/index/style.css | 89 - .../package/example/lib/requirejs/require.js | 2013 ----------------- .../0.1.4/package/example/objectstore/app.js | 93 - .../package/example/objectstore/index.html | 57 - .../package/example/objectstore/style.css | 93 - .../package/example/quicktest/index.html | 105 - .../0.1.4/package/example/quicktest/style.css | 94 - .../0.1.4/package/example/style.css | 87 - temp/idbwrapper/0.1.4/package/package.json | 24 - temp/idbwrapper/0.2.1/dist.tar.gz | Bin 40960 -> 0 bytes temp/idbwrapper/0.2.1/package/.gitignore | 0 .../0.2.1/package/.idea/IDBWrapper.iml | 9 - .../0.2.1/package/.idea/encodings.xml | 5 - temp/idbwrapper/0.2.1/package/.idea/misc.xml | 8 - .../0.2.1/package/.idea/modules.xml | 9 - .../package/.idea/scopes/scope_settings.xml | 5 - temp/idbwrapper/0.2.1/package/.idea/vcs.xml | 7 - .../0.2.1/package/.idea/workspace.xml | 466 ---- temp/idbwrapper/0.2.1/package/CHANGELOG | 14 - temp/idbwrapper/0.2.1/package/IDBStore.js | 457 ---- temp/idbwrapper/0.2.1/package/LICENSE | 19 - temp/idbwrapper/0.2.1/package/README.md | 319 --- .../0.2.1/package/example/basic/app.js | 94 - .../0.2.1/package/example/basic/index.html | 31 - .../0.2.1/package/example/basic/style.css | 86 - .../0.2.1/package/example/index.html | 22 - .../0.2.1/package/example/index/app.js | 163 -- .../0.2.1/package/example/index/index.html | 63 - .../0.2.1/package/example/index/style.css | 89 - .../package/example/lib/requirejs/require.js | 2013 ----------------- .../0.2.1/package/example/objectstore/app.js | 93 - .../package/example/objectstore/index.html | 57 - .../package/example/objectstore/style.css | 93 - .../package/example/quicktest/index.html | 105 - .../0.2.1/package/example/quicktest/style.css | 94 - .../0.2.1/package/example/style.css | 87 - temp/idbwrapper/0.2.1/package/package.json | 30 - temp/idbwrapper/0.3.0/dist.tar.gz | Bin 40960 -> 0 bytes temp/idbwrapper/0.3.0/package/.gitignore | 0 .../0.3.0/package/.idea/IDBWrapper.iml | 9 - .../0.3.0/package/.idea/encodings.xml | 5 - .../package/.idea/libraries/sass_stdlib.xml | 8 - temp/idbwrapper/0.3.0/package/.idea/misc.xml | 8 - .../0.3.0/package/.idea/modules.xml | 9 - .../package/.idea/scopes/scope_settings.xml | 5 - temp/idbwrapper/0.3.0/package/.idea/vcs.xml | 7 - .../0.3.0/package/.idea/workspace.xml | 451 ---- temp/idbwrapper/0.3.0/package/CHANGELOG | 24 - temp/idbwrapper/0.3.0/package/IDBStore.js | 519 ----- temp/idbwrapper/0.3.0/package/LICENSE | 19 - temp/idbwrapper/0.3.0/package/README.md | 358 --- .../0.3.0/package/example/basic/app.js | 94 - .../0.3.0/package/example/basic/index.html | 31 - .../0.3.0/package/example/basic/style.css | 86 - .../0.3.0/package/example/index.html | 22 - .../0.3.0/package/example/index/app.js | 163 -- .../0.3.0/package/example/index/index.html | 63 - .../0.3.0/package/example/index/style.css | 89 - .../package/example/lib/requirejs/require.js | 2013 ----------------- .../0.3.0/package/example/objectstore/app.js | 93 - .../package/example/objectstore/index.html | 57 - .../package/example/objectstore/style.css | 93 - .../package/example/quicktest/index.html | 126 -- .../0.3.0/package/example/quicktest/style.css | 94 - .../0.3.0/package/example/style.css | 87 - temp/idbwrapper/0.3.0/package/package.json | 30 - temp/loglevel/0.1.0/dist.tar.gz | Bin 12226 -> 0 bytes temp/loglevel/0.1.0/package/.jshintrc | 15 - temp/loglevel/0.1.0/package/.npmignore | 21 - temp/loglevel/0.1.0/package/.travis.yml | 3 - temp/loglevel/0.1.0/package/Gruntfile.js | 141 -- temp/loglevel/0.1.0/package/LICENSE-MIT | 22 - temp/loglevel/0.1.0/package/README.md | 78 - temp/loglevel/0.1.0/package/lib/.jshintrc | 18 - temp/loglevel/0.1.0/package/lib/loglevel.js | 98 - temp/loglevel/0.1.0/package/package.json | 47 - temp/loglevel/0.1.0/package/test/.jshintrc | 31 - .../0.1.0/package/test/basic-usage-test.js | 43 - .../package/test/console-fallback-test.js | 72 - .../0.1.0/package/test/level-setting-test.js | 240 -- .../0.1.0/package/test/vendor/json2.js | 486 ---- temp/numeral.js/1.0.1/dist.tar.gz | Bin 5863 -> 0 bytes temp/numeral.js/1.0.1/package/LICENSE | 22 - temp/numeral.js/1.0.1/package/README.md | 40 - .../1.0.1/package/examples/example.html | 247 -- .../1.0.1/package/min/numeral-min.js | 6 - temp/numeral.js/1.0.1/package/numeral.js | 284 --- temp/numeral.js/1.0.1/package/package.json | 40 - temp/numeral.js/1.0.2/dist.tar.gz | Bin 6091 -> 0 bytes temp/numeral.js/1.0.2/package/LICENSE | 22 - temp/numeral.js/1.0.2/package/README.md | 44 - .../1.0.2/package/examples/example.html | 288 --- .../1.0.2/package/min/numeral-min.js | 6 - temp/numeral.js/1.0.2/package/numeral.js | 293 --- temp/numeral.js/1.0.2/package/package.json | 40 - temp/numeral.js/1.0.3/dist.tar.gz | Bin 6353 -> 0 bytes temp/numeral.js/1.0.3/package/LICENSE | 22 - temp/numeral.js/1.0.3/package/README.md | 48 - .../1.0.3/package/examples/example.html | 297 --- .../1.0.3/package/min/numeral-min.js | 6 - temp/numeral.js/1.0.3/package/numeral.js | 304 --- temp/numeral.js/1.0.3/package/package.json | 40 - temp/numeral.js/1.0.4/dist.tar.gz | Bin 6375 -> 0 bytes temp/numeral.js/1.0.4/package/LICENSE | 22 - temp/numeral.js/1.0.4/package/README.md | 52 - .../1.0.4/package/examples/example.html | 282 --- .../1.0.4/package/min/numeral-min.js | 6 - temp/numeral.js/1.0.4/package/numeral.js | 304 --- temp/numeral.js/1.0.4/package/package.json | 40 - temp/numeral.js/1.1.0/dist.tar.gz | Bin 7991 -> 0 bytes temp/numeral.js/1.1.0/package/LICENSE | 22 - temp/numeral.js/1.1.0/package/README.md | 57 - .../1.1.0/package/examples/example.html | 284 --- .../1.1.0/package/min/numeral-min.js | 6 - temp/numeral.js/1.1.0/package/numeral.js | 310 --- temp/numeral.js/1.1.0/package/package.json | 40 - temp/numeral.js/1.1.0/package/tests/test.html | 509 ----- temp/numeral.js/1.2.1/dist.tar.gz | Bin 8203 -> 0 bytes temp/numeral.js/1.2.1/package/LICENSE | 22 - temp/numeral.js/1.2.1/package/README.md | 68 - temp/numeral.js/1.2.1/package/languages/fr.js | 30 - .../1.2.1/package/min/numeral-min.js | 6 - temp/numeral.js/1.2.1/package/numeral.js | 361 --- temp/numeral.js/1.2.1/package/package.json | 40 - .../1.2.1/package/tests/languages/en.js | 77 - .../1.2.1/package/tests/languages/fr.js | 77 - .../package/tests/languages/min/en-min.js | 1 - .../package/tests/languages/min/fr-min.js | 1 - temp/numeral.js/1.2.1/package/tests/test.html | 288 --- temp/numeral.js/1.2.2/dist.tar.gz | Bin 8009 -> 0 bytes temp/numeral.js/1.2.2/package/LICENSE | 22 - temp/numeral.js/1.2.2/package/README.md | 72 - .../1.2.2/package/languages/en-gb.js | 34 - temp/numeral.js/1.2.2/package/languages/fr.js | 30 - .../1.2.2/package/languages/min/en-gb-min.js | 4 - .../1.2.2/package/languages/min/fr-min.js | 4 - .../1.2.2/package/min/numeral-min.js | 6 - temp/numeral.js/1.2.2/package/numeral.js | 361 --- temp/numeral.js/1.2.2/package/package.json | 40 - .../1.2.2/package/tests/languages/en-gb.js | 77 - .../1.2.2/package/tests/languages/en.js | 77 - .../1.2.2/package/tests/languages/fr.js | 77 - temp/numeral.js/1.2.2/package/tests/test.html | 290 --- temp/numeral.js/1.2.3/dist.tar.gz | Bin 8406 -> 0 bytes temp/numeral.js/1.2.3/package/LICENSE | 22 - temp/numeral.js/1.2.3/package/README.md | 76 - .../1.2.3/package/languages/en-gb.js | 34 - temp/numeral.js/1.2.3/package/languages/es.js | 35 - temp/numeral.js/1.2.3/package/languages/fr.js | 30 - .../1.2.3/package/languages/min/en-gb-min.js | 4 - .../1.2.3/package/languages/min/es-min.js | 4 - .../1.2.3/package/languages/min/fr-min.js | 4 - .../1.2.3/package/min/numeral-min.js | 6 - temp/numeral.js/1.2.3/package/numeral.js | 361 --- temp/numeral.js/1.2.3/package/package.json | 40 - .../1.2.3/package/tests/languages/en-gb.js | 77 - .../1.2.3/package/tests/languages/en.js | 77 - .../1.2.3/package/tests/languages/es.js | 77 - .../1.2.3/package/tests/languages/fr.js | 77 - temp/numeral.js/1.2.3/package/tests/test.html | 293 --- temp/numeral.js/1.2.5/dist.tar.gz | Bin 9732 -> 0 bytes temp/numeral.js/1.2.5/package/LICENSE | 22 - temp/numeral.js/1.2.5/package/README.md | 88 - .../1.2.5/package/languages/en-gb.js | 34 - temp/numeral.js/1.2.5/package/languages/es.js | 35 - temp/numeral.js/1.2.5/package/languages/fr.js | 30 - .../1.2.5/package/languages/min/en-gb-min.js | 4 - .../1.2.5/package/languages/min/es-min.js | 4 - .../1.2.5/package/languages/min/fr-min.js | 4 - .../1.2.5/package/languages/min/pt-pt-min.js | 4 - .../1.2.5/package/languages/pt-pt.js | 30 - .../1.2.5/package/min/numeral-min.js | 6 - temp/numeral.js/1.2.5/package/numeral.js | 437 ---- temp/numeral.js/1.2.5/package/package.json | 40 - .../1.2.5/package/tests/languages/en-gb.js | 77 - .../1.2.5/package/tests/languages/en.js | 77 - .../1.2.5/package/tests/languages/es.js | 77 - .../1.2.5/package/tests/languages/fr.js | 77 - .../1.2.5/package/tests/languages/pt-pt.js | 77 - temp/numeral.js/1.2.5/package/tests/test.html | 317 --- temp/numeral.js/1.3.1/dist.tar.gz | Bin 12496 -> 0 bytes temp/numeral.js/1.3.1/package/LICENSE | 22 - temp/numeral.js/1.3.1/package/README.md | 102 - temp/numeral.js/1.3.1/package/languages/cs.js | 30 - .../1.3.1/package/languages/de-de.js | 30 - .../1.3.1/package/languages/en-gb.js | 34 - temp/numeral.js/1.3.1/package/languages/es.js | 35 - temp/numeral.js/1.3.1/package/languages/fr.js | 30 - temp/numeral.js/1.3.1/package/languages/it.js | 30 - .../1.3.1/package/languages/min/cs-min.js | 4 - .../1.3.1/package/languages/min/de-de-min.js | 4 - .../1.3.1/package/languages/min/en-gb-min.js | 4 - .../1.3.1/package/languages/min/es-min.js | 4 - .../1.3.1/package/languages/min/fr-min.js | 4 - .../1.3.1/package/languages/min/it-min.js | 4 - .../1.3.1/package/languages/min/pt-br-min.js | 4 - .../1.3.1/package/languages/min/pt-pt-min.js | 4 - .../1.3.1/package/languages/min/ru-min.js | 4 - .../1.3.1/package/languages/pt-br.js | 30 - .../1.3.1/package/languages/pt-pt.js | 30 - temp/numeral.js/1.3.1/package/languages/ru.js | 33 - .../1.3.1/package/min/numeral-min.js | 6 - temp/numeral.js/1.3.1/package/numeral.js | 476 ---- temp/numeral.js/1.3.1/package/package.json | 40 - .../1.3.1/package/tests/languages/cs.js | 78 - .../1.3.1/package/tests/languages/de-de.js | 77 - .../1.3.1/package/tests/languages/en-gb.js | 77 - .../1.3.1/package/tests/languages/en.js | 77 - .../1.3.1/package/tests/languages/es.js | 77 - .../1.3.1/package/tests/languages/fr.js | 77 - .../1.3.1/package/tests/languages/it.js | 77 - .../package/tests/languages/min/cs-min.js | 1 - .../package/tests/languages/min/fr-min.js | 1 - .../1.3.1/package/tests/languages/pt-br.js | 77 - .../1.3.1/package/tests/languages/pt-pt.js | 77 - .../1.3.1/package/tests/languages/ru.js | 78 - temp/numeral.js/1.3.1/package/tests/test.html | 331 --- temp/numeral.js/1.3.2/dist.tar.gz | Bin 12614 -> 0 bytes temp/numeral.js/1.3.2/package/LICENSE | 22 - temp/numeral.js/1.3.2/package/README.md | 106 - temp/numeral.js/1.3.2/package/numeral.js | Bin 7680 -> 0 bytes temp/numeral.js/1.3.2/package/package.json | 40 - 321 files changed, 41329 deletions(-) delete mode 100644 temp/autosize.js/1.17.2/dist.tar.gz delete mode 100644 temp/autosize.js/1.17.2/package/autosize.jquery.json delete mode 100644 temp/autosize.js/1.17.2/package/bower.json delete mode 100644 temp/autosize.js/1.17.2/package/demo.html delete mode 100644 temp/autosize.js/1.17.2/package/jquery.autosize-min.js delete mode 100644 temp/autosize.js/1.17.2/package/jquery.autosize.js delete mode 100644 temp/autosize.js/1.17.2/package/package.json delete mode 100644 temp/autosize.js/1.17.2/package/readme.md delete mode 100644 temp/idbwrapper/0.1.0/dist.tar.gz delete mode 100644 temp/idbwrapper/0.1.0/package/.npmignore delete mode 100644 temp/idbwrapper/0.1.0/package/IDBStore.js delete mode 100644 temp/idbwrapper/0.1.0/package/LICENSE delete mode 100644 temp/idbwrapper/0.1.0/package/README.md delete mode 100644 temp/idbwrapper/0.1.0/package/example/basic/app.js delete mode 100644 temp/idbwrapper/0.1.0/package/example/basic/index.html delete mode 100644 temp/idbwrapper/0.1.0/package/example/basic/style.css delete mode 100644 temp/idbwrapper/0.1.0/package/example/index.html delete mode 100644 temp/idbwrapper/0.1.0/package/example/index/app.js delete mode 100644 temp/idbwrapper/0.1.0/package/example/index/index.html delete mode 100644 temp/idbwrapper/0.1.0/package/example/index/style.css delete mode 100644 temp/idbwrapper/0.1.0/package/example/lib/requirejs/require.js delete mode 100644 temp/idbwrapper/0.1.0/package/example/objectstore/app.js delete mode 100644 temp/idbwrapper/0.1.0/package/example/objectstore/index.html delete mode 100644 temp/idbwrapper/0.1.0/package/example/objectstore/style.css delete mode 100644 temp/idbwrapper/0.1.0/package/example/quicktest/index.html delete mode 100644 temp/idbwrapper/0.1.0/package/example/quicktest/style.css delete mode 100644 temp/idbwrapper/0.1.0/package/example/style.css delete mode 100644 temp/idbwrapper/0.1.0/package/package.json delete mode 100644 temp/idbwrapper/0.1.1/dist.tar.gz delete mode 100644 temp/idbwrapper/0.1.1/package/.npmignore delete mode 100644 temp/idbwrapper/0.1.1/package/IDBStore.js delete mode 100644 temp/idbwrapper/0.1.1/package/LICENSE delete mode 100644 temp/idbwrapper/0.1.1/package/README.md delete mode 100644 temp/idbwrapper/0.1.1/package/example/basic/app.js delete mode 100644 temp/idbwrapper/0.1.1/package/example/basic/index.html delete mode 100644 temp/idbwrapper/0.1.1/package/example/basic/style.css delete mode 100644 temp/idbwrapper/0.1.1/package/example/index.html delete mode 100644 temp/idbwrapper/0.1.1/package/example/index/app.js delete mode 100644 temp/idbwrapper/0.1.1/package/example/index/index.html delete mode 100644 temp/idbwrapper/0.1.1/package/example/index/style.css delete mode 100644 temp/idbwrapper/0.1.1/package/example/lib/requirejs/require.js delete mode 100644 temp/idbwrapper/0.1.1/package/example/objectstore/app.js delete mode 100644 temp/idbwrapper/0.1.1/package/example/objectstore/index.html delete mode 100644 temp/idbwrapper/0.1.1/package/example/objectstore/style.css delete mode 100644 temp/idbwrapper/0.1.1/package/example/quicktest/index.html delete mode 100644 temp/idbwrapper/0.1.1/package/example/quicktest/style.css delete mode 100644 temp/idbwrapper/0.1.1/package/example/style.css delete mode 100644 temp/idbwrapper/0.1.1/package/package.json delete mode 100644 temp/idbwrapper/0.1.2/dist.tar.gz delete mode 100644 temp/idbwrapper/0.1.2/package/.npmignore delete mode 100644 temp/idbwrapper/0.1.2/package/IDBStore.js delete mode 100644 temp/idbwrapper/0.1.2/package/LICENSE delete mode 100644 temp/idbwrapper/0.1.2/package/README.md delete mode 100644 temp/idbwrapper/0.1.2/package/example/basic/app.js delete mode 100644 temp/idbwrapper/0.1.2/package/example/basic/index.html delete mode 100644 temp/idbwrapper/0.1.2/package/example/basic/style.css delete mode 100644 temp/idbwrapper/0.1.2/package/example/index.html delete mode 100644 temp/idbwrapper/0.1.2/package/example/index/app.js delete mode 100644 temp/idbwrapper/0.1.2/package/example/index/index.html delete mode 100644 temp/idbwrapper/0.1.2/package/example/index/style.css delete mode 100644 temp/idbwrapper/0.1.2/package/example/lib/requirejs/require.js delete mode 100644 temp/idbwrapper/0.1.2/package/example/objectstore/app.js delete mode 100644 temp/idbwrapper/0.1.2/package/example/objectstore/index.html delete mode 100644 temp/idbwrapper/0.1.2/package/example/objectstore/style.css delete mode 100644 temp/idbwrapper/0.1.2/package/example/quicktest/index.html delete mode 100644 temp/idbwrapper/0.1.2/package/example/quicktest/style.css delete mode 100644 temp/idbwrapper/0.1.2/package/example/style.css delete mode 100644 temp/idbwrapper/0.1.2/package/package.json delete mode 100644 temp/idbwrapper/0.1.3/dist.tar.gz delete mode 100644 temp/idbwrapper/0.1.3/package/.npmignore delete mode 100644 temp/idbwrapper/0.1.3/package/IDBStore.js delete mode 100644 temp/idbwrapper/0.1.3/package/LICENSE delete mode 100644 temp/idbwrapper/0.1.3/package/README.md delete mode 100644 temp/idbwrapper/0.1.3/package/example/basic/app.js delete mode 100644 temp/idbwrapper/0.1.3/package/example/basic/index.html delete mode 100644 temp/idbwrapper/0.1.3/package/example/basic/style.css delete mode 100644 temp/idbwrapper/0.1.3/package/example/index.html delete mode 100644 temp/idbwrapper/0.1.3/package/example/index/app.js delete mode 100644 temp/idbwrapper/0.1.3/package/example/index/index.html delete mode 100644 temp/idbwrapper/0.1.3/package/example/index/style.css delete mode 100644 temp/idbwrapper/0.1.3/package/example/lib/requirejs/require.js delete mode 100644 temp/idbwrapper/0.1.3/package/example/objectstore/app.js delete mode 100644 temp/idbwrapper/0.1.3/package/example/objectstore/index.html delete mode 100644 temp/idbwrapper/0.1.3/package/example/objectstore/style.css delete mode 100644 temp/idbwrapper/0.1.3/package/example/quicktest/index.html delete mode 100644 temp/idbwrapper/0.1.3/package/example/quicktest/style.css delete mode 100644 temp/idbwrapper/0.1.3/package/example/style.css delete mode 100644 temp/idbwrapper/0.1.3/package/package.json delete mode 100644 temp/idbwrapper/0.1.4/dist.tar.gz delete mode 100644 temp/idbwrapper/0.1.4/package/.npmignore delete mode 100644 temp/idbwrapper/0.1.4/package/IDBStore.js delete mode 100644 temp/idbwrapper/0.1.4/package/LICENSE delete mode 100644 temp/idbwrapper/0.1.4/package/README.md delete mode 100644 temp/idbwrapper/0.1.4/package/example/basic/app.js delete mode 100644 temp/idbwrapper/0.1.4/package/example/basic/index.html delete mode 100644 temp/idbwrapper/0.1.4/package/example/basic/style.css delete mode 100644 temp/idbwrapper/0.1.4/package/example/index.html delete mode 100644 temp/idbwrapper/0.1.4/package/example/index/app.js delete mode 100644 temp/idbwrapper/0.1.4/package/example/index/index.html delete mode 100644 temp/idbwrapper/0.1.4/package/example/index/style.css delete mode 100644 temp/idbwrapper/0.1.4/package/example/lib/requirejs/require.js delete mode 100644 temp/idbwrapper/0.1.4/package/example/objectstore/app.js delete mode 100644 temp/idbwrapper/0.1.4/package/example/objectstore/index.html delete mode 100644 temp/idbwrapper/0.1.4/package/example/objectstore/style.css delete mode 100644 temp/idbwrapper/0.1.4/package/example/quicktest/index.html delete mode 100644 temp/idbwrapper/0.1.4/package/example/quicktest/style.css delete mode 100644 temp/idbwrapper/0.1.4/package/example/style.css delete mode 100644 temp/idbwrapper/0.1.4/package/package.json delete mode 100644 temp/idbwrapper/0.2.1/dist.tar.gz delete mode 100644 temp/idbwrapper/0.2.1/package/.gitignore delete mode 100644 temp/idbwrapper/0.2.1/package/.idea/IDBWrapper.iml delete mode 100644 temp/idbwrapper/0.2.1/package/.idea/encodings.xml delete mode 100644 temp/idbwrapper/0.2.1/package/.idea/misc.xml delete mode 100644 temp/idbwrapper/0.2.1/package/.idea/modules.xml delete mode 100644 temp/idbwrapper/0.2.1/package/.idea/scopes/scope_settings.xml delete mode 100644 temp/idbwrapper/0.2.1/package/.idea/vcs.xml delete mode 100644 temp/idbwrapper/0.2.1/package/.idea/workspace.xml delete mode 100644 temp/idbwrapper/0.2.1/package/CHANGELOG delete mode 100644 temp/idbwrapper/0.2.1/package/IDBStore.js delete mode 100644 temp/idbwrapper/0.2.1/package/LICENSE delete mode 100644 temp/idbwrapper/0.2.1/package/README.md delete mode 100644 temp/idbwrapper/0.2.1/package/example/basic/app.js delete mode 100644 temp/idbwrapper/0.2.1/package/example/basic/index.html delete mode 100644 temp/idbwrapper/0.2.1/package/example/basic/style.css delete mode 100644 temp/idbwrapper/0.2.1/package/example/index.html delete mode 100644 temp/idbwrapper/0.2.1/package/example/index/app.js delete mode 100644 temp/idbwrapper/0.2.1/package/example/index/index.html delete mode 100644 temp/idbwrapper/0.2.1/package/example/index/style.css delete mode 100644 temp/idbwrapper/0.2.1/package/example/lib/requirejs/require.js delete mode 100644 temp/idbwrapper/0.2.1/package/example/objectstore/app.js delete mode 100644 temp/idbwrapper/0.2.1/package/example/objectstore/index.html delete mode 100644 temp/idbwrapper/0.2.1/package/example/objectstore/style.css delete mode 100644 temp/idbwrapper/0.2.1/package/example/quicktest/index.html delete mode 100644 temp/idbwrapper/0.2.1/package/example/quicktest/style.css delete mode 100644 temp/idbwrapper/0.2.1/package/example/style.css delete mode 100644 temp/idbwrapper/0.2.1/package/package.json delete mode 100644 temp/idbwrapper/0.3.0/dist.tar.gz delete mode 100644 temp/idbwrapper/0.3.0/package/.gitignore delete mode 100644 temp/idbwrapper/0.3.0/package/.idea/IDBWrapper.iml delete mode 100644 temp/idbwrapper/0.3.0/package/.idea/encodings.xml delete mode 100644 temp/idbwrapper/0.3.0/package/.idea/libraries/sass_stdlib.xml delete mode 100644 temp/idbwrapper/0.3.0/package/.idea/misc.xml delete mode 100644 temp/idbwrapper/0.3.0/package/.idea/modules.xml delete mode 100644 temp/idbwrapper/0.3.0/package/.idea/scopes/scope_settings.xml delete mode 100644 temp/idbwrapper/0.3.0/package/.idea/vcs.xml delete mode 100644 temp/idbwrapper/0.3.0/package/.idea/workspace.xml delete mode 100644 temp/idbwrapper/0.3.0/package/CHANGELOG delete mode 100644 temp/idbwrapper/0.3.0/package/IDBStore.js delete mode 100644 temp/idbwrapper/0.3.0/package/LICENSE delete mode 100644 temp/idbwrapper/0.3.0/package/README.md delete mode 100644 temp/idbwrapper/0.3.0/package/example/basic/app.js delete mode 100644 temp/idbwrapper/0.3.0/package/example/basic/index.html delete mode 100644 temp/idbwrapper/0.3.0/package/example/basic/style.css delete mode 100644 temp/idbwrapper/0.3.0/package/example/index.html delete mode 100644 temp/idbwrapper/0.3.0/package/example/index/app.js delete mode 100644 temp/idbwrapper/0.3.0/package/example/index/index.html delete mode 100644 temp/idbwrapper/0.3.0/package/example/index/style.css delete mode 100644 temp/idbwrapper/0.3.0/package/example/lib/requirejs/require.js delete mode 100644 temp/idbwrapper/0.3.0/package/example/objectstore/app.js delete mode 100644 temp/idbwrapper/0.3.0/package/example/objectstore/index.html delete mode 100644 temp/idbwrapper/0.3.0/package/example/objectstore/style.css delete mode 100644 temp/idbwrapper/0.3.0/package/example/quicktest/index.html delete mode 100644 temp/idbwrapper/0.3.0/package/example/quicktest/style.css delete mode 100644 temp/idbwrapper/0.3.0/package/example/style.css delete mode 100644 temp/idbwrapper/0.3.0/package/package.json delete mode 100644 temp/loglevel/0.1.0/dist.tar.gz delete mode 100644 temp/loglevel/0.1.0/package/.jshintrc delete mode 100644 temp/loglevel/0.1.0/package/.npmignore delete mode 100644 temp/loglevel/0.1.0/package/.travis.yml delete mode 100644 temp/loglevel/0.1.0/package/Gruntfile.js delete mode 100644 temp/loglevel/0.1.0/package/LICENSE-MIT delete mode 100644 temp/loglevel/0.1.0/package/README.md delete mode 100644 temp/loglevel/0.1.0/package/lib/.jshintrc delete mode 100644 temp/loglevel/0.1.0/package/lib/loglevel.js delete mode 100644 temp/loglevel/0.1.0/package/package.json delete mode 100644 temp/loglevel/0.1.0/package/test/.jshintrc delete mode 100644 temp/loglevel/0.1.0/package/test/basic-usage-test.js delete mode 100644 temp/loglevel/0.1.0/package/test/console-fallback-test.js delete mode 100644 temp/loglevel/0.1.0/package/test/level-setting-test.js delete mode 100644 temp/loglevel/0.1.0/package/test/vendor/json2.js delete mode 100644 temp/numeral.js/1.0.1/dist.tar.gz delete mode 100644 temp/numeral.js/1.0.1/package/LICENSE delete mode 100644 temp/numeral.js/1.0.1/package/README.md delete mode 100644 temp/numeral.js/1.0.1/package/examples/example.html delete mode 100644 temp/numeral.js/1.0.1/package/min/numeral-min.js delete mode 100644 temp/numeral.js/1.0.1/package/numeral.js delete mode 100644 temp/numeral.js/1.0.1/package/package.json delete mode 100644 temp/numeral.js/1.0.2/dist.tar.gz delete mode 100644 temp/numeral.js/1.0.2/package/LICENSE delete mode 100644 temp/numeral.js/1.0.2/package/README.md delete mode 100644 temp/numeral.js/1.0.2/package/examples/example.html delete mode 100644 temp/numeral.js/1.0.2/package/min/numeral-min.js delete mode 100644 temp/numeral.js/1.0.2/package/numeral.js delete mode 100644 temp/numeral.js/1.0.2/package/package.json delete mode 100644 temp/numeral.js/1.0.3/dist.tar.gz delete mode 100644 temp/numeral.js/1.0.3/package/LICENSE delete mode 100644 temp/numeral.js/1.0.3/package/README.md delete mode 100644 temp/numeral.js/1.0.3/package/examples/example.html delete mode 100644 temp/numeral.js/1.0.3/package/min/numeral-min.js delete mode 100644 temp/numeral.js/1.0.3/package/numeral.js delete mode 100644 temp/numeral.js/1.0.3/package/package.json delete mode 100644 temp/numeral.js/1.0.4/dist.tar.gz delete mode 100644 temp/numeral.js/1.0.4/package/LICENSE delete mode 100644 temp/numeral.js/1.0.4/package/README.md delete mode 100644 temp/numeral.js/1.0.4/package/examples/example.html delete mode 100644 temp/numeral.js/1.0.4/package/min/numeral-min.js delete mode 100644 temp/numeral.js/1.0.4/package/numeral.js delete mode 100644 temp/numeral.js/1.0.4/package/package.json delete mode 100644 temp/numeral.js/1.1.0/dist.tar.gz delete mode 100644 temp/numeral.js/1.1.0/package/LICENSE delete mode 100644 temp/numeral.js/1.1.0/package/README.md delete mode 100644 temp/numeral.js/1.1.0/package/examples/example.html delete mode 100644 temp/numeral.js/1.1.0/package/min/numeral-min.js delete mode 100644 temp/numeral.js/1.1.0/package/numeral.js delete mode 100644 temp/numeral.js/1.1.0/package/package.json delete mode 100644 temp/numeral.js/1.1.0/package/tests/test.html delete mode 100644 temp/numeral.js/1.2.1/dist.tar.gz delete mode 100644 temp/numeral.js/1.2.1/package/LICENSE delete mode 100644 temp/numeral.js/1.2.1/package/README.md delete mode 100644 temp/numeral.js/1.2.1/package/languages/fr.js delete mode 100644 temp/numeral.js/1.2.1/package/min/numeral-min.js delete mode 100644 temp/numeral.js/1.2.1/package/numeral.js delete mode 100644 temp/numeral.js/1.2.1/package/package.json delete mode 100644 temp/numeral.js/1.2.1/package/tests/languages/en.js delete mode 100644 temp/numeral.js/1.2.1/package/tests/languages/fr.js delete mode 100644 temp/numeral.js/1.2.1/package/tests/languages/min/en-min.js delete mode 100644 temp/numeral.js/1.2.1/package/tests/languages/min/fr-min.js delete mode 100644 temp/numeral.js/1.2.1/package/tests/test.html delete mode 100644 temp/numeral.js/1.2.2/dist.tar.gz delete mode 100644 temp/numeral.js/1.2.2/package/LICENSE delete mode 100644 temp/numeral.js/1.2.2/package/README.md delete mode 100644 temp/numeral.js/1.2.2/package/languages/en-gb.js delete mode 100644 temp/numeral.js/1.2.2/package/languages/fr.js delete mode 100644 temp/numeral.js/1.2.2/package/languages/min/en-gb-min.js delete mode 100644 temp/numeral.js/1.2.2/package/languages/min/fr-min.js delete mode 100644 temp/numeral.js/1.2.2/package/min/numeral-min.js delete mode 100644 temp/numeral.js/1.2.2/package/numeral.js delete mode 100644 temp/numeral.js/1.2.2/package/package.json delete mode 100644 temp/numeral.js/1.2.2/package/tests/languages/en-gb.js delete mode 100644 temp/numeral.js/1.2.2/package/tests/languages/en.js delete mode 100644 temp/numeral.js/1.2.2/package/tests/languages/fr.js delete mode 100644 temp/numeral.js/1.2.2/package/tests/test.html delete mode 100644 temp/numeral.js/1.2.3/dist.tar.gz delete mode 100644 temp/numeral.js/1.2.3/package/LICENSE delete mode 100644 temp/numeral.js/1.2.3/package/README.md delete mode 100644 temp/numeral.js/1.2.3/package/languages/en-gb.js delete mode 100644 temp/numeral.js/1.2.3/package/languages/es.js delete mode 100644 temp/numeral.js/1.2.3/package/languages/fr.js delete mode 100644 temp/numeral.js/1.2.3/package/languages/min/en-gb-min.js delete mode 100644 temp/numeral.js/1.2.3/package/languages/min/es-min.js delete mode 100644 temp/numeral.js/1.2.3/package/languages/min/fr-min.js delete mode 100644 temp/numeral.js/1.2.3/package/min/numeral-min.js delete mode 100644 temp/numeral.js/1.2.3/package/numeral.js delete mode 100644 temp/numeral.js/1.2.3/package/package.json delete mode 100644 temp/numeral.js/1.2.3/package/tests/languages/en-gb.js delete mode 100644 temp/numeral.js/1.2.3/package/tests/languages/en.js delete mode 100644 temp/numeral.js/1.2.3/package/tests/languages/es.js delete mode 100644 temp/numeral.js/1.2.3/package/tests/languages/fr.js delete mode 100644 temp/numeral.js/1.2.3/package/tests/test.html delete mode 100644 temp/numeral.js/1.2.5/dist.tar.gz delete mode 100644 temp/numeral.js/1.2.5/package/LICENSE delete mode 100644 temp/numeral.js/1.2.5/package/README.md delete mode 100644 temp/numeral.js/1.2.5/package/languages/en-gb.js delete mode 100644 temp/numeral.js/1.2.5/package/languages/es.js delete mode 100644 temp/numeral.js/1.2.5/package/languages/fr.js delete mode 100644 temp/numeral.js/1.2.5/package/languages/min/en-gb-min.js delete mode 100644 temp/numeral.js/1.2.5/package/languages/min/es-min.js delete mode 100644 temp/numeral.js/1.2.5/package/languages/min/fr-min.js delete mode 100644 temp/numeral.js/1.2.5/package/languages/min/pt-pt-min.js delete mode 100644 temp/numeral.js/1.2.5/package/languages/pt-pt.js delete mode 100644 temp/numeral.js/1.2.5/package/min/numeral-min.js delete mode 100644 temp/numeral.js/1.2.5/package/numeral.js delete mode 100644 temp/numeral.js/1.2.5/package/package.json delete mode 100644 temp/numeral.js/1.2.5/package/tests/languages/en-gb.js delete mode 100644 temp/numeral.js/1.2.5/package/tests/languages/en.js delete mode 100644 temp/numeral.js/1.2.5/package/tests/languages/es.js delete mode 100644 temp/numeral.js/1.2.5/package/tests/languages/fr.js delete mode 100644 temp/numeral.js/1.2.5/package/tests/languages/pt-pt.js delete mode 100644 temp/numeral.js/1.2.5/package/tests/test.html delete mode 100644 temp/numeral.js/1.3.1/dist.tar.gz delete mode 100644 temp/numeral.js/1.3.1/package/LICENSE delete mode 100644 temp/numeral.js/1.3.1/package/README.md delete mode 100644 temp/numeral.js/1.3.1/package/languages/cs.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/de-de.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/en-gb.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/es.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/fr.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/it.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/min/cs-min.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/min/de-de-min.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/min/en-gb-min.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/min/es-min.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/min/fr-min.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/min/it-min.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/min/pt-br-min.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/min/pt-pt-min.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/min/ru-min.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/pt-br.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/pt-pt.js delete mode 100644 temp/numeral.js/1.3.1/package/languages/ru.js delete mode 100644 temp/numeral.js/1.3.1/package/min/numeral-min.js delete mode 100644 temp/numeral.js/1.3.1/package/numeral.js delete mode 100644 temp/numeral.js/1.3.1/package/package.json delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/cs.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/de-de.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/en-gb.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/en.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/es.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/fr.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/it.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/min/cs-min.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/min/fr-min.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/pt-br.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/pt-pt.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/languages/ru.js delete mode 100644 temp/numeral.js/1.3.1/package/tests/test.html delete mode 100644 temp/numeral.js/1.3.2/dist.tar.gz delete mode 100644 temp/numeral.js/1.3.2/package/LICENSE delete mode 100644 temp/numeral.js/1.3.2/package/README.md delete mode 100644 temp/numeral.js/1.3.2/package/numeral.js delete mode 100644 temp/numeral.js/1.3.2/package/package.json diff --git a/temp/autosize.js/1.17.2/dist.tar.gz b/temp/autosize.js/1.17.2/dist.tar.gz deleted file mode 100644 index 4cb14489e5188849830ce4e5ef33c66862c2ed8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6876 zcmV<28YAT&iwFP!000001MNI%bK6Fi^Hr+Ke`qsak(_|wq05p?dp&ks>(tuG#@@cfaOR1{ZRs`b+-yKjdlh zr_cNu32G>?8&Ef3y>Di5+~Swv}qU7o?a zg)E{##_>wX@B@%f6zUpisHB*yXf`jzMCK|KX(Gy8Wg<$JW#Q9gmnzHkL_>dg?2q&k zOO=Ew2_lultD7}8UZ~YonuXYKzPq#2nx@$Td+)T&YW!42{QcoS5cbyY&U+jUD9qE$ z3y4yX~8IAo;D`^&icS_n$BP(R#n%;D+8JN`NCi&l-2@|D(b2sHy)C2Z#6i z|BHP3e}1sL^Gxr$xMZ~~dSV1dxHmZNjUMsqze(xu?sS4KO(iO=3zL6ZQ|<0(g?B3c zdIh=r=l*VIS|$Nnt&Zy6w9G?mJVr&FPDQAuQKI(t_}iC@@G1Y>*))Uax~cWvQ{7Y5 zxr&l71<=XleEg^%A9mN>+Nzf_6NQ(KZ-Q9n`5Q1lr!6xnC|gf1(e9nLS{@R10)#ky zF!VBo?_a1`u1<%8wHJ-sk1eeWIf2F0^|;j=wnSd6Vl{3pVMbi@R8I0VE(>)gigbC} zJ2^R7UZ06rO^egPnaFUPP7#1JF-Z&9Qu~mFD#I?lMfz)Rl3w=!geaMv25C~Lq`)S4 zd8H;7QE}`0+uG5L_pUOzJe>dv7d?DF(_C{p5D%ioGR+E^6lVgIPH*dr6g-D%oL-&I zqYyj=KroYu#yUw8RYAA;0&!}#w)#)nUNSxhw<0NC%0(2fS{^;Tr5&e#e@BEGKop*FYu@4P?4Yy|yZYN#=-U*)JNa03qOKpxLUvjecRd(%&j;_%a-X)- zkAVmOjaDAFa06i$`Wla6c;5AcJnyusPOa|VUg9syd|q$$w$0b_ls`?Zk{?@cjk-6P zD#|Po(OCHaG%#id9I@1kK7PDe<7`V{z@&JShU&q19Hv3JfJc9lhO50j)u}afeP(R{ z*DK~x?kgG0E79oQn14muVKGTPIlft+Mbl0(4q!1WG2^KE-;2ipM6O;XMQ6@*SjcOO z@Nm!t^k}KXtK`rtx;OH?ct7SL1xTr92`Rf?D@{mQwW34>3{5r;H1V#Yu$Z6Kp2n>K zZb}M$(&;o;#ZTDk)%#@YwZ&0t91~A^nOB|_K)+yb4^Rh0FJ)XRn2Nr?i8SHt<{7^K z*+OJnfMS*!<|WGxQKB_d#q)Flh^dfy7w}_E^|Vutwa#jG0(I>n_R#*9v`j+a;^%P$ z`}(5_icXiYGgLlrEoF#Z{v9+7u&I9fQA-W06?{h&vMuzUo8C9}DeF}@m9S@s$+}`? zP1|o;umRoEdh2Uh%za=7;0$U2>JGZp6Nd*`8prR_<#UV0LC9GmLfG)@@2>E0eNxwZiGPbct# zZnxr~3^*u=mCW8n3ze2Yo32-mf%VL@BU%=HSo7DtJz&1IXK5Pwj&(uecGt+6u@`!! z7mQI>z4@5907*3kT@d9jt&*@%cD<|djaJkR-m{vzNg(^?=Z#lCd#E*kLK9)dNH=J6 zXxsU5?fp8oh@Q=xDz*FZV`rlg^{m&?JcyPFHL6x4mFdE<+xs+Z;~gD0>}0D8O1iUz z4zO7&V~y46_U4*s9blBO;@}M>7bUKe>n%Ti9C+?n?ssEJZ#l6dxoxtPZdKN}WvJXj zo*P0aTG6Rn-D^|f=CNt7N!PA<)eF`K=IxY4V z%~lDB{mZ3a?VRkMa=-d~P7g-_TBJ(JTwbCZ{^1UQIwif*uUfxUsVA z(jb2CjLMMy_{Ij(nl3os);F(`ATC3tJqibOPzhxmdjw;1XsGfcOIO?aH&ufJ@N{ao zNdt;4m7wsm?=;}f!pKZ5fO%dt+nHDmt|+fB<75+Gapo?CpsvEntV? zr{5RPUcd0gk7^d>V9JHeg#;HL4B%>!mbqA@VF_+ZH9{v9+Kr?_+Y{%yt^M8;2E;QS zxE3nTRb%15Wa$->b{3}-8Rw^h^A94;^nXBt3nk)clF4l4iM$Nv2;YCJWsz1h>80vP z4Ds=!uxShf#824-(;C|03(z*%2@&O@OcE8SJSY4nWg+Bc8ilY0@Gt|O6ECAoy-cr>4ZnZ; zUob(CE>{5LeG29GNuiic!X$%U7WWB&52-6DjEMc6P)t-HK|6?7-yZj0efy}N#-aEg zoHHrHR3vF3bPl4JE0`k7Am$Y0&4E1afW)RVAi;b^juW!pIr2`sO5rerwM`nwdE``% z`yS`e&$X0}ZmXqrbeogfae8rjr~MTk$QW`IDfqBzi6jQCcQubd5-kG)eI^R#fUU|h z(0d_tP>EKnoi5Q2=%zx%+VrWW2HJ2V=m>==7f&yM@_{NC7Kiac8OuV!D_ICq?bSf& zqlb!oo|Z9gOtlu!^;;sQc<$XLZi?U;2JIm1fUWpO2{B6GXMfu0OpHa zgf?UG;2tSzS|a)=3+@!TGS-Ae?u7_xf!{>!F(>gZ4@V zrgRLN>qYew(#y%138NZ4VLE_ry;*m8a>7l+P-WBvgc_orLgO`d9^R5!)5Jln5G_`s zT6mfXH_S z37o_Mb%!`{7J+iGlFZ=kXvGCOx}H?vw^oBy?`?9S-s9&jU4GVmYyez!vB?JRp@ZS- zJvY$HHTNkv+TsVwLm=ibz~m%&OPG_Pxgkkivmq!$>N+aWC$TIyN2ekNRS~X0j8HW! zmobQsho&Anq9nW8WK$*h1`*_lGX~u3^es}|gqWnRvPVYhs*Fb)`P%kun7vPS-!Oz* zMszieTzHAFu(9~rZtboI4h=$CVF82~cr~ak_00q~O^$D~)oyPxdgD#S-tEd) z091h#ReHuc1Be@s2Y)dY)d+lHeJue-5V$f4V>DY-mI3rkWLdy{j5=clGOB5d(!^KM)6S&bJZQSq8Y!ssZw1W^yra$ADNDLzAJHJ$eI zAVYXN_b6JqViy zz8(AytcaLJmkN6XS(@j)i4Iiqa*5t2IyiDAX5eKZ`yeO~f|N40b5s)>P6DMg&(d-> zXUI)@UYKN_UjHE*x~BQ}M0K#`fdgq2$qsM-IW)c3x&$`|d+1GEn}6!=2al_5+B=u$ zU2y^sCvpPYkifH%EsRy314gg|VXE?^jlM38Fc{-*fy0!R;FY1cxf_(IE0Kfa32I(~ zvmh^J6vGlqOjd#tb%w4?s0nbN&l>}>dLc7B$r0pw=LQN`tpR{0DeC{WPSLh8qyneF zNDzsTv38a9q%$(zquz>M)j&ISG&xBe4|WdE&V*qk^7es>NFa1(nR148z)lvxtDtw- z=v4}eak&i!7s7SZK>TM;zBot;>=}?wiSOPL-UyFXC?<4?$Q;a47-J>?QcfZ46qgi? zPr(sHy8^odYzf^wGCzq@A(~hvMV#Bv``N1~o5mvo8da>!?H8kQar<0!8dM>H0 zI&PyjKLWS0OezHg`&n}Y{F)qVWyeDonA}p=prU{uK&b}vE%uG9Wl5Z~9VCZetiY2P zl9-m0-ZHvYaTVPf$!nraBB;~(qNc`(ueTrK!qyv!bENgoGhIu4qf^h@&fzZj4{i5! z7oQu)yH!(lzDt>{?V4Bv)^m7*up-^8*+T6~*P7E=c6kGG4E%%|y6#z$LX9KR{9Do()`Zoi$Qm|?q#BM$?d6F&aOHz_R@DKb z?74BqxK+C%h7D_t=-Q=8FE0Rk39cR@p>s4~zIdB`Hy{H5nlRP%j&*(Z_KY!qB5Z5L zxSKixEd)<$jYPGknZWFWsO{+X$+S0YEe?RECwwfdS6)HnVwlucGhAeMU-$fGT)FZ! zDp);-+IMc&;Z>R-+f~h^F2B)iHe#+oZ3fd^D^N(!k@vML0qdq)%3N|F5Xl?_ z_yjy%_)9995|CuboAYDXt*0Zw4=XJO@V{c zAdop>E71OAibay#WJ;#JswTcbHxfstux>%B1pGH}PGBX<_qPL$C8A?=IQmyfr+w$S zI%sU(m+p4?qTu;hPzc?a_m*?`wxjMVO&?7=np(HPG3Y+^>8~3X6;+ zp`zs>!CVCwY%{_#;N+}akn@jw4gGU-&SpKwiPCvtA*Xos#MWQSwC@PWHVjZI2?Z+& z58bkccB8BTXv8g>H2N0zlH_0^lMpAxv7>1B#?f;lDUTIsi(@J5{3)l4^Y zTFhCY4FkV}pyw@JM5!4&=d97@PY|6(#YJt)e+wccg+Q(p-v^4r4V^rIt>6e7|9Zq>WR}TusawZ4MclBrz#LYM0qe*@#(l3aW)Pyps@a=}Apm#f{j=f?#pU znQpd%DH0Zp9Uk7- z|9z3q-{Jl5-&x_`-wMCK6@LFQAEW=#`1|u>5&sTr+^zpd2d4geG&npQ91Kza?;i~A z_5YXnJbv)v`{(a|{^47JoBw3@F@NnmoNs-VO~maAgiE{kdJQM*rXC`5Sj z&S-yIMg9VK>2aUmVn0fDJlRG4W=#d@za3pSJ6c|gJdLAJd>sVA8NJd65m*nryyhlT z57LuyG)qpgM3-MsQtecX4*!Lo*R+%`lW0MO5WLow@>XN82L34LnVO}pn?3G&Nee&j zYkU!NPFdwyFm7u_EI-I=f0m}RSjlCSvnGZ%Q0$XjU&H8wbsYFZb18#=i=q7lW~TWz zrruQATRT6YgpHfS*GZPPpMW97LK{0rr+a2!8bZ3SZ%kQt>wl8gnmhBCv+(1-=Ay?~ zyvRIbQ(ag;Gj8jJpS(#iKg#R)z&yI!onzk70b7tJWg(U_UWg8+>^y3d(Af3FbNDwG zNf|^_l}V3_Y!+%U0mnpV&!$v6ES_a5kb#m)bZ9Pa?)u_YVT$Z1u_uE-Es?A8r9zKI z=<=GGO3Iwq^Up``b%98>un=NZY^J7sR)`~1Qs8lei-E_9Mx~4W2)wL}OpULHRp&q@ z^1d`OVOB1cN2eDO5G{OK8GwtaTFcOaIwwMAAjwgHY0ZTp0D4sZ`Mv`(^aZhuF7c!@ zOBZ5zRLpzeX%uC)5?P)oEGwcw2}_uTe$Hp#G#d6lz46S{NO!L zM!B(hrU1wVrq1RmWkSt)DH9_{cZ$=n8LYIxYL|Jr01T!wh-56LN&+-0{}iuS-hJ{@ zRLsTmw{M-o_xj++edbc&TGD}kv}*n$A7lS9MY&M^BK#fJxcmOs=wLY1@!t^a|Isno z|NH#km-&4CwYA%r(tb-KsV@aB<8p@DEfvt1UWsr8(Gn;R%D$tNqXMbNepDDkVjC4= zhNp3ON@4@T%LoK7H8G(O@34vnv=@busMSab{Nh-lU-YpCj+V)4(%!|AP<&*O%4Jcsn zc9I;F3TYG}egwz}-x7ja*5T(6-w7S7*){))*se>*d$3i{>3k?oXZ-wimQ@p-}ni{Na3d{sVx!{98K0$3B7&WFHRMQSmaM~XghU#H;zpO3jSQ*)K zUh1P`+62VER9VMy_m``0? zkNlB~EbZUxC_(x!V9iUusiS=cO)Q?quTL{PX->oYs_a3hEf%#U0c4TohExH7JB~Q{ zie(JMN@KR=z>m+w9B>|e3Y=}^(j_X@0jw^H&ABSpoS=dhGRLvla}FYD&y3SXMS4?H z+>RWTYGZpZ;#*xF#1wQY_gjfkV=)|Q_7V@}7tybzBpP%&cIf0t5V$buVhIB#Q5+R3 zaLV#hF`sGutkY?DpKOYCwL|};!JSBlWu`78yqn6W)=j24a#kNYt0!hbDo`Qc%-kvq zP2jW8MP?$8@xK`BU#Gb4g3B>*6e8HftL8Q`!b6RQIE=%ia;<59K7aYcGpT~tgBO9UX|1y^S~SCH&o1tP1Y zvx53ERxj>rRGu}d#Ur_-KAfo@)m}v3zoqNo2K>WE-3E=0s)s2ZPiV;X>wzqNTahItW7*H6CY?(r1#mm%x?BFj<~8=d%_^Vc@&bn zLzW6Pfn_jvjT5tkiLLY!&d(YAjZ2uRE)~VT;CfC;31j(cCDL|;1Jk1lrsHZJSDhMf z%xXDs#4zhQQI!*P6;+&0_Z_u(;*38L%R1hn<2oVRTR}z*hKP}7HiEW#1`$Z7$e5 zX+&i4@9ljak{b*!70DXAj9^}M#k~HF9Ai;{l2j{S&Fq3Ua6r@hn&o)9K-s!4RBe0z Wx&PdM?mvG&pZ^1LdN>aNXaE3Zv`V}H diff --git a/temp/autosize.js/1.17.2/package/autosize.jquery.json b/temp/autosize.js/1.17.2/package/autosize.jquery.json deleted file mode 100644 index fef334429..000000000 --- a/temp/autosize.js/1.17.2/package/autosize.jquery.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "autosize", - "title": "Autosize", - "description": "Automatically adjust textarea height based on user input.", - "version": "1.17.2", - "dependencies": { - "jquery": ">=1.7" - }, - "keywords": [ - "form", - "textarea", - "ui", - "jQuery" - ], - "author": { - "name": "Jack Moore", - "url": "http://www.jacklmoore.com", - "email": "hello@jacklmoore.com" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://www.opensource.org/licenses/mit-license.php" - } - ], - "homepage": "http://www.jacklmoore.com/autosize", - "demo": "http://www.jacklmoore.com/autosize" -} \ No newline at end of file diff --git a/temp/autosize.js/1.17.2/package/bower.json b/temp/autosize.js/1.17.2/package/bower.json deleted file mode 100644 index 78d96e5e9..000000000 --- a/temp/autosize.js/1.17.2/package/bower.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "jquery-autosize", - "description": "Automatically adjust textarea height based on user input.", - "version": "1.17.2", - "dependencies": { - "jquery": ">=1.7" - }, - "keywords": [ - "form", - "textarea", - "ui", - "jQuery" - ], - "authors": [ - { - "name": "Jack Moore", - "url": "http://www.jacklmoore.com", - "email": "hello@jacklmoore.com" - } - ], - "licenses": [ - { - "type": "MIT", - "url": "http://www.opensource.org/licenses/mit-license.php" - } - ], - "homepage": "http://www.jacklmoore.com/autosize", - "main": "jquery.autosize.js" -} \ No newline at end of file diff --git a/temp/autosize.js/1.17.2/package/demo.html b/temp/autosize.js/1.17.2/package/demo.html deleted file mode 100644 index 0503abb85..000000000 --- a/temp/autosize.js/1.17.2/package/demo.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Textarea Autosize Demo - - - - - - - - - - - diff --git a/temp/autosize.js/1.17.2/package/jquery.autosize-min.js b/temp/autosize.js/1.17.2/package/jquery.autosize-min.js deleted file mode 100644 index 4a1b70679..000000000 --- a/temp/autosize.js/1.17.2/package/jquery.autosize-min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - Autosize v1.17.2 - 2013-07-28 - Automatically adjust textarea height based on user input. - (c) 2013 Jack Moore - http://www.jacklmoore.com/autosize - license: http://www.opensource.org/licenses/mit-license.php -*/ -(function(e){"function"==typeof define&&define.amd?define("jquery-autosize",["jquery"],e):e(window.jQuery||window.$)})(function(e){var t,o={className:"autosizejs",append:"",callback:!1,resizeDelay:10},i=' - - - - - - - - - - - - - -
- -
- - - - - diff --git a/temp/idbwrapper/0.1.0/package/example/objectstore/style.css b/temp/idbwrapper/0.1.0/package/example/objectstore/style.css deleted file mode 100644 index 5bdb6b0f7..000000000 --- a/temp/idbwrapper/0.1.0/package/example/objectstore/style.css +++ /dev/null @@ -1,93 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.0/package/example/quicktest/index.html b/temp/idbwrapper/0.1.0/package/example/quicktest/index.html deleted file mode 100644 index f64a74323..000000000 --- a/temp/idbwrapper/0.1.0/package/example/quicktest/index.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - IndexedDB Wrapper Quick Test - - - - -
-

Open the console and click 'Open DB'. You will then see a bunch of buttons - that allow data manipulation. Click them, and check the console for - results.

- - - -
- - - - - diff --git a/temp/idbwrapper/0.1.0/package/example/quicktest/style.css b/temp/idbwrapper/0.1.0/package/example/quicktest/style.css deleted file mode 100644 index 90f382838..000000000 --- a/temp/idbwrapper/0.1.0/package/example/quicktest/style.css +++ /dev/null @@ -1,94 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.0/package/example/style.css b/temp/idbwrapper/0.1.0/package/example/style.css deleted file mode 100644 index fb96076ca..000000000 --- a/temp/idbwrapper/0.1.0/package/example/style.css +++ /dev/null @@ -1,87 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; -} -.hbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.0/package/package.json b/temp/idbwrapper/0.1.0/package/package.json deleted file mode 100644 index 53f7b1d11..000000000 --- a/temp/idbwrapper/0.1.0/package/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "idb-wrapper", - "version": "0.1.0", - "description": "This is a wrapper for indexedDB.", - "keywords": [], - "author": "jensarps ", - "repository": "git://github.com/jensarps/IDBWrapper.git", - "main": "IDBStore", - "homepage": "https://github.com/jensarps/IDBWrapper", - "contributors": [ - ], - "bugs": { - "url": "https://github.com/jensarps/IDBWrapper/issues", - "email": "mail@jensarps.de" - }, - "dependencies": { - }, - "devDependencies": { - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/jensarps/IDBWrapper/raw/master/LICENSE" - } - ], - "scripts": { - } -} diff --git a/temp/idbwrapper/0.1.1/dist.tar.gz b/temp/idbwrapper/0.1.1/dist.tar.gz deleted file mode 100644 index 13b0f2173d55f7f0b11e314cf05bc97a8dcbd885..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35353 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

oiHlVgh|GdFMI(Ry`nHr2fUxvMsWd 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 N^}qKQ^LYSH0s#7?v%dfU diff --git a/temp/idbwrapper/0.1.1/package/.npmignore b/temp/idbwrapper/0.1.1/package/.npmignore deleted file mode 100644 index 14c279342..000000000 --- a/temp/idbwrapper/0.1.1/package/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.project -.idea diff --git a/temp/idbwrapper/0.1.1/package/IDBStore.js b/temp/idbwrapper/0.1.1/package/IDBStore.js deleted file mode 100644 index 68d632afb..000000000 --- a/temp/idbwrapper/0.1.1/package/IDBStore.js +++ /dev/null @@ -1,464 +0,0 @@ -/* - * IDBWrapper - A cross-browser wrapper for IndexedDB - * Copyright (c) 2011 - 2012 Jens Arps - * http://jensarps.de/ - * - * Licensed under the MIT (X11) license - */ - -"use strict"; - -(function (name, definition, global) { - if (typeof define === 'function') { - define(definition); - } else if (typeof module !== 'undefined' && module.exports) { - module.exports = definition(); - } else { - global[name] = definition(); - } -})('IDBStore', function () { - - var IDBStore; - - var defaults = { - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - onStoreReady: function () { - }, - indexes: [] - }; - - IDBStore = function (kwArgs, onStoreReady) { - - function fixupConstants (object, constants) { - for (var prop in constants) { - object[prop] = constants[prop]; - } - } - - for(var key in defaults){ - this[key] = typeof kwArgs[key] != 'undefined' ? kwArgs[key] : defaults[key]; - } - - this.dbName = 'IDBWrapper-' + this.storeName; - this.dbVersion = parseInt(this.dbVersion, 10); - - onStoreReady && (this.onStoreReady = onStoreReady); - - this.idb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; - this.keyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.mozIDBKeyRange; - - this.consts = window.IDBTransaction || window.webkitIDBTransaction; - fixupConstants(this.consts, { - 'READ_ONLY': 'readonly', - 'READ_WRITE': 'readwrite', - 'VERSION_CHANGE': 'versionchange' - }); - - this.cursor = window.IDBCursor || window.webkitIDBCursor; - fixupConstants(this.cursor, { - 'NEXT': 'next', - 'NEXT_NO_DUPLICATE': 'nextunique', - 'PREV': 'prev', - 'PREV_NO_DUPLICATE': 'prevunique' - }); - - this.openDB(); - }; - - IDBStore.prototype = { - - db: null, - - dbName: null, - - dbVersion: null, - - store: null, - - storeName: null, - - keyPath: null, - - autoIncrement: null, - - indexes: null, - - features: null, - - onStoreReady: null, - - openDB: function () { - - this.newVersionAPI = typeof this.idb.setVersion == 'undefined'; - - if(!this.newVersionAPI){ - throw new Error('The IndexedDB implementation in this browser is outdated. Please upgrade your browser.'); - } - - var features = this.features = {}; - features.hasAutoIncrement = !window.mozIndexedDB; // TODO: Still, really? - - var openRequest = this.idb.open(this.dbName, this.dbVersion); - - openRequest.onerror = function (error) { - - var gotVersionErr = false; - if ('error' in error.target) { - gotVersionErr = error.target.error.name == "VersionError"; - } else if ('errorCode' in error.target) { - gotVersionErr = error.target.errorCode == 12; // TODO: Use const - } - - if (gotVersionErr) { - console.error('Could not open database, version error:', error); - } else { - console.error('Could not open database, error:', error); - } - }.bind(this); - - - openRequest.onsuccess = function (event) { - - if(this.db){ - this.onStoreReady(); - return; - } - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - if(!this.store){ - var emptyTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - this.store = emptyTransaction.objectStore(this.storeName); - } - // check indexes - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - // normalize and provide existing keys - indexData.keyPath = indexData.keyPath || indexName; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - - if(!indexName){ - throw new Error('Cannot create index: No index name given.'); - } - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = ['keyPath', 'unique', 'multiEntry'].every(function(key){ - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actualIndex[key] === undefined && indexData[key] === false) { - return true; - } - return indexData[key] == actualIndex[key]; - }); - if(!complies){ - throw new Error('Cannot modify index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - } else { - throw new Error('Cannot create new index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - - }, this); - - this.onStoreReady(); - } else { - // We should never get here. - throw new Error('Cannot create a new store for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - }.bind(this); - - openRequest.onupgradeneeded = function(/* IDBVersionChangeEvent */ event){ - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - this.store = event.target.transaction.objectStore(this.storeName); - } else { - this.store = this.db.createObjectStore(this.storeName, { keyPath: this.keyPath, autoIncrement: this.autoIncrement}); - } - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - // normalize and provide existing keys - indexData.keyPath = indexData.keyPath || indexName; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - - if(!indexName){ - throw new Error('Cannot create index: No index name given.'); - } - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = ['keyPath', 'unique', 'multiEntry'].every(function(key){ - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actualIndex[key] === undefined && indexData[key] === false) { - return true; - } - return indexData[key] == actualIndex[key]; - }); - if(!complies){ - // index differs, need to delete and re-create - this.store.deleteIndex(indexName); - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - } else { - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - - }, this); - - }.bind(this); - }, - - deleteDatabase: function () { - if (this.idb.deleteDatabase) { - this.idb.deleteDatabase(this.dbName); - } - }, - - /********************* - * data manipulation * - *********************/ - - - put: function (dataObj, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not write data.', error); - }); - onSuccess || (onSuccess = noop); - if (typeof dataObj[this.keyPath] == 'undefined' && !this.features.hasAutoIncrement) { - dataObj[this.keyPath] = this._getUID(); - } - - var putTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var putRequest = putTransaction.objectStore(this.storeName).put(dataObj); - putRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - putRequest.onerror = onError; - }, - - get: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var getRequest = getTransaction.objectStore(this.storeName).get(key); - getRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getRequest.onerror = onError; - }, - - remove: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not remove data.', error); - }); - onSuccess || (onSuccess = noop); - var removeTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var deleteRequest = removeTransaction.objectStore(this.storeName).delete(key); - deleteRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - deleteRequest.onerror = onError; - }, - - getAll: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getAllTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var store = getAllTransaction.objectStore(this.storeName); - if (store.getAll) { - var getAllRequest = store.getAll(); - getAllRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getAllRequest.onerror = onError; - } else { - this._getAllCursor(getAllTransaction, onSuccess, onError); - } - }, - - _getAllCursor: function (tr, onSuccess, onError) { - var all = []; - var store = tr.objectStore(this.storeName); - var cursorRequest = store.openCursor(); - - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - all.push(cursor.value); - cursor['continue'](); - } - else { - onSuccess(all); - } - }; - cursorRequest.onError = onError; - }, - - clear: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not clear store.', error); - }); - onSuccess || (onSuccess = noop); - var clearTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var clearRequest = clearTransaction.objectStore(this.storeName).clear(); - clearRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - clearRequest.onerror = onError; - }, - - _getUID: function () { - // FF bails at times on non-numeric ids. So we take an even - // worse approach now, using current time as id. Sigh. - return +new Date(); - }, - - - /************ - * indexing * - ************/ - - getIndexList: function () { - return this.store.indexNames; - }, - - hasIndex: function (indexName) { - return this.store.indexNames.contains(indexName); - }, - - /********** - * cursor * - **********/ - - iterate: function (onItem, options) { - options = mixin({ - index: null, - order: 'ASC', - filterDuplicates: false, - keyRange: null, - writeAccess: false, - onEnd: null, - onError: function (error) { - console.error('Could not open cursor.', error); - } - }, options || {}); - - var directionType = options.order.toLowerCase() == 'desc' ? 'PREV' : 'NEXT'; - if (options.filterDuplicates) { - directionType += '_NO_DUPLICATE'; - } - - var cursorTransaction = this.db.transaction([this.storeName], this.consts[options.writeAccess ? 'READ_WRITE' : 'READ_ONLY']); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var cursorRequest = cursorTarget.openCursor(options.keyRange, this.cursor[directionType]); - cursorRequest.onerror = options.onError; - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - onItem(cursor.value, cursor, cursorTransaction); - cursor['continue'](); - } else { - if(options.onEnd){ - options.onEnd() - } else { - onItem(null); - } - } - }; - }, - - count: function (onSuccess, options) { - - options = mixin({ - index: null, - keyRange: null - }, options || {}); - - var onError = options.onError || function (error) { - console.error('Could not open cursor.', error); - }; - - var cursorTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var countRequest = cursorTarget.count(options.keyRange); - countRequest.onsuccess = function (evt) { - onSuccess(evt.target.result); - }; - countRequest.onError = function (error) { - onError(error); - }; - }, - - /**************/ - /* key ranges */ - /**************/ - - makeKeyRange: function(options){ - var keyRange, - hasLower = typeof options.lower != 'undefined', - hasUpper = typeof options.upper != 'undefined'; - - switch(true){ - case hasLower && hasUpper: - keyRange = this.keyRange.bound(options.lower, options.upper, options.excludeLower, options.excludeUpper); - break; - case hasLower: - keyRange = this.keyRange.lowerBound(options.lower, options.excludeLower); - break; - case hasUpper: - keyRange = this.keyRange.upperBound(options.upper, options.excludeUpper); - break; - default: - throw new Error('Cannot create KeyRange. Provide one or both of "lower" or "upper" value.'); - break; - } - - return keyRange; - - } - - }; - - /** helpers **/ - - var noop = function () { - }; - var empty = {}; - var mixin = function (target, source) { - var name, s; - for (name in source) { - s = source[name]; - if (s !== empty[name] && s !== target[name]) { - target[name] = s; - } - } - return target; - }; - - return IDBStore; - -}, this); diff --git a/temp/idbwrapper/0.1.1/package/LICENSE b/temp/idbwrapper/0.1.1/package/LICENSE deleted file mode 100644 index 93f5d87c8..000000000 --- a/temp/idbwrapper/0.1.1/package/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 - 2012 Jens Arps - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/temp/idbwrapper/0.1.1/package/README.md b/temp/idbwrapper/0.1.1/package/README.md deleted file mode 100644 index 480e14c6b..000000000 --- a/temp/idbwrapper/0.1.1/package/README.md +++ /dev/null @@ -1,313 +0,0 @@ -About -===== - -This is a wrapper for indexedDB. It is meant to - -a) ease the use of indexedDB and abstract away the differences between the -existing impls in Chrome, Firefox and IE10 (yes, it works in all three), and - -b) show how IDB works. The code is split up into short methods, so that it's -easy to see what happens in what method. - -"Showing how it works" is the main intention of this project. IndexedDB is -all the buzz, but only a few people actually know how to use it. - -The code in IDBWrapper.js is not optimized for anything, nor minified or anything. -It is meant to be read and easy to understand. So, please, go ahead and check out -the source! - -There are two tutorials to get you up and running: - -Part 1: Setup and CRUD operations -http://jensarps.de/2011/11/25/working-with-idbwrapper-part-1/ - -Part 2: Running Queries against the store -http://jensarps.de/2012/11/13/working-with-idbwrapper-part-2/ - -##November Rewrite - -I rewrote IDBWrapper to cope with all the issues, and the new version is on -master since Nov, 13th 2012. The API didn't change much, I just removed some -of the methods. Method signatures remain unchanged. - -However, if you have a previous version of IDBWrapper in use, there's an -issue: The new version won't be able to access the store created with the old -version, because database names changed. In that case, you need to manually -migrate the data: Include both versions of IDBWrapper (use a different name for -them), do a getAll() on the old store and write the data to the new store. - -I am very sorry about any inconveniences, but there was no other way. - -The 'old' version of IDBWrapper is still available in the `legacy` branch: -https://github.com/jensarps/IDBWrapper/tree/legacy - -Also, "showing how it works" is no longer the main intention behind this. Now, -it's rather "just works". - - -Examples -======== - -There are some examples to run right in your browser over here: http://jensarps.github.com/IDBWrapper/example/ - -The source for these examples are in the `example` folder of this repository. - -Usage -===== - -Including the IDBStore.js file will add an IDBStore constructor to the global scope. - -Alternatively, you can use an AMD loader such as RequireJS to load the file, -and you will receive the constructor in your load callback (the constructor -will then, of course, have whatever name you call it). - -You can then create an IDB store: - -```javascript -var myStore = new IDBStore(); -``` - -You may pass two parameters to the constructor: the first is an object with optional parameters, -the second is a function reference to a function that is called when the store is ready to use. - -The options object may contain the following properties (default values are shown): - -```javascript -{ - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - indexes: [], - onStoreReady: function(){} -} -``` - -'keyPath' is the name of the property to be used as key index. If 'autoIncrement' is set to true, -the database will automatically add a unique key to the keyPath index when storing objects missing -that property. 'indexes' contains objects defining indexes (see below for details on indexes). - -You can also pass a callback function to the options object. If a callback is provided both as second -parameter and inside of the options object, the function passed as second parameter will be used. - -Methods -======= - -Here's an overview of available methods in IDBStore: - -Data Manipulation ------------------ - -Use the following methods to read and write data: - -___ - -1) The put method. - - -```javascript -put(/*Object*/ dataObj, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`dataObj` is the Object to store. `onSuccess` will be called when the insertion/update was successful, -and it will receive the keyPath value (the id, so to say) of the inserted object as first and only -argument. `onError` will be called if the insertion/update failed and it will receive the error event -object as first and only argument. If the store already contains an object with the given keyPath id, -it will be overwritten by `dataObj`. - -___ - -2) The get method. - -```javascript -get(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to retrieve. `onSuccess` will be called if -the get operation was successful, and it will receive the stored object as first and only argument. If -no object was found with the given keyPath value, this argument will be null. `onError` will be called -if the get operation failed and it will receive the error event object as first and only argument. - -___ - -3) The getAll method. - -```javascript -getAll: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the getAll operation was successful, and it will receive an Array of -all objects currently stored in the store as first and only argument. `onError` will be called if -the getAll operation failed and it will receive the error event object as first and only argument. - -___ - -4) The remove method. - -```javascript -remove: function(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to remove. `onSuccess` will be called if -the remove operation was successful, and it _should_ receive `false` as first and only argument if the -object to remove was not found, and `true` if it was found and removed. - -NOTE: FF 8 will pass the key to the onSuccess handler, no matter if there is an corresponding object -or not. Chrome 15 will pass `null` if removal was successful, and call the error handler if the object -wasn't found. Chrome 17 will behave as described above. - -`onError` will be called if the remove operation failed and it will receive the error event object as first -and only argument. - -___ - -5) The clear method. - -```javascript -clear: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the clear operation was successful. `onError` will be called if the clear -operation failed and it will receive the error event object as first and only argument. - - -Index Operations ----------------- - -To create indexes, you need to pass the index information to the IDBStore() -constructor, for example: - - -```javascript -{ - storeName: 'customers', - dbVersion: 1, - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: function(){}, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] -} -``` - -An entry in the index Array is an object containing the following properties: - -The `name` property is the identifier of the index. If you want to work with the created index later, this name is used to identify the index. This is the only property that is mandatory. - -The `keyPath` property is the name of the property in your stored data that you want to index. If you omit that, IDBWrapper will assume that it is the same as the provided name, and will use this instead. - -The `unique` property tells the store whether the indexed property in your data is unique. If you set this to true, it will add a uniqueness constraint to the store which will make it throw if you try to store data that violates that constraint. If you omit that, IDBWrapper will set this to false. - -The `multiEntry` property is kinda weird. You can read up on it here: http://www.w3.org/TR/IndexedDB/#dfn-multientry. However, you can live perfectly fine with setting this to false (or just omitting it, this is set to false by default). - - -If you want to add an index to an existing store, you need to increase the -version number of your store, as adding an index changes the structure of -the database. - -To modify an index, modify the object in the indexes Array in the constructor. -Again, you need to increase the version of your store. - -In addition, there are still some convenience methods available: - -___ - - -1) The hasIndex method. - -```javascript -hasIndex: function(/*String*/ indexName) -``` - -Return true if an index with the given name exists in the store, false if not. - -___ - -2) The getIndexList method. - -```javascript -getIndexList: function() -``` - -Returns a `DOMStringList` with all existing indices. - - -Running Queries ---------------- - -To run queries, IDBWrapper provides an `iterate()` method. To create keyRanges, -there is the `makeKeyRange()` method. In addition to these, IDBWrapper comes -with a `count()` method. - -___ - -1) The iterate method. - - -```javascript -iterate: function(/*Function*/ onItem, /*Object*/ iterateOptions) -``` - -The `onItem` callback will be called once for every match. It will receive three arguments: the object that matched the query, a reference to the current cursor object (IDBWrapper uses IndexedDB's Cursor internally to iterate), and a reference to the current ongoing transaction. - -There's one special situation: if you didn't pass an onEnd handler in the options objects (see below), the onItem handler will be called one extra time when the transaction is over. In this case, it will receive null as only argument. So, to check when the iteration is over and you won't get any more data objects, you can either pass an onEnd handler, or check for null in the onItem handler. - -The `iterateOptions` object can contain one or more of the following properties: - - -The `index` property contains the name of the index to operate on. If you omit this, IDBWrapper will use the store's keyPath as index. - -In the `keyRange` property you can pass a keyRange. - -The `order` property can be set to 'ASC' or 'DESC', and determines the ordering direction of results. If you omit this, IDBWrapper will use 'ASC'. - -The `filterDuplicates` property is an interesting one: If you set this to true (it defaults to false), and have several objects that have the same value in their key, the store will only fetch the first of those. It is not about objects being the same, it's about their key being the same. For example, in the customers database are a couple of guys having 'Smith' as last name. Setting filterDuplicates to true in the above example will make `iterate()` call the onItem callback only for the first of those. - -The `writeAccess` property defaults to false. If you need write access to the store during the iteration, you need to set this to true. - -In the `onEnd` property you can pass a callback that gets called after the iteration is over and the transaction is closed. It does not receive any arguments. - -In the `onError` property you can pass a custom error handler. In case of an error, it will be called and receives the Error object as only argument. - - -___ - - -2) The makeKeyRange method. - - -```javascript -iterate: function(/*Object*/ keyRangeOptions) -``` - -Returns an IDBKeyRange. - -The `keyRangeOptions` object must have one or more of the following properties: - -`lower`: The lower bound of the range - -`excludeLower`: Boolean, whether to exclude the lower bound itself. Default: false - -`upper`: The upper bound of the range - -`excludeUpper`: Boolean, whether to exclude the upper bound itself. Default: false - -___ - - -3) The count method. - - -```javascript -iterate: function(/*Function*/ onSuccess, /*Object*/ countOptions) -``` - -The onSuccess receives the result of the count as only argument. - -The `countOptions` object may have one or more of the following properties: - -index: The name of an index to operate on. - -keyRange: A keyRange to use - diff --git a/temp/idbwrapper/0.1.1/package/example/basic/app.js b/temp/idbwrapper/0.1.1/package/example/basic/app.js deleted file mode 100644 index e1e2a2f55..000000000 --- a/temp/idbwrapper/0.1.1/package/example/basic/app.js +++ /dev/null @@ -1,94 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}', - table: '{content}
IDLast NameFirst Name
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = new IDBStore({ - storeName: 'customer', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'customerid', 'firstname', 'lastname', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ // We want the id to be numeric: - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function updateItem(id){ - var data = { - customerid: id, - firstname: document.getElementById('firstname_' + id).value.trim(), - lastname: document.getElementById('lastname_' + id).value.trim() - }; - customers.put(data, refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - updateItem: updateItem - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.1.1/package/example/basic/index.html b/temp/idbwrapper/0.1.1/package/example/basic/index.html deleted file mode 100644 index 5d7a596c6..000000000 --- a/temp/idbwrapper/0.1.1/package/example/basic/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - IDBWrapper Basic CRUD Example - - - - -

-
-
- QueryResults -
-
-
-
-

- Enter some data to save. As ID, enter a numeric value or leave blank. -

- -
-
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.1.1/package/example/basic/style.css b/temp/idbwrapper/0.1.1/package/example/basic/style.css deleted file mode 100644 index e901b00c4..000000000 --- a/temp/idbwrapper/0.1.1/package/example/basic/style.css +++ /dev/null @@ -1,86 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.1/package/example/index.html b/temp/idbwrapper/0.1.1/package/example/index.html deleted file mode 100644 index cbc210fbc..000000000 --- a/temp/idbwrapper/0.1.1/package/example/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - IndexedDB Wrapper Examples - - - - -
-

IDBWrapper Examples

-

- There are a couple of examples to try out / look at: -

-
    -
  • Quicktest - Just a quick test to see if IDB opens and fool around in the console.
  • -
  • Basic CRUD - A basic CRUD example using an IDB store as fixed table.
  • -
  • ObjectStore - An example to show the difference between a table and an object store.
  • -
  • Index - An example to show how to work with indexes.
  • -
-
- - \ No newline at end of file diff --git a/temp/idbwrapper/0.1.1/package/example/index/app.js b/temp/idbwrapper/0.1.1/package/example/index/app.js deleted file mode 100644 index 974280137..000000000 --- a/temp/idbwrapper/0.1.1/package/example/index/app.js +++ /dev/null @@ -1,163 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}{lastname}{firstname}{age}', - table: '{content}
IDLast NameFirst NameAge
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = app.customers = new IDBStore({ - dbVersion: 1, - storeName: 'customer-index', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] - }); - - // create references for some nodes we have to work with - [ - 'submit', 'submitQuery', - 'upper', 'lower', 'excludeLower', 'excludeUpper', - 'sortOrder', 'index', 'filterDuplicates', - 'customerid', 'firstname', 'lastname', 'age', - 'results-container' - ].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit buttons. - nodeCache.submit.addEventListener('click', enterData); - nodeCache.submitQuery.addEventListener('click', runQuery); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname', 'age'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname', 'age'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function makeRandomEntry(){ - var lastnames = ['Smith','Miller','Doe','Frankenstein','Furter'], - firstnames = ['Peter','John','Frank', 'James', 'Jill']; - - var entry = { - lastname: lastnames[Math.floor(Math.random()*5)], - firstname: firstnames[Math.floor(Math.random()*4)], - age: Math.floor(Math.random() * (100 - 20)) + 20, - customerid: parseInt( ( "" + ( Date.now() * Math.random() ) ).substring(0, 6), 10) - }; - - return entry; - } - - function addRandomCustomer(){ - var data = makeRandomEntry(); - - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function runQuery(){ - var upper = nodeCache.upper.value, - hasUpper = upper != '', - lower = nodeCache.lower.value, - hasLower = lower != '', - - indexName = nodeCache.index.value, - sortOrder = nodeCache.sortOrder.value, - filterDuplicates = nodeCache.filterDuplicates.checked, - keyRange, - - content = ''; - - if(hasUpper || hasLower){ // create a keyRange only if bounds are given - var options = {}; - if(hasUpper){ - options.upper = upper; - options.excludeUpper = nodeCache.excludeUpper.checked; - } - if(hasLower){ - options.lower = lower; - options.excludeLower = nodeCache.excludeLower.checked; - } - keyRange = customers.makeKeyRange(options); - } - - var onItem = function (item) { - content += tpls.row.replace(/\{([^\}]+)\}/g, function (_, key) { - return item[key]; - }); - }; - var onEnd = function () { - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - }; - - customers.iterate(onItem, { - index: indexName, - keyRange: keyRange, - filterDuplicates: filterDuplicates, - order: sortOrder, - onEnd: onEnd - }); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - addRandomCustomer: addRandomCustomer - }; - - // go! - init(); - -}); diff --git a/temp/idbwrapper/0.1.1/package/example/index/index.html b/temp/idbwrapper/0.1.1/package/example/index/index.html deleted file mode 100644 index 63a50039d..000000000 --- a/temp/idbwrapper/0.1.1/package/example/index/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - IDBWrapper Basic Index Example - - - - - -
-
- QueryResults -
-
-

Query

- -
- - -
-
-
-
-
- -
- - -
- -
- - -
-
-

Add data

- -

- Add a random customer: - -

-

- Or, enter customer data below: -

- -
-
-
-
- -
-
- - - diff --git a/temp/idbwrapper/0.1.1/package/example/index/style.css b/temp/idbwrapper/0.1.1/package/example/index/style.css deleted file mode 100644 index 8f7ddd9fe..000000000 --- a/temp/idbwrapper/0.1.1/package/example/index/style.css +++ /dev/null @@ -1,89 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input, -#query { - padding: 10px; - width: 350px; - border-left: solid 1px black; -} -#input div, -#query div{ - padding: 5px; -} -#input label, -#query label{ - display: inline-block; - width: 120px; -} diff --git a/temp/idbwrapper/0.1.1/package/example/lib/requirejs/require.js b/temp/idbwrapper/0.1.1/package/example/lib/requirejs/require.js deleted file mode 100644 index ba861994a..000000000 --- a/temp/idbwrapper/0.1.1/package/example/lib/requirejs/require.js +++ /dev/null @@ -1,2013 +0,0 @@ -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 0.26.0+ Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -/*jslint strict: false, plusplus: false */ -/*global window: false, navigator: false, document: false, importScripts: false, - jQuery: false, clearInterval: false, setInterval: false, self: false, - setTimeout: false, opera: false */ - -var requirejs, require, define; -(function () { - //Change this version number for each release. - var version = "0.26.0+", - commentRegExp = /(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg, - cjsRequireRegExp = /require\(\s*["']([^'"\s]+)["']\s*\)/g, - currDirRegExp = /^\.\//, - jsSuffixRegExp = /\.js$/, - ostring = Object.prototype.toString, - ap = Array.prototype, - aps = ap.slice, - apsp = ap.splice, - isBrowser = !!(typeof window !== "undefined" && navigator && document), - isWebWorker = !isBrowser && typeof importScripts !== "undefined", - //PS3 indicates loaded and complete, but need to wait for complete - //specifically. Sequence is "loading", "loaded", execution, - // then "complete". The UA check is unfortunate, but not sure how - //to feature test w/o causing perf issues. - readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? - /^complete$/ : /^(complete|loaded)$/, - defContextName = "_", - //Oh the tragedy, detecting opera. See the usage of isOpera for reason. - isOpera = typeof opera !== "undefined" && opera.toString() === "[object Opera]", - reqWaitIdPrefix = "_r@@", - empty = {}, - contexts = {}, - globalDefQueue = [], - interactiveScript = null, - isDone = false, - checkLoadedDepth = 0, - useInteractive = false, - req, cfg = {}, currentlyAddingScript, s, head, baseElement, scripts, script, - src, subPath, mainScript, dataMain, i, scrollIntervalId, setReadyState, ctx, - jQueryCheck, checkLoadedTimeoutId; - - function isFunction(it) { - return ostring.call(it) === "[object Function]"; - } - - function isArray(it) { - return ostring.call(it) === "[object Array]"; - } - - /** - * Simple function to mix in properties from source into target, - * but only if target does not already have a property of the same name. - * This is not robust in IE for transferring methods that match - * Object.prototype names, but the uses of mixin here seem unlikely to - * trigger a problem related to that. - */ - function mixin(target, source, force) { - for (var prop in source) { - if (!(prop in empty) && (!(prop in target) || force)) { - target[prop] = source[prop]; - } - } - return req; - } - - /** - * Constructs an error with a pointer to an URL with more information. - * @param {String} id the error ID that maps to an ID on a web page. - * @param {String} message human readable error. - * @param {Error} [err] the original error, if there is one. - * - * @returns {Error} - */ - function makeError(id, msg, err) { - var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); - if (err) { - e.originalError = err; - } - return e; - } - - /** - * Used to set up package paths from a packagePaths or packages config object. - * @param {Object} pkgs the object to store the new package config - * @param {Array} currentPackages an array of packages to configure - * @param {String} [dir] a prefix dir to use. - */ - function configurePackageDir(pkgs, currentPackages, dir) { - var i, location, pkgObj; - - for (i = 0; (pkgObj = currentPackages[i]); i++) { - pkgObj = typeof pkgObj === "string" ? { name: pkgObj } : pkgObj; - location = pkgObj.location; - - //Add dir to the path, but avoid paths that start with a slash - //or have a colon (indicates a protocol) - if (dir && (!location || (location.indexOf("/") !== 0 && location.indexOf(":") === -1))) { - location = dir + "/" + (location || pkgObj.name); - } - - //Create a brand new object on pkgs, since currentPackages can - //be passed in again, and config.pkgs is the internal transformed - //state for all package configs. - pkgs[pkgObj.name] = { - name: pkgObj.name, - location: location || pkgObj.name, - //Remove leading dot in main, so main paths are normalized, - //and remove any trailing .js, since different package - //envs have different conventions: some use a module name, - //some use a file name. - main: (pkgObj.main || "main") - .replace(currDirRegExp, '') - .replace(jsSuffixRegExp, '') - }; - } - } - - /** - * jQuery 1.4.3-1.5.x use a readyWait/ready() pairing to hold DOM - * ready callbacks, but jQuery 1.6 supports a holdReady() API instead. - * At some point remove the readyWait/ready() support and just stick - * with using holdReady. - */ - function jQueryHoldReady($, shouldHold) { - if ($.holdReady) { - $.holdReady(shouldHold); - } else if (shouldHold) { - $.readyWait += 1; - } else { - $.ready(true); - } - } - - if (typeof define !== "undefined") { - //If a define is already in play via another AMD loader, - //do not overwrite. - return; - } - - if (typeof requirejs !== "undefined") { - if (isFunction(requirejs)) { - //Do not overwrite and existing requirejs instance. - return; - } else { - cfg = requirejs; - requirejs = undefined; - } - } - - //Allow for a require config object - if (typeof require !== "undefined" && !isFunction(require)) { - //assume it is a config object. - cfg = require; - require = undefined; - } - - /** - * Creates a new context for use in require and define calls. - * Handle most of the heavy lifting. Do not want to use an object - * with prototype here to avoid using "this" in require, in case it - * needs to be used in more super secure envs that do not want this. - * Also there should not be that many contexts in the page. Usually just - * one for the default context, but could be extra for multiversion cases - * or if a package needs a special context for a dependency that conflicts - * with the standard context. - */ - function newContext(contextName) { - var context, resume, - config = { - waitSeconds: 7, - baseUrl: s.baseUrl || "./", - paths: {}, - pkgs: {}, - catchError: {} - }, - defQueue = [], - specified = { - "require": true, - "exports": true, - "module": true - }, - urlMap = {}, - defined = {}, - loaded = {}, - waiting = {}, - waitAry = [], - waitIdCounter = 0, - managerCallbacks = {}, - plugins = {}, - pluginsQueue = {}, - resumeDepth = 0, - normalizedWaiting = {}; - - /** - * Trims the . and .. from an array of path segments. - * It will keep a leading path segment if a .. will become - * the first path segment, to help with module name lookups, - * which act like paths, but can be remapped. But the end result, - * all paths that use this function should look normalized. - * NOTE: this method MODIFIES the input array. - * @param {Array} ary the array of path segments. - */ - function trimDots(ary) { - var i, part; - for (i = 0; (part = ary[i]); i++) { - if (part === ".") { - ary.splice(i, 1); - i -= 1; - } else if (part === "..") { - if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { - //End of the line. Keep at least one non-dot - //path segment at the front so it can be mapped - //correctly to disk. Otherwise, there is likely - //no path mapping for a path starting with '..'. - //This can still fail, but catches the most reasonable - //uses of .. - break; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - - /** - * Given a relative module name, like ./something, normalize it to - * a real name that can be mapped to a path. - * @param {String} name the relative name - * @param {String} baseName a real name that the name arg is relative - * to. - * @returns {String} normalized name - */ - function normalize(name, baseName) { - var pkgName, pkgConfig; - - //Adjust any relative paths. - if (name && name.charAt(0) === ".") { - //If have a base name, try to normalize against it, - //otherwise, assume it is a top-level require that will - //be relative to baseUrl in the end. - if (baseName) { - if (config.pkgs[baseName]) { - //If the baseName is a package name, then just treat it as one - //name to concat the name with. - baseName = [baseName]; - } else { - //Convert baseName to array, and lop off the last part, - //so that . matches that "directory" and not name of the baseName's - //module. For instance, baseName of "one/two/three", maps to - //"one/two/three.js", but we want the directory, "one/two" for - //this normalization. - baseName = baseName.split("/"); - baseName = baseName.slice(0, baseName.length - 1); - } - - name = baseName.concat(name.split("/")); - trimDots(name); - - //Some use of packages may use a . path to reference the - //"main" module name, so normalize for that. - pkgConfig = config.pkgs[(pkgName = name[0])]; - name = name.join("/"); - if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { - name = pkgName; - } - } - } - return name; - } - - /** - * Creates a module mapping that includes plugin prefix, module - * name, and path. If parentModuleMap is provided it will - * also normalize the name via require.normalize() - * - * @param {String} name the module name - * @param {String} [parentModuleMap] parent module map - * for the module name, used to resolve relative names. - * - * @returns {Object} - */ - function makeModuleMap(name, parentModuleMap) { - var index = name ? name.indexOf("!") : -1, - prefix = null, - parentName = parentModuleMap ? parentModuleMap.name : null, - originalName = name, - normalizedName, url, pluginModule; - - if (index !== -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - - if (prefix) { - prefix = normalize(prefix, parentName); - } - - //Account for relative paths if there is a base name. - if (name) { - if (prefix) { - pluginModule = defined[prefix]; - if (pluginModule) { - //Plugin is loaded, use its normalize method, otherwise, - //normalize name as usual. - if (pluginModule.normalize) { - normalizedName = pluginModule.normalize(name, function (name) { - return normalize(name, parentName); - }); - } else { - normalizedName = normalize(name, parentName); - } - } else { - //Plugin is not loaded yet, so do not normalize - //the name, wait for plugin to load to see if - //it has a normalize method. To avoid possible - //ambiguity with relative names loaded from another - //plugin, use the parent's name as part of this name. - normalizedName = '__$p' + parentName + '@' + (name || ''); - } - } else { - normalizedName = normalize(name, parentName); - } - - url = urlMap[normalizedName]; - if (!url) { - //Calculate url for the module, if it has a name. - if (req.toModuleUrl) { - //Special logic required for a particular engine, - //like Node. - url = req.toModuleUrl(context, normalizedName, parentModuleMap); - } else { - url = context.nameToUrl(normalizedName, null, parentModuleMap); - } - - //Store the URL mapping for later. - urlMap[normalizedName] = url; - } - } - - return { - prefix: prefix, - name: normalizedName, - parentMap: parentModuleMap, - url: url, - originalName: originalName, - fullName: prefix ? prefix + "!" + (normalizedName || '') : normalizedName - }; - } - - /** - * Determine if priority loading is done. If so clear the priorityWait - */ - function isPriorityDone() { - var priorityDone = true, - priorityWait = config.priorityWait, - priorityName, i; - if (priorityWait) { - for (i = 0; (priorityName = priorityWait[i]); i++) { - if (!loaded[priorityName]) { - priorityDone = false; - break; - } - } - if (priorityDone) { - delete config.priorityWait; - } - } - return priorityDone; - } - - /** - * Helper function that creates a setExports function for a "module" - * CommonJS dependency. Do this here to avoid creating a closure that - * is part of a loop. - */ - function makeSetExports(moduleObj) { - return function (exports) { - moduleObj.exports = exports; - }; - } - - function makeContextModuleFunc(func, relModuleMap, enableBuildCallback) { - return function () { - //A version of a require function that passes a moduleName - //value for items that may need to - //look up paths relative to the moduleName - var args = [].concat(aps.call(arguments, 0)), lastArg; - if (enableBuildCallback && - isFunction((lastArg = args[args.length - 1]))) { - lastArg.__requireJsBuild = true; - } - args.push(relModuleMap); - return func.apply(null, args); - }; - } - - /** - * Helper function that creates a require function object to give to - * modules that ask for it as a dependency. It needs to be specific - * per module because of the implication of path mappings that may - * need to be relative to the module name. - */ - function makeRequire(relModuleMap, enableBuildCallback) { - var modRequire = makeContextModuleFunc(context.require, relModuleMap, enableBuildCallback); - - mixin(modRequire, { - nameToUrl: makeContextModuleFunc(context.nameToUrl, relModuleMap), - toUrl: makeContextModuleFunc(context.toUrl, relModuleMap), - defined: makeContextModuleFunc(context.requireDefined, relModuleMap), - specified: makeContextModuleFunc(context.requireSpecified, relModuleMap), - ready: req.ready, - isBrowser: req.isBrowser - }); - //Something used by node. - if (req.paths) { - modRequire.paths = req.paths; - } - return modRequire; - } - - /** - * Used to update the normalized name for plugin-based dependencies - * after a plugin loads, since it can have its own normalization structure. - * @param {String} pluginName the normalized plugin module name. - */ - function updateNormalizedNames(pluginName) { - - var oldFullName, oldModuleMap, moduleMap, fullName, callbacks, - i, j, k, depArray, existingCallbacks, - maps = normalizedWaiting[pluginName]; - - if (maps) { - for (i = 0; (oldModuleMap = maps[i]); i++) { - oldFullName = oldModuleMap.fullName; - moduleMap = makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap); - fullName = moduleMap.fullName; - //Callbacks could be undefined if the same plugin!name was - //required twice in a row, so use empty array in that case. - callbacks = managerCallbacks[oldFullName] || []; - existingCallbacks = managerCallbacks[fullName]; - - if (fullName !== oldFullName) { - //Update the specified object, but only if it is already - //in there. In sync environments, it may not be yet. - if (oldFullName in specified) { - delete specified[oldFullName]; - specified[fullName] = true; - } - - //Update managerCallbacks to use the correct normalized name. - //If there are already callbacks for the normalized name, - //just add to them. - if (existingCallbacks) { - managerCallbacks[fullName] = existingCallbacks.concat(callbacks); - } else { - managerCallbacks[fullName] = callbacks; - } - delete managerCallbacks[oldFullName]; - - //In each manager callback, update the normalized name in the depArray. - for (j = 0; j < callbacks.length; j++) { - depArray = callbacks[j].depArray; - for (k = 0; k < depArray.length; k++) { - if (depArray[k] === oldFullName) { - depArray[k] = fullName; - } - } - } - } - } - } - - delete normalizedWaiting[pluginName]; - } - - /* - * Queues a dependency for checking after the loader is out of a - * "paused" state, for example while a script file is being loaded - * in the browser, where it may have many modules defined in it. - * - * depName will be fully qualified, no relative . or .. path. - */ - function queueDependency(dep) { - //Make sure to load any plugin and associate the dependency - //with that plugin. - var prefix = dep.prefix, - fullName = dep.fullName; - - //Do not bother if the depName is already in transit - if (specified[fullName] || fullName in defined) { - return; - } - - if (prefix && !plugins[prefix]) { - //Queue up loading of the dependency, track it - //via context.plugins. Mark it as a plugin so - //that the build system will know to treat it - //special. - plugins[prefix] = undefined; - - //Remember this dep that needs to have normaliztion done - //after the plugin loads. - (normalizedWaiting[prefix] || (normalizedWaiting[prefix] = [])) - .push(dep); - - //Register an action to do once the plugin loads, to update - //all managerCallbacks to use a properly normalized module - //name. - (managerCallbacks[prefix] || - (managerCallbacks[prefix] = [])).push({ - onDep: function (name, value) { - if (name === prefix) { - updateNormalizedNames(prefix); - } - } - }); - - queueDependency(makeModuleMap(prefix)); - } - - context.paused.push(dep); - } - - function execManager(manager) { - var i, ret, waitingCallbacks, err, errFile, errModuleTree, - cb = manager.callback, - fullName = manager.fullName, - args = [], - ary = manager.depArray; - - //Call the callback to define the module, if necessary. - if (cb && isFunction(cb)) { - //Pull out the defined dependencies and pass the ordered - //values to the callback. - if (ary) { - for (i = 0; i < ary.length; i++) { - args.push(manager.deps[ary[i]]); - } - } - - if (config.catchError.define) { - try { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } catch (e) { - err = e; - } - } else { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } - - if (fullName) { - //If setting exports via "module" is in play, - //favor that over return value and exports. After that, - //favor a non-undefined return value over exports use. - if (manager.cjsModule && manager.cjsModule.exports !== undefined) { - ret = defined[fullName] = manager.cjsModule.exports; - } else if (ret === undefined && manager.usingExports) { - //exports already set the defined value. - ret = defined[fullName]; - } else { - //Use the return value from the function. - defined[fullName] = ret; - } - } - } else if (fullName) { - //May just be an object definition for the module. Only - //worry about defining if have a module name. - ret = defined[fullName] = cb; - } - - //Clean up waiting. Do this before error calls, and before - //calling back waitingCallbacks, so that bookkeeping is correct - //in the event of an error and error is reported in correct order, - //since the waitingCallbacks will likely have errors if the - //onError function does not throw. - if (waiting[manager.waitId]) { - delete waiting[manager.waitId]; - manager.isDone = true; - context.waitCount -= 1; - if (context.waitCount === 0) { - //Clear the wait array used for cycles. - waitAry = []; - } - } - - if (err) { - errFile = (fullName ? makeModuleMap(fullName).url : '') || - err.fileName || err.sourceURL; - errModuleTree = err.moduleTree; - err = makeError('defineerror', 'Error evaluating ' + - 'module "' + fullName + '" at location "' + - errFile + '":\n' + - err + '\nfileName:' + errFile + - '\nlineNumber: ' + (err.lineNumber || err.line), err); - err.moduleName = fullName; - err.moduleTree = errModuleTree; - return req.onError(err); - } - - if (fullName) { - //If anything was waiting for this module to be defined, - //notify them now. - waitingCallbacks = managerCallbacks[fullName]; - if (waitingCallbacks) { - for (i = 0; i < waitingCallbacks.length; i++) { - waitingCallbacks[i].onDep(fullName, ret); - } - delete managerCallbacks[fullName]; - } - } - - return undefined; - } - - function main(inName, depArray, callback, relModuleMap) { - var moduleMap = makeModuleMap(inName, relModuleMap), - name = moduleMap.name, - fullName = moduleMap.fullName, - uniques = {}, - manager = { - //Use a wait ID because some entries are anon - //async require calls. - waitId: name || reqWaitIdPrefix + (waitIdCounter++), - depCount: 0, - depMax: 0, - prefix: moduleMap.prefix, - name: name, - fullName: fullName, - deps: {}, - depArray: depArray, - callback: callback, - onDep: function (depName, value) { - if (!(depName in manager.deps)) { - manager.deps[depName] = value; - manager.depCount += 1; - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } - } - } - }, - i, depArg, depName, cjsMod; - - if (fullName) { - //If module already defined for context, or already loaded, - //then leave. Also leave if jQuery is registering but it does - //not match the desired version number in the config. - if (fullName in defined || loaded[fullName] === true || - (fullName === "jquery" && config.jQuery && - config.jQuery !== callback().fn.jquery)) { - return; - } - - //Set specified/loaded here for modules that are also loaded - //as part of a layer, where onScriptLoad is not fired - //for those cases. Do this after the inline define and - //dependency tracing is done. - specified[fullName] = true; - loaded[fullName] = true; - - //If module is jQuery set up delaying its dom ready listeners. - if (fullName === "jquery" && callback) { - jQueryCheck(callback()); - } - } - - //Add the dependencies to the deps field, and register for callbacks - //on the dependencies. - for (i = 0; i < depArray.length; i++) { - depArg = depArray[i]; - //There could be cases like in IE, where a trailing comma will - //introduce a null dependency, so only treat a real dependency - //value as a dependency. - if (depArg) { - //Split the dependency name into plugin and name parts - depArg = makeModuleMap(depArg, (name ? moduleMap : relModuleMap)); - depName = depArg.fullName; - - //Fix the name in depArray to be just the name, since - //that is how it will be called back later. - depArray[i] = depName; - - //Fast path CommonJS standard dependencies. - if (depName === "require") { - manager.deps[depName] = makeRequire(moduleMap); - } else if (depName === "exports") { - //CommonJS module spec 1.1 - manager.deps[depName] = defined[fullName] = {}; - manager.usingExports = true; - } else if (depName === "module") { - //CommonJS module spec 1.1 - manager.cjsModule = cjsMod = manager.deps[depName] = { - id: name, - uri: name ? context.nameToUrl(name, null, relModuleMap) : undefined, - exports: defined[fullName] - }; - cjsMod.setExports = makeSetExports(cjsMod); - } else if (depName in defined && !(depName in waiting)) { - //Module already defined, no need to wait for it. - manager.deps[depName] = defined[depName]; - } else if (!uniques[depName]) { - - //A dynamic dependency. - manager.depMax += 1; - - queueDependency(depArg); - - //Register to get notification when dependency loads. - (managerCallbacks[depName] || - (managerCallbacks[depName] = [])).push(manager); - - uniques[depName] = true; - } - } - } - - //Do not bother tracking the manager if it is all done. - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } else { - waiting[manager.waitId] = manager; - waitAry.push(manager); - context.waitCount += 1; - } - } - - /** - * Convenience method to call main for a define call that was put on - * hold in the defQueue. - */ - function callDefMain(args) { - main.apply(null, args); - //Mark the module loaded. Must do it here in addition - //to doing it in define in case a script does - //not call define - loaded[args[0]] = true; - } - - /** - * jQuery 1.4.3+ supports ways to hold off calling - * calling jQuery ready callbacks until all scripts are loaded. Be sure - * to track it if the capability exists.. Also, since jQuery 1.4.3 does - * not register as a module, need to do some global inference checking. - * Even if it does register as a module, not guaranteed to be the precise - * name of the global. If a jQuery is tracked for this context, then go - * ahead and register it as a module too, if not already in process. - */ - jQueryCheck = function (jqCandidate) { - if (!context.jQuery) { - var $ = jqCandidate || (typeof jQuery !== "undefined" ? jQuery : null); - - if ($) { - //If a specific version of jQuery is wanted, make sure to only - //use this jQuery if it matches. - if (config.jQuery && $.fn.jquery !== config.jQuery) { - return; - } - - if ("holdReady" in $ || "readyWait" in $) { - context.jQuery = $; - - //Manually create a "jquery" module entry if not one already - //or in process. Note this could trigger an attempt at - //a second jQuery registration, but does no harm since - //the first one wins, and it is the same value anyway. - callDefMain(["jquery", [], function () { - return jQuery; - }]); - - //Ask jQuery to hold DOM ready callbacks. - if (context.scriptCount) { - jQueryHoldReady($, true); - context.jQueryIncremented = true; - } - } - } - } - }; - - function forceExec(manager, traced) { - if (manager.isDone) { - return undefined; - } - - var fullName = manager.fullName, - depArray = manager.depArray, - depName, i; - if (fullName) { - if (traced[fullName]) { - return defined[fullName]; - } - - traced[fullName] = true; - } - - //forceExec all of its dependencies. - for (i = 0; i < depArray.length; i++) { - //Some array members may be null, like if a trailing comma - //IE, so do the explicit [i] access and check if it has a value. - depName = depArray[i]; - if (depName) { - if (!manager.deps[depName] && waiting[depName]) { - manager.onDep(depName, forceExec(waiting[depName], traced)); - } - } - } - - return fullName ? defined[fullName] : undefined; - } - - /** - * Checks if all modules for a context are loaded, and if so, evaluates the - * new ones in right dependency order. - * - * @private - */ - function checkLoaded() { - var waitInterval = config.waitSeconds * 1000, - //It is possible to disable the wait interval by using waitSeconds of 0. - expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), - noLoads = "", hasLoadedProp = false, stillLoading = false, prop, - err, manager; - - //If there are items still in the paused queue processing wait. - //This is particularly important in the sync case where each paused - //item is processed right away but there may be more waiting. - if (context.pausedCount > 0) { - return undefined; - } - - //Determine if priority loading is done. If so clear the priority. If - //not, then do not check - if (config.priorityWait) { - if (isPriorityDone()) { - //Call resume, since it could have - //some waiting dependencies to trace. - resume(); - } else { - return undefined; - } - } - - //See if anything is still in flight. - for (prop in loaded) { - if (!(prop in empty)) { - hasLoadedProp = true; - if (!loaded[prop]) { - if (expired) { - noLoads += prop + " "; - } else { - stillLoading = true; - break; - } - } - } - } - - //Check for exit conditions. - if (!hasLoadedProp && !context.waitCount) { - //If the loaded object had no items, then the rest of - //the work below does not need to be done. - return undefined; - } - if (expired && noLoads) { - //If wait time expired, throw error of unloaded modules. - err = makeError("timeout", "Load timeout for modules: " + noLoads); - err.requireType = "timeout"; - err.requireModules = noLoads; - return req.onError(err); - } - if (stillLoading || context.scriptCount) { - //Something is still waiting to load. Wait for it, but only - //if a timeout is not already in effect. - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function () { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - return undefined; - } - - //If still have items in the waiting cue, but all modules have - //been loaded, then it means there are some circular dependencies - //that need to be broken. - //However, as a waiting thing is fired, then it can add items to - //the waiting cue, and those items should not be fired yet, so - //make sure to redo the checkLoaded call after breaking a single - //cycle, if nothing else loaded then this logic will pick it up - //again. - if (context.waitCount) { - //Cycle through the waitAry, and call items in sequence. - for (i = 0; (manager = waitAry[i]); i++) { - forceExec(manager, {}); - } - - //Only allow this recursion to a certain depth. Only - //triggered by errors in calling a module in which its - //modules waiting on it cannot finish loading, or some circular - //dependencies that then may add more dependencies. - //The value of 5 is a bit arbitrary. Hopefully just one extra - //pass, or two for the case of circular dependencies generating - //more work that gets resolved in the sync node case. - if (checkLoadedDepth < 5) { - checkLoadedDepth += 1; - checkLoaded(); - } - } - - checkLoadedDepth = 0; - - //Check for DOM ready, and nothing is waiting across contexts. - req.checkReadyState(); - - return undefined; - } - - function callPlugin(pluginName, dep) { - var name = dep.name, - fullName = dep.fullName, - load; - - //Do not bother if plugin is already defined or being loaded. - if (fullName in defined || fullName in loaded) { - return; - } - - if (!plugins[pluginName]) { - plugins[pluginName] = defined[pluginName]; - } - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[fullName]) { - loaded[fullName] = false; - } - - load = function (ret) { - //Allow the build process to register plugin-loaded dependencies. - if (req.onPluginLoad) { - req.onPluginLoad(context, pluginName, name, ret); - } - - execManager({ - prefix: dep.prefix, - name: dep.name, - fullName: dep.fullName, - callback: function () { - return ret; - } - }); - loaded[fullName] = true; - }; - - //Allow plugins to load other code without having to know the - //context or how to "complete" the load. - load.fromText = function (moduleName, text) { - /*jslint evil: true */ - var hasInteractive = useInteractive; - - //Indicate a the module is in process of loading. - context.loaded[moduleName] = false; - context.scriptCount += 1; - - //Turn off interactive script matching for IE for any define - //calls in the text, then turn it back on at the end. - if (hasInteractive) { - useInteractive = false; - } - - req.exec(text); - - if (hasInteractive) { - useInteractive = true; - } - - //Support anonymous modules. - context.completeLoad(moduleName); - }; - - //Use parentName here since the plugin's name is not reliable, - //could be some weird string with no path that actually wants to - //reference the parentName's path. - plugins[pluginName].load(name, makeRequire(dep.parentMap, true), load, config); - } - - function loadPaused(dep) { - //Renormalize dependency if its name was waiting on a plugin - //to load, which as since loaded. - if (dep.prefix && dep.name && dep.name.indexOf('__$p') === 0 && defined[dep.prefix]) { - dep = makeModuleMap(dep.originalName, dep.parentMap); - } - - var pluginName = dep.prefix, - fullName = dep.fullName, - urlFetched = context.urlFetched; - - //Do not bother if the dependency has already been specified. - if (specified[fullName] || loaded[fullName]) { - return; - } else { - specified[fullName] = true; - } - - if (pluginName) { - //If plugin not loaded, wait for it. - //set up callback list. if no list, then register - //managerCallback for that plugin. - if (defined[pluginName]) { - callPlugin(pluginName, dep); - } else { - if (!pluginsQueue[pluginName]) { - pluginsQueue[pluginName] = []; - (managerCallbacks[pluginName] || - (managerCallbacks[pluginName] = [])).push({ - onDep: function (name, value) { - if (name === pluginName) { - var i, oldModuleMap, ary = pluginsQueue[pluginName]; - - //Now update all queued plugin actions. - for (i = 0; i < ary.length; i++) { - oldModuleMap = ary[i]; - //Update the moduleMap since the - //module name may be normalized - //differently now. - callPlugin(pluginName, - makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap)); - } - delete pluginsQueue[pluginName]; - } - } - }); - } - pluginsQueue[pluginName].push(dep); - } - } else { - if (!urlFetched[dep.url]) { - req.load(context, fullName, dep.url); - urlFetched[dep.url] = true; - } - } - } - - /** - * Resumes tracing of dependencies and then checks if everything is loaded. - */ - resume = function () { - var args, i, p; - - resumeDepth += 1; - - if (context.scriptCount <= 0) { - //Synchronous envs will push the number below zero with the - //decrement above, be sure to set it back to zero for good measure. - //require() calls that also do not end up loading scripts could - //push the number negative too. - context.scriptCount = 0; - } - - //Make sure any remaining defQueue items get properly processed. - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return req.onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); - } else { - callDefMain(args); - } - } - - //Skip the resume of paused dependencies - //if current context is in priority wait. - if (!config.priorityWait || isPriorityDone()) { - while (context.paused.length) { - p = context.paused; - context.pausedCount += p.length; - //Reset paused list - context.paused = []; - - for (i = 0; (args = p[i]); i++) { - loadPaused(args); - } - //Move the start time for timeout forward. - context.startTime = (new Date()).getTime(); - context.pausedCount -= p.length; - } - } - - //Only check if loaded when resume depth is 1. It is likely that - //it is only greater than 1 in sync environments where a factory - //function also then calls the callback-style require. In those - //cases, the checkLoaded should not occur until the resume - //depth is back at the top level. - if (resumeDepth === 1) { - checkLoaded(); - } - - resumeDepth -= 1; - - return undefined; - }; - - //Define the context object. Many of these fields are on here - //just to make debugging easier. - context = { - contextName: contextName, - config: config, - defQueue: defQueue, - waiting: waiting, - waitCount: 0, - specified: specified, - loaded: loaded, - urlMap: urlMap, - scriptCount: 0, - urlFetched: {}, - defined: defined, - paused: [], - pausedCount: 0, - plugins: plugins, - managerCallbacks: managerCallbacks, - makeModuleMap: makeModuleMap, - normalize: normalize, - /** - * Set a configuration for the context. - * @param {Object} cfg config object to integrate. - */ - configure: function (cfg) { - var paths, prop, packages, pkgs, packagePaths, requireWait; - - //Make sure the baseUrl ends in a slash. - if (cfg.baseUrl) { - if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== "/") { - cfg.baseUrl += "/"; - } - } - - //Save off the paths and packages since they require special processing, - //they are additive. - paths = config.paths; - packages = config.packages; - pkgs = config.pkgs; - - //Mix in the config values, favoring the new values over - //existing ones in context.config. - mixin(config, cfg, true); - - //Adjust paths if necessary. - if (cfg.paths) { - for (prop in cfg.paths) { - if (!(prop in empty)) { - paths[prop] = cfg.paths[prop]; - } - } - config.paths = paths; - } - - packagePaths = cfg.packagePaths; - if (packagePaths || cfg.packages) { - //Convert packagePaths into a packages config. - if (packagePaths) { - for (prop in packagePaths) { - if (!(prop in empty)) { - configurePackageDir(pkgs, packagePaths[prop], prop); - } - } - } - - //Adjust packages if necessary. - if (cfg.packages) { - configurePackageDir(pkgs, cfg.packages); - } - - //Done with modifications, assing packages back to context config - config.pkgs = pkgs; - } - - //If priority loading is in effect, trigger the loads now - if (cfg.priority) { - //Hold on to requireWait value, and reset it after done - requireWait = context.requireWait; - - //Allow tracing some require calls to allow the fetching - //of the priority config. - context.requireWait = false; - //But first, call resume to register any defined modules that may - //be in a data-main built file before the priority config - //call. Also grab any waiting define calls for this context. - context.takeGlobalQueue(); - resume(); - - context.require(cfg.priority); - - //Trigger a resume right away, for the case when - //the script with the priority load is done as part - //of a data-main call. In that case the normal resume - //call will not happen because the scriptCount will be - //at 1, since the script for data-main is being processed. - resume(); - - //Restore previous state. - context.requireWait = requireWait; - config.priorityWait = cfg.priority; - } - - //If a deps array or a config callback is specified, then call - //require with those args. This is useful when require is defined as a - //config object before require.js is loaded. - if (cfg.deps || cfg.callback) { - context.require(cfg.deps || [], cfg.callback); - } - - //Set up ready callback, if asked. Useful when require is defined as a - //config object before require.js is loaded. - if (cfg.ready) { - req.ready(cfg.ready); - } - }, - - requireDefined: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in defined; - }, - - requireSpecified: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in specified; - }, - - require: function (deps, callback, relModuleMap) { - var moduleName, fullName, moduleMap; - if (typeof deps === "string") { - //Synchronous access to one module. If require.get is - //available (as in the Node adapter), prefer that. - //In this case deps is the moduleName and callback is - //the relModuleMap - if (req.get) { - return req.get(context, deps, callback); - } - - //Just return the module wanted. In this scenario, the - //second arg (if passed) is just the relModuleMap. - moduleName = deps; - relModuleMap = callback; - - //Normalize module name, if it contains . or .. - moduleMap = makeModuleMap(moduleName, relModuleMap); - fullName = moduleMap.fullName; - - if (!(fullName in defined)) { - return req.onError(makeError("notloaded", "Module name '" + - moduleMap.fullName + - "' has not been loaded yet for context: " + - contextName)); - } - return defined[fullName]; - } - - main(null, deps, callback, relModuleMap); - - //If the require call does not trigger anything new to load, - //then resume the dependency processing. - if (!context.requireWait) { - while (!context.scriptCount && context.paused.length) { - //For built layers, there can be some defined - //modules waiting for intake into the context, - //in particular module plugins. Take them. - context.takeGlobalQueue(); - resume(); - } - } - return context.require; - }, - - /** - * Internal method to transfer globalQueue items to this context's - * defQueue. - */ - takeGlobalQueue: function () { - //Push all the globalDefQueue items into the context's defQueue - if (globalDefQueue.length) { - //Array splice in the values since the context code has a - //local var ref to defQueue, so cannot just reassign the one - //on context. - apsp.apply(context.defQueue, - [context.defQueue.length - 1, 0].concat(globalDefQueue)); - globalDefQueue = []; - } - }, - - /** - * Internal method used by environment adapters to complete a load event. - * A load event could be a script load or just a load pass from a synchronous - * load call. - * @param {String} moduleName the name of the module to potentially complete. - */ - completeLoad: function (moduleName) { - var args; - - context.takeGlobalQueue(); - - while (defQueue.length) { - args = defQueue.shift(); - - if (args[0] === null) { - args[0] = moduleName; - break; - } else if (args[0] === moduleName) { - //Found matching define call for this script! - break; - } else { - //Some other named define call, most likely the result - //of a build layer that included many define calls. - callDefMain(args); - args = null; - } - } - if (args) { - callDefMain(args); - } else { - //A script that does not call define(), so just simulate - //the call for it. Special exception for jQuery dynamic load. - callDefMain([moduleName, [], - moduleName === "jquery" && typeof jQuery !== "undefined" ? - function () { - return jQuery; - } : null]); - } - - //Mark the script as loaded. Note that this can be different from a - //moduleName that maps to a define call. This line is important - //for traditional browser scripts. - loaded[moduleName] = true; - - //If a global jQuery is defined, check for it. Need to do it here - //instead of main() since stock jQuery does not register as - //a module via define. - jQueryCheck(); - - //Doing this scriptCount decrement branching because sync envs - //need to decrement after resume, otherwise it looks like - //loading is complete after the first dependency is fetched. - //For browsers, it works fine to decrement after, but it means - //the checkLoaded setTimeout 50 ms cost is taken. To avoid - //that cost, decrement beforehand. - if (req.isAsync) { - context.scriptCount -= 1; - } - resume(); - if (!req.isAsync) { - context.scriptCount -= 1; - } - }, - - /** - * Converts a module name + .extension into an URL path. - * *Requires* the use of a module name. It does not support using - * plain URLs like nameToUrl. - */ - toUrl: function (moduleNamePlusExt, relModuleMap) { - var index = moduleNamePlusExt.lastIndexOf("."), - ext = null; - - if (index !== -1) { - ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - - return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap); - }, - - /** - * Converts a module name to a file path. Supports cases where - * moduleName may actually be just an URL. - */ - nameToUrl: function (moduleName, ext, relModuleMap) { - var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, - config = context.config; - - //Normalize module name if have a base relative module name to work from. - moduleName = normalize(moduleName, relModuleMap && relModuleMap.fullName); - - //If a colon is in the URL, it indicates a protocol is used and it is just - //an URL to a file, or if it starts with a slash or ends with .js, it is just a plain file. - //The slash is important for protocol-less URLs as well as full paths. - if (req.jsExtRegExp.test(moduleName)) { - //Just a plain path, not module name lookup, so just return it. - //Add extension if it is included. This is a bit wonky, only non-.js things pass - //an extension, this method probably needs to be reworked. - url = moduleName + (ext ? ext : ""); - } else { - //A module that needs to be converted to a path. - paths = config.paths; - pkgs = config.pkgs; - - syms = moduleName.split("/"); - //For each module name segment, see if there is a path - //registered for it. Start with most specific name - //and work up from it. - for (i = syms.length; i > 0; i--) { - parentModule = syms.slice(0, i).join("/"); - if (paths[parentModule]) { - syms.splice(0, i, paths[parentModule]); - break; - } else if ((pkg = pkgs[parentModule])) { - //If module name is just the package name, then looking - //for the main module. - if (moduleName === pkg.name) { - pkgPath = pkg.location + '/' + pkg.main; - } else { - pkgPath = pkg.location; - } - syms.splice(0, i, pkgPath); - break; - } - } - - //Join the path parts together, then figure out if baseUrl is needed. - url = syms.join("/") + (ext || ".js"); - url = (url.charAt(0) === '/' || url.match(/^\w+:/) ? "" : config.baseUrl) + url; - } - - return config.urlArgs ? url + - ((url.indexOf('?') === -1 ? '?' : '&') + - config.urlArgs) : url; - } - }; - - //Make these visible on the context so can be called at the very - //end of the file to bootstrap - context.jQueryCheck = jQueryCheck; - context.resume = resume; - - return context; - } - - /** - * Main entry point. - * - * If the only argument to require is a string, then the module that - * is represented by that string is fetched for the appropriate context. - * - * If the first argument is an array, then it will be treated as an array - * of dependency string names to fetch. An optional function callback can - * be specified to execute when all of those dependencies are available. - * - * Make a local req variable to help Caja compliance (it assumes things - * on a require that are not standardized), and to give a short - * name for minification/local scope use. - */ - req = requirejs = function (deps, callback) { - - //Find the right context, use default - var contextName = defContextName, - context, config; - - // Determine if have config object in the call. - if (!isArray(deps) && typeof deps !== "string") { - // deps is a config object - config = deps; - if (isArray(callback)) { - // Adjust args if there are dependencies - deps = callback; - callback = arguments[2]; - } else { - deps = []; - } - } - - if (config && config.context) { - contextName = config.context; - } - - context = contexts[contextName] || - (contexts[contextName] = newContext(contextName)); - - if (config) { - context.configure(config); - } - - return context.require(deps, callback); - }; - - /** - * Support require.config() to make it easier to cooperate with other - * AMD loaders on globally agreed names. - */ - req.config = function (config) { - return req(config); - }; - - /** - * Export require as a global, but only if it does not already exist. - */ - if (typeof require === "undefined") { - require = req; - } - - /** - * Global require.toUrl(), to match global require, mostly useful - * for debugging/work in the global space. - */ - req.toUrl = function (moduleNamePlusExt) { - return contexts[defContextName].toUrl(moduleNamePlusExt); - }; - - req.version = version; - req.isArray = isArray; - req.isFunction = isFunction; - req.mixin = mixin; - //Used to filter out dependencies that are already paths. - req.jsExtRegExp = /^\/|:|\?|\.js$/; - s = req.s = { - contexts: contexts, - //Stores a list of URLs that should not get async script tag treatment. - skipAsync: {}, - isPageLoaded: !isBrowser, - readyCalls: [] - }; - - req.isAsync = req.isBrowser = isBrowser; - if (isBrowser) { - head = s.head = document.getElementsByTagName("head")[0]; - //If BASE tag is in play, using appendChild is a problem for IE6. - //When that browser dies, this can be removed. Details in this jQuery bug: - //http://dev.jquery.com/ticket/2709 - baseElement = document.getElementsByTagName("base")[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - - /** - * Any errors that require explicitly generates will be passed to this - * function. Intercept/override it if you want custom error handling. - * @param {Error} err the error object. - */ - req.onError = function (err) { - throw err; - }; - - /** - * Does the request to load a module for the browser case. - * Make this a separate function to allow other environments - * to override it. - * - * @param {Object} context the require context to find state. - * @param {String} moduleName the name of the module. - * @param {Object} url the URL to the module. - */ - req.load = function (context, moduleName, url) { - var loaded = context.loaded; - - isDone = false; - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[moduleName]) { - loaded[moduleName] = false; - } - - context.scriptCount += 1; - req.attach(url, context, moduleName); - - //If tracking a jQuery, then make sure its ready callbacks - //are put on hold to prevent its ready callbacks from - //triggering too soon. - if (context.jQuery && !context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, true); - context.jQueryIncremented = true; - } - }; - - function getInteractiveScript() { - var scripts, i, script; - if (interactiveScript && interactiveScript.readyState === 'interactive') { - return interactiveScript; - } - - scripts = document.getElementsByTagName('script'); - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - if (script.readyState === 'interactive') { - return (interactiveScript = script); - } - } - - return null; - } - - /** - * The function that handles definitions of modules. Differs from - * require() in that a string for the module should be the first argument, - * and the function to execute after dependencies are loaded should - * return a value to define the module corresponding to the first argument's - * name. - */ - define = req.def = function (name, deps, callback) { - var node, context; - - //Allow for anonymous functions - if (typeof name !== 'string') { - //Adjust args appropriately - callback = deps; - deps = name; - name = null; - } - - //This module may not have dependencies - if (!req.isArray(deps)) { - callback = deps; - deps = []; - } - - //If no name, and callback is a function, then figure out if it a - //CommonJS thing with dependencies. - if (!name && !deps.length && req.isFunction(callback)) { - //Remove comments from the callback string, - //look for require calls, and pull them into the dependencies, - //but only if there are function args. - if (callback.length) { - callback - .toString() - .replace(commentRegExp, "") - .replace(cjsRequireRegExp, function (match, dep) { - deps.push(dep); - }); - - //May be a CommonJS thing even without require calls, but still - //could use exports, and module. Avoid doing exports and module - //work though if it just needs require. - //REQUIRES the function to expect the CommonJS variables in the - //order listed below. - deps = (callback.length === 1 ? ["require"] : ["require", "exports", "module"]).concat(deps); - } - } - - //If in IE 6-8 and hit an anonymous define() call, do the interactive - //work. - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute("data-requiremodule"); - } - context = contexts[node.getAttribute("data-requirecontext")]; - } - } - - //Always save off evaluating the def call until the script onload handler. - //This allows multiple modules to be in a file without prematurely - //tracing dependencies, and allows for anonymous module support, - //where the module name is not known until the script onload event - //occurs. If no context, use the global queue, and get it processed - //in the onscript load callback. - (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); - - return undefined; - }; - - define.amd = { - multiversion: true, - plugins: true, - jQuery: true - }; - - /** - * Executes the text. Normally just uses eval, but can be modified - * to use a more environment specific call. - * @param {String} text the text to execute/evaluate. - */ - req.exec = function (text) { - return eval(text); - }; - - /** - * Executes a module callack function. Broken out as a separate function - * solely to allow the build system to sequence the files in the built - * layer in the right sequence. - * - * @private - */ - req.execCb = function (name, callback, args, exports) { - return callback.apply(exports, args); - }; - - /** - * callback for script loads, used to check status of loading. - * - * @param {Event} evt the event from the browser for the script - * that was loaded. - * - * @private - */ - req.onScriptLoad = function (evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - var node = evt.currentTarget || evt.srcElement, contextName, moduleName, - context; - - if (evt.type === "load" || readyRegExp.test(node.readyState)) { - //Reset interactive script so a script node is not held onto for - //to long. - interactiveScript = null; - - //Pull out the name of the module and the context. - contextName = node.getAttribute("data-requirecontext"); - moduleName = node.getAttribute("data-requiremodule"); - context = contexts[contextName]; - - contexts[contextName].completeLoad(moduleName); - - //Clean up script binding. Favor detachEvent because of IE9 - //issue, see attachEvent/addEventListener comment elsewhere - //in this file. - if (node.detachEvent && !isOpera) { - //Probably IE. If not it will throw an error, which will be - //useful to know. - node.detachEvent("onreadystatechange", req.onScriptLoad); - } else { - node.removeEventListener("load", req.onScriptLoad, false); - } - } - }; - - /** - * Attaches the script represented by the URL to the current - * environment. Right now only supports browser loading, - * but can be redefined in other environments to do the right thing. - * @param {String} url the url of the script to attach. - * @param {Object} context the context that wants the script. - * @param {moduleName} the name of the module that is associated with the script. - * @param {Function} [callback] optional callback, defaults to require.onScriptLoad - * @param {String} [type] optional type, defaults to text/javascript - */ - req.attach = function (url, context, moduleName, callback, type) { - var node, loaded; - if (isBrowser) { - //In the browser so use a script tag - callback = callback || req.onScriptLoad; - node = context && context.config && context.config.xhtml ? - document.createElementNS("http://www.w3.org/1999/xhtml", "html:script") : - document.createElement("script"); - node.type = type || "text/javascript"; - node.charset = "utf-8"; - //Use async so Gecko does not block on executing the script if something - //like a long-polling comet tag is being run first. Gecko likes - //to evaluate scripts in DOM order, even for dynamic scripts. - //It will fetch them async, but only evaluate the contents in DOM - //order, so a long-polling script tag can delay execution of scripts - //after it. But telling Gecko we expect async gets us the behavior - //we want -- execute it whenever it is finished downloading. Only - //Helps Firefox 3.6+ - //Allow some URLs to not be fetched async. Mostly helps the order! - //plugin - node.async = !s.skipAsync[url]; - - if (context) { - node.setAttribute("data-requirecontext", context.contextName); - } - node.setAttribute("data-requiremodule", moduleName); - - //Set up load listener. Test attachEvent first because IE9 has - //a subtle issue in its addEventListener and script onload firings - //that do not match the behavior of all other browsers with - //addEventListener support, which fire the onload event for a - //script right after the script execution. See: - //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution - //UNFORTUNATELY Opera implements attachEvent but does not follow the script - //script execution mode. - if (node.attachEvent && !isOpera) { - //Probably IE. IE (at least 6-8) do not fire - //script onload right after executing the script, so - //we cannot tie the anonymous define call to a name. - //However, IE reports the script as being in "interactive" - //readyState at the time of the define call. - useInteractive = true; - node.attachEvent("onreadystatechange", callback); - } else { - node.addEventListener("load", callback, false); - } - node.src = url; - - //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous define - //call to the module name (which is stored on the node), hold on - //to a reference to this node, but clear after the DOM insertion. - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - return node; - } else if (isWebWorker) { - //In a web worker, use importScripts. This is not a very - //efficient use of importScripts, importScripts will block until - //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation that a build has been done so that - //only one script needs to be loaded anyway. This may need to be - //reevaluated if other use cases become common. - loaded = context.loaded; - loaded[moduleName] = false; - - importScripts(url); - - //Account for anonymous modules - context.completeLoad(moduleName); - } - return null; - }; - - //Look for a data-main script attribute, which could also adjust the baseUrl. - if (isBrowser) { - //Figure out baseUrl. Get it from the script tag with require.js in it. - scripts = document.getElementsByTagName("script"); - - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - //Set the "head" where we can append children by - //using the script's parent. - if (!head) { - head = script.parentNode; - } - - //Look for a data-main attribute to set main script for the page - //to load. If it is there, the path to data main becomes the - //baseUrl, if it is not already set. - if ((dataMain = script.getAttribute('data-main'))) { - if (!cfg.baseUrl) { - //Pull off the directory of data-main for use as the - //baseUrl. - src = dataMain.split('/'); - mainScript = src.pop(); - subPath = src.length ? src.join('/') + '/' : './'; - - //Set final config. - cfg.baseUrl = subPath; - //Strip off any trailing .js since dataMain is now - //like a module name. - dataMain = mainScript.replace(jsSuffixRegExp, ''); - } - - //Put the data-main script in the files to load. - cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; - - break; - } - } - } - - //Set baseUrl based on config. - s.baseUrl = cfg.baseUrl; - - //****** START page load functionality **************** - /** - * Sets the page as loaded and triggers check for all modules loaded. - */ - req.pageLoaded = function () { - if (!s.isPageLoaded) { - s.isPageLoaded = true; - if (scrollIntervalId) { - clearInterval(scrollIntervalId); - } - - //Part of a fix for FF < 3.6 where readyState was not set to - //complete so libraries like jQuery that check for readyState - //after page load where not getting initialized correctly. - //Original approach suggested by Andrea Giammarchi: - //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html - //see other setReadyState reference for the rest of the fix. - if (setReadyState) { - document.readyState = "complete"; - } - - req.callReady(); - } - }; - - //See if there is nothing waiting across contexts, and if not, trigger - //callReady. - req.checkReadyState = function () { - var contexts = s.contexts, prop; - for (prop in contexts) { - if (!(prop in empty)) { - if (contexts[prop].waitCount) { - return; - } - } - } - s.isDone = true; - req.callReady(); - }; - - /** - * Internal function that calls back any ready functions. If you are - * integrating RequireJS with another library without require.ready support, - * you can define this method to call your page ready code instead. - */ - req.callReady = function () { - var callbacks = s.readyCalls, i, callback, contexts, context, prop; - - if (s.isPageLoaded && s.isDone) { - if (callbacks.length) { - s.readyCalls = []; - for (i = 0; (callback = callbacks[i]); i++) { - callback(); - } - } - - //If jQuery with DOM ready delayed, release it now. - contexts = s.contexts; - for (prop in contexts) { - if (!(prop in empty)) { - context = contexts[prop]; - if (context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, false); - context.jQueryIncremented = false; - } - } - } - } - }; - - /** - * Registers functions to call when the page is loaded - */ - req.ready = function (callback) { - if (s.isPageLoaded && s.isDone) { - callback(); - } else { - s.readyCalls.push(callback); - } - return req; - }; - - if (isBrowser) { - if (document.addEventListener) { - //Standards. Hooray! Assumption here that if standards based, - //it knows about DOMContentLoaded. - document.addEventListener("DOMContentLoaded", req.pageLoaded, false); - window.addEventListener("load", req.pageLoaded, false); - //Part of FF < 3.6 readystate fix (see setReadyState refs for more info) - if (!document.readyState) { - setReadyState = true; - document.readyState = "loading"; - } - } else if (window.attachEvent) { - window.attachEvent("onload", req.pageLoaded); - - //DOMContentLoaded approximation, as found by Diego Perini: - //http://javascript.nwbox.com/IEContentLoaded/ - if (self === self.top) { - scrollIntervalId = setInterval(function () { - try { - //From this ticket: - //http://bugs.dojotoolkit.org/ticket/11106, - //In IE HTML Application (HTA), such as in a selenium test, - //javascript in the iframe can't see anything outside - //of it, so self===self.top is true, but the iframe is - //not the top window and doScroll will be available - //before document.body is set. Test document.body - //before trying the doScroll trick. - if (document.body) { - document.documentElement.doScroll("left"); - req.pageLoaded(); - } - } catch (e) {} - }, 30); - } - } - - //Check if document already complete, and if so, just trigger page load - //listeners. NOTE: does not work with Firefox before 3.6. To support - //those browsers, manually call require.pageLoaded(). - if (document.readyState === "complete") { - req.pageLoaded(); - } - } - //****** END page load functionality **************** - - //Set up default context. If require was a configuration object, use that as base config. - req(cfg); - - //If modules are built into require.js, then need to make sure dependencies are - //traced. Use a setTimeout in the browser world, to allow all the modules to register - //themselves. In a non-browser env, assume that modules are not built into require.js, - //which seems odd to do on the server. - if (req.isAsync && typeof setTimeout !== "undefined") { - ctx = s.contexts[(cfg.context || defContextName)]; - //Indicate that the script that includes require() is still loading, - //so that require()'d dependencies are not traced until the end of the - //file is parsed (approximated via the setTimeout call). - ctx.requireWait = true; - setTimeout(function () { - ctx.requireWait = false; - - //Any modules included with the require.js file will be in the - //global queue, assign them to this context. - ctx.takeGlobalQueue(); - - //Allow for jQuery to be loaded/already in the page, and if jQuery 1.4.3, - //make sure to hold onto it for readyWait triggering. - ctx.jQueryCheck(); - - if (!ctx.scriptCount) { - ctx.resume(); - } - req.checkReadyState(); - }, 0); - } -}()); diff --git a/temp/idbwrapper/0.1.1/package/example/objectstore/app.js b/temp/idbwrapper/0.1.1/package/example/objectstore/app.js deleted file mode 100644 index 21e828a52..000000000 --- a/temp/idbwrapper/0.1.1/package/example/objectstore/app.js +++ /dev/null @@ -1,93 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var objStore; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") - objStore = new IDBStore({ - storeName: 'objectstore', - keyPath: 'id', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - objStore.getAll(listItems); - } - - function listItems(data){ - var header, tpl, - props = ['id'], - content = ''; - - data.forEach(function(item){ - for(var prop in item){ - if(props.indexOf(prop) < 0){ - props.push(prop); - } - } - }); - - header = '' + props.join('') + ''; - tpl = '{' + props.join('}{') + '}'; - - data.forEach(function(item){ - content += tpl.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key] || ''; - }); - }); - - nodeCache['results-container'].innerHTML = '' + header + content + '
'; - } - - function enterData(){ - // read data from inputs - var propName, value, hasData, - data = {}, - count = 4; - - while(--count){ - propName = document.getElementById('prop_' + count).value.trim(); - if(propName.length){ - hasData = true; - value = document.getElementById('value_' + count).value.trim(); - // Don't do this at home. This is just a very dirty hack to 'guess' what - // type of data you just entered. If you do stuff like this in production - // code, UNICORNS WILL DIE. You have been warned. - data[propName] = ['{', '['].indexOf(value.substring(0,1)) !== -1 ? eval('(' + value + ')') : parseInt(value, 10) || value; - } - } - if(!hasData){ - return; - } - - // and store them away. - objStore.put(data, refreshTable); - } - - function clear(){ - objStore.clear(refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - clear: clear - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.1.1/package/example/objectstore/index.html b/temp/idbwrapper/0.1.1/package/example/objectstore/index.html deleted file mode 100644 index 44a316628..000000000 --- a/temp/idbwrapper/0.1.1/package/example/objectstore/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - IDBWrapper ObjectStore Example - - - - - -
-
- QueryResults -
-
-
-
-

- IDB is not a relational database; it's an object store. That means you - have - no such things as fixed, defined columns.
- Just enter any name as key and anything as value.
-
- To enter non-primitive values, use literal notaion. -

- - - - - - - - - - - - - - - - - - - - - -
KeyValue
- -
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.1.1/package/example/objectstore/style.css b/temp/idbwrapper/0.1.1/package/example/objectstore/style.css deleted file mode 100644 index 5bdb6b0f7..000000000 --- a/temp/idbwrapper/0.1.1/package/example/objectstore/style.css +++ /dev/null @@ -1,93 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.1/package/example/quicktest/index.html b/temp/idbwrapper/0.1.1/package/example/quicktest/index.html deleted file mode 100644 index f64a74323..000000000 --- a/temp/idbwrapper/0.1.1/package/example/quicktest/index.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - IndexedDB Wrapper Quick Test - - - - -
-

Open the console and click 'Open DB'. You will then see a bunch of buttons - that allow data manipulation. Click them, and check the console for - results.

- - - -
- - - - - diff --git a/temp/idbwrapper/0.1.1/package/example/quicktest/style.css b/temp/idbwrapper/0.1.1/package/example/quicktest/style.css deleted file mode 100644 index 90f382838..000000000 --- a/temp/idbwrapper/0.1.1/package/example/quicktest/style.css +++ /dev/null @@ -1,94 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.1/package/example/style.css b/temp/idbwrapper/0.1.1/package/example/style.css deleted file mode 100644 index fb96076ca..000000000 --- a/temp/idbwrapper/0.1.1/package/example/style.css +++ /dev/null @@ -1,87 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; -} -.hbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.1/package/package.json b/temp/idbwrapper/0.1.1/package/package.json deleted file mode 100644 index 53700272a..000000000 --- a/temp/idbwrapper/0.1.1/package/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "idb-wrapper", - "version": "0.1.1", - "description": "This is a wrapper for indexedDB.", - "keywords": [], - "author": "jensarps ", - "repository": "git://github.com/jensarps/IDBWrapper.git", - "main": "IDBStore", - "homepage": "https://github.com/jensarps/IDBWrapper", - "contributors": [], - "bugs": { - "url": "https://github.com/jensarps/IDBWrapper/issues", - "email": "mail@jensarps.de" - }, - "dependencies": {}, - "devDependencies": {}, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/jensarps/IDBWrapper/raw/master/LICENSE" - } - ], - "scripts": {} -} diff --git a/temp/idbwrapper/0.1.2/dist.tar.gz b/temp/idbwrapper/0.1.2/dist.tar.gz deleted file mode 100644 index 6990fdefec4c6a9e5a1b1ee7f936cdd14e07d9f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35342 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 CNVcN@ diff --git a/temp/idbwrapper/0.1.2/package/.npmignore b/temp/idbwrapper/0.1.2/package/.npmignore deleted file mode 100644 index 14c279342..000000000 --- a/temp/idbwrapper/0.1.2/package/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.project -.idea diff --git a/temp/idbwrapper/0.1.2/package/IDBStore.js b/temp/idbwrapper/0.1.2/package/IDBStore.js deleted file mode 100644 index 765c15292..000000000 --- a/temp/idbwrapper/0.1.2/package/IDBStore.js +++ /dev/null @@ -1,463 +0,0 @@ -/* - * IDBWrapper - A cross-browser wrapper for IndexedDB - * Copyright (c) 2011 - 2012 Jens Arps - * http://jensarps.de/ - * - * Licensed under the MIT (X11) license - */ - -"use strict"; - -(function (name, definition, global) { - if (typeof define === 'function') { - define(definition); - } else if (typeof module !== 'undefined' && module.exports) { - module.exports = definition(); - } else { - global[name] = definition(); - } -})('IDBStore', function () { - - var IDBStore; - - var defaults = { - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - onStoreReady: function () { - }, - indexes: [] - }; - - IDBStore = function (kwArgs, onStoreReady) { - - function fixupConstants (object, constants) { - for (var prop in constants) { - object[prop] = constants[prop]; - } - } - - for(var key in defaults){ - this[key] = typeof kwArgs[key] != 'undefined' ? kwArgs[key] : defaults[key]; - } - - this.dbName = 'IDBWrapper-' + this.storeName; - this.dbVersion = parseInt(this.dbVersion, 10); - - onStoreReady && (this.onStoreReady = onStoreReady); - - this.idb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; - this.keyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.mozIDBKeyRange; - - this.consts = { - 'READ_ONLY': 'readonly', - 'READ_WRITE': 'readwrite', - 'VERSION_CHANGE': 'versionchange' - } - - this.cursor = window.IDBCursor || window.webkitIDBCursor; - fixupConstants(this.cursor, { - 'NEXT': 'next', - 'NEXT_NO_DUPLICATE': 'nextunique', - 'PREV': 'prev', - 'PREV_NO_DUPLICATE': 'prevunique' - }); - - this.openDB(); - }; - - IDBStore.prototype = { - - db: null, - - dbName: null, - - dbVersion: null, - - store: null, - - storeName: null, - - keyPath: null, - - autoIncrement: null, - - indexes: null, - - features: null, - - onStoreReady: null, - - openDB: function () { - - this.newVersionAPI = typeof this.idb.setVersion == 'undefined'; - - if(!this.newVersionAPI){ - throw new Error('The IndexedDB implementation in this browser is outdated. Please upgrade your browser.'); - } - - var features = this.features = {}; - features.hasAutoIncrement = !window.mozIndexedDB; // TODO: Still, really? - - var openRequest = this.idb.open(this.dbName, this.dbVersion); - - openRequest.onerror = function (error) { - - var gotVersionErr = false; - if ('error' in error.target) { - gotVersionErr = error.target.error.name == "VersionError"; - } else if ('errorCode' in error.target) { - gotVersionErr = error.target.errorCode == 12; // TODO: Use const - } - - if (gotVersionErr) { - console.error('Could not open database, version error:', error); - } else { - console.error('Could not open database, error:', error); - } - }.bind(this); - - - openRequest.onsuccess = function (event) { - - if(this.db){ - this.onStoreReady(); - return; - } - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - if(!this.store){ - var emptyTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - this.store = emptyTransaction.objectStore(this.storeName); - } - // check indexes - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - // normalize and provide existing keys - indexData.keyPath = indexData.keyPath || indexName; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - - if(!indexName){ - throw new Error('Cannot create index: No index name given.'); - } - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = ['keyPath', 'unique', 'multiEntry'].every(function(key){ - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actualIndex[key] === undefined && indexData[key] === false) { - return true; - } - return indexData[key] == actualIndex[key]; - }); - if(!complies){ - throw new Error('Cannot modify index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - } else { - throw new Error('Cannot create new index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - - }, this); - - this.onStoreReady(); - } else { - // We should never get here. - throw new Error('Cannot create a new store for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - }.bind(this); - - openRequest.onupgradeneeded = function(/* IDBVersionChangeEvent */ event){ - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - this.store = event.target.transaction.objectStore(this.storeName); - } else { - this.store = this.db.createObjectStore(this.storeName, { keyPath: this.keyPath, autoIncrement: this.autoIncrement}); - } - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - // normalize and provide existing keys - indexData.keyPath = indexData.keyPath || indexName; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - - if(!indexName){ - throw new Error('Cannot create index: No index name given.'); - } - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = ['keyPath', 'unique', 'multiEntry'].every(function(key){ - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actualIndex[key] === undefined && indexData[key] === false) { - return true; - } - return indexData[key] == actualIndex[key]; - }); - if(!complies){ - // index differs, need to delete and re-create - this.store.deleteIndex(indexName); - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - } else { - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - - }, this); - - }.bind(this); - }, - - deleteDatabase: function () { - if (this.idb.deleteDatabase) { - this.idb.deleteDatabase(this.dbName); - } - }, - - /********************* - * data manipulation * - *********************/ - - - put: function (dataObj, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not write data.', error); - }); - onSuccess || (onSuccess = noop); - if (typeof dataObj[this.keyPath] == 'undefined' && !this.features.hasAutoIncrement) { - dataObj[this.keyPath] = this._getUID(); - } - - var putTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var putRequest = putTransaction.objectStore(this.storeName).put(dataObj); - putRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - putRequest.onerror = onError; - }, - - get: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var getRequest = getTransaction.objectStore(this.storeName).get(key); - getRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getRequest.onerror = onError; - }, - - remove: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not remove data.', error); - }); - onSuccess || (onSuccess = noop); - var removeTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var deleteRequest = removeTransaction.objectStore(this.storeName).delete(key); - deleteRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - deleteRequest.onerror = onError; - }, - - getAll: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getAllTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var store = getAllTransaction.objectStore(this.storeName); - if (store.getAll) { - var getAllRequest = store.getAll(); - getAllRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getAllRequest.onerror = onError; - } else { - this._getAllCursor(getAllTransaction, onSuccess, onError); - } - }, - - _getAllCursor: function (tr, onSuccess, onError) { - var all = []; - var store = tr.objectStore(this.storeName); - var cursorRequest = store.openCursor(); - - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - all.push(cursor.value); - cursor['continue'](); - } - else { - onSuccess(all); - } - }; - cursorRequest.onError = onError; - }, - - clear: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not clear store.', error); - }); - onSuccess || (onSuccess = noop); - var clearTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var clearRequest = clearTransaction.objectStore(this.storeName).clear(); - clearRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - clearRequest.onerror = onError; - }, - - _getUID: function () { - // FF bails at times on non-numeric ids. So we take an even - // worse approach now, using current time as id. Sigh. - return +new Date(); - }, - - - /************ - * indexing * - ************/ - - getIndexList: function () { - return this.store.indexNames; - }, - - hasIndex: function (indexName) { - return this.store.indexNames.contains(indexName); - }, - - /********** - * cursor * - **********/ - - iterate: function (onItem, options) { - options = mixin({ - index: null, - order: 'ASC', - filterDuplicates: false, - keyRange: null, - writeAccess: false, - onEnd: null, - onError: function (error) { - console.error('Could not open cursor.', error); - } - }, options || {}); - - var directionType = options.order.toLowerCase() == 'desc' ? 'PREV' : 'NEXT'; - if (options.filterDuplicates) { - directionType += '_NO_DUPLICATE'; - } - - var cursorTransaction = this.db.transaction([this.storeName], this.consts[options.writeAccess ? 'READ_WRITE' : 'READ_ONLY']); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var cursorRequest = cursorTarget.openCursor(options.keyRange, this.cursor[directionType]); - cursorRequest.onerror = options.onError; - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - onItem(cursor.value, cursor, cursorTransaction); - cursor['continue'](); - } else { - if(options.onEnd){ - options.onEnd() - } else { - onItem(null); - } - } - }; - }, - - count: function (onSuccess, options) { - - options = mixin({ - index: null, - keyRange: null - }, options || {}); - - var onError = options.onError || function (error) { - console.error('Could not open cursor.', error); - }; - - var cursorTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var countRequest = cursorTarget.count(options.keyRange); - countRequest.onsuccess = function (evt) { - onSuccess(evt.target.result); - }; - countRequest.onError = function (error) { - onError(error); - }; - }, - - /**************/ - /* key ranges */ - /**************/ - - makeKeyRange: function(options){ - var keyRange, - hasLower = typeof options.lower != 'undefined', - hasUpper = typeof options.upper != 'undefined'; - - switch(true){ - case hasLower && hasUpper: - keyRange = this.keyRange.bound(options.lower, options.upper, options.excludeLower, options.excludeUpper); - break; - case hasLower: - keyRange = this.keyRange.lowerBound(options.lower, options.excludeLower); - break; - case hasUpper: - keyRange = this.keyRange.upperBound(options.upper, options.excludeUpper); - break; - default: - throw new Error('Cannot create KeyRange. Provide one or both of "lower" or "upper" value.'); - break; - } - - return keyRange; - - } - - }; - - /** helpers **/ - - var noop = function () { - }; - var empty = {}; - var mixin = function (target, source) { - var name, s; - for (name in source) { - s = source[name]; - if (s !== empty[name] && s !== target[name]) { - target[name] = s; - } - } - return target; - }; - - return IDBStore; - -}, this); diff --git a/temp/idbwrapper/0.1.2/package/LICENSE b/temp/idbwrapper/0.1.2/package/LICENSE deleted file mode 100644 index 93f5d87c8..000000000 --- a/temp/idbwrapper/0.1.2/package/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 - 2012 Jens Arps - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/temp/idbwrapper/0.1.2/package/README.md b/temp/idbwrapper/0.1.2/package/README.md deleted file mode 100644 index 480e14c6b..000000000 --- a/temp/idbwrapper/0.1.2/package/README.md +++ /dev/null @@ -1,313 +0,0 @@ -About -===== - -This is a wrapper for indexedDB. It is meant to - -a) ease the use of indexedDB and abstract away the differences between the -existing impls in Chrome, Firefox and IE10 (yes, it works in all three), and - -b) show how IDB works. The code is split up into short methods, so that it's -easy to see what happens in what method. - -"Showing how it works" is the main intention of this project. IndexedDB is -all the buzz, but only a few people actually know how to use it. - -The code in IDBWrapper.js is not optimized for anything, nor minified or anything. -It is meant to be read and easy to understand. So, please, go ahead and check out -the source! - -There are two tutorials to get you up and running: - -Part 1: Setup and CRUD operations -http://jensarps.de/2011/11/25/working-with-idbwrapper-part-1/ - -Part 2: Running Queries against the store -http://jensarps.de/2012/11/13/working-with-idbwrapper-part-2/ - -##November Rewrite - -I rewrote IDBWrapper to cope with all the issues, and the new version is on -master since Nov, 13th 2012. The API didn't change much, I just removed some -of the methods. Method signatures remain unchanged. - -However, if you have a previous version of IDBWrapper in use, there's an -issue: The new version won't be able to access the store created with the old -version, because database names changed. In that case, you need to manually -migrate the data: Include both versions of IDBWrapper (use a different name for -them), do a getAll() on the old store and write the data to the new store. - -I am very sorry about any inconveniences, but there was no other way. - -The 'old' version of IDBWrapper is still available in the `legacy` branch: -https://github.com/jensarps/IDBWrapper/tree/legacy - -Also, "showing how it works" is no longer the main intention behind this. Now, -it's rather "just works". - - -Examples -======== - -There are some examples to run right in your browser over here: http://jensarps.github.com/IDBWrapper/example/ - -The source for these examples are in the `example` folder of this repository. - -Usage -===== - -Including the IDBStore.js file will add an IDBStore constructor to the global scope. - -Alternatively, you can use an AMD loader such as RequireJS to load the file, -and you will receive the constructor in your load callback (the constructor -will then, of course, have whatever name you call it). - -You can then create an IDB store: - -```javascript -var myStore = new IDBStore(); -``` - -You may pass two parameters to the constructor: the first is an object with optional parameters, -the second is a function reference to a function that is called when the store is ready to use. - -The options object may contain the following properties (default values are shown): - -```javascript -{ - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - indexes: [], - onStoreReady: function(){} -} -``` - -'keyPath' is the name of the property to be used as key index. If 'autoIncrement' is set to true, -the database will automatically add a unique key to the keyPath index when storing objects missing -that property. 'indexes' contains objects defining indexes (see below for details on indexes). - -You can also pass a callback function to the options object. If a callback is provided both as second -parameter and inside of the options object, the function passed as second parameter will be used. - -Methods -======= - -Here's an overview of available methods in IDBStore: - -Data Manipulation ------------------ - -Use the following methods to read and write data: - -___ - -1) The put method. - - -```javascript -put(/*Object*/ dataObj, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`dataObj` is the Object to store. `onSuccess` will be called when the insertion/update was successful, -and it will receive the keyPath value (the id, so to say) of the inserted object as first and only -argument. `onError` will be called if the insertion/update failed and it will receive the error event -object as first and only argument. If the store already contains an object with the given keyPath id, -it will be overwritten by `dataObj`. - -___ - -2) The get method. - -```javascript -get(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to retrieve. `onSuccess` will be called if -the get operation was successful, and it will receive the stored object as first and only argument. If -no object was found with the given keyPath value, this argument will be null. `onError` will be called -if the get operation failed and it will receive the error event object as first and only argument. - -___ - -3) The getAll method. - -```javascript -getAll: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the getAll operation was successful, and it will receive an Array of -all objects currently stored in the store as first and only argument. `onError` will be called if -the getAll operation failed and it will receive the error event object as first and only argument. - -___ - -4) The remove method. - -```javascript -remove: function(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to remove. `onSuccess` will be called if -the remove operation was successful, and it _should_ receive `false` as first and only argument if the -object to remove was not found, and `true` if it was found and removed. - -NOTE: FF 8 will pass the key to the onSuccess handler, no matter if there is an corresponding object -or not. Chrome 15 will pass `null` if removal was successful, and call the error handler if the object -wasn't found. Chrome 17 will behave as described above. - -`onError` will be called if the remove operation failed and it will receive the error event object as first -and only argument. - -___ - -5) The clear method. - -```javascript -clear: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the clear operation was successful. `onError` will be called if the clear -operation failed and it will receive the error event object as first and only argument. - - -Index Operations ----------------- - -To create indexes, you need to pass the index information to the IDBStore() -constructor, for example: - - -```javascript -{ - storeName: 'customers', - dbVersion: 1, - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: function(){}, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] -} -``` - -An entry in the index Array is an object containing the following properties: - -The `name` property is the identifier of the index. If you want to work with the created index later, this name is used to identify the index. This is the only property that is mandatory. - -The `keyPath` property is the name of the property in your stored data that you want to index. If you omit that, IDBWrapper will assume that it is the same as the provided name, and will use this instead. - -The `unique` property tells the store whether the indexed property in your data is unique. If you set this to true, it will add a uniqueness constraint to the store which will make it throw if you try to store data that violates that constraint. If you omit that, IDBWrapper will set this to false. - -The `multiEntry` property is kinda weird. You can read up on it here: http://www.w3.org/TR/IndexedDB/#dfn-multientry. However, you can live perfectly fine with setting this to false (or just omitting it, this is set to false by default). - - -If you want to add an index to an existing store, you need to increase the -version number of your store, as adding an index changes the structure of -the database. - -To modify an index, modify the object in the indexes Array in the constructor. -Again, you need to increase the version of your store. - -In addition, there are still some convenience methods available: - -___ - - -1) The hasIndex method. - -```javascript -hasIndex: function(/*String*/ indexName) -``` - -Return true if an index with the given name exists in the store, false if not. - -___ - -2) The getIndexList method. - -```javascript -getIndexList: function() -``` - -Returns a `DOMStringList` with all existing indices. - - -Running Queries ---------------- - -To run queries, IDBWrapper provides an `iterate()` method. To create keyRanges, -there is the `makeKeyRange()` method. In addition to these, IDBWrapper comes -with a `count()` method. - -___ - -1) The iterate method. - - -```javascript -iterate: function(/*Function*/ onItem, /*Object*/ iterateOptions) -``` - -The `onItem` callback will be called once for every match. It will receive three arguments: the object that matched the query, a reference to the current cursor object (IDBWrapper uses IndexedDB's Cursor internally to iterate), and a reference to the current ongoing transaction. - -There's one special situation: if you didn't pass an onEnd handler in the options objects (see below), the onItem handler will be called one extra time when the transaction is over. In this case, it will receive null as only argument. So, to check when the iteration is over and you won't get any more data objects, you can either pass an onEnd handler, or check for null in the onItem handler. - -The `iterateOptions` object can contain one or more of the following properties: - - -The `index` property contains the name of the index to operate on. If you omit this, IDBWrapper will use the store's keyPath as index. - -In the `keyRange` property you can pass a keyRange. - -The `order` property can be set to 'ASC' or 'DESC', and determines the ordering direction of results. If you omit this, IDBWrapper will use 'ASC'. - -The `filterDuplicates` property is an interesting one: If you set this to true (it defaults to false), and have several objects that have the same value in their key, the store will only fetch the first of those. It is not about objects being the same, it's about their key being the same. For example, in the customers database are a couple of guys having 'Smith' as last name. Setting filterDuplicates to true in the above example will make `iterate()` call the onItem callback only for the first of those. - -The `writeAccess` property defaults to false. If you need write access to the store during the iteration, you need to set this to true. - -In the `onEnd` property you can pass a callback that gets called after the iteration is over and the transaction is closed. It does not receive any arguments. - -In the `onError` property you can pass a custom error handler. In case of an error, it will be called and receives the Error object as only argument. - - -___ - - -2) The makeKeyRange method. - - -```javascript -iterate: function(/*Object*/ keyRangeOptions) -``` - -Returns an IDBKeyRange. - -The `keyRangeOptions` object must have one or more of the following properties: - -`lower`: The lower bound of the range - -`excludeLower`: Boolean, whether to exclude the lower bound itself. Default: false - -`upper`: The upper bound of the range - -`excludeUpper`: Boolean, whether to exclude the upper bound itself. Default: false - -___ - - -3) The count method. - - -```javascript -iterate: function(/*Function*/ onSuccess, /*Object*/ countOptions) -``` - -The onSuccess receives the result of the count as only argument. - -The `countOptions` object may have one or more of the following properties: - -index: The name of an index to operate on. - -keyRange: A keyRange to use - diff --git a/temp/idbwrapper/0.1.2/package/example/basic/app.js b/temp/idbwrapper/0.1.2/package/example/basic/app.js deleted file mode 100644 index e1e2a2f55..000000000 --- a/temp/idbwrapper/0.1.2/package/example/basic/app.js +++ /dev/null @@ -1,94 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}', - table: '{content}
IDLast NameFirst Name
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = new IDBStore({ - storeName: 'customer', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'customerid', 'firstname', 'lastname', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ // We want the id to be numeric: - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function updateItem(id){ - var data = { - customerid: id, - firstname: document.getElementById('firstname_' + id).value.trim(), - lastname: document.getElementById('lastname_' + id).value.trim() - }; - customers.put(data, refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - updateItem: updateItem - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.1.2/package/example/basic/index.html b/temp/idbwrapper/0.1.2/package/example/basic/index.html deleted file mode 100644 index 5d7a596c6..000000000 --- a/temp/idbwrapper/0.1.2/package/example/basic/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - IDBWrapper Basic CRUD Example - - - - - -
-
- QueryResults -
-
-
-
-

- Enter some data to save. As ID, enter a numeric value or leave blank. -

- -
-
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.1.2/package/example/basic/style.css b/temp/idbwrapper/0.1.2/package/example/basic/style.css deleted file mode 100644 index e901b00c4..000000000 --- a/temp/idbwrapper/0.1.2/package/example/basic/style.css +++ /dev/null @@ -1,86 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.2/package/example/index.html b/temp/idbwrapper/0.1.2/package/example/index.html deleted file mode 100644 index cbc210fbc..000000000 --- a/temp/idbwrapper/0.1.2/package/example/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - IndexedDB Wrapper Examples - - - - -
-

IDBWrapper Examples

-

- There are a couple of examples to try out / look at: -

-
    -
  • Quicktest - Just a quick test to see if IDB opens and fool around in the console.
  • -
  • Basic CRUD - A basic CRUD example using an IDB store as fixed table.
  • -
  • ObjectStore - An example to show the difference between a table and an object store.
  • -
  • Index - An example to show how to work with indexes.
  • -
-
- - \ No newline at end of file diff --git a/temp/idbwrapper/0.1.2/package/example/index/app.js b/temp/idbwrapper/0.1.2/package/example/index/app.js deleted file mode 100644 index 974280137..000000000 --- a/temp/idbwrapper/0.1.2/package/example/index/app.js +++ /dev/null @@ -1,163 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}{lastname}{firstname}{age}', - table: '{content}
IDLast NameFirst NameAge
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = app.customers = new IDBStore({ - dbVersion: 1, - storeName: 'customer-index', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] - }); - - // create references for some nodes we have to work with - [ - 'submit', 'submitQuery', - 'upper', 'lower', 'excludeLower', 'excludeUpper', - 'sortOrder', 'index', 'filterDuplicates', - 'customerid', 'firstname', 'lastname', 'age', - 'results-container' - ].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit buttons. - nodeCache.submit.addEventListener('click', enterData); - nodeCache.submitQuery.addEventListener('click', runQuery); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname', 'age'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname', 'age'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function makeRandomEntry(){ - var lastnames = ['Smith','Miller','Doe','Frankenstein','Furter'], - firstnames = ['Peter','John','Frank', 'James', 'Jill']; - - var entry = { - lastname: lastnames[Math.floor(Math.random()*5)], - firstname: firstnames[Math.floor(Math.random()*4)], - age: Math.floor(Math.random() * (100 - 20)) + 20, - customerid: parseInt( ( "" + ( Date.now() * Math.random() ) ).substring(0, 6), 10) - }; - - return entry; - } - - function addRandomCustomer(){ - var data = makeRandomEntry(); - - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function runQuery(){ - var upper = nodeCache.upper.value, - hasUpper = upper != '', - lower = nodeCache.lower.value, - hasLower = lower != '', - - indexName = nodeCache.index.value, - sortOrder = nodeCache.sortOrder.value, - filterDuplicates = nodeCache.filterDuplicates.checked, - keyRange, - - content = ''; - - if(hasUpper || hasLower){ // create a keyRange only if bounds are given - var options = {}; - if(hasUpper){ - options.upper = upper; - options.excludeUpper = nodeCache.excludeUpper.checked; - } - if(hasLower){ - options.lower = lower; - options.excludeLower = nodeCache.excludeLower.checked; - } - keyRange = customers.makeKeyRange(options); - } - - var onItem = function (item) { - content += tpls.row.replace(/\{([^\}]+)\}/g, function (_, key) { - return item[key]; - }); - }; - var onEnd = function () { - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - }; - - customers.iterate(onItem, { - index: indexName, - keyRange: keyRange, - filterDuplicates: filterDuplicates, - order: sortOrder, - onEnd: onEnd - }); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - addRandomCustomer: addRandomCustomer - }; - - // go! - init(); - -}); diff --git a/temp/idbwrapper/0.1.2/package/example/index/index.html b/temp/idbwrapper/0.1.2/package/example/index/index.html deleted file mode 100644 index 63a50039d..000000000 --- a/temp/idbwrapper/0.1.2/package/example/index/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - IDBWrapper Basic Index Example - - - - - -
-
- QueryResults -
-
-

Query

- -
- - -
-
-
-
-
- -
- - -
- -
- - -
-
-

Add data

- -

- Add a random customer: - -

-

- Or, enter customer data below: -

- -
-
-
-
- -
-
- - - diff --git a/temp/idbwrapper/0.1.2/package/example/index/style.css b/temp/idbwrapper/0.1.2/package/example/index/style.css deleted file mode 100644 index 8f7ddd9fe..000000000 --- a/temp/idbwrapper/0.1.2/package/example/index/style.css +++ /dev/null @@ -1,89 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input, -#query { - padding: 10px; - width: 350px; - border-left: solid 1px black; -} -#input div, -#query div{ - padding: 5px; -} -#input label, -#query label{ - display: inline-block; - width: 120px; -} diff --git a/temp/idbwrapper/0.1.2/package/example/lib/requirejs/require.js b/temp/idbwrapper/0.1.2/package/example/lib/requirejs/require.js deleted file mode 100644 index ba861994a..000000000 --- a/temp/idbwrapper/0.1.2/package/example/lib/requirejs/require.js +++ /dev/null @@ -1,2013 +0,0 @@ -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 0.26.0+ Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -/*jslint strict: false, plusplus: false */ -/*global window: false, navigator: false, document: false, importScripts: false, - jQuery: false, clearInterval: false, setInterval: false, self: false, - setTimeout: false, opera: false */ - -var requirejs, require, define; -(function () { - //Change this version number for each release. - var version = "0.26.0+", - commentRegExp = /(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg, - cjsRequireRegExp = /require\(\s*["']([^'"\s]+)["']\s*\)/g, - currDirRegExp = /^\.\//, - jsSuffixRegExp = /\.js$/, - ostring = Object.prototype.toString, - ap = Array.prototype, - aps = ap.slice, - apsp = ap.splice, - isBrowser = !!(typeof window !== "undefined" && navigator && document), - isWebWorker = !isBrowser && typeof importScripts !== "undefined", - //PS3 indicates loaded and complete, but need to wait for complete - //specifically. Sequence is "loading", "loaded", execution, - // then "complete". The UA check is unfortunate, but not sure how - //to feature test w/o causing perf issues. - readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? - /^complete$/ : /^(complete|loaded)$/, - defContextName = "_", - //Oh the tragedy, detecting opera. See the usage of isOpera for reason. - isOpera = typeof opera !== "undefined" && opera.toString() === "[object Opera]", - reqWaitIdPrefix = "_r@@", - empty = {}, - contexts = {}, - globalDefQueue = [], - interactiveScript = null, - isDone = false, - checkLoadedDepth = 0, - useInteractive = false, - req, cfg = {}, currentlyAddingScript, s, head, baseElement, scripts, script, - src, subPath, mainScript, dataMain, i, scrollIntervalId, setReadyState, ctx, - jQueryCheck, checkLoadedTimeoutId; - - function isFunction(it) { - return ostring.call(it) === "[object Function]"; - } - - function isArray(it) { - return ostring.call(it) === "[object Array]"; - } - - /** - * Simple function to mix in properties from source into target, - * but only if target does not already have a property of the same name. - * This is not robust in IE for transferring methods that match - * Object.prototype names, but the uses of mixin here seem unlikely to - * trigger a problem related to that. - */ - function mixin(target, source, force) { - for (var prop in source) { - if (!(prop in empty) && (!(prop in target) || force)) { - target[prop] = source[prop]; - } - } - return req; - } - - /** - * Constructs an error with a pointer to an URL with more information. - * @param {String} id the error ID that maps to an ID on a web page. - * @param {String} message human readable error. - * @param {Error} [err] the original error, if there is one. - * - * @returns {Error} - */ - function makeError(id, msg, err) { - var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); - if (err) { - e.originalError = err; - } - return e; - } - - /** - * Used to set up package paths from a packagePaths or packages config object. - * @param {Object} pkgs the object to store the new package config - * @param {Array} currentPackages an array of packages to configure - * @param {String} [dir] a prefix dir to use. - */ - function configurePackageDir(pkgs, currentPackages, dir) { - var i, location, pkgObj; - - for (i = 0; (pkgObj = currentPackages[i]); i++) { - pkgObj = typeof pkgObj === "string" ? { name: pkgObj } : pkgObj; - location = pkgObj.location; - - //Add dir to the path, but avoid paths that start with a slash - //or have a colon (indicates a protocol) - if (dir && (!location || (location.indexOf("/") !== 0 && location.indexOf(":") === -1))) { - location = dir + "/" + (location || pkgObj.name); - } - - //Create a brand new object on pkgs, since currentPackages can - //be passed in again, and config.pkgs is the internal transformed - //state for all package configs. - pkgs[pkgObj.name] = { - name: pkgObj.name, - location: location || pkgObj.name, - //Remove leading dot in main, so main paths are normalized, - //and remove any trailing .js, since different package - //envs have different conventions: some use a module name, - //some use a file name. - main: (pkgObj.main || "main") - .replace(currDirRegExp, '') - .replace(jsSuffixRegExp, '') - }; - } - } - - /** - * jQuery 1.4.3-1.5.x use a readyWait/ready() pairing to hold DOM - * ready callbacks, but jQuery 1.6 supports a holdReady() API instead. - * At some point remove the readyWait/ready() support and just stick - * with using holdReady. - */ - function jQueryHoldReady($, shouldHold) { - if ($.holdReady) { - $.holdReady(shouldHold); - } else if (shouldHold) { - $.readyWait += 1; - } else { - $.ready(true); - } - } - - if (typeof define !== "undefined") { - //If a define is already in play via another AMD loader, - //do not overwrite. - return; - } - - if (typeof requirejs !== "undefined") { - if (isFunction(requirejs)) { - //Do not overwrite and existing requirejs instance. - return; - } else { - cfg = requirejs; - requirejs = undefined; - } - } - - //Allow for a require config object - if (typeof require !== "undefined" && !isFunction(require)) { - //assume it is a config object. - cfg = require; - require = undefined; - } - - /** - * Creates a new context for use in require and define calls. - * Handle most of the heavy lifting. Do not want to use an object - * with prototype here to avoid using "this" in require, in case it - * needs to be used in more super secure envs that do not want this. - * Also there should not be that many contexts in the page. Usually just - * one for the default context, but could be extra for multiversion cases - * or if a package needs a special context for a dependency that conflicts - * with the standard context. - */ - function newContext(contextName) { - var context, resume, - config = { - waitSeconds: 7, - baseUrl: s.baseUrl || "./", - paths: {}, - pkgs: {}, - catchError: {} - }, - defQueue = [], - specified = { - "require": true, - "exports": true, - "module": true - }, - urlMap = {}, - defined = {}, - loaded = {}, - waiting = {}, - waitAry = [], - waitIdCounter = 0, - managerCallbacks = {}, - plugins = {}, - pluginsQueue = {}, - resumeDepth = 0, - normalizedWaiting = {}; - - /** - * Trims the . and .. from an array of path segments. - * It will keep a leading path segment if a .. will become - * the first path segment, to help with module name lookups, - * which act like paths, but can be remapped. But the end result, - * all paths that use this function should look normalized. - * NOTE: this method MODIFIES the input array. - * @param {Array} ary the array of path segments. - */ - function trimDots(ary) { - var i, part; - for (i = 0; (part = ary[i]); i++) { - if (part === ".") { - ary.splice(i, 1); - i -= 1; - } else if (part === "..") { - if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { - //End of the line. Keep at least one non-dot - //path segment at the front so it can be mapped - //correctly to disk. Otherwise, there is likely - //no path mapping for a path starting with '..'. - //This can still fail, but catches the most reasonable - //uses of .. - break; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - - /** - * Given a relative module name, like ./something, normalize it to - * a real name that can be mapped to a path. - * @param {String} name the relative name - * @param {String} baseName a real name that the name arg is relative - * to. - * @returns {String} normalized name - */ - function normalize(name, baseName) { - var pkgName, pkgConfig; - - //Adjust any relative paths. - if (name && name.charAt(0) === ".") { - //If have a base name, try to normalize against it, - //otherwise, assume it is a top-level require that will - //be relative to baseUrl in the end. - if (baseName) { - if (config.pkgs[baseName]) { - //If the baseName is a package name, then just treat it as one - //name to concat the name with. - baseName = [baseName]; - } else { - //Convert baseName to array, and lop off the last part, - //so that . matches that "directory" and not name of the baseName's - //module. For instance, baseName of "one/two/three", maps to - //"one/two/three.js", but we want the directory, "one/two" for - //this normalization. - baseName = baseName.split("/"); - baseName = baseName.slice(0, baseName.length - 1); - } - - name = baseName.concat(name.split("/")); - trimDots(name); - - //Some use of packages may use a . path to reference the - //"main" module name, so normalize for that. - pkgConfig = config.pkgs[(pkgName = name[0])]; - name = name.join("/"); - if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { - name = pkgName; - } - } - } - return name; - } - - /** - * Creates a module mapping that includes plugin prefix, module - * name, and path. If parentModuleMap is provided it will - * also normalize the name via require.normalize() - * - * @param {String} name the module name - * @param {String} [parentModuleMap] parent module map - * for the module name, used to resolve relative names. - * - * @returns {Object} - */ - function makeModuleMap(name, parentModuleMap) { - var index = name ? name.indexOf("!") : -1, - prefix = null, - parentName = parentModuleMap ? parentModuleMap.name : null, - originalName = name, - normalizedName, url, pluginModule; - - if (index !== -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - - if (prefix) { - prefix = normalize(prefix, parentName); - } - - //Account for relative paths if there is a base name. - if (name) { - if (prefix) { - pluginModule = defined[prefix]; - if (pluginModule) { - //Plugin is loaded, use its normalize method, otherwise, - //normalize name as usual. - if (pluginModule.normalize) { - normalizedName = pluginModule.normalize(name, function (name) { - return normalize(name, parentName); - }); - } else { - normalizedName = normalize(name, parentName); - } - } else { - //Plugin is not loaded yet, so do not normalize - //the name, wait for plugin to load to see if - //it has a normalize method. To avoid possible - //ambiguity with relative names loaded from another - //plugin, use the parent's name as part of this name. - normalizedName = '__$p' + parentName + '@' + (name || ''); - } - } else { - normalizedName = normalize(name, parentName); - } - - url = urlMap[normalizedName]; - if (!url) { - //Calculate url for the module, if it has a name. - if (req.toModuleUrl) { - //Special logic required for a particular engine, - //like Node. - url = req.toModuleUrl(context, normalizedName, parentModuleMap); - } else { - url = context.nameToUrl(normalizedName, null, parentModuleMap); - } - - //Store the URL mapping for later. - urlMap[normalizedName] = url; - } - } - - return { - prefix: prefix, - name: normalizedName, - parentMap: parentModuleMap, - url: url, - originalName: originalName, - fullName: prefix ? prefix + "!" + (normalizedName || '') : normalizedName - }; - } - - /** - * Determine if priority loading is done. If so clear the priorityWait - */ - function isPriorityDone() { - var priorityDone = true, - priorityWait = config.priorityWait, - priorityName, i; - if (priorityWait) { - for (i = 0; (priorityName = priorityWait[i]); i++) { - if (!loaded[priorityName]) { - priorityDone = false; - break; - } - } - if (priorityDone) { - delete config.priorityWait; - } - } - return priorityDone; - } - - /** - * Helper function that creates a setExports function for a "module" - * CommonJS dependency. Do this here to avoid creating a closure that - * is part of a loop. - */ - function makeSetExports(moduleObj) { - return function (exports) { - moduleObj.exports = exports; - }; - } - - function makeContextModuleFunc(func, relModuleMap, enableBuildCallback) { - return function () { - //A version of a require function that passes a moduleName - //value for items that may need to - //look up paths relative to the moduleName - var args = [].concat(aps.call(arguments, 0)), lastArg; - if (enableBuildCallback && - isFunction((lastArg = args[args.length - 1]))) { - lastArg.__requireJsBuild = true; - } - args.push(relModuleMap); - return func.apply(null, args); - }; - } - - /** - * Helper function that creates a require function object to give to - * modules that ask for it as a dependency. It needs to be specific - * per module because of the implication of path mappings that may - * need to be relative to the module name. - */ - function makeRequire(relModuleMap, enableBuildCallback) { - var modRequire = makeContextModuleFunc(context.require, relModuleMap, enableBuildCallback); - - mixin(modRequire, { - nameToUrl: makeContextModuleFunc(context.nameToUrl, relModuleMap), - toUrl: makeContextModuleFunc(context.toUrl, relModuleMap), - defined: makeContextModuleFunc(context.requireDefined, relModuleMap), - specified: makeContextModuleFunc(context.requireSpecified, relModuleMap), - ready: req.ready, - isBrowser: req.isBrowser - }); - //Something used by node. - if (req.paths) { - modRequire.paths = req.paths; - } - return modRequire; - } - - /** - * Used to update the normalized name for plugin-based dependencies - * after a plugin loads, since it can have its own normalization structure. - * @param {String} pluginName the normalized plugin module name. - */ - function updateNormalizedNames(pluginName) { - - var oldFullName, oldModuleMap, moduleMap, fullName, callbacks, - i, j, k, depArray, existingCallbacks, - maps = normalizedWaiting[pluginName]; - - if (maps) { - for (i = 0; (oldModuleMap = maps[i]); i++) { - oldFullName = oldModuleMap.fullName; - moduleMap = makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap); - fullName = moduleMap.fullName; - //Callbacks could be undefined if the same plugin!name was - //required twice in a row, so use empty array in that case. - callbacks = managerCallbacks[oldFullName] || []; - existingCallbacks = managerCallbacks[fullName]; - - if (fullName !== oldFullName) { - //Update the specified object, but only if it is already - //in there. In sync environments, it may not be yet. - if (oldFullName in specified) { - delete specified[oldFullName]; - specified[fullName] = true; - } - - //Update managerCallbacks to use the correct normalized name. - //If there are already callbacks for the normalized name, - //just add to them. - if (existingCallbacks) { - managerCallbacks[fullName] = existingCallbacks.concat(callbacks); - } else { - managerCallbacks[fullName] = callbacks; - } - delete managerCallbacks[oldFullName]; - - //In each manager callback, update the normalized name in the depArray. - for (j = 0; j < callbacks.length; j++) { - depArray = callbacks[j].depArray; - for (k = 0; k < depArray.length; k++) { - if (depArray[k] === oldFullName) { - depArray[k] = fullName; - } - } - } - } - } - } - - delete normalizedWaiting[pluginName]; - } - - /* - * Queues a dependency for checking after the loader is out of a - * "paused" state, for example while a script file is being loaded - * in the browser, where it may have many modules defined in it. - * - * depName will be fully qualified, no relative . or .. path. - */ - function queueDependency(dep) { - //Make sure to load any plugin and associate the dependency - //with that plugin. - var prefix = dep.prefix, - fullName = dep.fullName; - - //Do not bother if the depName is already in transit - if (specified[fullName] || fullName in defined) { - return; - } - - if (prefix && !plugins[prefix]) { - //Queue up loading of the dependency, track it - //via context.plugins. Mark it as a plugin so - //that the build system will know to treat it - //special. - plugins[prefix] = undefined; - - //Remember this dep that needs to have normaliztion done - //after the plugin loads. - (normalizedWaiting[prefix] || (normalizedWaiting[prefix] = [])) - .push(dep); - - //Register an action to do once the plugin loads, to update - //all managerCallbacks to use a properly normalized module - //name. - (managerCallbacks[prefix] || - (managerCallbacks[prefix] = [])).push({ - onDep: function (name, value) { - if (name === prefix) { - updateNormalizedNames(prefix); - } - } - }); - - queueDependency(makeModuleMap(prefix)); - } - - context.paused.push(dep); - } - - function execManager(manager) { - var i, ret, waitingCallbacks, err, errFile, errModuleTree, - cb = manager.callback, - fullName = manager.fullName, - args = [], - ary = manager.depArray; - - //Call the callback to define the module, if necessary. - if (cb && isFunction(cb)) { - //Pull out the defined dependencies and pass the ordered - //values to the callback. - if (ary) { - for (i = 0; i < ary.length; i++) { - args.push(manager.deps[ary[i]]); - } - } - - if (config.catchError.define) { - try { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } catch (e) { - err = e; - } - } else { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } - - if (fullName) { - //If setting exports via "module" is in play, - //favor that over return value and exports. After that, - //favor a non-undefined return value over exports use. - if (manager.cjsModule && manager.cjsModule.exports !== undefined) { - ret = defined[fullName] = manager.cjsModule.exports; - } else if (ret === undefined && manager.usingExports) { - //exports already set the defined value. - ret = defined[fullName]; - } else { - //Use the return value from the function. - defined[fullName] = ret; - } - } - } else if (fullName) { - //May just be an object definition for the module. Only - //worry about defining if have a module name. - ret = defined[fullName] = cb; - } - - //Clean up waiting. Do this before error calls, and before - //calling back waitingCallbacks, so that bookkeeping is correct - //in the event of an error and error is reported in correct order, - //since the waitingCallbacks will likely have errors if the - //onError function does not throw. - if (waiting[manager.waitId]) { - delete waiting[manager.waitId]; - manager.isDone = true; - context.waitCount -= 1; - if (context.waitCount === 0) { - //Clear the wait array used for cycles. - waitAry = []; - } - } - - if (err) { - errFile = (fullName ? makeModuleMap(fullName).url : '') || - err.fileName || err.sourceURL; - errModuleTree = err.moduleTree; - err = makeError('defineerror', 'Error evaluating ' + - 'module "' + fullName + '" at location "' + - errFile + '":\n' + - err + '\nfileName:' + errFile + - '\nlineNumber: ' + (err.lineNumber || err.line), err); - err.moduleName = fullName; - err.moduleTree = errModuleTree; - return req.onError(err); - } - - if (fullName) { - //If anything was waiting for this module to be defined, - //notify them now. - waitingCallbacks = managerCallbacks[fullName]; - if (waitingCallbacks) { - for (i = 0; i < waitingCallbacks.length; i++) { - waitingCallbacks[i].onDep(fullName, ret); - } - delete managerCallbacks[fullName]; - } - } - - return undefined; - } - - function main(inName, depArray, callback, relModuleMap) { - var moduleMap = makeModuleMap(inName, relModuleMap), - name = moduleMap.name, - fullName = moduleMap.fullName, - uniques = {}, - manager = { - //Use a wait ID because some entries are anon - //async require calls. - waitId: name || reqWaitIdPrefix + (waitIdCounter++), - depCount: 0, - depMax: 0, - prefix: moduleMap.prefix, - name: name, - fullName: fullName, - deps: {}, - depArray: depArray, - callback: callback, - onDep: function (depName, value) { - if (!(depName in manager.deps)) { - manager.deps[depName] = value; - manager.depCount += 1; - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } - } - } - }, - i, depArg, depName, cjsMod; - - if (fullName) { - //If module already defined for context, or already loaded, - //then leave. Also leave if jQuery is registering but it does - //not match the desired version number in the config. - if (fullName in defined || loaded[fullName] === true || - (fullName === "jquery" && config.jQuery && - config.jQuery !== callback().fn.jquery)) { - return; - } - - //Set specified/loaded here for modules that are also loaded - //as part of a layer, where onScriptLoad is not fired - //for those cases. Do this after the inline define and - //dependency tracing is done. - specified[fullName] = true; - loaded[fullName] = true; - - //If module is jQuery set up delaying its dom ready listeners. - if (fullName === "jquery" && callback) { - jQueryCheck(callback()); - } - } - - //Add the dependencies to the deps field, and register for callbacks - //on the dependencies. - for (i = 0; i < depArray.length; i++) { - depArg = depArray[i]; - //There could be cases like in IE, where a trailing comma will - //introduce a null dependency, so only treat a real dependency - //value as a dependency. - if (depArg) { - //Split the dependency name into plugin and name parts - depArg = makeModuleMap(depArg, (name ? moduleMap : relModuleMap)); - depName = depArg.fullName; - - //Fix the name in depArray to be just the name, since - //that is how it will be called back later. - depArray[i] = depName; - - //Fast path CommonJS standard dependencies. - if (depName === "require") { - manager.deps[depName] = makeRequire(moduleMap); - } else if (depName === "exports") { - //CommonJS module spec 1.1 - manager.deps[depName] = defined[fullName] = {}; - manager.usingExports = true; - } else if (depName === "module") { - //CommonJS module spec 1.1 - manager.cjsModule = cjsMod = manager.deps[depName] = { - id: name, - uri: name ? context.nameToUrl(name, null, relModuleMap) : undefined, - exports: defined[fullName] - }; - cjsMod.setExports = makeSetExports(cjsMod); - } else if (depName in defined && !(depName in waiting)) { - //Module already defined, no need to wait for it. - manager.deps[depName] = defined[depName]; - } else if (!uniques[depName]) { - - //A dynamic dependency. - manager.depMax += 1; - - queueDependency(depArg); - - //Register to get notification when dependency loads. - (managerCallbacks[depName] || - (managerCallbacks[depName] = [])).push(manager); - - uniques[depName] = true; - } - } - } - - //Do not bother tracking the manager if it is all done. - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } else { - waiting[manager.waitId] = manager; - waitAry.push(manager); - context.waitCount += 1; - } - } - - /** - * Convenience method to call main for a define call that was put on - * hold in the defQueue. - */ - function callDefMain(args) { - main.apply(null, args); - //Mark the module loaded. Must do it here in addition - //to doing it in define in case a script does - //not call define - loaded[args[0]] = true; - } - - /** - * jQuery 1.4.3+ supports ways to hold off calling - * calling jQuery ready callbacks until all scripts are loaded. Be sure - * to track it if the capability exists.. Also, since jQuery 1.4.3 does - * not register as a module, need to do some global inference checking. - * Even if it does register as a module, not guaranteed to be the precise - * name of the global. If a jQuery is tracked for this context, then go - * ahead and register it as a module too, if not already in process. - */ - jQueryCheck = function (jqCandidate) { - if (!context.jQuery) { - var $ = jqCandidate || (typeof jQuery !== "undefined" ? jQuery : null); - - if ($) { - //If a specific version of jQuery is wanted, make sure to only - //use this jQuery if it matches. - if (config.jQuery && $.fn.jquery !== config.jQuery) { - return; - } - - if ("holdReady" in $ || "readyWait" in $) { - context.jQuery = $; - - //Manually create a "jquery" module entry if not one already - //or in process. Note this could trigger an attempt at - //a second jQuery registration, but does no harm since - //the first one wins, and it is the same value anyway. - callDefMain(["jquery", [], function () { - return jQuery; - }]); - - //Ask jQuery to hold DOM ready callbacks. - if (context.scriptCount) { - jQueryHoldReady($, true); - context.jQueryIncremented = true; - } - } - } - } - }; - - function forceExec(manager, traced) { - if (manager.isDone) { - return undefined; - } - - var fullName = manager.fullName, - depArray = manager.depArray, - depName, i; - if (fullName) { - if (traced[fullName]) { - return defined[fullName]; - } - - traced[fullName] = true; - } - - //forceExec all of its dependencies. - for (i = 0; i < depArray.length; i++) { - //Some array members may be null, like if a trailing comma - //IE, so do the explicit [i] access and check if it has a value. - depName = depArray[i]; - if (depName) { - if (!manager.deps[depName] && waiting[depName]) { - manager.onDep(depName, forceExec(waiting[depName], traced)); - } - } - } - - return fullName ? defined[fullName] : undefined; - } - - /** - * Checks if all modules for a context are loaded, and if so, evaluates the - * new ones in right dependency order. - * - * @private - */ - function checkLoaded() { - var waitInterval = config.waitSeconds * 1000, - //It is possible to disable the wait interval by using waitSeconds of 0. - expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), - noLoads = "", hasLoadedProp = false, stillLoading = false, prop, - err, manager; - - //If there are items still in the paused queue processing wait. - //This is particularly important in the sync case where each paused - //item is processed right away but there may be more waiting. - if (context.pausedCount > 0) { - return undefined; - } - - //Determine if priority loading is done. If so clear the priority. If - //not, then do not check - if (config.priorityWait) { - if (isPriorityDone()) { - //Call resume, since it could have - //some waiting dependencies to trace. - resume(); - } else { - return undefined; - } - } - - //See if anything is still in flight. - for (prop in loaded) { - if (!(prop in empty)) { - hasLoadedProp = true; - if (!loaded[prop]) { - if (expired) { - noLoads += prop + " "; - } else { - stillLoading = true; - break; - } - } - } - } - - //Check for exit conditions. - if (!hasLoadedProp && !context.waitCount) { - //If the loaded object had no items, then the rest of - //the work below does not need to be done. - return undefined; - } - if (expired && noLoads) { - //If wait time expired, throw error of unloaded modules. - err = makeError("timeout", "Load timeout for modules: " + noLoads); - err.requireType = "timeout"; - err.requireModules = noLoads; - return req.onError(err); - } - if (stillLoading || context.scriptCount) { - //Something is still waiting to load. Wait for it, but only - //if a timeout is not already in effect. - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function () { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - return undefined; - } - - //If still have items in the waiting cue, but all modules have - //been loaded, then it means there are some circular dependencies - //that need to be broken. - //However, as a waiting thing is fired, then it can add items to - //the waiting cue, and those items should not be fired yet, so - //make sure to redo the checkLoaded call after breaking a single - //cycle, if nothing else loaded then this logic will pick it up - //again. - if (context.waitCount) { - //Cycle through the waitAry, and call items in sequence. - for (i = 0; (manager = waitAry[i]); i++) { - forceExec(manager, {}); - } - - //Only allow this recursion to a certain depth. Only - //triggered by errors in calling a module in which its - //modules waiting on it cannot finish loading, or some circular - //dependencies that then may add more dependencies. - //The value of 5 is a bit arbitrary. Hopefully just one extra - //pass, or two for the case of circular dependencies generating - //more work that gets resolved in the sync node case. - if (checkLoadedDepth < 5) { - checkLoadedDepth += 1; - checkLoaded(); - } - } - - checkLoadedDepth = 0; - - //Check for DOM ready, and nothing is waiting across contexts. - req.checkReadyState(); - - return undefined; - } - - function callPlugin(pluginName, dep) { - var name = dep.name, - fullName = dep.fullName, - load; - - //Do not bother if plugin is already defined or being loaded. - if (fullName in defined || fullName in loaded) { - return; - } - - if (!plugins[pluginName]) { - plugins[pluginName] = defined[pluginName]; - } - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[fullName]) { - loaded[fullName] = false; - } - - load = function (ret) { - //Allow the build process to register plugin-loaded dependencies. - if (req.onPluginLoad) { - req.onPluginLoad(context, pluginName, name, ret); - } - - execManager({ - prefix: dep.prefix, - name: dep.name, - fullName: dep.fullName, - callback: function () { - return ret; - } - }); - loaded[fullName] = true; - }; - - //Allow plugins to load other code without having to know the - //context or how to "complete" the load. - load.fromText = function (moduleName, text) { - /*jslint evil: true */ - var hasInteractive = useInteractive; - - //Indicate a the module is in process of loading. - context.loaded[moduleName] = false; - context.scriptCount += 1; - - //Turn off interactive script matching for IE for any define - //calls in the text, then turn it back on at the end. - if (hasInteractive) { - useInteractive = false; - } - - req.exec(text); - - if (hasInteractive) { - useInteractive = true; - } - - //Support anonymous modules. - context.completeLoad(moduleName); - }; - - //Use parentName here since the plugin's name is not reliable, - //could be some weird string with no path that actually wants to - //reference the parentName's path. - plugins[pluginName].load(name, makeRequire(dep.parentMap, true), load, config); - } - - function loadPaused(dep) { - //Renormalize dependency if its name was waiting on a plugin - //to load, which as since loaded. - if (dep.prefix && dep.name && dep.name.indexOf('__$p') === 0 && defined[dep.prefix]) { - dep = makeModuleMap(dep.originalName, dep.parentMap); - } - - var pluginName = dep.prefix, - fullName = dep.fullName, - urlFetched = context.urlFetched; - - //Do not bother if the dependency has already been specified. - if (specified[fullName] || loaded[fullName]) { - return; - } else { - specified[fullName] = true; - } - - if (pluginName) { - //If plugin not loaded, wait for it. - //set up callback list. if no list, then register - //managerCallback for that plugin. - if (defined[pluginName]) { - callPlugin(pluginName, dep); - } else { - if (!pluginsQueue[pluginName]) { - pluginsQueue[pluginName] = []; - (managerCallbacks[pluginName] || - (managerCallbacks[pluginName] = [])).push({ - onDep: function (name, value) { - if (name === pluginName) { - var i, oldModuleMap, ary = pluginsQueue[pluginName]; - - //Now update all queued plugin actions. - for (i = 0; i < ary.length; i++) { - oldModuleMap = ary[i]; - //Update the moduleMap since the - //module name may be normalized - //differently now. - callPlugin(pluginName, - makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap)); - } - delete pluginsQueue[pluginName]; - } - } - }); - } - pluginsQueue[pluginName].push(dep); - } - } else { - if (!urlFetched[dep.url]) { - req.load(context, fullName, dep.url); - urlFetched[dep.url] = true; - } - } - } - - /** - * Resumes tracing of dependencies and then checks if everything is loaded. - */ - resume = function () { - var args, i, p; - - resumeDepth += 1; - - if (context.scriptCount <= 0) { - //Synchronous envs will push the number below zero with the - //decrement above, be sure to set it back to zero for good measure. - //require() calls that also do not end up loading scripts could - //push the number negative too. - context.scriptCount = 0; - } - - //Make sure any remaining defQueue items get properly processed. - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return req.onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); - } else { - callDefMain(args); - } - } - - //Skip the resume of paused dependencies - //if current context is in priority wait. - if (!config.priorityWait || isPriorityDone()) { - while (context.paused.length) { - p = context.paused; - context.pausedCount += p.length; - //Reset paused list - context.paused = []; - - for (i = 0; (args = p[i]); i++) { - loadPaused(args); - } - //Move the start time for timeout forward. - context.startTime = (new Date()).getTime(); - context.pausedCount -= p.length; - } - } - - //Only check if loaded when resume depth is 1. It is likely that - //it is only greater than 1 in sync environments where a factory - //function also then calls the callback-style require. In those - //cases, the checkLoaded should not occur until the resume - //depth is back at the top level. - if (resumeDepth === 1) { - checkLoaded(); - } - - resumeDepth -= 1; - - return undefined; - }; - - //Define the context object. Many of these fields are on here - //just to make debugging easier. - context = { - contextName: contextName, - config: config, - defQueue: defQueue, - waiting: waiting, - waitCount: 0, - specified: specified, - loaded: loaded, - urlMap: urlMap, - scriptCount: 0, - urlFetched: {}, - defined: defined, - paused: [], - pausedCount: 0, - plugins: plugins, - managerCallbacks: managerCallbacks, - makeModuleMap: makeModuleMap, - normalize: normalize, - /** - * Set a configuration for the context. - * @param {Object} cfg config object to integrate. - */ - configure: function (cfg) { - var paths, prop, packages, pkgs, packagePaths, requireWait; - - //Make sure the baseUrl ends in a slash. - if (cfg.baseUrl) { - if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== "/") { - cfg.baseUrl += "/"; - } - } - - //Save off the paths and packages since they require special processing, - //they are additive. - paths = config.paths; - packages = config.packages; - pkgs = config.pkgs; - - //Mix in the config values, favoring the new values over - //existing ones in context.config. - mixin(config, cfg, true); - - //Adjust paths if necessary. - if (cfg.paths) { - for (prop in cfg.paths) { - if (!(prop in empty)) { - paths[prop] = cfg.paths[prop]; - } - } - config.paths = paths; - } - - packagePaths = cfg.packagePaths; - if (packagePaths || cfg.packages) { - //Convert packagePaths into a packages config. - if (packagePaths) { - for (prop in packagePaths) { - if (!(prop in empty)) { - configurePackageDir(pkgs, packagePaths[prop], prop); - } - } - } - - //Adjust packages if necessary. - if (cfg.packages) { - configurePackageDir(pkgs, cfg.packages); - } - - //Done with modifications, assing packages back to context config - config.pkgs = pkgs; - } - - //If priority loading is in effect, trigger the loads now - if (cfg.priority) { - //Hold on to requireWait value, and reset it after done - requireWait = context.requireWait; - - //Allow tracing some require calls to allow the fetching - //of the priority config. - context.requireWait = false; - //But first, call resume to register any defined modules that may - //be in a data-main built file before the priority config - //call. Also grab any waiting define calls for this context. - context.takeGlobalQueue(); - resume(); - - context.require(cfg.priority); - - //Trigger a resume right away, for the case when - //the script with the priority load is done as part - //of a data-main call. In that case the normal resume - //call will not happen because the scriptCount will be - //at 1, since the script for data-main is being processed. - resume(); - - //Restore previous state. - context.requireWait = requireWait; - config.priorityWait = cfg.priority; - } - - //If a deps array or a config callback is specified, then call - //require with those args. This is useful when require is defined as a - //config object before require.js is loaded. - if (cfg.deps || cfg.callback) { - context.require(cfg.deps || [], cfg.callback); - } - - //Set up ready callback, if asked. Useful when require is defined as a - //config object before require.js is loaded. - if (cfg.ready) { - req.ready(cfg.ready); - } - }, - - requireDefined: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in defined; - }, - - requireSpecified: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in specified; - }, - - require: function (deps, callback, relModuleMap) { - var moduleName, fullName, moduleMap; - if (typeof deps === "string") { - //Synchronous access to one module. If require.get is - //available (as in the Node adapter), prefer that. - //In this case deps is the moduleName and callback is - //the relModuleMap - if (req.get) { - return req.get(context, deps, callback); - } - - //Just return the module wanted. In this scenario, the - //second arg (if passed) is just the relModuleMap. - moduleName = deps; - relModuleMap = callback; - - //Normalize module name, if it contains . or .. - moduleMap = makeModuleMap(moduleName, relModuleMap); - fullName = moduleMap.fullName; - - if (!(fullName in defined)) { - return req.onError(makeError("notloaded", "Module name '" + - moduleMap.fullName + - "' has not been loaded yet for context: " + - contextName)); - } - return defined[fullName]; - } - - main(null, deps, callback, relModuleMap); - - //If the require call does not trigger anything new to load, - //then resume the dependency processing. - if (!context.requireWait) { - while (!context.scriptCount && context.paused.length) { - //For built layers, there can be some defined - //modules waiting for intake into the context, - //in particular module plugins. Take them. - context.takeGlobalQueue(); - resume(); - } - } - return context.require; - }, - - /** - * Internal method to transfer globalQueue items to this context's - * defQueue. - */ - takeGlobalQueue: function () { - //Push all the globalDefQueue items into the context's defQueue - if (globalDefQueue.length) { - //Array splice in the values since the context code has a - //local var ref to defQueue, so cannot just reassign the one - //on context. - apsp.apply(context.defQueue, - [context.defQueue.length - 1, 0].concat(globalDefQueue)); - globalDefQueue = []; - } - }, - - /** - * Internal method used by environment adapters to complete a load event. - * A load event could be a script load or just a load pass from a synchronous - * load call. - * @param {String} moduleName the name of the module to potentially complete. - */ - completeLoad: function (moduleName) { - var args; - - context.takeGlobalQueue(); - - while (defQueue.length) { - args = defQueue.shift(); - - if (args[0] === null) { - args[0] = moduleName; - break; - } else if (args[0] === moduleName) { - //Found matching define call for this script! - break; - } else { - //Some other named define call, most likely the result - //of a build layer that included many define calls. - callDefMain(args); - args = null; - } - } - if (args) { - callDefMain(args); - } else { - //A script that does not call define(), so just simulate - //the call for it. Special exception for jQuery dynamic load. - callDefMain([moduleName, [], - moduleName === "jquery" && typeof jQuery !== "undefined" ? - function () { - return jQuery; - } : null]); - } - - //Mark the script as loaded. Note that this can be different from a - //moduleName that maps to a define call. This line is important - //for traditional browser scripts. - loaded[moduleName] = true; - - //If a global jQuery is defined, check for it. Need to do it here - //instead of main() since stock jQuery does not register as - //a module via define. - jQueryCheck(); - - //Doing this scriptCount decrement branching because sync envs - //need to decrement after resume, otherwise it looks like - //loading is complete after the first dependency is fetched. - //For browsers, it works fine to decrement after, but it means - //the checkLoaded setTimeout 50 ms cost is taken. To avoid - //that cost, decrement beforehand. - if (req.isAsync) { - context.scriptCount -= 1; - } - resume(); - if (!req.isAsync) { - context.scriptCount -= 1; - } - }, - - /** - * Converts a module name + .extension into an URL path. - * *Requires* the use of a module name. It does not support using - * plain URLs like nameToUrl. - */ - toUrl: function (moduleNamePlusExt, relModuleMap) { - var index = moduleNamePlusExt.lastIndexOf("."), - ext = null; - - if (index !== -1) { - ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - - return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap); - }, - - /** - * Converts a module name to a file path. Supports cases where - * moduleName may actually be just an URL. - */ - nameToUrl: function (moduleName, ext, relModuleMap) { - var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, - config = context.config; - - //Normalize module name if have a base relative module name to work from. - moduleName = normalize(moduleName, relModuleMap && relModuleMap.fullName); - - //If a colon is in the URL, it indicates a protocol is used and it is just - //an URL to a file, or if it starts with a slash or ends with .js, it is just a plain file. - //The slash is important for protocol-less URLs as well as full paths. - if (req.jsExtRegExp.test(moduleName)) { - //Just a plain path, not module name lookup, so just return it. - //Add extension if it is included. This is a bit wonky, only non-.js things pass - //an extension, this method probably needs to be reworked. - url = moduleName + (ext ? ext : ""); - } else { - //A module that needs to be converted to a path. - paths = config.paths; - pkgs = config.pkgs; - - syms = moduleName.split("/"); - //For each module name segment, see if there is a path - //registered for it. Start with most specific name - //and work up from it. - for (i = syms.length; i > 0; i--) { - parentModule = syms.slice(0, i).join("/"); - if (paths[parentModule]) { - syms.splice(0, i, paths[parentModule]); - break; - } else if ((pkg = pkgs[parentModule])) { - //If module name is just the package name, then looking - //for the main module. - if (moduleName === pkg.name) { - pkgPath = pkg.location + '/' + pkg.main; - } else { - pkgPath = pkg.location; - } - syms.splice(0, i, pkgPath); - break; - } - } - - //Join the path parts together, then figure out if baseUrl is needed. - url = syms.join("/") + (ext || ".js"); - url = (url.charAt(0) === '/' || url.match(/^\w+:/) ? "" : config.baseUrl) + url; - } - - return config.urlArgs ? url + - ((url.indexOf('?') === -1 ? '?' : '&') + - config.urlArgs) : url; - } - }; - - //Make these visible on the context so can be called at the very - //end of the file to bootstrap - context.jQueryCheck = jQueryCheck; - context.resume = resume; - - return context; - } - - /** - * Main entry point. - * - * If the only argument to require is a string, then the module that - * is represented by that string is fetched for the appropriate context. - * - * If the first argument is an array, then it will be treated as an array - * of dependency string names to fetch. An optional function callback can - * be specified to execute when all of those dependencies are available. - * - * Make a local req variable to help Caja compliance (it assumes things - * on a require that are not standardized), and to give a short - * name for minification/local scope use. - */ - req = requirejs = function (deps, callback) { - - //Find the right context, use default - var contextName = defContextName, - context, config; - - // Determine if have config object in the call. - if (!isArray(deps) && typeof deps !== "string") { - // deps is a config object - config = deps; - if (isArray(callback)) { - // Adjust args if there are dependencies - deps = callback; - callback = arguments[2]; - } else { - deps = []; - } - } - - if (config && config.context) { - contextName = config.context; - } - - context = contexts[contextName] || - (contexts[contextName] = newContext(contextName)); - - if (config) { - context.configure(config); - } - - return context.require(deps, callback); - }; - - /** - * Support require.config() to make it easier to cooperate with other - * AMD loaders on globally agreed names. - */ - req.config = function (config) { - return req(config); - }; - - /** - * Export require as a global, but only if it does not already exist. - */ - if (typeof require === "undefined") { - require = req; - } - - /** - * Global require.toUrl(), to match global require, mostly useful - * for debugging/work in the global space. - */ - req.toUrl = function (moduleNamePlusExt) { - return contexts[defContextName].toUrl(moduleNamePlusExt); - }; - - req.version = version; - req.isArray = isArray; - req.isFunction = isFunction; - req.mixin = mixin; - //Used to filter out dependencies that are already paths. - req.jsExtRegExp = /^\/|:|\?|\.js$/; - s = req.s = { - contexts: contexts, - //Stores a list of URLs that should not get async script tag treatment. - skipAsync: {}, - isPageLoaded: !isBrowser, - readyCalls: [] - }; - - req.isAsync = req.isBrowser = isBrowser; - if (isBrowser) { - head = s.head = document.getElementsByTagName("head")[0]; - //If BASE tag is in play, using appendChild is a problem for IE6. - //When that browser dies, this can be removed. Details in this jQuery bug: - //http://dev.jquery.com/ticket/2709 - baseElement = document.getElementsByTagName("base")[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - - /** - * Any errors that require explicitly generates will be passed to this - * function. Intercept/override it if you want custom error handling. - * @param {Error} err the error object. - */ - req.onError = function (err) { - throw err; - }; - - /** - * Does the request to load a module for the browser case. - * Make this a separate function to allow other environments - * to override it. - * - * @param {Object} context the require context to find state. - * @param {String} moduleName the name of the module. - * @param {Object} url the URL to the module. - */ - req.load = function (context, moduleName, url) { - var loaded = context.loaded; - - isDone = false; - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[moduleName]) { - loaded[moduleName] = false; - } - - context.scriptCount += 1; - req.attach(url, context, moduleName); - - //If tracking a jQuery, then make sure its ready callbacks - //are put on hold to prevent its ready callbacks from - //triggering too soon. - if (context.jQuery && !context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, true); - context.jQueryIncremented = true; - } - }; - - function getInteractiveScript() { - var scripts, i, script; - if (interactiveScript && interactiveScript.readyState === 'interactive') { - return interactiveScript; - } - - scripts = document.getElementsByTagName('script'); - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - if (script.readyState === 'interactive') { - return (interactiveScript = script); - } - } - - return null; - } - - /** - * The function that handles definitions of modules. Differs from - * require() in that a string for the module should be the first argument, - * and the function to execute after dependencies are loaded should - * return a value to define the module corresponding to the first argument's - * name. - */ - define = req.def = function (name, deps, callback) { - var node, context; - - //Allow for anonymous functions - if (typeof name !== 'string') { - //Adjust args appropriately - callback = deps; - deps = name; - name = null; - } - - //This module may not have dependencies - if (!req.isArray(deps)) { - callback = deps; - deps = []; - } - - //If no name, and callback is a function, then figure out if it a - //CommonJS thing with dependencies. - if (!name && !deps.length && req.isFunction(callback)) { - //Remove comments from the callback string, - //look for require calls, and pull them into the dependencies, - //but only if there are function args. - if (callback.length) { - callback - .toString() - .replace(commentRegExp, "") - .replace(cjsRequireRegExp, function (match, dep) { - deps.push(dep); - }); - - //May be a CommonJS thing even without require calls, but still - //could use exports, and module. Avoid doing exports and module - //work though if it just needs require. - //REQUIRES the function to expect the CommonJS variables in the - //order listed below. - deps = (callback.length === 1 ? ["require"] : ["require", "exports", "module"]).concat(deps); - } - } - - //If in IE 6-8 and hit an anonymous define() call, do the interactive - //work. - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute("data-requiremodule"); - } - context = contexts[node.getAttribute("data-requirecontext")]; - } - } - - //Always save off evaluating the def call until the script onload handler. - //This allows multiple modules to be in a file without prematurely - //tracing dependencies, and allows for anonymous module support, - //where the module name is not known until the script onload event - //occurs. If no context, use the global queue, and get it processed - //in the onscript load callback. - (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); - - return undefined; - }; - - define.amd = { - multiversion: true, - plugins: true, - jQuery: true - }; - - /** - * Executes the text. Normally just uses eval, but can be modified - * to use a more environment specific call. - * @param {String} text the text to execute/evaluate. - */ - req.exec = function (text) { - return eval(text); - }; - - /** - * Executes a module callack function. Broken out as a separate function - * solely to allow the build system to sequence the files in the built - * layer in the right sequence. - * - * @private - */ - req.execCb = function (name, callback, args, exports) { - return callback.apply(exports, args); - }; - - /** - * callback for script loads, used to check status of loading. - * - * @param {Event} evt the event from the browser for the script - * that was loaded. - * - * @private - */ - req.onScriptLoad = function (evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - var node = evt.currentTarget || evt.srcElement, contextName, moduleName, - context; - - if (evt.type === "load" || readyRegExp.test(node.readyState)) { - //Reset interactive script so a script node is not held onto for - //to long. - interactiveScript = null; - - //Pull out the name of the module and the context. - contextName = node.getAttribute("data-requirecontext"); - moduleName = node.getAttribute("data-requiremodule"); - context = contexts[contextName]; - - contexts[contextName].completeLoad(moduleName); - - //Clean up script binding. Favor detachEvent because of IE9 - //issue, see attachEvent/addEventListener comment elsewhere - //in this file. - if (node.detachEvent && !isOpera) { - //Probably IE. If not it will throw an error, which will be - //useful to know. - node.detachEvent("onreadystatechange", req.onScriptLoad); - } else { - node.removeEventListener("load", req.onScriptLoad, false); - } - } - }; - - /** - * Attaches the script represented by the URL to the current - * environment. Right now only supports browser loading, - * but can be redefined in other environments to do the right thing. - * @param {String} url the url of the script to attach. - * @param {Object} context the context that wants the script. - * @param {moduleName} the name of the module that is associated with the script. - * @param {Function} [callback] optional callback, defaults to require.onScriptLoad - * @param {String} [type] optional type, defaults to text/javascript - */ - req.attach = function (url, context, moduleName, callback, type) { - var node, loaded; - if (isBrowser) { - //In the browser so use a script tag - callback = callback || req.onScriptLoad; - node = context && context.config && context.config.xhtml ? - document.createElementNS("http://www.w3.org/1999/xhtml", "html:script") : - document.createElement("script"); - node.type = type || "text/javascript"; - node.charset = "utf-8"; - //Use async so Gecko does not block on executing the script if something - //like a long-polling comet tag is being run first. Gecko likes - //to evaluate scripts in DOM order, even for dynamic scripts. - //It will fetch them async, but only evaluate the contents in DOM - //order, so a long-polling script tag can delay execution of scripts - //after it. But telling Gecko we expect async gets us the behavior - //we want -- execute it whenever it is finished downloading. Only - //Helps Firefox 3.6+ - //Allow some URLs to not be fetched async. Mostly helps the order! - //plugin - node.async = !s.skipAsync[url]; - - if (context) { - node.setAttribute("data-requirecontext", context.contextName); - } - node.setAttribute("data-requiremodule", moduleName); - - //Set up load listener. Test attachEvent first because IE9 has - //a subtle issue in its addEventListener and script onload firings - //that do not match the behavior of all other browsers with - //addEventListener support, which fire the onload event for a - //script right after the script execution. See: - //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution - //UNFORTUNATELY Opera implements attachEvent but does not follow the script - //script execution mode. - if (node.attachEvent && !isOpera) { - //Probably IE. IE (at least 6-8) do not fire - //script onload right after executing the script, so - //we cannot tie the anonymous define call to a name. - //However, IE reports the script as being in "interactive" - //readyState at the time of the define call. - useInteractive = true; - node.attachEvent("onreadystatechange", callback); - } else { - node.addEventListener("load", callback, false); - } - node.src = url; - - //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous define - //call to the module name (which is stored on the node), hold on - //to a reference to this node, but clear after the DOM insertion. - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - return node; - } else if (isWebWorker) { - //In a web worker, use importScripts. This is not a very - //efficient use of importScripts, importScripts will block until - //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation that a build has been done so that - //only one script needs to be loaded anyway. This may need to be - //reevaluated if other use cases become common. - loaded = context.loaded; - loaded[moduleName] = false; - - importScripts(url); - - //Account for anonymous modules - context.completeLoad(moduleName); - } - return null; - }; - - //Look for a data-main script attribute, which could also adjust the baseUrl. - if (isBrowser) { - //Figure out baseUrl. Get it from the script tag with require.js in it. - scripts = document.getElementsByTagName("script"); - - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - //Set the "head" where we can append children by - //using the script's parent. - if (!head) { - head = script.parentNode; - } - - //Look for a data-main attribute to set main script for the page - //to load. If it is there, the path to data main becomes the - //baseUrl, if it is not already set. - if ((dataMain = script.getAttribute('data-main'))) { - if (!cfg.baseUrl) { - //Pull off the directory of data-main for use as the - //baseUrl. - src = dataMain.split('/'); - mainScript = src.pop(); - subPath = src.length ? src.join('/') + '/' : './'; - - //Set final config. - cfg.baseUrl = subPath; - //Strip off any trailing .js since dataMain is now - //like a module name. - dataMain = mainScript.replace(jsSuffixRegExp, ''); - } - - //Put the data-main script in the files to load. - cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; - - break; - } - } - } - - //Set baseUrl based on config. - s.baseUrl = cfg.baseUrl; - - //****** START page load functionality **************** - /** - * Sets the page as loaded and triggers check for all modules loaded. - */ - req.pageLoaded = function () { - if (!s.isPageLoaded) { - s.isPageLoaded = true; - if (scrollIntervalId) { - clearInterval(scrollIntervalId); - } - - //Part of a fix for FF < 3.6 where readyState was not set to - //complete so libraries like jQuery that check for readyState - //after page load where not getting initialized correctly. - //Original approach suggested by Andrea Giammarchi: - //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html - //see other setReadyState reference for the rest of the fix. - if (setReadyState) { - document.readyState = "complete"; - } - - req.callReady(); - } - }; - - //See if there is nothing waiting across contexts, and if not, trigger - //callReady. - req.checkReadyState = function () { - var contexts = s.contexts, prop; - for (prop in contexts) { - if (!(prop in empty)) { - if (contexts[prop].waitCount) { - return; - } - } - } - s.isDone = true; - req.callReady(); - }; - - /** - * Internal function that calls back any ready functions. If you are - * integrating RequireJS with another library without require.ready support, - * you can define this method to call your page ready code instead. - */ - req.callReady = function () { - var callbacks = s.readyCalls, i, callback, contexts, context, prop; - - if (s.isPageLoaded && s.isDone) { - if (callbacks.length) { - s.readyCalls = []; - for (i = 0; (callback = callbacks[i]); i++) { - callback(); - } - } - - //If jQuery with DOM ready delayed, release it now. - contexts = s.contexts; - for (prop in contexts) { - if (!(prop in empty)) { - context = contexts[prop]; - if (context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, false); - context.jQueryIncremented = false; - } - } - } - } - }; - - /** - * Registers functions to call when the page is loaded - */ - req.ready = function (callback) { - if (s.isPageLoaded && s.isDone) { - callback(); - } else { - s.readyCalls.push(callback); - } - return req; - }; - - if (isBrowser) { - if (document.addEventListener) { - //Standards. Hooray! Assumption here that if standards based, - //it knows about DOMContentLoaded. - document.addEventListener("DOMContentLoaded", req.pageLoaded, false); - window.addEventListener("load", req.pageLoaded, false); - //Part of FF < 3.6 readystate fix (see setReadyState refs for more info) - if (!document.readyState) { - setReadyState = true; - document.readyState = "loading"; - } - } else if (window.attachEvent) { - window.attachEvent("onload", req.pageLoaded); - - //DOMContentLoaded approximation, as found by Diego Perini: - //http://javascript.nwbox.com/IEContentLoaded/ - if (self === self.top) { - scrollIntervalId = setInterval(function () { - try { - //From this ticket: - //http://bugs.dojotoolkit.org/ticket/11106, - //In IE HTML Application (HTA), such as in a selenium test, - //javascript in the iframe can't see anything outside - //of it, so self===self.top is true, but the iframe is - //not the top window and doScroll will be available - //before document.body is set. Test document.body - //before trying the doScroll trick. - if (document.body) { - document.documentElement.doScroll("left"); - req.pageLoaded(); - } - } catch (e) {} - }, 30); - } - } - - //Check if document already complete, and if so, just trigger page load - //listeners. NOTE: does not work with Firefox before 3.6. To support - //those browsers, manually call require.pageLoaded(). - if (document.readyState === "complete") { - req.pageLoaded(); - } - } - //****** END page load functionality **************** - - //Set up default context. If require was a configuration object, use that as base config. - req(cfg); - - //If modules are built into require.js, then need to make sure dependencies are - //traced. Use a setTimeout in the browser world, to allow all the modules to register - //themselves. In a non-browser env, assume that modules are not built into require.js, - //which seems odd to do on the server. - if (req.isAsync && typeof setTimeout !== "undefined") { - ctx = s.contexts[(cfg.context || defContextName)]; - //Indicate that the script that includes require() is still loading, - //so that require()'d dependencies are not traced until the end of the - //file is parsed (approximated via the setTimeout call). - ctx.requireWait = true; - setTimeout(function () { - ctx.requireWait = false; - - //Any modules included with the require.js file will be in the - //global queue, assign them to this context. - ctx.takeGlobalQueue(); - - //Allow for jQuery to be loaded/already in the page, and if jQuery 1.4.3, - //make sure to hold onto it for readyWait triggering. - ctx.jQueryCheck(); - - if (!ctx.scriptCount) { - ctx.resume(); - } - req.checkReadyState(); - }, 0); - } -}()); diff --git a/temp/idbwrapper/0.1.2/package/example/objectstore/app.js b/temp/idbwrapper/0.1.2/package/example/objectstore/app.js deleted file mode 100644 index 21e828a52..000000000 --- a/temp/idbwrapper/0.1.2/package/example/objectstore/app.js +++ /dev/null @@ -1,93 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var objStore; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") - objStore = new IDBStore({ - storeName: 'objectstore', - keyPath: 'id', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - objStore.getAll(listItems); - } - - function listItems(data){ - var header, tpl, - props = ['id'], - content = ''; - - data.forEach(function(item){ - for(var prop in item){ - if(props.indexOf(prop) < 0){ - props.push(prop); - } - } - }); - - header = '' + props.join('') + ''; - tpl = '{' + props.join('}{') + '}'; - - data.forEach(function(item){ - content += tpl.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key] || ''; - }); - }); - - nodeCache['results-container'].innerHTML = '' + header + content + '
'; - } - - function enterData(){ - // read data from inputs - var propName, value, hasData, - data = {}, - count = 4; - - while(--count){ - propName = document.getElementById('prop_' + count).value.trim(); - if(propName.length){ - hasData = true; - value = document.getElementById('value_' + count).value.trim(); - // Don't do this at home. This is just a very dirty hack to 'guess' what - // type of data you just entered. If you do stuff like this in production - // code, UNICORNS WILL DIE. You have been warned. - data[propName] = ['{', '['].indexOf(value.substring(0,1)) !== -1 ? eval('(' + value + ')') : parseInt(value, 10) || value; - } - } - if(!hasData){ - return; - } - - // and store them away. - objStore.put(data, refreshTable); - } - - function clear(){ - objStore.clear(refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - clear: clear - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.1.2/package/example/objectstore/index.html b/temp/idbwrapper/0.1.2/package/example/objectstore/index.html deleted file mode 100644 index 44a316628..000000000 --- a/temp/idbwrapper/0.1.2/package/example/objectstore/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - IDBWrapper ObjectStore Example - - - - - -
-
- QueryResults -
-
-
-
-

- IDB is not a relational database; it's an object store. That means you - have - no such things as fixed, defined columns.
- Just enter any name as key and anything as value.
-
- To enter non-primitive values, use literal notaion. -

- - - - - - - - - - - - - - - - - - - - - -
KeyValue
- -
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.1.2/package/example/objectstore/style.css b/temp/idbwrapper/0.1.2/package/example/objectstore/style.css deleted file mode 100644 index 5bdb6b0f7..000000000 --- a/temp/idbwrapper/0.1.2/package/example/objectstore/style.css +++ /dev/null @@ -1,93 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.2/package/example/quicktest/index.html b/temp/idbwrapper/0.1.2/package/example/quicktest/index.html deleted file mode 100644 index f64a74323..000000000 --- a/temp/idbwrapper/0.1.2/package/example/quicktest/index.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - IndexedDB Wrapper Quick Test - - - - -
-

Open the console and click 'Open DB'. You will then see a bunch of buttons - that allow data manipulation. Click them, and check the console for - results.

- - - -
- - - - - diff --git a/temp/idbwrapper/0.1.2/package/example/quicktest/style.css b/temp/idbwrapper/0.1.2/package/example/quicktest/style.css deleted file mode 100644 index 90f382838..000000000 --- a/temp/idbwrapper/0.1.2/package/example/quicktest/style.css +++ /dev/null @@ -1,94 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.2/package/example/style.css b/temp/idbwrapper/0.1.2/package/example/style.css deleted file mode 100644 index fb96076ca..000000000 --- a/temp/idbwrapper/0.1.2/package/example/style.css +++ /dev/null @@ -1,87 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; -} -.hbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.2/package/package.json b/temp/idbwrapper/0.1.2/package/package.json deleted file mode 100644 index 3b748fc47..000000000 --- a/temp/idbwrapper/0.1.2/package/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "idb-wrapper", - "version": "0.1.2", - "description": "This is a wrapper for indexedDB.", - "keywords": [], - "author": "jensarps ", - "repository": "git://github.com/jensarps/IDBWrapper.git", - "main": "IDBStore", - "homepage": "https://github.com/jensarps/IDBWrapper", - "contributors": [], - "bugs": { - "url": "https://github.com/jensarps/IDBWrapper/issues", - "email": "mail@jensarps.de" - }, - "dependencies": {}, - "devDependencies": {}, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/jensarps/IDBWrapper/raw/master/LICENSE" - } - ], - "scripts": {} -} diff --git a/temp/idbwrapper/0.1.3/dist.tar.gz b/temp/idbwrapper/0.1.3/dist.tar.gz deleted file mode 100644 index 5e393e216894f54ba488e487aa9269917761fb8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35355 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%0Ay5k8U@HvTkA@9Cig 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 diff --git a/temp/idbwrapper/0.1.3/package/.npmignore b/temp/idbwrapper/0.1.3/package/.npmignore deleted file mode 100644 index 14c279342..000000000 --- a/temp/idbwrapper/0.1.3/package/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.project -.idea diff --git a/temp/idbwrapper/0.1.3/package/IDBStore.js b/temp/idbwrapper/0.1.3/package/IDBStore.js deleted file mode 100644 index fef8b5efc..000000000 --- a/temp/idbwrapper/0.1.3/package/IDBStore.js +++ /dev/null @@ -1,464 +0,0 @@ -/* - * IDBWrapper - A cross-browser wrapper for IndexedDB - * Copyright (c) 2011 - 2012 Jens Arps - * http://jensarps.de/ - * - * Licensed under the MIT (X11) license - */ - -"use strict"; - -(function (name, definition, global) { - if (typeof define === 'function') { - define(definition); - } else if (typeof module !== 'undefined' && module.exports) { - module.exports = definition(); - } else { - global[name] = definition(); - } -})('IDBStore', function () { - - var IDBStore; - - var defaults = { - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - onStoreReady: function () { - }, - indexes: [] - }; - - IDBStore = function (kwArgs, onStoreReady) { - - function fixupConstants (object, constants) { - for (var prop in constants) { - if (!(prop in object)) - object[prop] = constants[prop]; - } - } - - for(var key in defaults){ - this[key] = typeof kwArgs[key] != 'undefined' ? kwArgs[key] : defaults[key]; - } - - this.dbName = 'IDBWrapper-' + this.storeName; - this.dbVersion = parseInt(this.dbVersion, 10); - - onStoreReady && (this.onStoreReady = onStoreReady); - - this.idb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; - this.keyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.mozIDBKeyRange; - - this.consts = { - 'READ_ONLY': 'readonly', - 'READ_WRITE': 'readwrite', - 'VERSION_CHANGE': 'versionchange' - } - - this.cursor = window.IDBCursor || window.webkitIDBCursor; - fixupConstants(this.cursor, { - 'NEXT': 'next', - 'NEXT_NO_DUPLICATE': 'nextunique', - 'PREV': 'prev', - 'PREV_NO_DUPLICATE': 'prevunique' - }); - - this.openDB(); - }; - - IDBStore.prototype = { - - db: null, - - dbName: null, - - dbVersion: null, - - store: null, - - storeName: null, - - keyPath: null, - - autoIncrement: null, - - indexes: null, - - features: null, - - onStoreReady: null, - - openDB: function () { - - this.newVersionAPI = typeof this.idb.setVersion == 'undefined'; - - if(!this.newVersionAPI){ - throw new Error('The IndexedDB implementation in this browser is outdated. Please upgrade your browser.'); - } - - var features = this.features = {}; - features.hasAutoIncrement = !window.mozIndexedDB; // TODO: Still, really? - - var openRequest = this.idb.open(this.dbName, this.dbVersion); - - openRequest.onerror = function (error) { - - var gotVersionErr = false; - if ('error' in error.target) { - gotVersionErr = error.target.error.name == "VersionError"; - } else if ('errorCode' in error.target) { - gotVersionErr = error.target.errorCode == 12; // TODO: Use const - } - - if (gotVersionErr) { - console.error('Could not open database, version error:', error); - } else { - console.error('Could not open database, error:', error); - } - }.bind(this); - - - openRequest.onsuccess = function (event) { - - if(this.db){ - this.onStoreReady(); - return; - } - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - if(!this.store){ - var emptyTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - this.store = emptyTransaction.objectStore(this.storeName); - } - // check indexes - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - // normalize and provide existing keys - indexData.keyPath = indexData.keyPath || indexName; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - - if(!indexName){ - throw new Error('Cannot create index: No index name given.'); - } - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = ['keyPath', 'unique', 'multiEntry'].every(function(key){ - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actualIndex[key] === undefined && indexData[key] === false) { - return true; - } - return indexData[key] == actualIndex[key]; - }); - if(!complies){ - throw new Error('Cannot modify index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - } else { - throw new Error('Cannot create new index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - - }, this); - - this.onStoreReady(); - } else { - // We should never get here. - throw new Error('Cannot create a new store for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - }.bind(this); - - openRequest.onupgradeneeded = function(/* IDBVersionChangeEvent */ event){ - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - this.store = event.target.transaction.objectStore(this.storeName); - } else { - this.store = this.db.createObjectStore(this.storeName, { keyPath: this.keyPath, autoIncrement: this.autoIncrement}); - } - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - // normalize and provide existing keys - indexData.keyPath = indexData.keyPath || indexName; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - - if(!indexName){ - throw new Error('Cannot create index: No index name given.'); - } - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = ['keyPath', 'unique', 'multiEntry'].every(function(key){ - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actualIndex[key] === undefined && indexData[key] === false) { - return true; - } - return indexData[key] == actualIndex[key]; - }); - if(!complies){ - // index differs, need to delete and re-create - this.store.deleteIndex(indexName); - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - } else { - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - - }, this); - - }.bind(this); - }, - - deleteDatabase: function () { - if (this.idb.deleteDatabase) { - this.idb.deleteDatabase(this.dbName); - } - }, - - /********************* - * data manipulation * - *********************/ - - - put: function (dataObj, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not write data.', error); - }); - onSuccess || (onSuccess = noop); - if (typeof dataObj[this.keyPath] == 'undefined' && !this.features.hasAutoIncrement) { - dataObj[this.keyPath] = this._getUID(); - } - - var putTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var putRequest = putTransaction.objectStore(this.storeName).put(dataObj); - putRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - putRequest.onerror = onError; - }, - - get: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var getRequest = getTransaction.objectStore(this.storeName).get(key); - getRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getRequest.onerror = onError; - }, - - remove: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not remove data.', error); - }); - onSuccess || (onSuccess = noop); - var removeTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var deleteRequest = removeTransaction.objectStore(this.storeName).delete(key); - deleteRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - deleteRequest.onerror = onError; - }, - - getAll: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getAllTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var store = getAllTransaction.objectStore(this.storeName); - if (store.getAll) { - var getAllRequest = store.getAll(); - getAllRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getAllRequest.onerror = onError; - } else { - this._getAllCursor(getAllTransaction, onSuccess, onError); - } - }, - - _getAllCursor: function (tr, onSuccess, onError) { - var all = []; - var store = tr.objectStore(this.storeName); - var cursorRequest = store.openCursor(); - - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - all.push(cursor.value); - cursor['continue'](); - } - else { - onSuccess(all); - } - }; - cursorRequest.onError = onError; - }, - - clear: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not clear store.', error); - }); - onSuccess || (onSuccess = noop); - var clearTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var clearRequest = clearTransaction.objectStore(this.storeName).clear(); - clearRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - clearRequest.onerror = onError; - }, - - _getUID: function () { - // FF bails at times on non-numeric ids. So we take an even - // worse approach now, using current time as id. Sigh. - return +new Date(); - }, - - - /************ - * indexing * - ************/ - - getIndexList: function () { - return this.store.indexNames; - }, - - hasIndex: function (indexName) { - return this.store.indexNames.contains(indexName); - }, - - /********** - * cursor * - **********/ - - iterate: function (onItem, options) { - options = mixin({ - index: null, - order: 'ASC', - filterDuplicates: false, - keyRange: null, - writeAccess: false, - onEnd: null, - onError: function (error) { - console.error('Could not open cursor.', error); - } - }, options || {}); - - var directionType = options.order.toLowerCase() == 'desc' ? 'PREV' : 'NEXT'; - if (options.filterDuplicates) { - directionType += '_NO_DUPLICATE'; - } - - var cursorTransaction = this.db.transaction([this.storeName], this.consts[options.writeAccess ? 'READ_WRITE' : 'READ_ONLY']); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var cursorRequest = cursorTarget.openCursor(options.keyRange, this.cursor[directionType]); - cursorRequest.onerror = options.onError; - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - onItem(cursor.value, cursor, cursorTransaction); - cursor['continue'](); - } else { - if(options.onEnd){ - options.onEnd() - } else { - onItem(null); - } - } - }; - }, - - count: function (onSuccess, options) { - - options = mixin({ - index: null, - keyRange: null - }, options || {}); - - var onError = options.onError || function (error) { - console.error('Could not open cursor.', error); - }; - - var cursorTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var countRequest = cursorTarget.count(options.keyRange); - countRequest.onsuccess = function (evt) { - onSuccess(evt.target.result); - }; - countRequest.onError = function (error) { - onError(error); - }; - }, - - /**************/ - /* key ranges */ - /**************/ - - makeKeyRange: function(options){ - var keyRange, - hasLower = typeof options.lower != 'undefined', - hasUpper = typeof options.upper != 'undefined'; - - switch(true){ - case hasLower && hasUpper: - keyRange = this.keyRange.bound(options.lower, options.upper, options.excludeLower, options.excludeUpper); - break; - case hasLower: - keyRange = this.keyRange.lowerBound(options.lower, options.excludeLower); - break; - case hasUpper: - keyRange = this.keyRange.upperBound(options.upper, options.excludeUpper); - break; - default: - throw new Error('Cannot create KeyRange. Provide one or both of "lower" or "upper" value.'); - break; - } - - return keyRange; - - } - - }; - - /** helpers **/ - - var noop = function () { - }; - var empty = {}; - var mixin = function (target, source) { - var name, s; - for (name in source) { - s = source[name]; - if (s !== empty[name] && s !== target[name]) { - target[name] = s; - } - } - return target; - }; - - return IDBStore; - -}, this); diff --git a/temp/idbwrapper/0.1.3/package/LICENSE b/temp/idbwrapper/0.1.3/package/LICENSE deleted file mode 100644 index 93f5d87c8..000000000 --- a/temp/idbwrapper/0.1.3/package/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 - 2012 Jens Arps - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/temp/idbwrapper/0.1.3/package/README.md b/temp/idbwrapper/0.1.3/package/README.md deleted file mode 100644 index 480e14c6b..000000000 --- a/temp/idbwrapper/0.1.3/package/README.md +++ /dev/null @@ -1,313 +0,0 @@ -About -===== - -This is a wrapper for indexedDB. It is meant to - -a) ease the use of indexedDB and abstract away the differences between the -existing impls in Chrome, Firefox and IE10 (yes, it works in all three), and - -b) show how IDB works. The code is split up into short methods, so that it's -easy to see what happens in what method. - -"Showing how it works" is the main intention of this project. IndexedDB is -all the buzz, but only a few people actually know how to use it. - -The code in IDBWrapper.js is not optimized for anything, nor minified or anything. -It is meant to be read and easy to understand. So, please, go ahead and check out -the source! - -There are two tutorials to get you up and running: - -Part 1: Setup and CRUD operations -http://jensarps.de/2011/11/25/working-with-idbwrapper-part-1/ - -Part 2: Running Queries against the store -http://jensarps.de/2012/11/13/working-with-idbwrapper-part-2/ - -##November Rewrite - -I rewrote IDBWrapper to cope with all the issues, and the new version is on -master since Nov, 13th 2012. The API didn't change much, I just removed some -of the methods. Method signatures remain unchanged. - -However, if you have a previous version of IDBWrapper in use, there's an -issue: The new version won't be able to access the store created with the old -version, because database names changed. In that case, you need to manually -migrate the data: Include both versions of IDBWrapper (use a different name for -them), do a getAll() on the old store and write the data to the new store. - -I am very sorry about any inconveniences, but there was no other way. - -The 'old' version of IDBWrapper is still available in the `legacy` branch: -https://github.com/jensarps/IDBWrapper/tree/legacy - -Also, "showing how it works" is no longer the main intention behind this. Now, -it's rather "just works". - - -Examples -======== - -There are some examples to run right in your browser over here: http://jensarps.github.com/IDBWrapper/example/ - -The source for these examples are in the `example` folder of this repository. - -Usage -===== - -Including the IDBStore.js file will add an IDBStore constructor to the global scope. - -Alternatively, you can use an AMD loader such as RequireJS to load the file, -and you will receive the constructor in your load callback (the constructor -will then, of course, have whatever name you call it). - -You can then create an IDB store: - -```javascript -var myStore = new IDBStore(); -``` - -You may pass two parameters to the constructor: the first is an object with optional parameters, -the second is a function reference to a function that is called when the store is ready to use. - -The options object may contain the following properties (default values are shown): - -```javascript -{ - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - indexes: [], - onStoreReady: function(){} -} -``` - -'keyPath' is the name of the property to be used as key index. If 'autoIncrement' is set to true, -the database will automatically add a unique key to the keyPath index when storing objects missing -that property. 'indexes' contains objects defining indexes (see below for details on indexes). - -You can also pass a callback function to the options object. If a callback is provided both as second -parameter and inside of the options object, the function passed as second parameter will be used. - -Methods -======= - -Here's an overview of available methods in IDBStore: - -Data Manipulation ------------------ - -Use the following methods to read and write data: - -___ - -1) The put method. - - -```javascript -put(/*Object*/ dataObj, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`dataObj` is the Object to store. `onSuccess` will be called when the insertion/update was successful, -and it will receive the keyPath value (the id, so to say) of the inserted object as first and only -argument. `onError` will be called if the insertion/update failed and it will receive the error event -object as first and only argument. If the store already contains an object with the given keyPath id, -it will be overwritten by `dataObj`. - -___ - -2) The get method. - -```javascript -get(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to retrieve. `onSuccess` will be called if -the get operation was successful, and it will receive the stored object as first and only argument. If -no object was found with the given keyPath value, this argument will be null. `onError` will be called -if the get operation failed and it will receive the error event object as first and only argument. - -___ - -3) The getAll method. - -```javascript -getAll: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the getAll operation was successful, and it will receive an Array of -all objects currently stored in the store as first and only argument. `onError` will be called if -the getAll operation failed and it will receive the error event object as first and only argument. - -___ - -4) The remove method. - -```javascript -remove: function(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to remove. `onSuccess` will be called if -the remove operation was successful, and it _should_ receive `false` as first and only argument if the -object to remove was not found, and `true` if it was found and removed. - -NOTE: FF 8 will pass the key to the onSuccess handler, no matter if there is an corresponding object -or not. Chrome 15 will pass `null` if removal was successful, and call the error handler if the object -wasn't found. Chrome 17 will behave as described above. - -`onError` will be called if the remove operation failed and it will receive the error event object as first -and only argument. - -___ - -5) The clear method. - -```javascript -clear: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the clear operation was successful. `onError` will be called if the clear -operation failed and it will receive the error event object as first and only argument. - - -Index Operations ----------------- - -To create indexes, you need to pass the index information to the IDBStore() -constructor, for example: - - -```javascript -{ - storeName: 'customers', - dbVersion: 1, - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: function(){}, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] -} -``` - -An entry in the index Array is an object containing the following properties: - -The `name` property is the identifier of the index. If you want to work with the created index later, this name is used to identify the index. This is the only property that is mandatory. - -The `keyPath` property is the name of the property in your stored data that you want to index. If you omit that, IDBWrapper will assume that it is the same as the provided name, and will use this instead. - -The `unique` property tells the store whether the indexed property in your data is unique. If you set this to true, it will add a uniqueness constraint to the store which will make it throw if you try to store data that violates that constraint. If you omit that, IDBWrapper will set this to false. - -The `multiEntry` property is kinda weird. You can read up on it here: http://www.w3.org/TR/IndexedDB/#dfn-multientry. However, you can live perfectly fine with setting this to false (or just omitting it, this is set to false by default). - - -If you want to add an index to an existing store, you need to increase the -version number of your store, as adding an index changes the structure of -the database. - -To modify an index, modify the object in the indexes Array in the constructor. -Again, you need to increase the version of your store. - -In addition, there are still some convenience methods available: - -___ - - -1) The hasIndex method. - -```javascript -hasIndex: function(/*String*/ indexName) -``` - -Return true if an index with the given name exists in the store, false if not. - -___ - -2) The getIndexList method. - -```javascript -getIndexList: function() -``` - -Returns a `DOMStringList` with all existing indices. - - -Running Queries ---------------- - -To run queries, IDBWrapper provides an `iterate()` method. To create keyRanges, -there is the `makeKeyRange()` method. In addition to these, IDBWrapper comes -with a `count()` method. - -___ - -1) The iterate method. - - -```javascript -iterate: function(/*Function*/ onItem, /*Object*/ iterateOptions) -``` - -The `onItem` callback will be called once for every match. It will receive three arguments: the object that matched the query, a reference to the current cursor object (IDBWrapper uses IndexedDB's Cursor internally to iterate), and a reference to the current ongoing transaction. - -There's one special situation: if you didn't pass an onEnd handler in the options objects (see below), the onItem handler will be called one extra time when the transaction is over. In this case, it will receive null as only argument. So, to check when the iteration is over and you won't get any more data objects, you can either pass an onEnd handler, or check for null in the onItem handler. - -The `iterateOptions` object can contain one or more of the following properties: - - -The `index` property contains the name of the index to operate on. If you omit this, IDBWrapper will use the store's keyPath as index. - -In the `keyRange` property you can pass a keyRange. - -The `order` property can be set to 'ASC' or 'DESC', and determines the ordering direction of results. If you omit this, IDBWrapper will use 'ASC'. - -The `filterDuplicates` property is an interesting one: If you set this to true (it defaults to false), and have several objects that have the same value in their key, the store will only fetch the first of those. It is not about objects being the same, it's about their key being the same. For example, in the customers database are a couple of guys having 'Smith' as last name. Setting filterDuplicates to true in the above example will make `iterate()` call the onItem callback only for the first of those. - -The `writeAccess` property defaults to false. If you need write access to the store during the iteration, you need to set this to true. - -In the `onEnd` property you can pass a callback that gets called after the iteration is over and the transaction is closed. It does not receive any arguments. - -In the `onError` property you can pass a custom error handler. In case of an error, it will be called and receives the Error object as only argument. - - -___ - - -2) The makeKeyRange method. - - -```javascript -iterate: function(/*Object*/ keyRangeOptions) -``` - -Returns an IDBKeyRange. - -The `keyRangeOptions` object must have one or more of the following properties: - -`lower`: The lower bound of the range - -`excludeLower`: Boolean, whether to exclude the lower bound itself. Default: false - -`upper`: The upper bound of the range - -`excludeUpper`: Boolean, whether to exclude the upper bound itself. Default: false - -___ - - -3) The count method. - - -```javascript -iterate: function(/*Function*/ onSuccess, /*Object*/ countOptions) -``` - -The onSuccess receives the result of the count as only argument. - -The `countOptions` object may have one or more of the following properties: - -index: The name of an index to operate on. - -keyRange: A keyRange to use - diff --git a/temp/idbwrapper/0.1.3/package/example/basic/app.js b/temp/idbwrapper/0.1.3/package/example/basic/app.js deleted file mode 100644 index e1e2a2f55..000000000 --- a/temp/idbwrapper/0.1.3/package/example/basic/app.js +++ /dev/null @@ -1,94 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}', - table: '{content}
IDLast NameFirst Name
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = new IDBStore({ - storeName: 'customer', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'customerid', 'firstname', 'lastname', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ // We want the id to be numeric: - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function updateItem(id){ - var data = { - customerid: id, - firstname: document.getElementById('firstname_' + id).value.trim(), - lastname: document.getElementById('lastname_' + id).value.trim() - }; - customers.put(data, refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - updateItem: updateItem - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.1.3/package/example/basic/index.html b/temp/idbwrapper/0.1.3/package/example/basic/index.html deleted file mode 100644 index 5d7a596c6..000000000 --- a/temp/idbwrapper/0.1.3/package/example/basic/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - IDBWrapper Basic CRUD Example - - - - - -
-
- QueryResults -
-
-
-
-

- Enter some data to save. As ID, enter a numeric value or leave blank. -

- -
-
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.1.3/package/example/basic/style.css b/temp/idbwrapper/0.1.3/package/example/basic/style.css deleted file mode 100644 index e901b00c4..000000000 --- a/temp/idbwrapper/0.1.3/package/example/basic/style.css +++ /dev/null @@ -1,86 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.3/package/example/index.html b/temp/idbwrapper/0.1.3/package/example/index.html deleted file mode 100644 index cbc210fbc..000000000 --- a/temp/idbwrapper/0.1.3/package/example/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - IndexedDB Wrapper Examples - - - - -
-

IDBWrapper Examples

-

- There are a couple of examples to try out / look at: -

-
    -
  • Quicktest - Just a quick test to see if IDB opens and fool around in the console.
  • -
  • Basic CRUD - A basic CRUD example using an IDB store as fixed table.
  • -
  • ObjectStore - An example to show the difference between a table and an object store.
  • -
  • Index - An example to show how to work with indexes.
  • -
-
- - \ No newline at end of file diff --git a/temp/idbwrapper/0.1.3/package/example/index/app.js b/temp/idbwrapper/0.1.3/package/example/index/app.js deleted file mode 100644 index 974280137..000000000 --- a/temp/idbwrapper/0.1.3/package/example/index/app.js +++ /dev/null @@ -1,163 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}{lastname}{firstname}{age}', - table: '{content}
IDLast NameFirst NameAge
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = app.customers = new IDBStore({ - dbVersion: 1, - storeName: 'customer-index', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] - }); - - // create references for some nodes we have to work with - [ - 'submit', 'submitQuery', - 'upper', 'lower', 'excludeLower', 'excludeUpper', - 'sortOrder', 'index', 'filterDuplicates', - 'customerid', 'firstname', 'lastname', 'age', - 'results-container' - ].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit buttons. - nodeCache.submit.addEventListener('click', enterData); - nodeCache.submitQuery.addEventListener('click', runQuery); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname', 'age'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname', 'age'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function makeRandomEntry(){ - var lastnames = ['Smith','Miller','Doe','Frankenstein','Furter'], - firstnames = ['Peter','John','Frank', 'James', 'Jill']; - - var entry = { - lastname: lastnames[Math.floor(Math.random()*5)], - firstname: firstnames[Math.floor(Math.random()*4)], - age: Math.floor(Math.random() * (100 - 20)) + 20, - customerid: parseInt( ( "" + ( Date.now() * Math.random() ) ).substring(0, 6), 10) - }; - - return entry; - } - - function addRandomCustomer(){ - var data = makeRandomEntry(); - - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function runQuery(){ - var upper = nodeCache.upper.value, - hasUpper = upper != '', - lower = nodeCache.lower.value, - hasLower = lower != '', - - indexName = nodeCache.index.value, - sortOrder = nodeCache.sortOrder.value, - filterDuplicates = nodeCache.filterDuplicates.checked, - keyRange, - - content = ''; - - if(hasUpper || hasLower){ // create a keyRange only if bounds are given - var options = {}; - if(hasUpper){ - options.upper = upper; - options.excludeUpper = nodeCache.excludeUpper.checked; - } - if(hasLower){ - options.lower = lower; - options.excludeLower = nodeCache.excludeLower.checked; - } - keyRange = customers.makeKeyRange(options); - } - - var onItem = function (item) { - content += tpls.row.replace(/\{([^\}]+)\}/g, function (_, key) { - return item[key]; - }); - }; - var onEnd = function () { - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - }; - - customers.iterate(onItem, { - index: indexName, - keyRange: keyRange, - filterDuplicates: filterDuplicates, - order: sortOrder, - onEnd: onEnd - }); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - addRandomCustomer: addRandomCustomer - }; - - // go! - init(); - -}); diff --git a/temp/idbwrapper/0.1.3/package/example/index/index.html b/temp/idbwrapper/0.1.3/package/example/index/index.html deleted file mode 100644 index 63a50039d..000000000 --- a/temp/idbwrapper/0.1.3/package/example/index/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - IDBWrapper Basic Index Example - - - - - -
-
- QueryResults -
-
-

Query

- -
- - -
-
-
-
-
- -
- - -
- -
- - -
-
-

Add data

- -

- Add a random customer: - -

-

- Or, enter customer data below: -

- -
-
-
-
- -
-
- - - diff --git a/temp/idbwrapper/0.1.3/package/example/index/style.css b/temp/idbwrapper/0.1.3/package/example/index/style.css deleted file mode 100644 index 8f7ddd9fe..000000000 --- a/temp/idbwrapper/0.1.3/package/example/index/style.css +++ /dev/null @@ -1,89 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input, -#query { - padding: 10px; - width: 350px; - border-left: solid 1px black; -} -#input div, -#query div{ - padding: 5px; -} -#input label, -#query label{ - display: inline-block; - width: 120px; -} diff --git a/temp/idbwrapper/0.1.3/package/example/lib/requirejs/require.js b/temp/idbwrapper/0.1.3/package/example/lib/requirejs/require.js deleted file mode 100644 index ba861994a..000000000 --- a/temp/idbwrapper/0.1.3/package/example/lib/requirejs/require.js +++ /dev/null @@ -1,2013 +0,0 @@ -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 0.26.0+ Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -/*jslint strict: false, plusplus: false */ -/*global window: false, navigator: false, document: false, importScripts: false, - jQuery: false, clearInterval: false, setInterval: false, self: false, - setTimeout: false, opera: false */ - -var requirejs, require, define; -(function () { - //Change this version number for each release. - var version = "0.26.0+", - commentRegExp = /(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg, - cjsRequireRegExp = /require\(\s*["']([^'"\s]+)["']\s*\)/g, - currDirRegExp = /^\.\//, - jsSuffixRegExp = /\.js$/, - ostring = Object.prototype.toString, - ap = Array.prototype, - aps = ap.slice, - apsp = ap.splice, - isBrowser = !!(typeof window !== "undefined" && navigator && document), - isWebWorker = !isBrowser && typeof importScripts !== "undefined", - //PS3 indicates loaded and complete, but need to wait for complete - //specifically. Sequence is "loading", "loaded", execution, - // then "complete". The UA check is unfortunate, but not sure how - //to feature test w/o causing perf issues. - readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? - /^complete$/ : /^(complete|loaded)$/, - defContextName = "_", - //Oh the tragedy, detecting opera. See the usage of isOpera for reason. - isOpera = typeof opera !== "undefined" && opera.toString() === "[object Opera]", - reqWaitIdPrefix = "_r@@", - empty = {}, - contexts = {}, - globalDefQueue = [], - interactiveScript = null, - isDone = false, - checkLoadedDepth = 0, - useInteractive = false, - req, cfg = {}, currentlyAddingScript, s, head, baseElement, scripts, script, - src, subPath, mainScript, dataMain, i, scrollIntervalId, setReadyState, ctx, - jQueryCheck, checkLoadedTimeoutId; - - function isFunction(it) { - return ostring.call(it) === "[object Function]"; - } - - function isArray(it) { - return ostring.call(it) === "[object Array]"; - } - - /** - * Simple function to mix in properties from source into target, - * but only if target does not already have a property of the same name. - * This is not robust in IE for transferring methods that match - * Object.prototype names, but the uses of mixin here seem unlikely to - * trigger a problem related to that. - */ - function mixin(target, source, force) { - for (var prop in source) { - if (!(prop in empty) && (!(prop in target) || force)) { - target[prop] = source[prop]; - } - } - return req; - } - - /** - * Constructs an error with a pointer to an URL with more information. - * @param {String} id the error ID that maps to an ID on a web page. - * @param {String} message human readable error. - * @param {Error} [err] the original error, if there is one. - * - * @returns {Error} - */ - function makeError(id, msg, err) { - var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); - if (err) { - e.originalError = err; - } - return e; - } - - /** - * Used to set up package paths from a packagePaths or packages config object. - * @param {Object} pkgs the object to store the new package config - * @param {Array} currentPackages an array of packages to configure - * @param {String} [dir] a prefix dir to use. - */ - function configurePackageDir(pkgs, currentPackages, dir) { - var i, location, pkgObj; - - for (i = 0; (pkgObj = currentPackages[i]); i++) { - pkgObj = typeof pkgObj === "string" ? { name: pkgObj } : pkgObj; - location = pkgObj.location; - - //Add dir to the path, but avoid paths that start with a slash - //or have a colon (indicates a protocol) - if (dir && (!location || (location.indexOf("/") !== 0 && location.indexOf(":") === -1))) { - location = dir + "/" + (location || pkgObj.name); - } - - //Create a brand new object on pkgs, since currentPackages can - //be passed in again, and config.pkgs is the internal transformed - //state for all package configs. - pkgs[pkgObj.name] = { - name: pkgObj.name, - location: location || pkgObj.name, - //Remove leading dot in main, so main paths are normalized, - //and remove any trailing .js, since different package - //envs have different conventions: some use a module name, - //some use a file name. - main: (pkgObj.main || "main") - .replace(currDirRegExp, '') - .replace(jsSuffixRegExp, '') - }; - } - } - - /** - * jQuery 1.4.3-1.5.x use a readyWait/ready() pairing to hold DOM - * ready callbacks, but jQuery 1.6 supports a holdReady() API instead. - * At some point remove the readyWait/ready() support and just stick - * with using holdReady. - */ - function jQueryHoldReady($, shouldHold) { - if ($.holdReady) { - $.holdReady(shouldHold); - } else if (shouldHold) { - $.readyWait += 1; - } else { - $.ready(true); - } - } - - if (typeof define !== "undefined") { - //If a define is already in play via another AMD loader, - //do not overwrite. - return; - } - - if (typeof requirejs !== "undefined") { - if (isFunction(requirejs)) { - //Do not overwrite and existing requirejs instance. - return; - } else { - cfg = requirejs; - requirejs = undefined; - } - } - - //Allow for a require config object - if (typeof require !== "undefined" && !isFunction(require)) { - //assume it is a config object. - cfg = require; - require = undefined; - } - - /** - * Creates a new context for use in require and define calls. - * Handle most of the heavy lifting. Do not want to use an object - * with prototype here to avoid using "this" in require, in case it - * needs to be used in more super secure envs that do not want this. - * Also there should not be that many contexts in the page. Usually just - * one for the default context, but could be extra for multiversion cases - * or if a package needs a special context for a dependency that conflicts - * with the standard context. - */ - function newContext(contextName) { - var context, resume, - config = { - waitSeconds: 7, - baseUrl: s.baseUrl || "./", - paths: {}, - pkgs: {}, - catchError: {} - }, - defQueue = [], - specified = { - "require": true, - "exports": true, - "module": true - }, - urlMap = {}, - defined = {}, - loaded = {}, - waiting = {}, - waitAry = [], - waitIdCounter = 0, - managerCallbacks = {}, - plugins = {}, - pluginsQueue = {}, - resumeDepth = 0, - normalizedWaiting = {}; - - /** - * Trims the . and .. from an array of path segments. - * It will keep a leading path segment if a .. will become - * the first path segment, to help with module name lookups, - * which act like paths, but can be remapped. But the end result, - * all paths that use this function should look normalized. - * NOTE: this method MODIFIES the input array. - * @param {Array} ary the array of path segments. - */ - function trimDots(ary) { - var i, part; - for (i = 0; (part = ary[i]); i++) { - if (part === ".") { - ary.splice(i, 1); - i -= 1; - } else if (part === "..") { - if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { - //End of the line. Keep at least one non-dot - //path segment at the front so it can be mapped - //correctly to disk. Otherwise, there is likely - //no path mapping for a path starting with '..'. - //This can still fail, but catches the most reasonable - //uses of .. - break; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - - /** - * Given a relative module name, like ./something, normalize it to - * a real name that can be mapped to a path. - * @param {String} name the relative name - * @param {String} baseName a real name that the name arg is relative - * to. - * @returns {String} normalized name - */ - function normalize(name, baseName) { - var pkgName, pkgConfig; - - //Adjust any relative paths. - if (name && name.charAt(0) === ".") { - //If have a base name, try to normalize against it, - //otherwise, assume it is a top-level require that will - //be relative to baseUrl in the end. - if (baseName) { - if (config.pkgs[baseName]) { - //If the baseName is a package name, then just treat it as one - //name to concat the name with. - baseName = [baseName]; - } else { - //Convert baseName to array, and lop off the last part, - //so that . matches that "directory" and not name of the baseName's - //module. For instance, baseName of "one/two/three", maps to - //"one/two/three.js", but we want the directory, "one/two" for - //this normalization. - baseName = baseName.split("/"); - baseName = baseName.slice(0, baseName.length - 1); - } - - name = baseName.concat(name.split("/")); - trimDots(name); - - //Some use of packages may use a . path to reference the - //"main" module name, so normalize for that. - pkgConfig = config.pkgs[(pkgName = name[0])]; - name = name.join("/"); - if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { - name = pkgName; - } - } - } - return name; - } - - /** - * Creates a module mapping that includes plugin prefix, module - * name, and path. If parentModuleMap is provided it will - * also normalize the name via require.normalize() - * - * @param {String} name the module name - * @param {String} [parentModuleMap] parent module map - * for the module name, used to resolve relative names. - * - * @returns {Object} - */ - function makeModuleMap(name, parentModuleMap) { - var index = name ? name.indexOf("!") : -1, - prefix = null, - parentName = parentModuleMap ? parentModuleMap.name : null, - originalName = name, - normalizedName, url, pluginModule; - - if (index !== -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - - if (prefix) { - prefix = normalize(prefix, parentName); - } - - //Account for relative paths if there is a base name. - if (name) { - if (prefix) { - pluginModule = defined[prefix]; - if (pluginModule) { - //Plugin is loaded, use its normalize method, otherwise, - //normalize name as usual. - if (pluginModule.normalize) { - normalizedName = pluginModule.normalize(name, function (name) { - return normalize(name, parentName); - }); - } else { - normalizedName = normalize(name, parentName); - } - } else { - //Plugin is not loaded yet, so do not normalize - //the name, wait for plugin to load to see if - //it has a normalize method. To avoid possible - //ambiguity with relative names loaded from another - //plugin, use the parent's name as part of this name. - normalizedName = '__$p' + parentName + '@' + (name || ''); - } - } else { - normalizedName = normalize(name, parentName); - } - - url = urlMap[normalizedName]; - if (!url) { - //Calculate url for the module, if it has a name. - if (req.toModuleUrl) { - //Special logic required for a particular engine, - //like Node. - url = req.toModuleUrl(context, normalizedName, parentModuleMap); - } else { - url = context.nameToUrl(normalizedName, null, parentModuleMap); - } - - //Store the URL mapping for later. - urlMap[normalizedName] = url; - } - } - - return { - prefix: prefix, - name: normalizedName, - parentMap: parentModuleMap, - url: url, - originalName: originalName, - fullName: prefix ? prefix + "!" + (normalizedName || '') : normalizedName - }; - } - - /** - * Determine if priority loading is done. If so clear the priorityWait - */ - function isPriorityDone() { - var priorityDone = true, - priorityWait = config.priorityWait, - priorityName, i; - if (priorityWait) { - for (i = 0; (priorityName = priorityWait[i]); i++) { - if (!loaded[priorityName]) { - priorityDone = false; - break; - } - } - if (priorityDone) { - delete config.priorityWait; - } - } - return priorityDone; - } - - /** - * Helper function that creates a setExports function for a "module" - * CommonJS dependency. Do this here to avoid creating a closure that - * is part of a loop. - */ - function makeSetExports(moduleObj) { - return function (exports) { - moduleObj.exports = exports; - }; - } - - function makeContextModuleFunc(func, relModuleMap, enableBuildCallback) { - return function () { - //A version of a require function that passes a moduleName - //value for items that may need to - //look up paths relative to the moduleName - var args = [].concat(aps.call(arguments, 0)), lastArg; - if (enableBuildCallback && - isFunction((lastArg = args[args.length - 1]))) { - lastArg.__requireJsBuild = true; - } - args.push(relModuleMap); - return func.apply(null, args); - }; - } - - /** - * Helper function that creates a require function object to give to - * modules that ask for it as a dependency. It needs to be specific - * per module because of the implication of path mappings that may - * need to be relative to the module name. - */ - function makeRequire(relModuleMap, enableBuildCallback) { - var modRequire = makeContextModuleFunc(context.require, relModuleMap, enableBuildCallback); - - mixin(modRequire, { - nameToUrl: makeContextModuleFunc(context.nameToUrl, relModuleMap), - toUrl: makeContextModuleFunc(context.toUrl, relModuleMap), - defined: makeContextModuleFunc(context.requireDefined, relModuleMap), - specified: makeContextModuleFunc(context.requireSpecified, relModuleMap), - ready: req.ready, - isBrowser: req.isBrowser - }); - //Something used by node. - if (req.paths) { - modRequire.paths = req.paths; - } - return modRequire; - } - - /** - * Used to update the normalized name for plugin-based dependencies - * after a plugin loads, since it can have its own normalization structure. - * @param {String} pluginName the normalized plugin module name. - */ - function updateNormalizedNames(pluginName) { - - var oldFullName, oldModuleMap, moduleMap, fullName, callbacks, - i, j, k, depArray, existingCallbacks, - maps = normalizedWaiting[pluginName]; - - if (maps) { - for (i = 0; (oldModuleMap = maps[i]); i++) { - oldFullName = oldModuleMap.fullName; - moduleMap = makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap); - fullName = moduleMap.fullName; - //Callbacks could be undefined if the same plugin!name was - //required twice in a row, so use empty array in that case. - callbacks = managerCallbacks[oldFullName] || []; - existingCallbacks = managerCallbacks[fullName]; - - if (fullName !== oldFullName) { - //Update the specified object, but only if it is already - //in there. In sync environments, it may not be yet. - if (oldFullName in specified) { - delete specified[oldFullName]; - specified[fullName] = true; - } - - //Update managerCallbacks to use the correct normalized name. - //If there are already callbacks for the normalized name, - //just add to them. - if (existingCallbacks) { - managerCallbacks[fullName] = existingCallbacks.concat(callbacks); - } else { - managerCallbacks[fullName] = callbacks; - } - delete managerCallbacks[oldFullName]; - - //In each manager callback, update the normalized name in the depArray. - for (j = 0; j < callbacks.length; j++) { - depArray = callbacks[j].depArray; - for (k = 0; k < depArray.length; k++) { - if (depArray[k] === oldFullName) { - depArray[k] = fullName; - } - } - } - } - } - } - - delete normalizedWaiting[pluginName]; - } - - /* - * Queues a dependency for checking after the loader is out of a - * "paused" state, for example while a script file is being loaded - * in the browser, where it may have many modules defined in it. - * - * depName will be fully qualified, no relative . or .. path. - */ - function queueDependency(dep) { - //Make sure to load any plugin and associate the dependency - //with that plugin. - var prefix = dep.prefix, - fullName = dep.fullName; - - //Do not bother if the depName is already in transit - if (specified[fullName] || fullName in defined) { - return; - } - - if (prefix && !plugins[prefix]) { - //Queue up loading of the dependency, track it - //via context.plugins. Mark it as a plugin so - //that the build system will know to treat it - //special. - plugins[prefix] = undefined; - - //Remember this dep that needs to have normaliztion done - //after the plugin loads. - (normalizedWaiting[prefix] || (normalizedWaiting[prefix] = [])) - .push(dep); - - //Register an action to do once the plugin loads, to update - //all managerCallbacks to use a properly normalized module - //name. - (managerCallbacks[prefix] || - (managerCallbacks[prefix] = [])).push({ - onDep: function (name, value) { - if (name === prefix) { - updateNormalizedNames(prefix); - } - } - }); - - queueDependency(makeModuleMap(prefix)); - } - - context.paused.push(dep); - } - - function execManager(manager) { - var i, ret, waitingCallbacks, err, errFile, errModuleTree, - cb = manager.callback, - fullName = manager.fullName, - args = [], - ary = manager.depArray; - - //Call the callback to define the module, if necessary. - if (cb && isFunction(cb)) { - //Pull out the defined dependencies and pass the ordered - //values to the callback. - if (ary) { - for (i = 0; i < ary.length; i++) { - args.push(manager.deps[ary[i]]); - } - } - - if (config.catchError.define) { - try { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } catch (e) { - err = e; - } - } else { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } - - if (fullName) { - //If setting exports via "module" is in play, - //favor that over return value and exports. After that, - //favor a non-undefined return value over exports use. - if (manager.cjsModule && manager.cjsModule.exports !== undefined) { - ret = defined[fullName] = manager.cjsModule.exports; - } else if (ret === undefined && manager.usingExports) { - //exports already set the defined value. - ret = defined[fullName]; - } else { - //Use the return value from the function. - defined[fullName] = ret; - } - } - } else if (fullName) { - //May just be an object definition for the module. Only - //worry about defining if have a module name. - ret = defined[fullName] = cb; - } - - //Clean up waiting. Do this before error calls, and before - //calling back waitingCallbacks, so that bookkeeping is correct - //in the event of an error and error is reported in correct order, - //since the waitingCallbacks will likely have errors if the - //onError function does not throw. - if (waiting[manager.waitId]) { - delete waiting[manager.waitId]; - manager.isDone = true; - context.waitCount -= 1; - if (context.waitCount === 0) { - //Clear the wait array used for cycles. - waitAry = []; - } - } - - if (err) { - errFile = (fullName ? makeModuleMap(fullName).url : '') || - err.fileName || err.sourceURL; - errModuleTree = err.moduleTree; - err = makeError('defineerror', 'Error evaluating ' + - 'module "' + fullName + '" at location "' + - errFile + '":\n' + - err + '\nfileName:' + errFile + - '\nlineNumber: ' + (err.lineNumber || err.line), err); - err.moduleName = fullName; - err.moduleTree = errModuleTree; - return req.onError(err); - } - - if (fullName) { - //If anything was waiting for this module to be defined, - //notify them now. - waitingCallbacks = managerCallbacks[fullName]; - if (waitingCallbacks) { - for (i = 0; i < waitingCallbacks.length; i++) { - waitingCallbacks[i].onDep(fullName, ret); - } - delete managerCallbacks[fullName]; - } - } - - return undefined; - } - - function main(inName, depArray, callback, relModuleMap) { - var moduleMap = makeModuleMap(inName, relModuleMap), - name = moduleMap.name, - fullName = moduleMap.fullName, - uniques = {}, - manager = { - //Use a wait ID because some entries are anon - //async require calls. - waitId: name || reqWaitIdPrefix + (waitIdCounter++), - depCount: 0, - depMax: 0, - prefix: moduleMap.prefix, - name: name, - fullName: fullName, - deps: {}, - depArray: depArray, - callback: callback, - onDep: function (depName, value) { - if (!(depName in manager.deps)) { - manager.deps[depName] = value; - manager.depCount += 1; - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } - } - } - }, - i, depArg, depName, cjsMod; - - if (fullName) { - //If module already defined for context, or already loaded, - //then leave. Also leave if jQuery is registering but it does - //not match the desired version number in the config. - if (fullName in defined || loaded[fullName] === true || - (fullName === "jquery" && config.jQuery && - config.jQuery !== callback().fn.jquery)) { - return; - } - - //Set specified/loaded here for modules that are also loaded - //as part of a layer, where onScriptLoad is not fired - //for those cases. Do this after the inline define and - //dependency tracing is done. - specified[fullName] = true; - loaded[fullName] = true; - - //If module is jQuery set up delaying its dom ready listeners. - if (fullName === "jquery" && callback) { - jQueryCheck(callback()); - } - } - - //Add the dependencies to the deps field, and register for callbacks - //on the dependencies. - for (i = 0; i < depArray.length; i++) { - depArg = depArray[i]; - //There could be cases like in IE, where a trailing comma will - //introduce a null dependency, so only treat a real dependency - //value as a dependency. - if (depArg) { - //Split the dependency name into plugin and name parts - depArg = makeModuleMap(depArg, (name ? moduleMap : relModuleMap)); - depName = depArg.fullName; - - //Fix the name in depArray to be just the name, since - //that is how it will be called back later. - depArray[i] = depName; - - //Fast path CommonJS standard dependencies. - if (depName === "require") { - manager.deps[depName] = makeRequire(moduleMap); - } else if (depName === "exports") { - //CommonJS module spec 1.1 - manager.deps[depName] = defined[fullName] = {}; - manager.usingExports = true; - } else if (depName === "module") { - //CommonJS module spec 1.1 - manager.cjsModule = cjsMod = manager.deps[depName] = { - id: name, - uri: name ? context.nameToUrl(name, null, relModuleMap) : undefined, - exports: defined[fullName] - }; - cjsMod.setExports = makeSetExports(cjsMod); - } else if (depName in defined && !(depName in waiting)) { - //Module already defined, no need to wait for it. - manager.deps[depName] = defined[depName]; - } else if (!uniques[depName]) { - - //A dynamic dependency. - manager.depMax += 1; - - queueDependency(depArg); - - //Register to get notification when dependency loads. - (managerCallbacks[depName] || - (managerCallbacks[depName] = [])).push(manager); - - uniques[depName] = true; - } - } - } - - //Do not bother tracking the manager if it is all done. - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } else { - waiting[manager.waitId] = manager; - waitAry.push(manager); - context.waitCount += 1; - } - } - - /** - * Convenience method to call main for a define call that was put on - * hold in the defQueue. - */ - function callDefMain(args) { - main.apply(null, args); - //Mark the module loaded. Must do it here in addition - //to doing it in define in case a script does - //not call define - loaded[args[0]] = true; - } - - /** - * jQuery 1.4.3+ supports ways to hold off calling - * calling jQuery ready callbacks until all scripts are loaded. Be sure - * to track it if the capability exists.. Also, since jQuery 1.4.3 does - * not register as a module, need to do some global inference checking. - * Even if it does register as a module, not guaranteed to be the precise - * name of the global. If a jQuery is tracked for this context, then go - * ahead and register it as a module too, if not already in process. - */ - jQueryCheck = function (jqCandidate) { - if (!context.jQuery) { - var $ = jqCandidate || (typeof jQuery !== "undefined" ? jQuery : null); - - if ($) { - //If a specific version of jQuery is wanted, make sure to only - //use this jQuery if it matches. - if (config.jQuery && $.fn.jquery !== config.jQuery) { - return; - } - - if ("holdReady" in $ || "readyWait" in $) { - context.jQuery = $; - - //Manually create a "jquery" module entry if not one already - //or in process. Note this could trigger an attempt at - //a second jQuery registration, but does no harm since - //the first one wins, and it is the same value anyway. - callDefMain(["jquery", [], function () { - return jQuery; - }]); - - //Ask jQuery to hold DOM ready callbacks. - if (context.scriptCount) { - jQueryHoldReady($, true); - context.jQueryIncremented = true; - } - } - } - } - }; - - function forceExec(manager, traced) { - if (manager.isDone) { - return undefined; - } - - var fullName = manager.fullName, - depArray = manager.depArray, - depName, i; - if (fullName) { - if (traced[fullName]) { - return defined[fullName]; - } - - traced[fullName] = true; - } - - //forceExec all of its dependencies. - for (i = 0; i < depArray.length; i++) { - //Some array members may be null, like if a trailing comma - //IE, so do the explicit [i] access and check if it has a value. - depName = depArray[i]; - if (depName) { - if (!manager.deps[depName] && waiting[depName]) { - manager.onDep(depName, forceExec(waiting[depName], traced)); - } - } - } - - return fullName ? defined[fullName] : undefined; - } - - /** - * Checks if all modules for a context are loaded, and if so, evaluates the - * new ones in right dependency order. - * - * @private - */ - function checkLoaded() { - var waitInterval = config.waitSeconds * 1000, - //It is possible to disable the wait interval by using waitSeconds of 0. - expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), - noLoads = "", hasLoadedProp = false, stillLoading = false, prop, - err, manager; - - //If there are items still in the paused queue processing wait. - //This is particularly important in the sync case where each paused - //item is processed right away but there may be more waiting. - if (context.pausedCount > 0) { - return undefined; - } - - //Determine if priority loading is done. If so clear the priority. If - //not, then do not check - if (config.priorityWait) { - if (isPriorityDone()) { - //Call resume, since it could have - //some waiting dependencies to trace. - resume(); - } else { - return undefined; - } - } - - //See if anything is still in flight. - for (prop in loaded) { - if (!(prop in empty)) { - hasLoadedProp = true; - if (!loaded[prop]) { - if (expired) { - noLoads += prop + " "; - } else { - stillLoading = true; - break; - } - } - } - } - - //Check for exit conditions. - if (!hasLoadedProp && !context.waitCount) { - //If the loaded object had no items, then the rest of - //the work below does not need to be done. - return undefined; - } - if (expired && noLoads) { - //If wait time expired, throw error of unloaded modules. - err = makeError("timeout", "Load timeout for modules: " + noLoads); - err.requireType = "timeout"; - err.requireModules = noLoads; - return req.onError(err); - } - if (stillLoading || context.scriptCount) { - //Something is still waiting to load. Wait for it, but only - //if a timeout is not already in effect. - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function () { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - return undefined; - } - - //If still have items in the waiting cue, but all modules have - //been loaded, then it means there are some circular dependencies - //that need to be broken. - //However, as a waiting thing is fired, then it can add items to - //the waiting cue, and those items should not be fired yet, so - //make sure to redo the checkLoaded call after breaking a single - //cycle, if nothing else loaded then this logic will pick it up - //again. - if (context.waitCount) { - //Cycle through the waitAry, and call items in sequence. - for (i = 0; (manager = waitAry[i]); i++) { - forceExec(manager, {}); - } - - //Only allow this recursion to a certain depth. Only - //triggered by errors in calling a module in which its - //modules waiting on it cannot finish loading, or some circular - //dependencies that then may add more dependencies. - //The value of 5 is a bit arbitrary. Hopefully just one extra - //pass, or two for the case of circular dependencies generating - //more work that gets resolved in the sync node case. - if (checkLoadedDepth < 5) { - checkLoadedDepth += 1; - checkLoaded(); - } - } - - checkLoadedDepth = 0; - - //Check for DOM ready, and nothing is waiting across contexts. - req.checkReadyState(); - - return undefined; - } - - function callPlugin(pluginName, dep) { - var name = dep.name, - fullName = dep.fullName, - load; - - //Do not bother if plugin is already defined or being loaded. - if (fullName in defined || fullName in loaded) { - return; - } - - if (!plugins[pluginName]) { - plugins[pluginName] = defined[pluginName]; - } - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[fullName]) { - loaded[fullName] = false; - } - - load = function (ret) { - //Allow the build process to register plugin-loaded dependencies. - if (req.onPluginLoad) { - req.onPluginLoad(context, pluginName, name, ret); - } - - execManager({ - prefix: dep.prefix, - name: dep.name, - fullName: dep.fullName, - callback: function () { - return ret; - } - }); - loaded[fullName] = true; - }; - - //Allow plugins to load other code without having to know the - //context or how to "complete" the load. - load.fromText = function (moduleName, text) { - /*jslint evil: true */ - var hasInteractive = useInteractive; - - //Indicate a the module is in process of loading. - context.loaded[moduleName] = false; - context.scriptCount += 1; - - //Turn off interactive script matching for IE for any define - //calls in the text, then turn it back on at the end. - if (hasInteractive) { - useInteractive = false; - } - - req.exec(text); - - if (hasInteractive) { - useInteractive = true; - } - - //Support anonymous modules. - context.completeLoad(moduleName); - }; - - //Use parentName here since the plugin's name is not reliable, - //could be some weird string with no path that actually wants to - //reference the parentName's path. - plugins[pluginName].load(name, makeRequire(dep.parentMap, true), load, config); - } - - function loadPaused(dep) { - //Renormalize dependency if its name was waiting on a plugin - //to load, which as since loaded. - if (dep.prefix && dep.name && dep.name.indexOf('__$p') === 0 && defined[dep.prefix]) { - dep = makeModuleMap(dep.originalName, dep.parentMap); - } - - var pluginName = dep.prefix, - fullName = dep.fullName, - urlFetched = context.urlFetched; - - //Do not bother if the dependency has already been specified. - if (specified[fullName] || loaded[fullName]) { - return; - } else { - specified[fullName] = true; - } - - if (pluginName) { - //If plugin not loaded, wait for it. - //set up callback list. if no list, then register - //managerCallback for that plugin. - if (defined[pluginName]) { - callPlugin(pluginName, dep); - } else { - if (!pluginsQueue[pluginName]) { - pluginsQueue[pluginName] = []; - (managerCallbacks[pluginName] || - (managerCallbacks[pluginName] = [])).push({ - onDep: function (name, value) { - if (name === pluginName) { - var i, oldModuleMap, ary = pluginsQueue[pluginName]; - - //Now update all queued plugin actions. - for (i = 0; i < ary.length; i++) { - oldModuleMap = ary[i]; - //Update the moduleMap since the - //module name may be normalized - //differently now. - callPlugin(pluginName, - makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap)); - } - delete pluginsQueue[pluginName]; - } - } - }); - } - pluginsQueue[pluginName].push(dep); - } - } else { - if (!urlFetched[dep.url]) { - req.load(context, fullName, dep.url); - urlFetched[dep.url] = true; - } - } - } - - /** - * Resumes tracing of dependencies and then checks if everything is loaded. - */ - resume = function () { - var args, i, p; - - resumeDepth += 1; - - if (context.scriptCount <= 0) { - //Synchronous envs will push the number below zero with the - //decrement above, be sure to set it back to zero for good measure. - //require() calls that also do not end up loading scripts could - //push the number negative too. - context.scriptCount = 0; - } - - //Make sure any remaining defQueue items get properly processed. - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return req.onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); - } else { - callDefMain(args); - } - } - - //Skip the resume of paused dependencies - //if current context is in priority wait. - if (!config.priorityWait || isPriorityDone()) { - while (context.paused.length) { - p = context.paused; - context.pausedCount += p.length; - //Reset paused list - context.paused = []; - - for (i = 0; (args = p[i]); i++) { - loadPaused(args); - } - //Move the start time for timeout forward. - context.startTime = (new Date()).getTime(); - context.pausedCount -= p.length; - } - } - - //Only check if loaded when resume depth is 1. It is likely that - //it is only greater than 1 in sync environments where a factory - //function also then calls the callback-style require. In those - //cases, the checkLoaded should not occur until the resume - //depth is back at the top level. - if (resumeDepth === 1) { - checkLoaded(); - } - - resumeDepth -= 1; - - return undefined; - }; - - //Define the context object. Many of these fields are on here - //just to make debugging easier. - context = { - contextName: contextName, - config: config, - defQueue: defQueue, - waiting: waiting, - waitCount: 0, - specified: specified, - loaded: loaded, - urlMap: urlMap, - scriptCount: 0, - urlFetched: {}, - defined: defined, - paused: [], - pausedCount: 0, - plugins: plugins, - managerCallbacks: managerCallbacks, - makeModuleMap: makeModuleMap, - normalize: normalize, - /** - * Set a configuration for the context. - * @param {Object} cfg config object to integrate. - */ - configure: function (cfg) { - var paths, prop, packages, pkgs, packagePaths, requireWait; - - //Make sure the baseUrl ends in a slash. - if (cfg.baseUrl) { - if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== "/") { - cfg.baseUrl += "/"; - } - } - - //Save off the paths and packages since they require special processing, - //they are additive. - paths = config.paths; - packages = config.packages; - pkgs = config.pkgs; - - //Mix in the config values, favoring the new values over - //existing ones in context.config. - mixin(config, cfg, true); - - //Adjust paths if necessary. - if (cfg.paths) { - for (prop in cfg.paths) { - if (!(prop in empty)) { - paths[prop] = cfg.paths[prop]; - } - } - config.paths = paths; - } - - packagePaths = cfg.packagePaths; - if (packagePaths || cfg.packages) { - //Convert packagePaths into a packages config. - if (packagePaths) { - for (prop in packagePaths) { - if (!(prop in empty)) { - configurePackageDir(pkgs, packagePaths[prop], prop); - } - } - } - - //Adjust packages if necessary. - if (cfg.packages) { - configurePackageDir(pkgs, cfg.packages); - } - - //Done with modifications, assing packages back to context config - config.pkgs = pkgs; - } - - //If priority loading is in effect, trigger the loads now - if (cfg.priority) { - //Hold on to requireWait value, and reset it after done - requireWait = context.requireWait; - - //Allow tracing some require calls to allow the fetching - //of the priority config. - context.requireWait = false; - //But first, call resume to register any defined modules that may - //be in a data-main built file before the priority config - //call. Also grab any waiting define calls for this context. - context.takeGlobalQueue(); - resume(); - - context.require(cfg.priority); - - //Trigger a resume right away, for the case when - //the script with the priority load is done as part - //of a data-main call. In that case the normal resume - //call will not happen because the scriptCount will be - //at 1, since the script for data-main is being processed. - resume(); - - //Restore previous state. - context.requireWait = requireWait; - config.priorityWait = cfg.priority; - } - - //If a deps array or a config callback is specified, then call - //require with those args. This is useful when require is defined as a - //config object before require.js is loaded. - if (cfg.deps || cfg.callback) { - context.require(cfg.deps || [], cfg.callback); - } - - //Set up ready callback, if asked. Useful when require is defined as a - //config object before require.js is loaded. - if (cfg.ready) { - req.ready(cfg.ready); - } - }, - - requireDefined: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in defined; - }, - - requireSpecified: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in specified; - }, - - require: function (deps, callback, relModuleMap) { - var moduleName, fullName, moduleMap; - if (typeof deps === "string") { - //Synchronous access to one module. If require.get is - //available (as in the Node adapter), prefer that. - //In this case deps is the moduleName and callback is - //the relModuleMap - if (req.get) { - return req.get(context, deps, callback); - } - - //Just return the module wanted. In this scenario, the - //second arg (if passed) is just the relModuleMap. - moduleName = deps; - relModuleMap = callback; - - //Normalize module name, if it contains . or .. - moduleMap = makeModuleMap(moduleName, relModuleMap); - fullName = moduleMap.fullName; - - if (!(fullName in defined)) { - return req.onError(makeError("notloaded", "Module name '" + - moduleMap.fullName + - "' has not been loaded yet for context: " + - contextName)); - } - return defined[fullName]; - } - - main(null, deps, callback, relModuleMap); - - //If the require call does not trigger anything new to load, - //then resume the dependency processing. - if (!context.requireWait) { - while (!context.scriptCount && context.paused.length) { - //For built layers, there can be some defined - //modules waiting for intake into the context, - //in particular module plugins. Take them. - context.takeGlobalQueue(); - resume(); - } - } - return context.require; - }, - - /** - * Internal method to transfer globalQueue items to this context's - * defQueue. - */ - takeGlobalQueue: function () { - //Push all the globalDefQueue items into the context's defQueue - if (globalDefQueue.length) { - //Array splice in the values since the context code has a - //local var ref to defQueue, so cannot just reassign the one - //on context. - apsp.apply(context.defQueue, - [context.defQueue.length - 1, 0].concat(globalDefQueue)); - globalDefQueue = []; - } - }, - - /** - * Internal method used by environment adapters to complete a load event. - * A load event could be a script load or just a load pass from a synchronous - * load call. - * @param {String} moduleName the name of the module to potentially complete. - */ - completeLoad: function (moduleName) { - var args; - - context.takeGlobalQueue(); - - while (defQueue.length) { - args = defQueue.shift(); - - if (args[0] === null) { - args[0] = moduleName; - break; - } else if (args[0] === moduleName) { - //Found matching define call for this script! - break; - } else { - //Some other named define call, most likely the result - //of a build layer that included many define calls. - callDefMain(args); - args = null; - } - } - if (args) { - callDefMain(args); - } else { - //A script that does not call define(), so just simulate - //the call for it. Special exception for jQuery dynamic load. - callDefMain([moduleName, [], - moduleName === "jquery" && typeof jQuery !== "undefined" ? - function () { - return jQuery; - } : null]); - } - - //Mark the script as loaded. Note that this can be different from a - //moduleName that maps to a define call. This line is important - //for traditional browser scripts. - loaded[moduleName] = true; - - //If a global jQuery is defined, check for it. Need to do it here - //instead of main() since stock jQuery does not register as - //a module via define. - jQueryCheck(); - - //Doing this scriptCount decrement branching because sync envs - //need to decrement after resume, otherwise it looks like - //loading is complete after the first dependency is fetched. - //For browsers, it works fine to decrement after, but it means - //the checkLoaded setTimeout 50 ms cost is taken. To avoid - //that cost, decrement beforehand. - if (req.isAsync) { - context.scriptCount -= 1; - } - resume(); - if (!req.isAsync) { - context.scriptCount -= 1; - } - }, - - /** - * Converts a module name + .extension into an URL path. - * *Requires* the use of a module name. It does not support using - * plain URLs like nameToUrl. - */ - toUrl: function (moduleNamePlusExt, relModuleMap) { - var index = moduleNamePlusExt.lastIndexOf("."), - ext = null; - - if (index !== -1) { - ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - - return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap); - }, - - /** - * Converts a module name to a file path. Supports cases where - * moduleName may actually be just an URL. - */ - nameToUrl: function (moduleName, ext, relModuleMap) { - var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, - config = context.config; - - //Normalize module name if have a base relative module name to work from. - moduleName = normalize(moduleName, relModuleMap && relModuleMap.fullName); - - //If a colon is in the URL, it indicates a protocol is used and it is just - //an URL to a file, or if it starts with a slash or ends with .js, it is just a plain file. - //The slash is important for protocol-less URLs as well as full paths. - if (req.jsExtRegExp.test(moduleName)) { - //Just a plain path, not module name lookup, so just return it. - //Add extension if it is included. This is a bit wonky, only non-.js things pass - //an extension, this method probably needs to be reworked. - url = moduleName + (ext ? ext : ""); - } else { - //A module that needs to be converted to a path. - paths = config.paths; - pkgs = config.pkgs; - - syms = moduleName.split("/"); - //For each module name segment, see if there is a path - //registered for it. Start with most specific name - //and work up from it. - for (i = syms.length; i > 0; i--) { - parentModule = syms.slice(0, i).join("/"); - if (paths[parentModule]) { - syms.splice(0, i, paths[parentModule]); - break; - } else if ((pkg = pkgs[parentModule])) { - //If module name is just the package name, then looking - //for the main module. - if (moduleName === pkg.name) { - pkgPath = pkg.location + '/' + pkg.main; - } else { - pkgPath = pkg.location; - } - syms.splice(0, i, pkgPath); - break; - } - } - - //Join the path parts together, then figure out if baseUrl is needed. - url = syms.join("/") + (ext || ".js"); - url = (url.charAt(0) === '/' || url.match(/^\w+:/) ? "" : config.baseUrl) + url; - } - - return config.urlArgs ? url + - ((url.indexOf('?') === -1 ? '?' : '&') + - config.urlArgs) : url; - } - }; - - //Make these visible on the context so can be called at the very - //end of the file to bootstrap - context.jQueryCheck = jQueryCheck; - context.resume = resume; - - return context; - } - - /** - * Main entry point. - * - * If the only argument to require is a string, then the module that - * is represented by that string is fetched for the appropriate context. - * - * If the first argument is an array, then it will be treated as an array - * of dependency string names to fetch. An optional function callback can - * be specified to execute when all of those dependencies are available. - * - * Make a local req variable to help Caja compliance (it assumes things - * on a require that are not standardized), and to give a short - * name for minification/local scope use. - */ - req = requirejs = function (deps, callback) { - - //Find the right context, use default - var contextName = defContextName, - context, config; - - // Determine if have config object in the call. - if (!isArray(deps) && typeof deps !== "string") { - // deps is a config object - config = deps; - if (isArray(callback)) { - // Adjust args if there are dependencies - deps = callback; - callback = arguments[2]; - } else { - deps = []; - } - } - - if (config && config.context) { - contextName = config.context; - } - - context = contexts[contextName] || - (contexts[contextName] = newContext(contextName)); - - if (config) { - context.configure(config); - } - - return context.require(deps, callback); - }; - - /** - * Support require.config() to make it easier to cooperate with other - * AMD loaders on globally agreed names. - */ - req.config = function (config) { - return req(config); - }; - - /** - * Export require as a global, but only if it does not already exist. - */ - if (typeof require === "undefined") { - require = req; - } - - /** - * Global require.toUrl(), to match global require, mostly useful - * for debugging/work in the global space. - */ - req.toUrl = function (moduleNamePlusExt) { - return contexts[defContextName].toUrl(moduleNamePlusExt); - }; - - req.version = version; - req.isArray = isArray; - req.isFunction = isFunction; - req.mixin = mixin; - //Used to filter out dependencies that are already paths. - req.jsExtRegExp = /^\/|:|\?|\.js$/; - s = req.s = { - contexts: contexts, - //Stores a list of URLs that should not get async script tag treatment. - skipAsync: {}, - isPageLoaded: !isBrowser, - readyCalls: [] - }; - - req.isAsync = req.isBrowser = isBrowser; - if (isBrowser) { - head = s.head = document.getElementsByTagName("head")[0]; - //If BASE tag is in play, using appendChild is a problem for IE6. - //When that browser dies, this can be removed. Details in this jQuery bug: - //http://dev.jquery.com/ticket/2709 - baseElement = document.getElementsByTagName("base")[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - - /** - * Any errors that require explicitly generates will be passed to this - * function. Intercept/override it if you want custom error handling. - * @param {Error} err the error object. - */ - req.onError = function (err) { - throw err; - }; - - /** - * Does the request to load a module for the browser case. - * Make this a separate function to allow other environments - * to override it. - * - * @param {Object} context the require context to find state. - * @param {String} moduleName the name of the module. - * @param {Object} url the URL to the module. - */ - req.load = function (context, moduleName, url) { - var loaded = context.loaded; - - isDone = false; - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[moduleName]) { - loaded[moduleName] = false; - } - - context.scriptCount += 1; - req.attach(url, context, moduleName); - - //If tracking a jQuery, then make sure its ready callbacks - //are put on hold to prevent its ready callbacks from - //triggering too soon. - if (context.jQuery && !context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, true); - context.jQueryIncremented = true; - } - }; - - function getInteractiveScript() { - var scripts, i, script; - if (interactiveScript && interactiveScript.readyState === 'interactive') { - return interactiveScript; - } - - scripts = document.getElementsByTagName('script'); - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - if (script.readyState === 'interactive') { - return (interactiveScript = script); - } - } - - return null; - } - - /** - * The function that handles definitions of modules. Differs from - * require() in that a string for the module should be the first argument, - * and the function to execute after dependencies are loaded should - * return a value to define the module corresponding to the first argument's - * name. - */ - define = req.def = function (name, deps, callback) { - var node, context; - - //Allow for anonymous functions - if (typeof name !== 'string') { - //Adjust args appropriately - callback = deps; - deps = name; - name = null; - } - - //This module may not have dependencies - if (!req.isArray(deps)) { - callback = deps; - deps = []; - } - - //If no name, and callback is a function, then figure out if it a - //CommonJS thing with dependencies. - if (!name && !deps.length && req.isFunction(callback)) { - //Remove comments from the callback string, - //look for require calls, and pull them into the dependencies, - //but only if there are function args. - if (callback.length) { - callback - .toString() - .replace(commentRegExp, "") - .replace(cjsRequireRegExp, function (match, dep) { - deps.push(dep); - }); - - //May be a CommonJS thing even without require calls, but still - //could use exports, and module. Avoid doing exports and module - //work though if it just needs require. - //REQUIRES the function to expect the CommonJS variables in the - //order listed below. - deps = (callback.length === 1 ? ["require"] : ["require", "exports", "module"]).concat(deps); - } - } - - //If in IE 6-8 and hit an anonymous define() call, do the interactive - //work. - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute("data-requiremodule"); - } - context = contexts[node.getAttribute("data-requirecontext")]; - } - } - - //Always save off evaluating the def call until the script onload handler. - //This allows multiple modules to be in a file without prematurely - //tracing dependencies, and allows for anonymous module support, - //where the module name is not known until the script onload event - //occurs. If no context, use the global queue, and get it processed - //in the onscript load callback. - (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); - - return undefined; - }; - - define.amd = { - multiversion: true, - plugins: true, - jQuery: true - }; - - /** - * Executes the text. Normally just uses eval, but can be modified - * to use a more environment specific call. - * @param {String} text the text to execute/evaluate. - */ - req.exec = function (text) { - return eval(text); - }; - - /** - * Executes a module callack function. Broken out as a separate function - * solely to allow the build system to sequence the files in the built - * layer in the right sequence. - * - * @private - */ - req.execCb = function (name, callback, args, exports) { - return callback.apply(exports, args); - }; - - /** - * callback for script loads, used to check status of loading. - * - * @param {Event} evt the event from the browser for the script - * that was loaded. - * - * @private - */ - req.onScriptLoad = function (evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - var node = evt.currentTarget || evt.srcElement, contextName, moduleName, - context; - - if (evt.type === "load" || readyRegExp.test(node.readyState)) { - //Reset interactive script so a script node is not held onto for - //to long. - interactiveScript = null; - - //Pull out the name of the module and the context. - contextName = node.getAttribute("data-requirecontext"); - moduleName = node.getAttribute("data-requiremodule"); - context = contexts[contextName]; - - contexts[contextName].completeLoad(moduleName); - - //Clean up script binding. Favor detachEvent because of IE9 - //issue, see attachEvent/addEventListener comment elsewhere - //in this file. - if (node.detachEvent && !isOpera) { - //Probably IE. If not it will throw an error, which will be - //useful to know. - node.detachEvent("onreadystatechange", req.onScriptLoad); - } else { - node.removeEventListener("load", req.onScriptLoad, false); - } - } - }; - - /** - * Attaches the script represented by the URL to the current - * environment. Right now only supports browser loading, - * but can be redefined in other environments to do the right thing. - * @param {String} url the url of the script to attach. - * @param {Object} context the context that wants the script. - * @param {moduleName} the name of the module that is associated with the script. - * @param {Function} [callback] optional callback, defaults to require.onScriptLoad - * @param {String} [type] optional type, defaults to text/javascript - */ - req.attach = function (url, context, moduleName, callback, type) { - var node, loaded; - if (isBrowser) { - //In the browser so use a script tag - callback = callback || req.onScriptLoad; - node = context && context.config && context.config.xhtml ? - document.createElementNS("http://www.w3.org/1999/xhtml", "html:script") : - document.createElement("script"); - node.type = type || "text/javascript"; - node.charset = "utf-8"; - //Use async so Gecko does not block on executing the script if something - //like a long-polling comet tag is being run first. Gecko likes - //to evaluate scripts in DOM order, even for dynamic scripts. - //It will fetch them async, but only evaluate the contents in DOM - //order, so a long-polling script tag can delay execution of scripts - //after it. But telling Gecko we expect async gets us the behavior - //we want -- execute it whenever it is finished downloading. Only - //Helps Firefox 3.6+ - //Allow some URLs to not be fetched async. Mostly helps the order! - //plugin - node.async = !s.skipAsync[url]; - - if (context) { - node.setAttribute("data-requirecontext", context.contextName); - } - node.setAttribute("data-requiremodule", moduleName); - - //Set up load listener. Test attachEvent first because IE9 has - //a subtle issue in its addEventListener and script onload firings - //that do not match the behavior of all other browsers with - //addEventListener support, which fire the onload event for a - //script right after the script execution. See: - //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution - //UNFORTUNATELY Opera implements attachEvent but does not follow the script - //script execution mode. - if (node.attachEvent && !isOpera) { - //Probably IE. IE (at least 6-8) do not fire - //script onload right after executing the script, so - //we cannot tie the anonymous define call to a name. - //However, IE reports the script as being in "interactive" - //readyState at the time of the define call. - useInteractive = true; - node.attachEvent("onreadystatechange", callback); - } else { - node.addEventListener("load", callback, false); - } - node.src = url; - - //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous define - //call to the module name (which is stored on the node), hold on - //to a reference to this node, but clear after the DOM insertion. - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - return node; - } else if (isWebWorker) { - //In a web worker, use importScripts. This is not a very - //efficient use of importScripts, importScripts will block until - //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation that a build has been done so that - //only one script needs to be loaded anyway. This may need to be - //reevaluated if other use cases become common. - loaded = context.loaded; - loaded[moduleName] = false; - - importScripts(url); - - //Account for anonymous modules - context.completeLoad(moduleName); - } - return null; - }; - - //Look for a data-main script attribute, which could also adjust the baseUrl. - if (isBrowser) { - //Figure out baseUrl. Get it from the script tag with require.js in it. - scripts = document.getElementsByTagName("script"); - - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - //Set the "head" where we can append children by - //using the script's parent. - if (!head) { - head = script.parentNode; - } - - //Look for a data-main attribute to set main script for the page - //to load. If it is there, the path to data main becomes the - //baseUrl, if it is not already set. - if ((dataMain = script.getAttribute('data-main'))) { - if (!cfg.baseUrl) { - //Pull off the directory of data-main for use as the - //baseUrl. - src = dataMain.split('/'); - mainScript = src.pop(); - subPath = src.length ? src.join('/') + '/' : './'; - - //Set final config. - cfg.baseUrl = subPath; - //Strip off any trailing .js since dataMain is now - //like a module name. - dataMain = mainScript.replace(jsSuffixRegExp, ''); - } - - //Put the data-main script in the files to load. - cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; - - break; - } - } - } - - //Set baseUrl based on config. - s.baseUrl = cfg.baseUrl; - - //****** START page load functionality **************** - /** - * Sets the page as loaded and triggers check for all modules loaded. - */ - req.pageLoaded = function () { - if (!s.isPageLoaded) { - s.isPageLoaded = true; - if (scrollIntervalId) { - clearInterval(scrollIntervalId); - } - - //Part of a fix for FF < 3.6 where readyState was not set to - //complete so libraries like jQuery that check for readyState - //after page load where not getting initialized correctly. - //Original approach suggested by Andrea Giammarchi: - //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html - //see other setReadyState reference for the rest of the fix. - if (setReadyState) { - document.readyState = "complete"; - } - - req.callReady(); - } - }; - - //See if there is nothing waiting across contexts, and if not, trigger - //callReady. - req.checkReadyState = function () { - var contexts = s.contexts, prop; - for (prop in contexts) { - if (!(prop in empty)) { - if (contexts[prop].waitCount) { - return; - } - } - } - s.isDone = true; - req.callReady(); - }; - - /** - * Internal function that calls back any ready functions. If you are - * integrating RequireJS with another library without require.ready support, - * you can define this method to call your page ready code instead. - */ - req.callReady = function () { - var callbacks = s.readyCalls, i, callback, contexts, context, prop; - - if (s.isPageLoaded && s.isDone) { - if (callbacks.length) { - s.readyCalls = []; - for (i = 0; (callback = callbacks[i]); i++) { - callback(); - } - } - - //If jQuery with DOM ready delayed, release it now. - contexts = s.contexts; - for (prop in contexts) { - if (!(prop in empty)) { - context = contexts[prop]; - if (context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, false); - context.jQueryIncremented = false; - } - } - } - } - }; - - /** - * Registers functions to call when the page is loaded - */ - req.ready = function (callback) { - if (s.isPageLoaded && s.isDone) { - callback(); - } else { - s.readyCalls.push(callback); - } - return req; - }; - - if (isBrowser) { - if (document.addEventListener) { - //Standards. Hooray! Assumption here that if standards based, - //it knows about DOMContentLoaded. - document.addEventListener("DOMContentLoaded", req.pageLoaded, false); - window.addEventListener("load", req.pageLoaded, false); - //Part of FF < 3.6 readystate fix (see setReadyState refs for more info) - if (!document.readyState) { - setReadyState = true; - document.readyState = "loading"; - } - } else if (window.attachEvent) { - window.attachEvent("onload", req.pageLoaded); - - //DOMContentLoaded approximation, as found by Diego Perini: - //http://javascript.nwbox.com/IEContentLoaded/ - if (self === self.top) { - scrollIntervalId = setInterval(function () { - try { - //From this ticket: - //http://bugs.dojotoolkit.org/ticket/11106, - //In IE HTML Application (HTA), such as in a selenium test, - //javascript in the iframe can't see anything outside - //of it, so self===self.top is true, but the iframe is - //not the top window and doScroll will be available - //before document.body is set. Test document.body - //before trying the doScroll trick. - if (document.body) { - document.documentElement.doScroll("left"); - req.pageLoaded(); - } - } catch (e) {} - }, 30); - } - } - - //Check if document already complete, and if so, just trigger page load - //listeners. NOTE: does not work with Firefox before 3.6. To support - //those browsers, manually call require.pageLoaded(). - if (document.readyState === "complete") { - req.pageLoaded(); - } - } - //****** END page load functionality **************** - - //Set up default context. If require was a configuration object, use that as base config. - req(cfg); - - //If modules are built into require.js, then need to make sure dependencies are - //traced. Use a setTimeout in the browser world, to allow all the modules to register - //themselves. In a non-browser env, assume that modules are not built into require.js, - //which seems odd to do on the server. - if (req.isAsync && typeof setTimeout !== "undefined") { - ctx = s.contexts[(cfg.context || defContextName)]; - //Indicate that the script that includes require() is still loading, - //so that require()'d dependencies are not traced until the end of the - //file is parsed (approximated via the setTimeout call). - ctx.requireWait = true; - setTimeout(function () { - ctx.requireWait = false; - - //Any modules included with the require.js file will be in the - //global queue, assign them to this context. - ctx.takeGlobalQueue(); - - //Allow for jQuery to be loaded/already in the page, and if jQuery 1.4.3, - //make sure to hold onto it for readyWait triggering. - ctx.jQueryCheck(); - - if (!ctx.scriptCount) { - ctx.resume(); - } - req.checkReadyState(); - }, 0); - } -}()); diff --git a/temp/idbwrapper/0.1.3/package/example/objectstore/app.js b/temp/idbwrapper/0.1.3/package/example/objectstore/app.js deleted file mode 100644 index 21e828a52..000000000 --- a/temp/idbwrapper/0.1.3/package/example/objectstore/app.js +++ /dev/null @@ -1,93 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var objStore; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") - objStore = new IDBStore({ - storeName: 'objectstore', - keyPath: 'id', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - objStore.getAll(listItems); - } - - function listItems(data){ - var header, tpl, - props = ['id'], - content = ''; - - data.forEach(function(item){ - for(var prop in item){ - if(props.indexOf(prop) < 0){ - props.push(prop); - } - } - }); - - header = '' + props.join('') + ''; - tpl = '{' + props.join('}{') + '}'; - - data.forEach(function(item){ - content += tpl.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key] || ''; - }); - }); - - nodeCache['results-container'].innerHTML = '' + header + content + '
'; - } - - function enterData(){ - // read data from inputs - var propName, value, hasData, - data = {}, - count = 4; - - while(--count){ - propName = document.getElementById('prop_' + count).value.trim(); - if(propName.length){ - hasData = true; - value = document.getElementById('value_' + count).value.trim(); - // Don't do this at home. This is just a very dirty hack to 'guess' what - // type of data you just entered. If you do stuff like this in production - // code, UNICORNS WILL DIE. You have been warned. - data[propName] = ['{', '['].indexOf(value.substring(0,1)) !== -1 ? eval('(' + value + ')') : parseInt(value, 10) || value; - } - } - if(!hasData){ - return; - } - - // and store them away. - objStore.put(data, refreshTable); - } - - function clear(){ - objStore.clear(refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - clear: clear - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.1.3/package/example/objectstore/index.html b/temp/idbwrapper/0.1.3/package/example/objectstore/index.html deleted file mode 100644 index 44a316628..000000000 --- a/temp/idbwrapper/0.1.3/package/example/objectstore/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - IDBWrapper ObjectStore Example - - - - - -
-
- QueryResults -
-
-
-
-

- IDB is not a relational database; it's an object store. That means you - have - no such things as fixed, defined columns.
- Just enter any name as key and anything as value.
-
- To enter non-primitive values, use literal notaion. -

- - - - - - - - - - - - - - - - - - - - - -
KeyValue
- -
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.1.3/package/example/objectstore/style.css b/temp/idbwrapper/0.1.3/package/example/objectstore/style.css deleted file mode 100644 index 5bdb6b0f7..000000000 --- a/temp/idbwrapper/0.1.3/package/example/objectstore/style.css +++ /dev/null @@ -1,93 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.3/package/example/quicktest/index.html b/temp/idbwrapper/0.1.3/package/example/quicktest/index.html deleted file mode 100644 index f64a74323..000000000 --- a/temp/idbwrapper/0.1.3/package/example/quicktest/index.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - IndexedDB Wrapper Quick Test - - - - -
-

Open the console and click 'Open DB'. You will then see a bunch of buttons - that allow data manipulation. Click them, and check the console for - results.

- - - -
- - - - - diff --git a/temp/idbwrapper/0.1.3/package/example/quicktest/style.css b/temp/idbwrapper/0.1.3/package/example/quicktest/style.css deleted file mode 100644 index 90f382838..000000000 --- a/temp/idbwrapper/0.1.3/package/example/quicktest/style.css +++ /dev/null @@ -1,94 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.3/package/example/style.css b/temp/idbwrapper/0.1.3/package/example/style.css deleted file mode 100644 index fb96076ca..000000000 --- a/temp/idbwrapper/0.1.3/package/example/style.css +++ /dev/null @@ -1,87 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; -} -.hbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.3/package/package.json b/temp/idbwrapper/0.1.3/package/package.json deleted file mode 100644 index 72c250e7a..000000000 --- a/temp/idbwrapper/0.1.3/package/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "idb-wrapper", - "version": "0.1.3", - "description": "This is a wrapper for indexedDB.", - "keywords": [], - "author": "jensarps ", - "repository": "git://github.com/jensarps/IDBWrapper.git", - "main": "IDBStore", - "homepage": "https://github.com/jensarps/IDBWrapper", - "contributors": [], - "bugs": { - "url": "https://github.com/jensarps/IDBWrapper/issues", - "email": "mail@jensarps.de" - }, - "dependencies": {}, - "devDependencies": {}, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/jensarps/IDBWrapper/raw/master/LICENSE" - } - ], - "scripts": {} -} diff --git a/temp/idbwrapper/0.1.4/dist.tar.gz b/temp/idbwrapper/0.1.4/dist.tar.gz deleted file mode 100644 index 2c3f258dee25fee8bd4ef4253b18c6c281f7db3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35350 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 Kc!Q<@P67astl$&? diff --git a/temp/idbwrapper/0.1.4/package/.npmignore b/temp/idbwrapper/0.1.4/package/.npmignore deleted file mode 100644 index 14c279342..000000000 --- a/temp/idbwrapper/0.1.4/package/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.project -.idea diff --git a/temp/idbwrapper/0.1.4/package/IDBStore.js b/temp/idbwrapper/0.1.4/package/IDBStore.js deleted file mode 100644 index 76317bba0..000000000 --- a/temp/idbwrapper/0.1.4/package/IDBStore.js +++ /dev/null @@ -1,464 +0,0 @@ -/* - * IDBWrapper - A cross-browser wrapper for IndexedDB - * Copyright (c) 2011 - 2012 Jens Arps - * http://jensarps.de/ - * - * Licensed under the MIT (X11) license - */ - -"use strict"; - -(function (name, definition, global) { - if (typeof define === 'function') { - define(definition); - } else if (typeof module !== 'undefined' && module.exports) { - module.exports = definition(); - } else { - global[name] = definition(); - } -})('IDBStore', function () { - - var IDBStore; - - var defaults = { - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - onStoreReady: function () { - }, - indexes: [] - }; - - IDBStore = function (kwArgs, onStoreReady) { - - function fixupConstants (object, constants) { - for (var prop in constants) { - if (!(prop in object)) - object[prop] = constants[prop]; - } - } - - for(var key in defaults){ - this[key] = typeof kwArgs[key] != 'undefined' ? kwArgs[key] : defaults[key]; - } - - this.dbName = 'IDBWrapper-' + this.storeName; - this.dbVersion = parseInt(this.dbVersion, 10); - - onStoreReady && (this.onStoreReady = onStoreReady); - - this.idb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; - this.keyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.mozIDBKeyRange; - - this.consts = { - 'READ_ONLY': 'readonly', - 'READ_WRITE': 'readwrite', - 'VERSION_CHANGE': 'versionchange' - } - - this.cursor = window.IDBCursor || window.webkitIDBCursor; - fixupConstants(this.cursor, { - 'NEXT': 'next', - 'NEXT_NO_DUPLICATE': 'nextunique', - 'PREV': 'prev', - 'PREV_NO_DUPLICATE': 'prevunique' - }); - - this.openDB(); - }; - - IDBStore.prototype = { - - db: null, - - dbName: null, - - dbVersion: null, - - store: null, - - storeName: null, - - keyPath: null, - - autoIncrement: null, - - indexes: null, - - features: null, - - onStoreReady: null, - - openDB: function () { - - this.newVersionAPI = typeof this.idb.setVersion == 'undefined'; - - if(!this.newVersionAPI){ - throw new Error('The IndexedDB implementation in this browser is outdated. Please upgrade your browser.'); - } - - var features = this.features = {}; - features.hasAutoIncrement = !window.mozIndexedDB; // TODO: Still, really? - - var openRequest = this.idb.open(this.dbName, this.dbVersion); - - openRequest.onerror = function (error) { - - var gotVersionErr = false; - if ('error' in error.target) { - gotVersionErr = error.target.error.name == "VersionError"; - } else if ('errorCode' in error.target) { - gotVersionErr = error.target.errorCode == 12; // TODO: Use const - } - - if (gotVersionErr) { - console.error('Could not open database, version error:', error); - } else { - console.error('Could not open database, error:', error); - } - }.bind(this); - - - openRequest.onsuccess = function (event) { - - if(this.db){ - this.onStoreReady(); - return; - } - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - if(!this.store){ - var emptyTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - this.store = emptyTransaction.objectStore(this.storeName); - } - // check indexes - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - // normalize and provide existing keys - indexData.keyPath = indexData.keyPath || indexName; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - - if(!indexName){ - throw new Error('Cannot create index: No index name given.'); - } - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = ['keyPath', 'unique', 'multiEntry'].every(function(key){ - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actualIndex[key] === undefined && indexData[key] === false) { - return true; - } - return indexData[key] == actualIndex[key]; - }); - if(!complies){ - throw new Error('Cannot modify index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - } else { - throw new Error('Cannot create new index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - - }, this); - - this.onStoreReady(); - } else { - // We should never get here. - throw new Error('Cannot create a new store for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.'); - } - }.bind(this); - - openRequest.onupgradeneeded = function(/* IDBVersionChangeEvent */ event){ - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - this.store = event.target.transaction.objectStore(this.storeName); - } else { - this.store = this.db.createObjectStore(this.storeName, { keyPath: this.keyPath, autoIncrement: this.autoIncrement}); - } - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - // normalize and provide existing keys - indexData.keyPath = indexData.keyPath || indexName; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - - if(!indexName){ - throw new Error('Cannot create index: No index name given.'); - } - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = ['keyPath', 'unique', 'multiEntry'].every(function(key){ - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actualIndex[key] === undefined && indexData[key] === false) { - return true; - } - return indexData[key] == actualIndex[key]; - }); - if(!complies){ - // index differs, need to delete and re-create - this.store.deleteIndex(indexName); - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - } else { - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - - }, this); - - }.bind(this); - }, - - deleteDatabase: function () { - if (this.idb.deleteDatabase) { - this.idb.deleteDatabase(this.dbName); - } - }, - - /********************* - * data manipulation * - *********************/ - - - put: function (dataObj, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not write data.', error); - }); - onSuccess || (onSuccess = noop); - if (typeof dataObj[this.keyPath] == 'undefined' && !this.features.hasAutoIncrement) { - dataObj[this.keyPath] = this._getUID(); - } - - var putTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var putRequest = putTransaction.objectStore(this.storeName).put(dataObj); - putRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - putRequest.onerror = onError; - }, - - get: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var getRequest = getTransaction.objectStore(this.storeName).get(key); - getRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getRequest.onerror = onError; - }, - - remove: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not remove data.', error); - }); - onSuccess || (onSuccess = noop); - var removeTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var deleteRequest = removeTransaction.objectStore(this.storeName).delete(key); - deleteRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - deleteRequest.onerror = onError; - }, - - getAll: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getAllTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var store = getAllTransaction.objectStore(this.storeName); - if (store.getAll) { - var getAllRequest = store.getAll(); - getAllRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getAllRequest.onerror = onError; - } else { - this._getAllCursor(getAllTransaction, onSuccess, onError); - } - }, - - _getAllCursor: function (tr, onSuccess, onError) { - var all = []; - var store = tr.objectStore(this.storeName); - var cursorRequest = store.openCursor(); - - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - all.push(cursor.value); - cursor['continue'](); - } - else { - onSuccess(all); - } - }; - cursorRequest.onError = onError; - }, - - clear: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not clear store.', error); - }); - onSuccess || (onSuccess = noop); - var clearTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var clearRequest = clearTransaction.objectStore(this.storeName).clear(); - clearRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - clearRequest.onerror = onError; - }, - - _getUID: function () { - // FF bails at times on non-numeric ids. So we take an even - // worse approach now, using current time as id. Sigh. - return +new Date(); - }, - - - /************ - * indexing * - ************/ - - getIndexList: function () { - return this.store.indexNames; - }, - - hasIndex: function (indexName) { - return this.store.indexNames.contains(indexName); - }, - - /********** - * cursor * - **********/ - - iterate: function (onItem, options) { - options = mixin({ - index: null, - order: 'ASC', - filterDuplicates: false, - keyRange: null, - writeAccess: false, - onEnd: null, - onError: function (error) { - console.error('Could not open cursor.', error); - } - }, options || {}); - - var directionType = options.order.toLowerCase() == 'desc' ? 'prev' : 'next'; - if (options.filterDuplicates) { - directionType += 'unique'; - } - - var cursorTransaction = this.db.transaction([this.storeName], this.consts[options.writeAccess ? 'READ_WRITE' : 'READ_ONLY']); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var cursorRequest = cursorTarget.openCursor(options.keyRange, directionType); - cursorRequest.onerror = options.onError; - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - onItem(cursor.value, cursor, cursorTransaction); - cursor['continue'](); - } else { - if(options.onEnd){ - options.onEnd() - } else { - onItem(null); - } - } - }; - }, - - count: function (onSuccess, options) { - - options = mixin({ - index: null, - keyRange: null - }, options || {}); - - var onError = options.onError || function (error) { - console.error('Could not open cursor.', error); - }; - - var cursorTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var countRequest = cursorTarget.count(options.keyRange); - countRequest.onsuccess = function (evt) { - onSuccess(evt.target.result); - }; - countRequest.onError = function (error) { - onError(error); - }; - }, - - /**************/ - /* key ranges */ - /**************/ - - makeKeyRange: function(options){ - var keyRange, - hasLower = typeof options.lower != 'undefined', - hasUpper = typeof options.upper != 'undefined'; - - switch(true){ - case hasLower && hasUpper: - keyRange = this.keyRange.bound(options.lower, options.upper, options.excludeLower, options.excludeUpper); - break; - case hasLower: - keyRange = this.keyRange.lowerBound(options.lower, options.excludeLower); - break; - case hasUpper: - keyRange = this.keyRange.upperBound(options.upper, options.excludeUpper); - break; - default: - throw new Error('Cannot create KeyRange. Provide one or both of "lower" or "upper" value.'); - break; - } - - return keyRange; - - } - - }; - - /** helpers **/ - - var noop = function () { - }; - var empty = {}; - var mixin = function (target, source) { - var name, s; - for (name in source) { - s = source[name]; - if (s !== empty[name] && s !== target[name]) { - target[name] = s; - } - } - return target; - }; - - return IDBStore; - -}, this); diff --git a/temp/idbwrapper/0.1.4/package/LICENSE b/temp/idbwrapper/0.1.4/package/LICENSE deleted file mode 100644 index 93f5d87c8..000000000 --- a/temp/idbwrapper/0.1.4/package/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 - 2012 Jens Arps - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/temp/idbwrapper/0.1.4/package/README.md b/temp/idbwrapper/0.1.4/package/README.md deleted file mode 100644 index 480e14c6b..000000000 --- a/temp/idbwrapper/0.1.4/package/README.md +++ /dev/null @@ -1,313 +0,0 @@ -About -===== - -This is a wrapper for indexedDB. It is meant to - -a) ease the use of indexedDB and abstract away the differences between the -existing impls in Chrome, Firefox and IE10 (yes, it works in all three), and - -b) show how IDB works. The code is split up into short methods, so that it's -easy to see what happens in what method. - -"Showing how it works" is the main intention of this project. IndexedDB is -all the buzz, but only a few people actually know how to use it. - -The code in IDBWrapper.js is not optimized for anything, nor minified or anything. -It is meant to be read and easy to understand. So, please, go ahead and check out -the source! - -There are two tutorials to get you up and running: - -Part 1: Setup and CRUD operations -http://jensarps.de/2011/11/25/working-with-idbwrapper-part-1/ - -Part 2: Running Queries against the store -http://jensarps.de/2012/11/13/working-with-idbwrapper-part-2/ - -##November Rewrite - -I rewrote IDBWrapper to cope with all the issues, and the new version is on -master since Nov, 13th 2012. The API didn't change much, I just removed some -of the methods. Method signatures remain unchanged. - -However, if you have a previous version of IDBWrapper in use, there's an -issue: The new version won't be able to access the store created with the old -version, because database names changed. In that case, you need to manually -migrate the data: Include both versions of IDBWrapper (use a different name for -them), do a getAll() on the old store and write the data to the new store. - -I am very sorry about any inconveniences, but there was no other way. - -The 'old' version of IDBWrapper is still available in the `legacy` branch: -https://github.com/jensarps/IDBWrapper/tree/legacy - -Also, "showing how it works" is no longer the main intention behind this. Now, -it's rather "just works". - - -Examples -======== - -There are some examples to run right in your browser over here: http://jensarps.github.com/IDBWrapper/example/ - -The source for these examples are in the `example` folder of this repository. - -Usage -===== - -Including the IDBStore.js file will add an IDBStore constructor to the global scope. - -Alternatively, you can use an AMD loader such as RequireJS to load the file, -and you will receive the constructor in your load callback (the constructor -will then, of course, have whatever name you call it). - -You can then create an IDB store: - -```javascript -var myStore = new IDBStore(); -``` - -You may pass two parameters to the constructor: the first is an object with optional parameters, -the second is a function reference to a function that is called when the store is ready to use. - -The options object may contain the following properties (default values are shown): - -```javascript -{ - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - indexes: [], - onStoreReady: function(){} -} -``` - -'keyPath' is the name of the property to be used as key index. If 'autoIncrement' is set to true, -the database will automatically add a unique key to the keyPath index when storing objects missing -that property. 'indexes' contains objects defining indexes (see below for details on indexes). - -You can also pass a callback function to the options object. If a callback is provided both as second -parameter and inside of the options object, the function passed as second parameter will be used. - -Methods -======= - -Here's an overview of available methods in IDBStore: - -Data Manipulation ------------------ - -Use the following methods to read and write data: - -___ - -1) The put method. - - -```javascript -put(/*Object*/ dataObj, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`dataObj` is the Object to store. `onSuccess` will be called when the insertion/update was successful, -and it will receive the keyPath value (the id, so to say) of the inserted object as first and only -argument. `onError` will be called if the insertion/update failed and it will receive the error event -object as first and only argument. If the store already contains an object with the given keyPath id, -it will be overwritten by `dataObj`. - -___ - -2) The get method. - -```javascript -get(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to retrieve. `onSuccess` will be called if -the get operation was successful, and it will receive the stored object as first and only argument. If -no object was found with the given keyPath value, this argument will be null. `onError` will be called -if the get operation failed and it will receive the error event object as first and only argument. - -___ - -3) The getAll method. - -```javascript -getAll: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the getAll operation was successful, and it will receive an Array of -all objects currently stored in the store as first and only argument. `onError` will be called if -the getAll operation failed and it will receive the error event object as first and only argument. - -___ - -4) The remove method. - -```javascript -remove: function(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to remove. `onSuccess` will be called if -the remove operation was successful, and it _should_ receive `false` as first and only argument if the -object to remove was not found, and `true` if it was found and removed. - -NOTE: FF 8 will pass the key to the onSuccess handler, no matter if there is an corresponding object -or not. Chrome 15 will pass `null` if removal was successful, and call the error handler if the object -wasn't found. Chrome 17 will behave as described above. - -`onError` will be called if the remove operation failed and it will receive the error event object as first -and only argument. - -___ - -5) The clear method. - -```javascript -clear: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the clear operation was successful. `onError` will be called if the clear -operation failed and it will receive the error event object as first and only argument. - - -Index Operations ----------------- - -To create indexes, you need to pass the index information to the IDBStore() -constructor, for example: - - -```javascript -{ - storeName: 'customers', - dbVersion: 1, - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: function(){}, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] -} -``` - -An entry in the index Array is an object containing the following properties: - -The `name` property is the identifier of the index. If you want to work with the created index later, this name is used to identify the index. This is the only property that is mandatory. - -The `keyPath` property is the name of the property in your stored data that you want to index. If you omit that, IDBWrapper will assume that it is the same as the provided name, and will use this instead. - -The `unique` property tells the store whether the indexed property in your data is unique. If you set this to true, it will add a uniqueness constraint to the store which will make it throw if you try to store data that violates that constraint. If you omit that, IDBWrapper will set this to false. - -The `multiEntry` property is kinda weird. You can read up on it here: http://www.w3.org/TR/IndexedDB/#dfn-multientry. However, you can live perfectly fine with setting this to false (or just omitting it, this is set to false by default). - - -If you want to add an index to an existing store, you need to increase the -version number of your store, as adding an index changes the structure of -the database. - -To modify an index, modify the object in the indexes Array in the constructor. -Again, you need to increase the version of your store. - -In addition, there are still some convenience methods available: - -___ - - -1) The hasIndex method. - -```javascript -hasIndex: function(/*String*/ indexName) -``` - -Return true if an index with the given name exists in the store, false if not. - -___ - -2) The getIndexList method. - -```javascript -getIndexList: function() -``` - -Returns a `DOMStringList` with all existing indices. - - -Running Queries ---------------- - -To run queries, IDBWrapper provides an `iterate()` method. To create keyRanges, -there is the `makeKeyRange()` method. In addition to these, IDBWrapper comes -with a `count()` method. - -___ - -1) The iterate method. - - -```javascript -iterate: function(/*Function*/ onItem, /*Object*/ iterateOptions) -``` - -The `onItem` callback will be called once for every match. It will receive three arguments: the object that matched the query, a reference to the current cursor object (IDBWrapper uses IndexedDB's Cursor internally to iterate), and a reference to the current ongoing transaction. - -There's one special situation: if you didn't pass an onEnd handler in the options objects (see below), the onItem handler will be called one extra time when the transaction is over. In this case, it will receive null as only argument. So, to check when the iteration is over and you won't get any more data objects, you can either pass an onEnd handler, or check for null in the onItem handler. - -The `iterateOptions` object can contain one or more of the following properties: - - -The `index` property contains the name of the index to operate on. If you omit this, IDBWrapper will use the store's keyPath as index. - -In the `keyRange` property you can pass a keyRange. - -The `order` property can be set to 'ASC' or 'DESC', and determines the ordering direction of results. If you omit this, IDBWrapper will use 'ASC'. - -The `filterDuplicates` property is an interesting one: If you set this to true (it defaults to false), and have several objects that have the same value in their key, the store will only fetch the first of those. It is not about objects being the same, it's about their key being the same. For example, in the customers database are a couple of guys having 'Smith' as last name. Setting filterDuplicates to true in the above example will make `iterate()` call the onItem callback only for the first of those. - -The `writeAccess` property defaults to false. If you need write access to the store during the iteration, you need to set this to true. - -In the `onEnd` property you can pass a callback that gets called after the iteration is over and the transaction is closed. It does not receive any arguments. - -In the `onError` property you can pass a custom error handler. In case of an error, it will be called and receives the Error object as only argument. - - -___ - - -2) The makeKeyRange method. - - -```javascript -iterate: function(/*Object*/ keyRangeOptions) -``` - -Returns an IDBKeyRange. - -The `keyRangeOptions` object must have one or more of the following properties: - -`lower`: The lower bound of the range - -`excludeLower`: Boolean, whether to exclude the lower bound itself. Default: false - -`upper`: The upper bound of the range - -`excludeUpper`: Boolean, whether to exclude the upper bound itself. Default: false - -___ - - -3) The count method. - - -```javascript -iterate: function(/*Function*/ onSuccess, /*Object*/ countOptions) -``` - -The onSuccess receives the result of the count as only argument. - -The `countOptions` object may have one or more of the following properties: - -index: The name of an index to operate on. - -keyRange: A keyRange to use - diff --git a/temp/idbwrapper/0.1.4/package/example/basic/app.js b/temp/idbwrapper/0.1.4/package/example/basic/app.js deleted file mode 100644 index e1e2a2f55..000000000 --- a/temp/idbwrapper/0.1.4/package/example/basic/app.js +++ /dev/null @@ -1,94 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}', - table: '{content}
IDLast NameFirst Name
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = new IDBStore({ - storeName: 'customer', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'customerid', 'firstname', 'lastname', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ // We want the id to be numeric: - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function updateItem(id){ - var data = { - customerid: id, - firstname: document.getElementById('firstname_' + id).value.trim(), - lastname: document.getElementById('lastname_' + id).value.trim() - }; - customers.put(data, refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - updateItem: updateItem - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.1.4/package/example/basic/index.html b/temp/idbwrapper/0.1.4/package/example/basic/index.html deleted file mode 100644 index 5d7a596c6..000000000 --- a/temp/idbwrapper/0.1.4/package/example/basic/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - IDBWrapper Basic CRUD Example - - - - - -
-
- QueryResults -
-
-
-
-

- Enter some data to save. As ID, enter a numeric value or leave blank. -

- -
-
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.1.4/package/example/basic/style.css b/temp/idbwrapper/0.1.4/package/example/basic/style.css deleted file mode 100644 index e901b00c4..000000000 --- a/temp/idbwrapper/0.1.4/package/example/basic/style.css +++ /dev/null @@ -1,86 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.4/package/example/index.html b/temp/idbwrapper/0.1.4/package/example/index.html deleted file mode 100644 index cbc210fbc..000000000 --- a/temp/idbwrapper/0.1.4/package/example/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - IndexedDB Wrapper Examples - - - - -
- - \ No newline at end of file diff --git a/temp/idbwrapper/0.1.4/package/example/index/app.js b/temp/idbwrapper/0.1.4/package/example/index/app.js deleted file mode 100644 index 974280137..000000000 --- a/temp/idbwrapper/0.1.4/package/example/index/app.js +++ /dev/null @@ -1,163 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}{lastname}{firstname}{age}', - table: '{content}
IDLast NameFirst NameAge
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = app.customers = new IDBStore({ - dbVersion: 1, - storeName: 'customer-index', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] - }); - - // create references for some nodes we have to work with - [ - 'submit', 'submitQuery', - 'upper', 'lower', 'excludeLower', 'excludeUpper', - 'sortOrder', 'index', 'filterDuplicates', - 'customerid', 'firstname', 'lastname', 'age', - 'results-container' - ].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit buttons. - nodeCache.submit.addEventListener('click', enterData); - nodeCache.submitQuery.addEventListener('click', runQuery); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname', 'age'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname', 'age'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function makeRandomEntry(){ - var lastnames = ['Smith','Miller','Doe','Frankenstein','Furter'], - firstnames = ['Peter','John','Frank', 'James', 'Jill']; - - var entry = { - lastname: lastnames[Math.floor(Math.random()*5)], - firstname: firstnames[Math.floor(Math.random()*4)], - age: Math.floor(Math.random() * (100 - 20)) + 20, - customerid: parseInt( ( "" + ( Date.now() * Math.random() ) ).substring(0, 6), 10) - }; - - return entry; - } - - function addRandomCustomer(){ - var data = makeRandomEntry(); - - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function runQuery(){ - var upper = nodeCache.upper.value, - hasUpper = upper != '', - lower = nodeCache.lower.value, - hasLower = lower != '', - - indexName = nodeCache.index.value, - sortOrder = nodeCache.sortOrder.value, - filterDuplicates = nodeCache.filterDuplicates.checked, - keyRange, - - content = ''; - - if(hasUpper || hasLower){ // create a keyRange only if bounds are given - var options = {}; - if(hasUpper){ - options.upper = upper; - options.excludeUpper = nodeCache.excludeUpper.checked; - } - if(hasLower){ - options.lower = lower; - options.excludeLower = nodeCache.excludeLower.checked; - } - keyRange = customers.makeKeyRange(options); - } - - var onItem = function (item) { - content += tpls.row.replace(/\{([^\}]+)\}/g, function (_, key) { - return item[key]; - }); - }; - var onEnd = function () { - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - }; - - customers.iterate(onItem, { - index: indexName, - keyRange: keyRange, - filterDuplicates: filterDuplicates, - order: sortOrder, - onEnd: onEnd - }); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - addRandomCustomer: addRandomCustomer - }; - - // go! - init(); - -}); diff --git a/temp/idbwrapper/0.1.4/package/example/index/index.html b/temp/idbwrapper/0.1.4/package/example/index/index.html deleted file mode 100644 index 63a50039d..000000000 --- a/temp/idbwrapper/0.1.4/package/example/index/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - IDBWrapper Basic Index Example - - - - - -
-
- QueryResults -
-
-

Query

- -
- - -
-
-
-
-
- -
- - -
- -
- - -
-
-

Add data

- -

- Add a random customer: - -

-

- Or, enter customer data below: -

- -
-
-
-
- -
-
- - - diff --git a/temp/idbwrapper/0.1.4/package/example/index/style.css b/temp/idbwrapper/0.1.4/package/example/index/style.css deleted file mode 100644 index 8f7ddd9fe..000000000 --- a/temp/idbwrapper/0.1.4/package/example/index/style.css +++ /dev/null @@ -1,89 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input, -#query { - padding: 10px; - width: 350px; - border-left: solid 1px black; -} -#input div, -#query div{ - padding: 5px; -} -#input label, -#query label{ - display: inline-block; - width: 120px; -} diff --git a/temp/idbwrapper/0.1.4/package/example/lib/requirejs/require.js b/temp/idbwrapper/0.1.4/package/example/lib/requirejs/require.js deleted file mode 100644 index ba861994a..000000000 --- a/temp/idbwrapper/0.1.4/package/example/lib/requirejs/require.js +++ /dev/null @@ -1,2013 +0,0 @@ -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 0.26.0+ Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -/*jslint strict: false, plusplus: false */ -/*global window: false, navigator: false, document: false, importScripts: false, - jQuery: false, clearInterval: false, setInterval: false, self: false, - setTimeout: false, opera: false */ - -var requirejs, require, define; -(function () { - //Change this version number for each release. - var version = "0.26.0+", - commentRegExp = /(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg, - cjsRequireRegExp = /require\(\s*["']([^'"\s]+)["']\s*\)/g, - currDirRegExp = /^\.\//, - jsSuffixRegExp = /\.js$/, - ostring = Object.prototype.toString, - ap = Array.prototype, - aps = ap.slice, - apsp = ap.splice, - isBrowser = !!(typeof window !== "undefined" && navigator && document), - isWebWorker = !isBrowser && typeof importScripts !== "undefined", - //PS3 indicates loaded and complete, but need to wait for complete - //specifically. Sequence is "loading", "loaded", execution, - // then "complete". The UA check is unfortunate, but not sure how - //to feature test w/o causing perf issues. - readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? - /^complete$/ : /^(complete|loaded)$/, - defContextName = "_", - //Oh the tragedy, detecting opera. See the usage of isOpera for reason. - isOpera = typeof opera !== "undefined" && opera.toString() === "[object Opera]", - reqWaitIdPrefix = "_r@@", - empty = {}, - contexts = {}, - globalDefQueue = [], - interactiveScript = null, - isDone = false, - checkLoadedDepth = 0, - useInteractive = false, - req, cfg = {}, currentlyAddingScript, s, head, baseElement, scripts, script, - src, subPath, mainScript, dataMain, i, scrollIntervalId, setReadyState, ctx, - jQueryCheck, checkLoadedTimeoutId; - - function isFunction(it) { - return ostring.call(it) === "[object Function]"; - } - - function isArray(it) { - return ostring.call(it) === "[object Array]"; - } - - /** - * Simple function to mix in properties from source into target, - * but only if target does not already have a property of the same name. - * This is not robust in IE for transferring methods that match - * Object.prototype names, but the uses of mixin here seem unlikely to - * trigger a problem related to that. - */ - function mixin(target, source, force) { - for (var prop in source) { - if (!(prop in empty) && (!(prop in target) || force)) { - target[prop] = source[prop]; - } - } - return req; - } - - /** - * Constructs an error with a pointer to an URL with more information. - * @param {String} id the error ID that maps to an ID on a web page. - * @param {String} message human readable error. - * @param {Error} [err] the original error, if there is one. - * - * @returns {Error} - */ - function makeError(id, msg, err) { - var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); - if (err) { - e.originalError = err; - } - return e; - } - - /** - * Used to set up package paths from a packagePaths or packages config object. - * @param {Object} pkgs the object to store the new package config - * @param {Array} currentPackages an array of packages to configure - * @param {String} [dir] a prefix dir to use. - */ - function configurePackageDir(pkgs, currentPackages, dir) { - var i, location, pkgObj; - - for (i = 0; (pkgObj = currentPackages[i]); i++) { - pkgObj = typeof pkgObj === "string" ? { name: pkgObj } : pkgObj; - location = pkgObj.location; - - //Add dir to the path, but avoid paths that start with a slash - //or have a colon (indicates a protocol) - if (dir && (!location || (location.indexOf("/") !== 0 && location.indexOf(":") === -1))) { - location = dir + "/" + (location || pkgObj.name); - } - - //Create a brand new object on pkgs, since currentPackages can - //be passed in again, and config.pkgs is the internal transformed - //state for all package configs. - pkgs[pkgObj.name] = { - name: pkgObj.name, - location: location || pkgObj.name, - //Remove leading dot in main, so main paths are normalized, - //and remove any trailing .js, since different package - //envs have different conventions: some use a module name, - //some use a file name. - main: (pkgObj.main || "main") - .replace(currDirRegExp, '') - .replace(jsSuffixRegExp, '') - }; - } - } - - /** - * jQuery 1.4.3-1.5.x use a readyWait/ready() pairing to hold DOM - * ready callbacks, but jQuery 1.6 supports a holdReady() API instead. - * At some point remove the readyWait/ready() support and just stick - * with using holdReady. - */ - function jQueryHoldReady($, shouldHold) { - if ($.holdReady) { - $.holdReady(shouldHold); - } else if (shouldHold) { - $.readyWait += 1; - } else { - $.ready(true); - } - } - - if (typeof define !== "undefined") { - //If a define is already in play via another AMD loader, - //do not overwrite. - return; - } - - if (typeof requirejs !== "undefined") { - if (isFunction(requirejs)) { - //Do not overwrite and existing requirejs instance. - return; - } else { - cfg = requirejs; - requirejs = undefined; - } - } - - //Allow for a require config object - if (typeof require !== "undefined" && !isFunction(require)) { - //assume it is a config object. - cfg = require; - require = undefined; - } - - /** - * Creates a new context for use in require and define calls. - * Handle most of the heavy lifting. Do not want to use an object - * with prototype here to avoid using "this" in require, in case it - * needs to be used in more super secure envs that do not want this. - * Also there should not be that many contexts in the page. Usually just - * one for the default context, but could be extra for multiversion cases - * or if a package needs a special context for a dependency that conflicts - * with the standard context. - */ - function newContext(contextName) { - var context, resume, - config = { - waitSeconds: 7, - baseUrl: s.baseUrl || "./", - paths: {}, - pkgs: {}, - catchError: {} - }, - defQueue = [], - specified = { - "require": true, - "exports": true, - "module": true - }, - urlMap = {}, - defined = {}, - loaded = {}, - waiting = {}, - waitAry = [], - waitIdCounter = 0, - managerCallbacks = {}, - plugins = {}, - pluginsQueue = {}, - resumeDepth = 0, - normalizedWaiting = {}; - - /** - * Trims the . and .. from an array of path segments. - * It will keep a leading path segment if a .. will become - * the first path segment, to help with module name lookups, - * which act like paths, but can be remapped. But the end result, - * all paths that use this function should look normalized. - * NOTE: this method MODIFIES the input array. - * @param {Array} ary the array of path segments. - */ - function trimDots(ary) { - var i, part; - for (i = 0; (part = ary[i]); i++) { - if (part === ".") { - ary.splice(i, 1); - i -= 1; - } else if (part === "..") { - if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { - //End of the line. Keep at least one non-dot - //path segment at the front so it can be mapped - //correctly to disk. Otherwise, there is likely - //no path mapping for a path starting with '..'. - //This can still fail, but catches the most reasonable - //uses of .. - break; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - - /** - * Given a relative module name, like ./something, normalize it to - * a real name that can be mapped to a path. - * @param {String} name the relative name - * @param {String} baseName a real name that the name arg is relative - * to. - * @returns {String} normalized name - */ - function normalize(name, baseName) { - var pkgName, pkgConfig; - - //Adjust any relative paths. - if (name && name.charAt(0) === ".") { - //If have a base name, try to normalize against it, - //otherwise, assume it is a top-level require that will - //be relative to baseUrl in the end. - if (baseName) { - if (config.pkgs[baseName]) { - //If the baseName is a package name, then just treat it as one - //name to concat the name with. - baseName = [baseName]; - } else { - //Convert baseName to array, and lop off the last part, - //so that . matches that "directory" and not name of the baseName's - //module. For instance, baseName of "one/two/three", maps to - //"one/two/three.js", but we want the directory, "one/two" for - //this normalization. - baseName = baseName.split("/"); - baseName = baseName.slice(0, baseName.length - 1); - } - - name = baseName.concat(name.split("/")); - trimDots(name); - - //Some use of packages may use a . path to reference the - //"main" module name, so normalize for that. - pkgConfig = config.pkgs[(pkgName = name[0])]; - name = name.join("/"); - if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { - name = pkgName; - } - } - } - return name; - } - - /** - * Creates a module mapping that includes plugin prefix, module - * name, and path. If parentModuleMap is provided it will - * also normalize the name via require.normalize() - * - * @param {String} name the module name - * @param {String} [parentModuleMap] parent module map - * for the module name, used to resolve relative names. - * - * @returns {Object} - */ - function makeModuleMap(name, parentModuleMap) { - var index = name ? name.indexOf("!") : -1, - prefix = null, - parentName = parentModuleMap ? parentModuleMap.name : null, - originalName = name, - normalizedName, url, pluginModule; - - if (index !== -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - - if (prefix) { - prefix = normalize(prefix, parentName); - } - - //Account for relative paths if there is a base name. - if (name) { - if (prefix) { - pluginModule = defined[prefix]; - if (pluginModule) { - //Plugin is loaded, use its normalize method, otherwise, - //normalize name as usual. - if (pluginModule.normalize) { - normalizedName = pluginModule.normalize(name, function (name) { - return normalize(name, parentName); - }); - } else { - normalizedName = normalize(name, parentName); - } - } else { - //Plugin is not loaded yet, so do not normalize - //the name, wait for plugin to load to see if - //it has a normalize method. To avoid possible - //ambiguity with relative names loaded from another - //plugin, use the parent's name as part of this name. - normalizedName = '__$p' + parentName + '@' + (name || ''); - } - } else { - normalizedName = normalize(name, parentName); - } - - url = urlMap[normalizedName]; - if (!url) { - //Calculate url for the module, if it has a name. - if (req.toModuleUrl) { - //Special logic required for a particular engine, - //like Node. - url = req.toModuleUrl(context, normalizedName, parentModuleMap); - } else { - url = context.nameToUrl(normalizedName, null, parentModuleMap); - } - - //Store the URL mapping for later. - urlMap[normalizedName] = url; - } - } - - return { - prefix: prefix, - name: normalizedName, - parentMap: parentModuleMap, - url: url, - originalName: originalName, - fullName: prefix ? prefix + "!" + (normalizedName || '') : normalizedName - }; - } - - /** - * Determine if priority loading is done. If so clear the priorityWait - */ - function isPriorityDone() { - var priorityDone = true, - priorityWait = config.priorityWait, - priorityName, i; - if (priorityWait) { - for (i = 0; (priorityName = priorityWait[i]); i++) { - if (!loaded[priorityName]) { - priorityDone = false; - break; - } - } - if (priorityDone) { - delete config.priorityWait; - } - } - return priorityDone; - } - - /** - * Helper function that creates a setExports function for a "module" - * CommonJS dependency. Do this here to avoid creating a closure that - * is part of a loop. - */ - function makeSetExports(moduleObj) { - return function (exports) { - moduleObj.exports = exports; - }; - } - - function makeContextModuleFunc(func, relModuleMap, enableBuildCallback) { - return function () { - //A version of a require function that passes a moduleName - //value for items that may need to - //look up paths relative to the moduleName - var args = [].concat(aps.call(arguments, 0)), lastArg; - if (enableBuildCallback && - isFunction((lastArg = args[args.length - 1]))) { - lastArg.__requireJsBuild = true; - } - args.push(relModuleMap); - return func.apply(null, args); - }; - } - - /** - * Helper function that creates a require function object to give to - * modules that ask for it as a dependency. It needs to be specific - * per module because of the implication of path mappings that may - * need to be relative to the module name. - */ - function makeRequire(relModuleMap, enableBuildCallback) { - var modRequire = makeContextModuleFunc(context.require, relModuleMap, enableBuildCallback); - - mixin(modRequire, { - nameToUrl: makeContextModuleFunc(context.nameToUrl, relModuleMap), - toUrl: makeContextModuleFunc(context.toUrl, relModuleMap), - defined: makeContextModuleFunc(context.requireDefined, relModuleMap), - specified: makeContextModuleFunc(context.requireSpecified, relModuleMap), - ready: req.ready, - isBrowser: req.isBrowser - }); - //Something used by node. - if (req.paths) { - modRequire.paths = req.paths; - } - return modRequire; - } - - /** - * Used to update the normalized name for plugin-based dependencies - * after a plugin loads, since it can have its own normalization structure. - * @param {String} pluginName the normalized plugin module name. - */ - function updateNormalizedNames(pluginName) { - - var oldFullName, oldModuleMap, moduleMap, fullName, callbacks, - i, j, k, depArray, existingCallbacks, - maps = normalizedWaiting[pluginName]; - - if (maps) { - for (i = 0; (oldModuleMap = maps[i]); i++) { - oldFullName = oldModuleMap.fullName; - moduleMap = makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap); - fullName = moduleMap.fullName; - //Callbacks could be undefined if the same plugin!name was - //required twice in a row, so use empty array in that case. - callbacks = managerCallbacks[oldFullName] || []; - existingCallbacks = managerCallbacks[fullName]; - - if (fullName !== oldFullName) { - //Update the specified object, but only if it is already - //in there. In sync environments, it may not be yet. - if (oldFullName in specified) { - delete specified[oldFullName]; - specified[fullName] = true; - } - - //Update managerCallbacks to use the correct normalized name. - //If there are already callbacks for the normalized name, - //just add to them. - if (existingCallbacks) { - managerCallbacks[fullName] = existingCallbacks.concat(callbacks); - } else { - managerCallbacks[fullName] = callbacks; - } - delete managerCallbacks[oldFullName]; - - //In each manager callback, update the normalized name in the depArray. - for (j = 0; j < callbacks.length; j++) { - depArray = callbacks[j].depArray; - for (k = 0; k < depArray.length; k++) { - if (depArray[k] === oldFullName) { - depArray[k] = fullName; - } - } - } - } - } - } - - delete normalizedWaiting[pluginName]; - } - - /* - * Queues a dependency for checking after the loader is out of a - * "paused" state, for example while a script file is being loaded - * in the browser, where it may have many modules defined in it. - * - * depName will be fully qualified, no relative . or .. path. - */ - function queueDependency(dep) { - //Make sure to load any plugin and associate the dependency - //with that plugin. - var prefix = dep.prefix, - fullName = dep.fullName; - - //Do not bother if the depName is already in transit - if (specified[fullName] || fullName in defined) { - return; - } - - if (prefix && !plugins[prefix]) { - //Queue up loading of the dependency, track it - //via context.plugins. Mark it as a plugin so - //that the build system will know to treat it - //special. - plugins[prefix] = undefined; - - //Remember this dep that needs to have normaliztion done - //after the plugin loads. - (normalizedWaiting[prefix] || (normalizedWaiting[prefix] = [])) - .push(dep); - - //Register an action to do once the plugin loads, to update - //all managerCallbacks to use a properly normalized module - //name. - (managerCallbacks[prefix] || - (managerCallbacks[prefix] = [])).push({ - onDep: function (name, value) { - if (name === prefix) { - updateNormalizedNames(prefix); - } - } - }); - - queueDependency(makeModuleMap(prefix)); - } - - context.paused.push(dep); - } - - function execManager(manager) { - var i, ret, waitingCallbacks, err, errFile, errModuleTree, - cb = manager.callback, - fullName = manager.fullName, - args = [], - ary = manager.depArray; - - //Call the callback to define the module, if necessary. - if (cb && isFunction(cb)) { - //Pull out the defined dependencies and pass the ordered - //values to the callback. - if (ary) { - for (i = 0; i < ary.length; i++) { - args.push(manager.deps[ary[i]]); - } - } - - if (config.catchError.define) { - try { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } catch (e) { - err = e; - } - } else { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } - - if (fullName) { - //If setting exports via "module" is in play, - //favor that over return value and exports. After that, - //favor a non-undefined return value over exports use. - if (manager.cjsModule && manager.cjsModule.exports !== undefined) { - ret = defined[fullName] = manager.cjsModule.exports; - } else if (ret === undefined && manager.usingExports) { - //exports already set the defined value. - ret = defined[fullName]; - } else { - //Use the return value from the function. - defined[fullName] = ret; - } - } - } else if (fullName) { - //May just be an object definition for the module. Only - //worry about defining if have a module name. - ret = defined[fullName] = cb; - } - - //Clean up waiting. Do this before error calls, and before - //calling back waitingCallbacks, so that bookkeeping is correct - //in the event of an error and error is reported in correct order, - //since the waitingCallbacks will likely have errors if the - //onError function does not throw. - if (waiting[manager.waitId]) { - delete waiting[manager.waitId]; - manager.isDone = true; - context.waitCount -= 1; - if (context.waitCount === 0) { - //Clear the wait array used for cycles. - waitAry = []; - } - } - - if (err) { - errFile = (fullName ? makeModuleMap(fullName).url : '') || - err.fileName || err.sourceURL; - errModuleTree = err.moduleTree; - err = makeError('defineerror', 'Error evaluating ' + - 'module "' + fullName + '" at location "' + - errFile + '":\n' + - err + '\nfileName:' + errFile + - '\nlineNumber: ' + (err.lineNumber || err.line), err); - err.moduleName = fullName; - err.moduleTree = errModuleTree; - return req.onError(err); - } - - if (fullName) { - //If anything was waiting for this module to be defined, - //notify them now. - waitingCallbacks = managerCallbacks[fullName]; - if (waitingCallbacks) { - for (i = 0; i < waitingCallbacks.length; i++) { - waitingCallbacks[i].onDep(fullName, ret); - } - delete managerCallbacks[fullName]; - } - } - - return undefined; - } - - function main(inName, depArray, callback, relModuleMap) { - var moduleMap = makeModuleMap(inName, relModuleMap), - name = moduleMap.name, - fullName = moduleMap.fullName, - uniques = {}, - manager = { - //Use a wait ID because some entries are anon - //async require calls. - waitId: name || reqWaitIdPrefix + (waitIdCounter++), - depCount: 0, - depMax: 0, - prefix: moduleMap.prefix, - name: name, - fullName: fullName, - deps: {}, - depArray: depArray, - callback: callback, - onDep: function (depName, value) { - if (!(depName in manager.deps)) { - manager.deps[depName] = value; - manager.depCount += 1; - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } - } - } - }, - i, depArg, depName, cjsMod; - - if (fullName) { - //If module already defined for context, or already loaded, - //then leave. Also leave if jQuery is registering but it does - //not match the desired version number in the config. - if (fullName in defined || loaded[fullName] === true || - (fullName === "jquery" && config.jQuery && - config.jQuery !== callback().fn.jquery)) { - return; - } - - //Set specified/loaded here for modules that are also loaded - //as part of a layer, where onScriptLoad is not fired - //for those cases. Do this after the inline define and - //dependency tracing is done. - specified[fullName] = true; - loaded[fullName] = true; - - //If module is jQuery set up delaying its dom ready listeners. - if (fullName === "jquery" && callback) { - jQueryCheck(callback()); - } - } - - //Add the dependencies to the deps field, and register for callbacks - //on the dependencies. - for (i = 0; i < depArray.length; i++) { - depArg = depArray[i]; - //There could be cases like in IE, where a trailing comma will - //introduce a null dependency, so only treat a real dependency - //value as a dependency. - if (depArg) { - //Split the dependency name into plugin and name parts - depArg = makeModuleMap(depArg, (name ? moduleMap : relModuleMap)); - depName = depArg.fullName; - - //Fix the name in depArray to be just the name, since - //that is how it will be called back later. - depArray[i] = depName; - - //Fast path CommonJS standard dependencies. - if (depName === "require") { - manager.deps[depName] = makeRequire(moduleMap); - } else if (depName === "exports") { - //CommonJS module spec 1.1 - manager.deps[depName] = defined[fullName] = {}; - manager.usingExports = true; - } else if (depName === "module") { - //CommonJS module spec 1.1 - manager.cjsModule = cjsMod = manager.deps[depName] = { - id: name, - uri: name ? context.nameToUrl(name, null, relModuleMap) : undefined, - exports: defined[fullName] - }; - cjsMod.setExports = makeSetExports(cjsMod); - } else if (depName in defined && !(depName in waiting)) { - //Module already defined, no need to wait for it. - manager.deps[depName] = defined[depName]; - } else if (!uniques[depName]) { - - //A dynamic dependency. - manager.depMax += 1; - - queueDependency(depArg); - - //Register to get notification when dependency loads. - (managerCallbacks[depName] || - (managerCallbacks[depName] = [])).push(manager); - - uniques[depName] = true; - } - } - } - - //Do not bother tracking the manager if it is all done. - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } else { - waiting[manager.waitId] = manager; - waitAry.push(manager); - context.waitCount += 1; - } - } - - /** - * Convenience method to call main for a define call that was put on - * hold in the defQueue. - */ - function callDefMain(args) { - main.apply(null, args); - //Mark the module loaded. Must do it here in addition - //to doing it in define in case a script does - //not call define - loaded[args[0]] = true; - } - - /** - * jQuery 1.4.3+ supports ways to hold off calling - * calling jQuery ready callbacks until all scripts are loaded. Be sure - * to track it if the capability exists.. Also, since jQuery 1.4.3 does - * not register as a module, need to do some global inference checking. - * Even if it does register as a module, not guaranteed to be the precise - * name of the global. If a jQuery is tracked for this context, then go - * ahead and register it as a module too, if not already in process. - */ - jQueryCheck = function (jqCandidate) { - if (!context.jQuery) { - var $ = jqCandidate || (typeof jQuery !== "undefined" ? jQuery : null); - - if ($) { - //If a specific version of jQuery is wanted, make sure to only - //use this jQuery if it matches. - if (config.jQuery && $.fn.jquery !== config.jQuery) { - return; - } - - if ("holdReady" in $ || "readyWait" in $) { - context.jQuery = $; - - //Manually create a "jquery" module entry if not one already - //or in process. Note this could trigger an attempt at - //a second jQuery registration, but does no harm since - //the first one wins, and it is the same value anyway. - callDefMain(["jquery", [], function () { - return jQuery; - }]); - - //Ask jQuery to hold DOM ready callbacks. - if (context.scriptCount) { - jQueryHoldReady($, true); - context.jQueryIncremented = true; - } - } - } - } - }; - - function forceExec(manager, traced) { - if (manager.isDone) { - return undefined; - } - - var fullName = manager.fullName, - depArray = manager.depArray, - depName, i; - if (fullName) { - if (traced[fullName]) { - return defined[fullName]; - } - - traced[fullName] = true; - } - - //forceExec all of its dependencies. - for (i = 0; i < depArray.length; i++) { - //Some array members may be null, like if a trailing comma - //IE, so do the explicit [i] access and check if it has a value. - depName = depArray[i]; - if (depName) { - if (!manager.deps[depName] && waiting[depName]) { - manager.onDep(depName, forceExec(waiting[depName], traced)); - } - } - } - - return fullName ? defined[fullName] : undefined; - } - - /** - * Checks if all modules for a context are loaded, and if so, evaluates the - * new ones in right dependency order. - * - * @private - */ - function checkLoaded() { - var waitInterval = config.waitSeconds * 1000, - //It is possible to disable the wait interval by using waitSeconds of 0. - expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), - noLoads = "", hasLoadedProp = false, stillLoading = false, prop, - err, manager; - - //If there are items still in the paused queue processing wait. - //This is particularly important in the sync case where each paused - //item is processed right away but there may be more waiting. - if (context.pausedCount > 0) { - return undefined; - } - - //Determine if priority loading is done. If so clear the priority. If - //not, then do not check - if (config.priorityWait) { - if (isPriorityDone()) { - //Call resume, since it could have - //some waiting dependencies to trace. - resume(); - } else { - return undefined; - } - } - - //See if anything is still in flight. - for (prop in loaded) { - if (!(prop in empty)) { - hasLoadedProp = true; - if (!loaded[prop]) { - if (expired) { - noLoads += prop + " "; - } else { - stillLoading = true; - break; - } - } - } - } - - //Check for exit conditions. - if (!hasLoadedProp && !context.waitCount) { - //If the loaded object had no items, then the rest of - //the work below does not need to be done. - return undefined; - } - if (expired && noLoads) { - //If wait time expired, throw error of unloaded modules. - err = makeError("timeout", "Load timeout for modules: " + noLoads); - err.requireType = "timeout"; - err.requireModules = noLoads; - return req.onError(err); - } - if (stillLoading || context.scriptCount) { - //Something is still waiting to load. Wait for it, but only - //if a timeout is not already in effect. - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function () { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - return undefined; - } - - //If still have items in the waiting cue, but all modules have - //been loaded, then it means there are some circular dependencies - //that need to be broken. - //However, as a waiting thing is fired, then it can add items to - //the waiting cue, and those items should not be fired yet, so - //make sure to redo the checkLoaded call after breaking a single - //cycle, if nothing else loaded then this logic will pick it up - //again. - if (context.waitCount) { - //Cycle through the waitAry, and call items in sequence. - for (i = 0; (manager = waitAry[i]); i++) { - forceExec(manager, {}); - } - - //Only allow this recursion to a certain depth. Only - //triggered by errors in calling a module in which its - //modules waiting on it cannot finish loading, or some circular - //dependencies that then may add more dependencies. - //The value of 5 is a bit arbitrary. Hopefully just one extra - //pass, or two for the case of circular dependencies generating - //more work that gets resolved in the sync node case. - if (checkLoadedDepth < 5) { - checkLoadedDepth += 1; - checkLoaded(); - } - } - - checkLoadedDepth = 0; - - //Check for DOM ready, and nothing is waiting across contexts. - req.checkReadyState(); - - return undefined; - } - - function callPlugin(pluginName, dep) { - var name = dep.name, - fullName = dep.fullName, - load; - - //Do not bother if plugin is already defined or being loaded. - if (fullName in defined || fullName in loaded) { - return; - } - - if (!plugins[pluginName]) { - plugins[pluginName] = defined[pluginName]; - } - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[fullName]) { - loaded[fullName] = false; - } - - load = function (ret) { - //Allow the build process to register plugin-loaded dependencies. - if (req.onPluginLoad) { - req.onPluginLoad(context, pluginName, name, ret); - } - - execManager({ - prefix: dep.prefix, - name: dep.name, - fullName: dep.fullName, - callback: function () { - return ret; - } - }); - loaded[fullName] = true; - }; - - //Allow plugins to load other code without having to know the - //context or how to "complete" the load. - load.fromText = function (moduleName, text) { - /*jslint evil: true */ - var hasInteractive = useInteractive; - - //Indicate a the module is in process of loading. - context.loaded[moduleName] = false; - context.scriptCount += 1; - - //Turn off interactive script matching for IE for any define - //calls in the text, then turn it back on at the end. - if (hasInteractive) { - useInteractive = false; - } - - req.exec(text); - - if (hasInteractive) { - useInteractive = true; - } - - //Support anonymous modules. - context.completeLoad(moduleName); - }; - - //Use parentName here since the plugin's name is not reliable, - //could be some weird string with no path that actually wants to - //reference the parentName's path. - plugins[pluginName].load(name, makeRequire(dep.parentMap, true), load, config); - } - - function loadPaused(dep) { - //Renormalize dependency if its name was waiting on a plugin - //to load, which as since loaded. - if (dep.prefix && dep.name && dep.name.indexOf('__$p') === 0 && defined[dep.prefix]) { - dep = makeModuleMap(dep.originalName, dep.parentMap); - } - - var pluginName = dep.prefix, - fullName = dep.fullName, - urlFetched = context.urlFetched; - - //Do not bother if the dependency has already been specified. - if (specified[fullName] || loaded[fullName]) { - return; - } else { - specified[fullName] = true; - } - - if (pluginName) { - //If plugin not loaded, wait for it. - //set up callback list. if no list, then register - //managerCallback for that plugin. - if (defined[pluginName]) { - callPlugin(pluginName, dep); - } else { - if (!pluginsQueue[pluginName]) { - pluginsQueue[pluginName] = []; - (managerCallbacks[pluginName] || - (managerCallbacks[pluginName] = [])).push({ - onDep: function (name, value) { - if (name === pluginName) { - var i, oldModuleMap, ary = pluginsQueue[pluginName]; - - //Now update all queued plugin actions. - for (i = 0; i < ary.length; i++) { - oldModuleMap = ary[i]; - //Update the moduleMap since the - //module name may be normalized - //differently now. - callPlugin(pluginName, - makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap)); - } - delete pluginsQueue[pluginName]; - } - } - }); - } - pluginsQueue[pluginName].push(dep); - } - } else { - if (!urlFetched[dep.url]) { - req.load(context, fullName, dep.url); - urlFetched[dep.url] = true; - } - } - } - - /** - * Resumes tracing of dependencies and then checks if everything is loaded. - */ - resume = function () { - var args, i, p; - - resumeDepth += 1; - - if (context.scriptCount <= 0) { - //Synchronous envs will push the number below zero with the - //decrement above, be sure to set it back to zero for good measure. - //require() calls that also do not end up loading scripts could - //push the number negative too. - context.scriptCount = 0; - } - - //Make sure any remaining defQueue items get properly processed. - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return req.onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); - } else { - callDefMain(args); - } - } - - //Skip the resume of paused dependencies - //if current context is in priority wait. - if (!config.priorityWait || isPriorityDone()) { - while (context.paused.length) { - p = context.paused; - context.pausedCount += p.length; - //Reset paused list - context.paused = []; - - for (i = 0; (args = p[i]); i++) { - loadPaused(args); - } - //Move the start time for timeout forward. - context.startTime = (new Date()).getTime(); - context.pausedCount -= p.length; - } - } - - //Only check if loaded when resume depth is 1. It is likely that - //it is only greater than 1 in sync environments where a factory - //function also then calls the callback-style require. In those - //cases, the checkLoaded should not occur until the resume - //depth is back at the top level. - if (resumeDepth === 1) { - checkLoaded(); - } - - resumeDepth -= 1; - - return undefined; - }; - - //Define the context object. Many of these fields are on here - //just to make debugging easier. - context = { - contextName: contextName, - config: config, - defQueue: defQueue, - waiting: waiting, - waitCount: 0, - specified: specified, - loaded: loaded, - urlMap: urlMap, - scriptCount: 0, - urlFetched: {}, - defined: defined, - paused: [], - pausedCount: 0, - plugins: plugins, - managerCallbacks: managerCallbacks, - makeModuleMap: makeModuleMap, - normalize: normalize, - /** - * Set a configuration for the context. - * @param {Object} cfg config object to integrate. - */ - configure: function (cfg) { - var paths, prop, packages, pkgs, packagePaths, requireWait; - - //Make sure the baseUrl ends in a slash. - if (cfg.baseUrl) { - if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== "/") { - cfg.baseUrl += "/"; - } - } - - //Save off the paths and packages since they require special processing, - //they are additive. - paths = config.paths; - packages = config.packages; - pkgs = config.pkgs; - - //Mix in the config values, favoring the new values over - //existing ones in context.config. - mixin(config, cfg, true); - - //Adjust paths if necessary. - if (cfg.paths) { - for (prop in cfg.paths) { - if (!(prop in empty)) { - paths[prop] = cfg.paths[prop]; - } - } - config.paths = paths; - } - - packagePaths = cfg.packagePaths; - if (packagePaths || cfg.packages) { - //Convert packagePaths into a packages config. - if (packagePaths) { - for (prop in packagePaths) { - if (!(prop in empty)) { - configurePackageDir(pkgs, packagePaths[prop], prop); - } - } - } - - //Adjust packages if necessary. - if (cfg.packages) { - configurePackageDir(pkgs, cfg.packages); - } - - //Done with modifications, assing packages back to context config - config.pkgs = pkgs; - } - - //If priority loading is in effect, trigger the loads now - if (cfg.priority) { - //Hold on to requireWait value, and reset it after done - requireWait = context.requireWait; - - //Allow tracing some require calls to allow the fetching - //of the priority config. - context.requireWait = false; - //But first, call resume to register any defined modules that may - //be in a data-main built file before the priority config - //call. Also grab any waiting define calls for this context. - context.takeGlobalQueue(); - resume(); - - context.require(cfg.priority); - - //Trigger a resume right away, for the case when - //the script with the priority load is done as part - //of a data-main call. In that case the normal resume - //call will not happen because the scriptCount will be - //at 1, since the script for data-main is being processed. - resume(); - - //Restore previous state. - context.requireWait = requireWait; - config.priorityWait = cfg.priority; - } - - //If a deps array or a config callback is specified, then call - //require with those args. This is useful when require is defined as a - //config object before require.js is loaded. - if (cfg.deps || cfg.callback) { - context.require(cfg.deps || [], cfg.callback); - } - - //Set up ready callback, if asked. Useful when require is defined as a - //config object before require.js is loaded. - if (cfg.ready) { - req.ready(cfg.ready); - } - }, - - requireDefined: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in defined; - }, - - requireSpecified: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in specified; - }, - - require: function (deps, callback, relModuleMap) { - var moduleName, fullName, moduleMap; - if (typeof deps === "string") { - //Synchronous access to one module. If require.get is - //available (as in the Node adapter), prefer that. - //In this case deps is the moduleName and callback is - //the relModuleMap - if (req.get) { - return req.get(context, deps, callback); - } - - //Just return the module wanted. In this scenario, the - //second arg (if passed) is just the relModuleMap. - moduleName = deps; - relModuleMap = callback; - - //Normalize module name, if it contains . or .. - moduleMap = makeModuleMap(moduleName, relModuleMap); - fullName = moduleMap.fullName; - - if (!(fullName in defined)) { - return req.onError(makeError("notloaded", "Module name '" + - moduleMap.fullName + - "' has not been loaded yet for context: " + - contextName)); - } - return defined[fullName]; - } - - main(null, deps, callback, relModuleMap); - - //If the require call does not trigger anything new to load, - //then resume the dependency processing. - if (!context.requireWait) { - while (!context.scriptCount && context.paused.length) { - //For built layers, there can be some defined - //modules waiting for intake into the context, - //in particular module plugins. Take them. - context.takeGlobalQueue(); - resume(); - } - } - return context.require; - }, - - /** - * Internal method to transfer globalQueue items to this context's - * defQueue. - */ - takeGlobalQueue: function () { - //Push all the globalDefQueue items into the context's defQueue - if (globalDefQueue.length) { - //Array splice in the values since the context code has a - //local var ref to defQueue, so cannot just reassign the one - //on context. - apsp.apply(context.defQueue, - [context.defQueue.length - 1, 0].concat(globalDefQueue)); - globalDefQueue = []; - } - }, - - /** - * Internal method used by environment adapters to complete a load event. - * A load event could be a script load or just a load pass from a synchronous - * load call. - * @param {String} moduleName the name of the module to potentially complete. - */ - completeLoad: function (moduleName) { - var args; - - context.takeGlobalQueue(); - - while (defQueue.length) { - args = defQueue.shift(); - - if (args[0] === null) { - args[0] = moduleName; - break; - } else if (args[0] === moduleName) { - //Found matching define call for this script! - break; - } else { - //Some other named define call, most likely the result - //of a build layer that included many define calls. - callDefMain(args); - args = null; - } - } - if (args) { - callDefMain(args); - } else { - //A script that does not call define(), so just simulate - //the call for it. Special exception for jQuery dynamic load. - callDefMain([moduleName, [], - moduleName === "jquery" && typeof jQuery !== "undefined" ? - function () { - return jQuery; - } : null]); - } - - //Mark the script as loaded. Note that this can be different from a - //moduleName that maps to a define call. This line is important - //for traditional browser scripts. - loaded[moduleName] = true; - - //If a global jQuery is defined, check for it. Need to do it here - //instead of main() since stock jQuery does not register as - //a module via define. - jQueryCheck(); - - //Doing this scriptCount decrement branching because sync envs - //need to decrement after resume, otherwise it looks like - //loading is complete after the first dependency is fetched. - //For browsers, it works fine to decrement after, but it means - //the checkLoaded setTimeout 50 ms cost is taken. To avoid - //that cost, decrement beforehand. - if (req.isAsync) { - context.scriptCount -= 1; - } - resume(); - if (!req.isAsync) { - context.scriptCount -= 1; - } - }, - - /** - * Converts a module name + .extension into an URL path. - * *Requires* the use of a module name. It does not support using - * plain URLs like nameToUrl. - */ - toUrl: function (moduleNamePlusExt, relModuleMap) { - var index = moduleNamePlusExt.lastIndexOf("."), - ext = null; - - if (index !== -1) { - ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - - return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap); - }, - - /** - * Converts a module name to a file path. Supports cases where - * moduleName may actually be just an URL. - */ - nameToUrl: function (moduleName, ext, relModuleMap) { - var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, - config = context.config; - - //Normalize module name if have a base relative module name to work from. - moduleName = normalize(moduleName, relModuleMap && relModuleMap.fullName); - - //If a colon is in the URL, it indicates a protocol is used and it is just - //an URL to a file, or if it starts with a slash or ends with .js, it is just a plain file. - //The slash is important for protocol-less URLs as well as full paths. - if (req.jsExtRegExp.test(moduleName)) { - //Just a plain path, not module name lookup, so just return it. - //Add extension if it is included. This is a bit wonky, only non-.js things pass - //an extension, this method probably needs to be reworked. - url = moduleName + (ext ? ext : ""); - } else { - //A module that needs to be converted to a path. - paths = config.paths; - pkgs = config.pkgs; - - syms = moduleName.split("/"); - //For each module name segment, see if there is a path - //registered for it. Start with most specific name - //and work up from it. - for (i = syms.length; i > 0; i--) { - parentModule = syms.slice(0, i).join("/"); - if (paths[parentModule]) { - syms.splice(0, i, paths[parentModule]); - break; - } else if ((pkg = pkgs[parentModule])) { - //If module name is just the package name, then looking - //for the main module. - if (moduleName === pkg.name) { - pkgPath = pkg.location + '/' + pkg.main; - } else { - pkgPath = pkg.location; - } - syms.splice(0, i, pkgPath); - break; - } - } - - //Join the path parts together, then figure out if baseUrl is needed. - url = syms.join("/") + (ext || ".js"); - url = (url.charAt(0) === '/' || url.match(/^\w+:/) ? "" : config.baseUrl) + url; - } - - return config.urlArgs ? url + - ((url.indexOf('?') === -1 ? '?' : '&') + - config.urlArgs) : url; - } - }; - - //Make these visible on the context so can be called at the very - //end of the file to bootstrap - context.jQueryCheck = jQueryCheck; - context.resume = resume; - - return context; - } - - /** - * Main entry point. - * - * If the only argument to require is a string, then the module that - * is represented by that string is fetched for the appropriate context. - * - * If the first argument is an array, then it will be treated as an array - * of dependency string names to fetch. An optional function callback can - * be specified to execute when all of those dependencies are available. - * - * Make a local req variable to help Caja compliance (it assumes things - * on a require that are not standardized), and to give a short - * name for minification/local scope use. - */ - req = requirejs = function (deps, callback) { - - //Find the right context, use default - var contextName = defContextName, - context, config; - - // Determine if have config object in the call. - if (!isArray(deps) && typeof deps !== "string") { - // deps is a config object - config = deps; - if (isArray(callback)) { - // Adjust args if there are dependencies - deps = callback; - callback = arguments[2]; - } else { - deps = []; - } - } - - if (config && config.context) { - contextName = config.context; - } - - context = contexts[contextName] || - (contexts[contextName] = newContext(contextName)); - - if (config) { - context.configure(config); - } - - return context.require(deps, callback); - }; - - /** - * Support require.config() to make it easier to cooperate with other - * AMD loaders on globally agreed names. - */ - req.config = function (config) { - return req(config); - }; - - /** - * Export require as a global, but only if it does not already exist. - */ - if (typeof require === "undefined") { - require = req; - } - - /** - * Global require.toUrl(), to match global require, mostly useful - * for debugging/work in the global space. - */ - req.toUrl = function (moduleNamePlusExt) { - return contexts[defContextName].toUrl(moduleNamePlusExt); - }; - - req.version = version; - req.isArray = isArray; - req.isFunction = isFunction; - req.mixin = mixin; - //Used to filter out dependencies that are already paths. - req.jsExtRegExp = /^\/|:|\?|\.js$/; - s = req.s = { - contexts: contexts, - //Stores a list of URLs that should not get async script tag treatment. - skipAsync: {}, - isPageLoaded: !isBrowser, - readyCalls: [] - }; - - req.isAsync = req.isBrowser = isBrowser; - if (isBrowser) { - head = s.head = document.getElementsByTagName("head")[0]; - //If BASE tag is in play, using appendChild is a problem for IE6. - //When that browser dies, this can be removed. Details in this jQuery bug: - //http://dev.jquery.com/ticket/2709 - baseElement = document.getElementsByTagName("base")[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - - /** - * Any errors that require explicitly generates will be passed to this - * function. Intercept/override it if you want custom error handling. - * @param {Error} err the error object. - */ - req.onError = function (err) { - throw err; - }; - - /** - * Does the request to load a module for the browser case. - * Make this a separate function to allow other environments - * to override it. - * - * @param {Object} context the require context to find state. - * @param {String} moduleName the name of the module. - * @param {Object} url the URL to the module. - */ - req.load = function (context, moduleName, url) { - var loaded = context.loaded; - - isDone = false; - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[moduleName]) { - loaded[moduleName] = false; - } - - context.scriptCount += 1; - req.attach(url, context, moduleName); - - //If tracking a jQuery, then make sure its ready callbacks - //are put on hold to prevent its ready callbacks from - //triggering too soon. - if (context.jQuery && !context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, true); - context.jQueryIncremented = true; - } - }; - - function getInteractiveScript() { - var scripts, i, script; - if (interactiveScript && interactiveScript.readyState === 'interactive') { - return interactiveScript; - } - - scripts = document.getElementsByTagName('script'); - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - if (script.readyState === 'interactive') { - return (interactiveScript = script); - } - } - - return null; - } - - /** - * The function that handles definitions of modules. Differs from - * require() in that a string for the module should be the first argument, - * and the function to execute after dependencies are loaded should - * return a value to define the module corresponding to the first argument's - * name. - */ - define = req.def = function (name, deps, callback) { - var node, context; - - //Allow for anonymous functions - if (typeof name !== 'string') { - //Adjust args appropriately - callback = deps; - deps = name; - name = null; - } - - //This module may not have dependencies - if (!req.isArray(deps)) { - callback = deps; - deps = []; - } - - //If no name, and callback is a function, then figure out if it a - //CommonJS thing with dependencies. - if (!name && !deps.length && req.isFunction(callback)) { - //Remove comments from the callback string, - //look for require calls, and pull them into the dependencies, - //but only if there are function args. - if (callback.length) { - callback - .toString() - .replace(commentRegExp, "") - .replace(cjsRequireRegExp, function (match, dep) { - deps.push(dep); - }); - - //May be a CommonJS thing even without require calls, but still - //could use exports, and module. Avoid doing exports and module - //work though if it just needs require. - //REQUIRES the function to expect the CommonJS variables in the - //order listed below. - deps = (callback.length === 1 ? ["require"] : ["require", "exports", "module"]).concat(deps); - } - } - - //If in IE 6-8 and hit an anonymous define() call, do the interactive - //work. - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute("data-requiremodule"); - } - context = contexts[node.getAttribute("data-requirecontext")]; - } - } - - //Always save off evaluating the def call until the script onload handler. - //This allows multiple modules to be in a file without prematurely - //tracing dependencies, and allows for anonymous module support, - //where the module name is not known until the script onload event - //occurs. If no context, use the global queue, and get it processed - //in the onscript load callback. - (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); - - return undefined; - }; - - define.amd = { - multiversion: true, - plugins: true, - jQuery: true - }; - - /** - * Executes the text. Normally just uses eval, but can be modified - * to use a more environment specific call. - * @param {String} text the text to execute/evaluate. - */ - req.exec = function (text) { - return eval(text); - }; - - /** - * Executes a module callack function. Broken out as a separate function - * solely to allow the build system to sequence the files in the built - * layer in the right sequence. - * - * @private - */ - req.execCb = function (name, callback, args, exports) { - return callback.apply(exports, args); - }; - - /** - * callback for script loads, used to check status of loading. - * - * @param {Event} evt the event from the browser for the script - * that was loaded. - * - * @private - */ - req.onScriptLoad = function (evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - var node = evt.currentTarget || evt.srcElement, contextName, moduleName, - context; - - if (evt.type === "load" || readyRegExp.test(node.readyState)) { - //Reset interactive script so a script node is not held onto for - //to long. - interactiveScript = null; - - //Pull out the name of the module and the context. - contextName = node.getAttribute("data-requirecontext"); - moduleName = node.getAttribute("data-requiremodule"); - context = contexts[contextName]; - - contexts[contextName].completeLoad(moduleName); - - //Clean up script binding. Favor detachEvent because of IE9 - //issue, see attachEvent/addEventListener comment elsewhere - //in this file. - if (node.detachEvent && !isOpera) { - //Probably IE. If not it will throw an error, which will be - //useful to know. - node.detachEvent("onreadystatechange", req.onScriptLoad); - } else { - node.removeEventListener("load", req.onScriptLoad, false); - } - } - }; - - /** - * Attaches the script represented by the URL to the current - * environment. Right now only supports browser loading, - * but can be redefined in other environments to do the right thing. - * @param {String} url the url of the script to attach. - * @param {Object} context the context that wants the script. - * @param {moduleName} the name of the module that is associated with the script. - * @param {Function} [callback] optional callback, defaults to require.onScriptLoad - * @param {String} [type] optional type, defaults to text/javascript - */ - req.attach = function (url, context, moduleName, callback, type) { - var node, loaded; - if (isBrowser) { - //In the browser so use a script tag - callback = callback || req.onScriptLoad; - node = context && context.config && context.config.xhtml ? - document.createElementNS("http://www.w3.org/1999/xhtml", "html:script") : - document.createElement("script"); - node.type = type || "text/javascript"; - node.charset = "utf-8"; - //Use async so Gecko does not block on executing the script if something - //like a long-polling comet tag is being run first. Gecko likes - //to evaluate scripts in DOM order, even for dynamic scripts. - //It will fetch them async, but only evaluate the contents in DOM - //order, so a long-polling script tag can delay execution of scripts - //after it. But telling Gecko we expect async gets us the behavior - //we want -- execute it whenever it is finished downloading. Only - //Helps Firefox 3.6+ - //Allow some URLs to not be fetched async. Mostly helps the order! - //plugin - node.async = !s.skipAsync[url]; - - if (context) { - node.setAttribute("data-requirecontext", context.contextName); - } - node.setAttribute("data-requiremodule", moduleName); - - //Set up load listener. Test attachEvent first because IE9 has - //a subtle issue in its addEventListener and script onload firings - //that do not match the behavior of all other browsers with - //addEventListener support, which fire the onload event for a - //script right after the script execution. See: - //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution - //UNFORTUNATELY Opera implements attachEvent but does not follow the script - //script execution mode. - if (node.attachEvent && !isOpera) { - //Probably IE. IE (at least 6-8) do not fire - //script onload right after executing the script, so - //we cannot tie the anonymous define call to a name. - //However, IE reports the script as being in "interactive" - //readyState at the time of the define call. - useInteractive = true; - node.attachEvent("onreadystatechange", callback); - } else { - node.addEventListener("load", callback, false); - } - node.src = url; - - //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous define - //call to the module name (which is stored on the node), hold on - //to a reference to this node, but clear after the DOM insertion. - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - return node; - } else if (isWebWorker) { - //In a web worker, use importScripts. This is not a very - //efficient use of importScripts, importScripts will block until - //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation that a build has been done so that - //only one script needs to be loaded anyway. This may need to be - //reevaluated if other use cases become common. - loaded = context.loaded; - loaded[moduleName] = false; - - importScripts(url); - - //Account for anonymous modules - context.completeLoad(moduleName); - } - return null; - }; - - //Look for a data-main script attribute, which could also adjust the baseUrl. - if (isBrowser) { - //Figure out baseUrl. Get it from the script tag with require.js in it. - scripts = document.getElementsByTagName("script"); - - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - //Set the "head" where we can append children by - //using the script's parent. - if (!head) { - head = script.parentNode; - } - - //Look for a data-main attribute to set main script for the page - //to load. If it is there, the path to data main becomes the - //baseUrl, if it is not already set. - if ((dataMain = script.getAttribute('data-main'))) { - if (!cfg.baseUrl) { - //Pull off the directory of data-main for use as the - //baseUrl. - src = dataMain.split('/'); - mainScript = src.pop(); - subPath = src.length ? src.join('/') + '/' : './'; - - //Set final config. - cfg.baseUrl = subPath; - //Strip off any trailing .js since dataMain is now - //like a module name. - dataMain = mainScript.replace(jsSuffixRegExp, ''); - } - - //Put the data-main script in the files to load. - cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; - - break; - } - } - } - - //Set baseUrl based on config. - s.baseUrl = cfg.baseUrl; - - //****** START page load functionality **************** - /** - * Sets the page as loaded and triggers check for all modules loaded. - */ - req.pageLoaded = function () { - if (!s.isPageLoaded) { - s.isPageLoaded = true; - if (scrollIntervalId) { - clearInterval(scrollIntervalId); - } - - //Part of a fix for FF < 3.6 where readyState was not set to - //complete so libraries like jQuery that check for readyState - //after page load where not getting initialized correctly. - //Original approach suggested by Andrea Giammarchi: - //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html - //see other setReadyState reference for the rest of the fix. - if (setReadyState) { - document.readyState = "complete"; - } - - req.callReady(); - } - }; - - //See if there is nothing waiting across contexts, and if not, trigger - //callReady. - req.checkReadyState = function () { - var contexts = s.contexts, prop; - for (prop in contexts) { - if (!(prop in empty)) { - if (contexts[prop].waitCount) { - return; - } - } - } - s.isDone = true; - req.callReady(); - }; - - /** - * Internal function that calls back any ready functions. If you are - * integrating RequireJS with another library without require.ready support, - * you can define this method to call your page ready code instead. - */ - req.callReady = function () { - var callbacks = s.readyCalls, i, callback, contexts, context, prop; - - if (s.isPageLoaded && s.isDone) { - if (callbacks.length) { - s.readyCalls = []; - for (i = 0; (callback = callbacks[i]); i++) { - callback(); - } - } - - //If jQuery with DOM ready delayed, release it now. - contexts = s.contexts; - for (prop in contexts) { - if (!(prop in empty)) { - context = contexts[prop]; - if (context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, false); - context.jQueryIncremented = false; - } - } - } - } - }; - - /** - * Registers functions to call when the page is loaded - */ - req.ready = function (callback) { - if (s.isPageLoaded && s.isDone) { - callback(); - } else { - s.readyCalls.push(callback); - } - return req; - }; - - if (isBrowser) { - if (document.addEventListener) { - //Standards. Hooray! Assumption here that if standards based, - //it knows about DOMContentLoaded. - document.addEventListener("DOMContentLoaded", req.pageLoaded, false); - window.addEventListener("load", req.pageLoaded, false); - //Part of FF < 3.6 readystate fix (see setReadyState refs for more info) - if (!document.readyState) { - setReadyState = true; - document.readyState = "loading"; - } - } else if (window.attachEvent) { - window.attachEvent("onload", req.pageLoaded); - - //DOMContentLoaded approximation, as found by Diego Perini: - //http://javascript.nwbox.com/IEContentLoaded/ - if (self === self.top) { - scrollIntervalId = setInterval(function () { - try { - //From this ticket: - //http://bugs.dojotoolkit.org/ticket/11106, - //In IE HTML Application (HTA), such as in a selenium test, - //javascript in the iframe can't see anything outside - //of it, so self===self.top is true, but the iframe is - //not the top window and doScroll will be available - //before document.body is set. Test document.body - //before trying the doScroll trick. - if (document.body) { - document.documentElement.doScroll("left"); - req.pageLoaded(); - } - } catch (e) {} - }, 30); - } - } - - //Check if document already complete, and if so, just trigger page load - //listeners. NOTE: does not work with Firefox before 3.6. To support - //those browsers, manually call require.pageLoaded(). - if (document.readyState === "complete") { - req.pageLoaded(); - } - } - //****** END page load functionality **************** - - //Set up default context. If require was a configuration object, use that as base config. - req(cfg); - - //If modules are built into require.js, then need to make sure dependencies are - //traced. Use a setTimeout in the browser world, to allow all the modules to register - //themselves. In a non-browser env, assume that modules are not built into require.js, - //which seems odd to do on the server. - if (req.isAsync && typeof setTimeout !== "undefined") { - ctx = s.contexts[(cfg.context || defContextName)]; - //Indicate that the script that includes require() is still loading, - //so that require()'d dependencies are not traced until the end of the - //file is parsed (approximated via the setTimeout call). - ctx.requireWait = true; - setTimeout(function () { - ctx.requireWait = false; - - //Any modules included with the require.js file will be in the - //global queue, assign them to this context. - ctx.takeGlobalQueue(); - - //Allow for jQuery to be loaded/already in the page, and if jQuery 1.4.3, - //make sure to hold onto it for readyWait triggering. - ctx.jQueryCheck(); - - if (!ctx.scriptCount) { - ctx.resume(); - } - req.checkReadyState(); - }, 0); - } -}()); diff --git a/temp/idbwrapper/0.1.4/package/example/objectstore/app.js b/temp/idbwrapper/0.1.4/package/example/objectstore/app.js deleted file mode 100644 index 21e828a52..000000000 --- a/temp/idbwrapper/0.1.4/package/example/objectstore/app.js +++ /dev/null @@ -1,93 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var objStore; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") - objStore = new IDBStore({ - storeName: 'objectstore', - keyPath: 'id', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - objStore.getAll(listItems); - } - - function listItems(data){ - var header, tpl, - props = ['id'], - content = ''; - - data.forEach(function(item){ - for(var prop in item){ - if(props.indexOf(prop) < 0){ - props.push(prop); - } - } - }); - - header = '' + props.join('') + ''; - tpl = '{' + props.join('}{') + '}'; - - data.forEach(function(item){ - content += tpl.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key] || ''; - }); - }); - - nodeCache['results-container'].innerHTML = '' + header + content + '
'; - } - - function enterData(){ - // read data from inputs - var propName, value, hasData, - data = {}, - count = 4; - - while(--count){ - propName = document.getElementById('prop_' + count).value.trim(); - if(propName.length){ - hasData = true; - value = document.getElementById('value_' + count).value.trim(); - // Don't do this at home. This is just a very dirty hack to 'guess' what - // type of data you just entered. If you do stuff like this in production - // code, UNICORNS WILL DIE. You have been warned. - data[propName] = ['{', '['].indexOf(value.substring(0,1)) !== -1 ? eval('(' + value + ')') : parseInt(value, 10) || value; - } - } - if(!hasData){ - return; - } - - // and store them away. - objStore.put(data, refreshTable); - } - - function clear(){ - objStore.clear(refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - clear: clear - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.1.4/package/example/objectstore/index.html b/temp/idbwrapper/0.1.4/package/example/objectstore/index.html deleted file mode 100644 index 44a316628..000000000 --- a/temp/idbwrapper/0.1.4/package/example/objectstore/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - IDBWrapper ObjectStore Example - - - - - -
-
- QueryResults -
-
-
-
-

- IDB is not a relational database; it's an object store. That means you - have - no such things as fixed, defined columns.
- Just enter any name as key and anything as value.
-
- To enter non-primitive values, use literal notaion. -

- - - - - - - - - - - - - - - - - - - - - -
KeyValue
- -
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.1.4/package/example/objectstore/style.css b/temp/idbwrapper/0.1.4/package/example/objectstore/style.css deleted file mode 100644 index 5bdb6b0f7..000000000 --- a/temp/idbwrapper/0.1.4/package/example/objectstore/style.css +++ /dev/null @@ -1,93 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.4/package/example/quicktest/index.html b/temp/idbwrapper/0.1.4/package/example/quicktest/index.html deleted file mode 100644 index f64a74323..000000000 --- a/temp/idbwrapper/0.1.4/package/example/quicktest/index.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - IndexedDB Wrapper Quick Test - - - - -
-

Open the console and click 'Open DB'. You will then see a bunch of buttons - that allow data manipulation. Click them, and check the console for - results.

- - - -
- - - - - diff --git a/temp/idbwrapper/0.1.4/package/example/quicktest/style.css b/temp/idbwrapper/0.1.4/package/example/quicktest/style.css deleted file mode 100644 index 90f382838..000000000 --- a/temp/idbwrapper/0.1.4/package/example/quicktest/style.css +++ /dev/null @@ -1,94 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.4/package/example/style.css b/temp/idbwrapper/0.1.4/package/example/style.css deleted file mode 100644 index fb96076ca..000000000 --- a/temp/idbwrapper/0.1.4/package/example/style.css +++ /dev/null @@ -1,87 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; -} -.hbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.1.4/package/package.json b/temp/idbwrapper/0.1.4/package/package.json deleted file mode 100644 index 1f0343142..000000000 --- a/temp/idbwrapper/0.1.4/package/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "idb-wrapper", - "version": "0.1.4", - "description": "This is a wrapper for indexedDB.", - "keywords": [], - "author": "jensarps ", - "repository": "git://github.com/jensarps/IDBWrapper.git", - "main": "IDBStore", - "homepage": "https://github.com/jensarps/IDBWrapper", - "contributors": [], - "bugs": { - "url": "https://github.com/jensarps/IDBWrapper/issues", - "email": "mail@jensarps.de" - }, - "dependencies": {}, - "devDependencies": {}, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/jensarps/IDBWrapper/raw/master/LICENSE" - } - ], - "scripts": {} -} diff --git a/temp/idbwrapper/0.2.1/dist.tar.gz b/temp/idbwrapper/0.2.1/dist.tar.gz deleted file mode 100644 index dbabf16148693eb88edbc0cbfb91f649e09038e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 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 diff --git a/temp/idbwrapper/0.2.1/package/.gitignore b/temp/idbwrapper/0.2.1/package/.gitignore deleted file mode 100644 index e69de29bb..000000000 diff --git a/temp/idbwrapper/0.2.1/package/.idea/IDBWrapper.iml b/temp/idbwrapper/0.2.1/package/.idea/IDBWrapper.iml deleted file mode 100644 index 6b8184f8e..000000000 --- a/temp/idbwrapper/0.2.1/package/.idea/IDBWrapper.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/temp/idbwrapper/0.2.1/package/.idea/encodings.xml b/temp/idbwrapper/0.2.1/package/.idea/encodings.xml deleted file mode 100644 index e206d70d8..000000000 --- a/temp/idbwrapper/0.2.1/package/.idea/encodings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/temp/idbwrapper/0.2.1/package/.idea/misc.xml b/temp/idbwrapper/0.2.1/package/.idea/misc.xml deleted file mode 100644 index 11e74ae40..000000000 --- a/temp/idbwrapper/0.2.1/package/.idea/misc.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - http://www.w3.org/1999/xhtml - - - - diff --git a/temp/idbwrapper/0.2.1/package/.idea/modules.xml b/temp/idbwrapper/0.2.1/package/.idea/modules.xml deleted file mode 100644 index 7c3d093ee..000000000 --- a/temp/idbwrapper/0.2.1/package/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/temp/idbwrapper/0.2.1/package/.idea/scopes/scope_settings.xml b/temp/idbwrapper/0.2.1/package/.idea/scopes/scope_settings.xml deleted file mode 100644 index 922003b84..000000000 --- a/temp/idbwrapper/0.2.1/package/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/temp/idbwrapper/0.2.1/package/.idea/vcs.xml b/temp/idbwrapper/0.2.1/package/.idea/vcs.xml deleted file mode 100644 index c80f2198b..000000000 --- a/temp/idbwrapper/0.2.1/package/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/temp/idbwrapper/0.2.1/package/.idea/workspace.xml b/temp/idbwrapper/0.2.1/package/.idea/workspace.xml deleted file mode 100644 index cb3dfcf78..000000000 --- a/temp/idbwrapper/0.2.1/package/.idea/workspace.xml +++ /dev/null @@ -1,466 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CSS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1323962205278 - 1323962205278 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/temp/idbwrapper/0.2.1/package/CHANGELOG b/temp/idbwrapper/0.2.1/package/CHANGELOG deleted file mode 100644 index 30b0e4389..000000000 --- a/temp/idbwrapper/0.2.1/package/CHANGELOG +++ /dev/null @@ -1,14 +0,0 @@ -0.2.1 / 2012-11-20 ------------------- - -* Add error handler to constructor -* Remove support for numeric transaction and cursor types. -* Misc cleanup - - - -0.2.0 / 2012-11-20 ------------------- - -* Start versioning - diff --git a/temp/idbwrapper/0.2.1/package/IDBStore.js b/temp/idbwrapper/0.2.1/package/IDBStore.js deleted file mode 100644 index 23304c582..000000000 --- a/temp/idbwrapper/0.2.1/package/IDBStore.js +++ /dev/null @@ -1,457 +0,0 @@ -/* - * IDBWrapper - A cross-browser wrapper for IndexedDB - * Copyright (c) 2011 - 2012 Jens Arps - * http://jensarps.de/ - * - * Licensed under the MIT (X11) license - */ - -"use strict"; - -(function (name, definition, global) { - if (typeof define === 'function') { - define(definition); - } else if (typeof module !== 'undefined' && module.exports) { - module.exports = definition(); - } else { - global[name] = definition(); - } -})('IDBStore', function () { - - var IDBStore; - - var defaults = { - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - onStoreReady: function () { - }, - onError: function(error){ - throw error; - }, - indexes: [] - }; - - IDBStore = function (kwArgs, onStoreReady) { - - for(var key in defaults){ - this[key] = typeof kwArgs[key] != 'undefined' ? kwArgs[key] : defaults[key]; - } - - this.dbName = 'IDBWrapper-' + this.storeName; - this.dbVersion = parseInt(this.dbVersion, 10); - - onStoreReady && (this.onStoreReady = onStoreReady); - - this.idb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; - this.keyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.mozIDBKeyRange; - - this.consts = { - 'READ_ONLY': 'readonly', - 'READ_WRITE': 'readwrite', - 'VERSION_CHANGE': 'versionchange', - 'NEXT': 'next', - 'NEXT_NO_DUPLICATE': 'nextunique', - 'PREV': 'prev', - 'PREV_NO_DUPLICATE': 'prevunique' - }; - - this.openDB(); - }; - - IDBStore.prototype = { - - db: null, - - dbName: null, - - dbVersion: null, - - store: null, - - storeName: null, - - keyPath: null, - - autoIncrement: null, - - indexes: null, - - features: null, - - onStoreReady: null, - - onError: null, - - openDB: function () { - - this.newVersionAPI = typeof this.idb.setVersion == 'undefined'; - - if(!this.newVersionAPI){ - this.onError(new Error('The IndexedDB implementation in this browser is outdated. Please upgrade your browser.')); - } - - var features = this.features = {}; - features.hasAutoIncrement = !window.mozIndexedDB; // TODO: Still, really? - - var openRequest = this.idb.open(this.dbName, this.dbVersion); - - openRequest.onerror = function (error) { - - var gotVersionErr = false; - if ('error' in error.target) { - gotVersionErr = error.target.error.name == "VersionError"; - } else if ('errorCode' in error.target) { - gotVersionErr = error.target.errorCode == 12; // TODO: Use const - } - - if (gotVersionErr) { - this.onError(new Error('The version number provided is lower than the existing one.')); - } else { - this.onError(error); - } - }.bind(this); - - - openRequest.onsuccess = function (event) { - - if(this.db){ - this.onStoreReady(); - return; - } - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - if(!this.store){ - var emptyTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - this.store = emptyTransaction.objectStore(this.storeName); - } - // check indexes - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - // normalize and provide existing keys - indexData.keyPath = indexData.keyPath || indexName; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - - if(!indexName){ - throw new Error('Cannot create index: No index name given.'); - } - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = ['keyPath', 'unique', 'multiEntry'].every(function(key){ - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actualIndex[key] === undefined && indexData[key] === false) { - return true; - } - return indexData[key] == actualIndex[key]; - }); - if(!complies){ - this.onError(new Error('Cannot modify index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.')); - } - } else { - this.onError(new Error('Cannot create new index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.')); - } - - }, this); - - this.onStoreReady(); - } else { - // We should never get here. - this.onError(new Error('Cannot create a new store for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.')); - } - }.bind(this); - - openRequest.onupgradeneeded = function(/* IDBVersionChangeEvent */ event){ - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - this.store = event.target.transaction.objectStore(this.storeName); - } else { - this.store = this.db.createObjectStore(this.storeName, { keyPath: this.keyPath, autoIncrement: this.autoIncrement}); - } - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - // normalize and provide existing keys - indexData.keyPath = indexData.keyPath || indexName; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - - if(!indexName){ - this.onError(new Error('Cannot create index: No index name given.')); - } - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = ['keyPath', 'unique', 'multiEntry'].every(function(key){ - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actualIndex[key] === undefined && indexData[key] === false) { - return true; - } - return indexData[key] == actualIndex[key]; - }); - if(!complies){ - // index differs, need to delete and re-create - this.store.deleteIndex(indexName); - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - } else { - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - - }, this); - - }.bind(this); - }, - - deleteDatabase: function () { - if (this.idb.deleteDatabase) { - this.idb.deleteDatabase(this.dbName); - } - }, - - /********************* - * data manipulation * - *********************/ - - - put: function (dataObj, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not write data.', error); - }); - onSuccess || (onSuccess = noop); - if (typeof dataObj[this.keyPath] == 'undefined' && !this.features.hasAutoIncrement) { - dataObj[this.keyPath] = this._getUID(); - } - var putTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var putRequest = putTransaction.objectStore(this.storeName).put(dataObj); - putRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - putRequest.onerror = onError; - }, - - get: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var getRequest = getTransaction.objectStore(this.storeName).get(key); - getRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getRequest.onerror = onError; - }, - - remove: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not remove data.', error); - }); - onSuccess || (onSuccess = noop); - var removeTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var deleteRequest = removeTransaction.objectStore(this.storeName).delete(key); - deleteRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - deleteRequest.onerror = onError; - }, - - getAll: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getAllTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var store = getAllTransaction.objectStore(this.storeName); - if (store.getAll) { - var getAllRequest = store.getAll(); - getAllRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getAllRequest.onerror = onError; - } else { - this._getAllCursor(getAllTransaction, onSuccess, onError); - } - }, - - _getAllCursor: function (tr, onSuccess, onError) { - var all = []; - var store = tr.objectStore(this.storeName); - var cursorRequest = store.openCursor(); - - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - all.push(cursor.value); - cursor['continue'](); - } - else { - onSuccess(all); - } - }; - cursorRequest.onError = onError; - }, - - clear: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not clear store.', error); - }); - onSuccess || (onSuccess = noop); - var clearTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var clearRequest = clearTransaction.objectStore(this.storeName).clear(); - clearRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - clearRequest.onerror = onError; - }, - - _getUID: function () { - // FF bails at times on non-numeric ids. So we take an even - // worse approach now, using current time as id. Sigh. - return +new Date(); - }, - - - /************ - * indexing * - ************/ - - getIndexList: function () { - return this.store.indexNames; - }, - - hasIndex: function (indexName) { - return this.store.indexNames.contains(indexName); - }, - - /********** - * cursor * - **********/ - - iterate: function (onItem, options) { - options = mixin({ - index: null, - order: 'ASC', - filterDuplicates: false, - keyRange: null, - writeAccess: false, - onEnd: null, - onError: function (error) { - console.error('Could not open cursor.', error); - } - }, options || {}); - - var directionType = options.order.toLowerCase() == 'desc' ? 'PREV' : 'NEXT'; - if (options.filterDuplicates) { - directionType += '_NO_DUPLICATE'; - } - - var cursorTransaction = this.db.transaction([this.storeName], this.consts[options.writeAccess ? 'READ_WRITE' : 'READ_ONLY']); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var cursorRequest = cursorTarget.openCursor(options.keyRange, this.consts[directionType]); - cursorRequest.onerror = options.onError; - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - onItem(cursor.value, cursor, cursorTransaction); - cursor['continue'](); - } else { - if(options.onEnd){ - options.onEnd() - } else { - onItem(null); - } - } - }; - }, - - count: function (onSuccess, options) { - - options = mixin({ - index: null, - keyRange: null - }, options || {}); - - var onError = options.onError || function (error) { - console.error('Could not open cursor.', error); - }; - - var cursorTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var countRequest = cursorTarget.count(options.keyRange); - countRequest.onsuccess = function (evt) { - onSuccess(evt.target.result); - }; - countRequest.onError = function (error) { - onError(error); - }; - }, - - /**************/ - /* key ranges */ - /**************/ - - makeKeyRange: function(options){ - var keyRange, - hasLower = typeof options.lower != 'undefined', - hasUpper = typeof options.upper != 'undefined'; - - switch(true){ - case hasLower && hasUpper: - keyRange = this.keyRange.bound(options.lower, options.upper, options.excludeLower, options.excludeUpper); - break; - case hasLower: - keyRange = this.keyRange.lowerBound(options.lower, options.excludeLower); - break; - case hasUpper: - keyRange = this.keyRange.upperBound(options.upper, options.excludeUpper); - break; - default: - throw new Error('Cannot create KeyRange. Provide one or both of "lower" or "upper" value.'); - break; - } - - return keyRange; - - } - - }; - - /** helpers **/ - - var noop = function () { - }; - var empty = {}; - var mixin = function (target, source) { - var name, s; - for (name in source) { - s = source[name]; - if (s !== empty[name] && s !== target[name]) { - target[name] = s; - } - } - return target; - }; - - return IDBStore; - -}, this); diff --git a/temp/idbwrapper/0.2.1/package/LICENSE b/temp/idbwrapper/0.2.1/package/LICENSE deleted file mode 100644 index 93f5d87c8..000000000 --- a/temp/idbwrapper/0.2.1/package/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 - 2012 Jens Arps - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/temp/idbwrapper/0.2.1/package/README.md b/temp/idbwrapper/0.2.1/package/README.md deleted file mode 100644 index c9b36bf5e..000000000 --- a/temp/idbwrapper/0.2.1/package/README.md +++ /dev/null @@ -1,319 +0,0 @@ -About -===== - -This is a wrapper for indexedDB. It is meant to - -a) ease the use of indexedDB and abstract away the differences between the -existing impls in Chrome, Firefox and IE10 (yes, it works in all three), and - -b) show how IDB works. The code is split up into short methods, so that it's -easy to see what happens in what method. - -"Showing how it works" is the main intention of this project. IndexedDB is -all the buzz, but only a few people actually know how to use it. - -The code in IDBWrapper.js is not optimized for anything, nor minified or anything. -It is meant to be read and easy to understand. So, please, go ahead and check out -the source! - -There are two tutorials to get you up and running: - -Part 1: Setup and CRUD operations -http://jensarps.de/2011/11/25/working-with-idbwrapper-part-1/ - -Part 2: Running Queries against the store -http://jensarps.de/2012/11/13/working-with-idbwrapper-part-2/ - -##November Rewrite - -I rewrote IDBWrapper to cope with all the issues, and the new version is on -master since Nov, 13th 2012. The API didn't change much, I just removed some -of the methods. Method signatures remain unchanged. - -However, if you have a previous version of IDBWrapper in use, there's an -issue: The new version won't be able to access the store created with the old -version, because database names changed. In that case, you need to manually -migrate the data: Include both versions of IDBWrapper (use a different name for -them), do a getAll() on the old store and write the data to the new store. - -I am very sorry about any inconveniences, but there was no other way. - -The 'old' version of IDBWrapper is still available in the `legacy` branch: -https://github.com/jensarps/IDBWrapper/tree/legacy - -Also, "showing how it works" is no longer the main intention behind this. Now, -it's rather "just works". - - -Examples -======== - -There are some examples to run right in your browser over here: http://jensarps.github.com/IDBWrapper/example/ - -The source for these examples are in the `example` folder of this repository. - -Usage -===== - -Including the IDBStore.js file will add an IDBStore constructor to the global scope. - -Alternatively, you can use an AMD loader such as RequireJS, or a CommonJS loader -to load the module, and you will receive the constructor in your load callback -(the constructor will then, of course, have whatever name you call it). - -You can then create an IDB store: - -```javascript -var myStore = new IDBStore(); -``` - -You may pass two parameters to the constructor: the first is an object with optional parameters, -the second is a function reference to a function that is called when the store is ready to use. - -The options object may contain the following properties (default values are shown): - -```javascript -{ - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - indexes: [], - onStoreReady: function(){}, - onError: function(error){ throw error; } -} -``` - -'keyPath' is the name of the property to be used as key index. If 'autoIncrement' is set to true, -the database will automatically add a unique key to the keyPath index when storing objects missing -that property. 'indexes' contains objects defining indexes (see below for details on indexes). - -'onError' gets called if an error occurred while trying to open the store. It -receives the error instance as only argument. - -As an alternative to passing a ready handler as second argument, you can also -pass it in the 'onStoreReady' property. If a callback is provided both as second -parameter and inside of the options object, the function passed as second -parameter will be used. - -Methods -======= - -Here's an overview of available methods in IDBStore: - -Data Manipulation ------------------ - -Use the following methods to read and write data: - -___ - -1) The put method. - - -```javascript -put(/*Object*/ dataObj, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`dataObj` is the Object to store. `onSuccess` will be called when the insertion/update was successful, -and it will receive the keyPath value (the id, so to say) of the inserted object as first and only -argument. `onError` will be called if the insertion/update failed and it will receive the error event -object as first and only argument. If the store already contains an object with the given keyPath id, -it will be overwritten by `dataObj`. - -___ - -2) The get method. - -```javascript -get(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to retrieve. `onSuccess` will be called if -the get operation was successful, and it will receive the stored object as first and only argument. If -no object was found with the given keyPath value, this argument will be null. `onError` will be called -if the get operation failed and it will receive the error event object as first and only argument. - -___ - -3) The getAll method. - -```javascript -getAll: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the getAll operation was successful, and it will receive an Array of -all objects currently stored in the store as first and only argument. `onError` will be called if -the getAll operation failed and it will receive the error event object as first and only argument. - -___ - -4) The remove method. - -```javascript -remove: function(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to remove. `onSuccess` will be called if -the remove operation was successful, and it _should_ receive `false` as first and only argument if the -object to remove was not found, and `true` if it was found and removed. - -NOTE: FF 8 will pass the key to the onSuccess handler, no matter if there is an corresponding object -or not. Chrome 15 will pass `null` if removal was successful, and call the error handler if the object -wasn't found. Chrome 17 will behave as described above. - -`onError` will be called if the remove operation failed and it will receive the error event object as first -and only argument. - -___ - -5) The clear method. - -```javascript -clear: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the clear operation was successful. `onError` will be called if the clear -operation failed and it will receive the error event object as first and only argument. - - -Index Operations ----------------- - -To create indexes, you need to pass the index information to the IDBStore() -constructor, for example: - - -```javascript -{ - storeName: 'customers', - dbVersion: 1, - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: function(){}, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] -} -``` - -An entry in the index Array is an object containing the following properties: - -The `name` property is the identifier of the index. If you want to work with the created index later, this name is used to identify the index. This is the only property that is mandatory. - -The `keyPath` property is the name of the property in your stored data that you want to index. If you omit that, IDBWrapper will assume that it is the same as the provided name, and will use this instead. - -The `unique` property tells the store whether the indexed property in your data is unique. If you set this to true, it will add a uniqueness constraint to the store which will make it throw if you try to store data that violates that constraint. If you omit that, IDBWrapper will set this to false. - -The `multiEntry` property is kinda weird. You can read up on it here: http://www.w3.org/TR/IndexedDB/#dfn-multientry. However, you can live perfectly fine with setting this to false (or just omitting it, this is set to false by default). - - -If you want to add an index to an existing store, you need to increase the -version number of your store, as adding an index changes the structure of -the database. - -To modify an index, modify the object in the indexes Array in the constructor. -Again, you need to increase the version of your store. - -In addition, there are still some convenience methods available: - -___ - - -1) The hasIndex method. - -```javascript -hasIndex: function(/*String*/ indexName) -``` - -Return true if an index with the given name exists in the store, false if not. - -___ - -2) The getIndexList method. - -```javascript -getIndexList: function() -``` - -Returns a `DOMStringList` with all existing indices. - - -Running Queries ---------------- - -To run queries, IDBWrapper provides an `iterate()` method. To create keyRanges, -there is the `makeKeyRange()` method. In addition to these, IDBWrapper comes -with a `count()` method. - -___ - -1) The iterate method. - - -```javascript -iterate: function(/*Function*/ onItem, /*Object*/ iterateOptions) -``` - -The `onItem` callback will be called once for every match. It will receive three arguments: the object that matched the query, a reference to the current cursor object (IDBWrapper uses IndexedDB's Cursor internally to iterate), and a reference to the current ongoing transaction. - -There's one special situation: if you didn't pass an onEnd handler in the options objects (see below), the onItem handler will be called one extra time when the transaction is over. In this case, it will receive null as only argument. So, to check when the iteration is over and you won't get any more data objects, you can either pass an onEnd handler, or check for null in the onItem handler. - -The `iterateOptions` object can contain one or more of the following properties: - - -The `index` property contains the name of the index to operate on. If you omit this, IDBWrapper will use the store's keyPath as index. - -In the `keyRange` property you can pass a keyRange. - -The `order` property can be set to 'ASC' or 'DESC', and determines the ordering direction of results. If you omit this, IDBWrapper will use 'ASC'. - -The `filterDuplicates` property is an interesting one: If you set this to true (it defaults to false), and have several objects that have the same value in their key, the store will only fetch the first of those. It is not about objects being the same, it's about their key being the same. For example, in the customers database are a couple of guys having 'Smith' as last name. Setting filterDuplicates to true in the above example will make `iterate()` call the onItem callback only for the first of those. - -The `writeAccess` property defaults to false. If you need write access to the store during the iteration, you need to set this to true. - -In the `onEnd` property you can pass a callback that gets called after the iteration is over and the transaction is closed. It does not receive any arguments. - -In the `onError` property you can pass a custom error handler. In case of an error, it will be called and receives the Error object as only argument. - - -___ - - -2) The makeKeyRange method. - - -```javascript -iterate: function(/*Object*/ keyRangeOptions) -``` - -Returns an IDBKeyRange. - -The `keyRangeOptions` object must have one or more of the following properties: - -`lower`: The lower bound of the range - -`excludeLower`: Boolean, whether to exclude the lower bound itself. Default: false - -`upper`: The upper bound of the range - -`excludeUpper`: Boolean, whether to exclude the upper bound itself. Default: false - -___ - - -3) The count method. - - -```javascript -iterate: function(/*Function*/ onSuccess, /*Object*/ countOptions) -``` - -The onSuccess receives the result of the count as only argument. - -The `countOptions` object may have one or more of the following properties: - -index: The name of an index to operate on. - -keyRange: A keyRange to use - diff --git a/temp/idbwrapper/0.2.1/package/example/basic/app.js b/temp/idbwrapper/0.2.1/package/example/basic/app.js deleted file mode 100644 index e1e2a2f55..000000000 --- a/temp/idbwrapper/0.2.1/package/example/basic/app.js +++ /dev/null @@ -1,94 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}', - table: '{content}
IDLast NameFirst Name
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = new IDBStore({ - storeName: 'customer', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'customerid', 'firstname', 'lastname', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ // We want the id to be numeric: - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function updateItem(id){ - var data = { - customerid: id, - firstname: document.getElementById('firstname_' + id).value.trim(), - lastname: document.getElementById('lastname_' + id).value.trim() - }; - customers.put(data, refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - updateItem: updateItem - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.2.1/package/example/basic/index.html b/temp/idbwrapper/0.2.1/package/example/basic/index.html deleted file mode 100644 index 5d7a596c6..000000000 --- a/temp/idbwrapper/0.2.1/package/example/basic/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - IDBWrapper Basic CRUD Example - - - - - -
-
- QueryResults -
-
-
-
-

- Enter some data to save. As ID, enter a numeric value or leave blank. -

- -
-
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.2.1/package/example/basic/style.css b/temp/idbwrapper/0.2.1/package/example/basic/style.css deleted file mode 100644 index e901b00c4..000000000 --- a/temp/idbwrapper/0.2.1/package/example/basic/style.css +++ /dev/null @@ -1,86 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.2.1/package/example/index.html b/temp/idbwrapper/0.2.1/package/example/index.html deleted file mode 100644 index cbc210fbc..000000000 --- a/temp/idbwrapper/0.2.1/package/example/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - IndexedDB Wrapper Examples - - - - -
-

IDBWrapper Examples

-

- There are a couple of examples to try out / look at: -

-
    -
  • Quicktest - Just a quick test to see if IDB opens and fool around in the console.
  • -
  • Basic CRUD - A basic CRUD example using an IDB store as fixed table.
  • -
  • ObjectStore - An example to show the difference between a table and an object store.
  • -
  • Index - An example to show how to work with indexes.
  • -
-
- - \ No newline at end of file diff --git a/temp/idbwrapper/0.2.1/package/example/index/app.js b/temp/idbwrapper/0.2.1/package/example/index/app.js deleted file mode 100644 index 974280137..000000000 --- a/temp/idbwrapper/0.2.1/package/example/index/app.js +++ /dev/null @@ -1,163 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}{lastname}{firstname}{age}', - table: '{content}
IDLast NameFirst NameAge
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = app.customers = new IDBStore({ - dbVersion: 1, - storeName: 'customer-index', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] - }); - - // create references for some nodes we have to work with - [ - 'submit', 'submitQuery', - 'upper', 'lower', 'excludeLower', 'excludeUpper', - 'sortOrder', 'index', 'filterDuplicates', - 'customerid', 'firstname', 'lastname', 'age', - 'results-container' - ].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit buttons. - nodeCache.submit.addEventListener('click', enterData); - nodeCache.submitQuery.addEventListener('click', runQuery); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname', 'age'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname', 'age'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function makeRandomEntry(){ - var lastnames = ['Smith','Miller','Doe','Frankenstein','Furter'], - firstnames = ['Peter','John','Frank', 'James', 'Jill']; - - var entry = { - lastname: lastnames[Math.floor(Math.random()*5)], - firstname: firstnames[Math.floor(Math.random()*4)], - age: Math.floor(Math.random() * (100 - 20)) + 20, - customerid: parseInt( ( "" + ( Date.now() * Math.random() ) ).substring(0, 6), 10) - }; - - return entry; - } - - function addRandomCustomer(){ - var data = makeRandomEntry(); - - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function runQuery(){ - var upper = nodeCache.upper.value, - hasUpper = upper != '', - lower = nodeCache.lower.value, - hasLower = lower != '', - - indexName = nodeCache.index.value, - sortOrder = nodeCache.sortOrder.value, - filterDuplicates = nodeCache.filterDuplicates.checked, - keyRange, - - content = ''; - - if(hasUpper || hasLower){ // create a keyRange only if bounds are given - var options = {}; - if(hasUpper){ - options.upper = upper; - options.excludeUpper = nodeCache.excludeUpper.checked; - } - if(hasLower){ - options.lower = lower; - options.excludeLower = nodeCache.excludeLower.checked; - } - keyRange = customers.makeKeyRange(options); - } - - var onItem = function (item) { - content += tpls.row.replace(/\{([^\}]+)\}/g, function (_, key) { - return item[key]; - }); - }; - var onEnd = function () { - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - }; - - customers.iterate(onItem, { - index: indexName, - keyRange: keyRange, - filterDuplicates: filterDuplicates, - order: sortOrder, - onEnd: onEnd - }); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - addRandomCustomer: addRandomCustomer - }; - - // go! - init(); - -}); diff --git a/temp/idbwrapper/0.2.1/package/example/index/index.html b/temp/idbwrapper/0.2.1/package/example/index/index.html deleted file mode 100644 index 63a50039d..000000000 --- a/temp/idbwrapper/0.2.1/package/example/index/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - IDBWrapper Basic Index Example - - - - - -
-
- QueryResults -
-
-

Query

- -
- - -
-
-
-
-
- -
- - -
- -
- - -
-
-

Add data

- -

- Add a random customer: - -

-

- Or, enter customer data below: -

- -
-
-
-
- -
-
- - - diff --git a/temp/idbwrapper/0.2.1/package/example/index/style.css b/temp/idbwrapper/0.2.1/package/example/index/style.css deleted file mode 100644 index 8f7ddd9fe..000000000 --- a/temp/idbwrapper/0.2.1/package/example/index/style.css +++ /dev/null @@ -1,89 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input, -#query { - padding: 10px; - width: 350px; - border-left: solid 1px black; -} -#input div, -#query div{ - padding: 5px; -} -#input label, -#query label{ - display: inline-block; - width: 120px; -} diff --git a/temp/idbwrapper/0.2.1/package/example/lib/requirejs/require.js b/temp/idbwrapper/0.2.1/package/example/lib/requirejs/require.js deleted file mode 100644 index ba861994a..000000000 --- a/temp/idbwrapper/0.2.1/package/example/lib/requirejs/require.js +++ /dev/null @@ -1,2013 +0,0 @@ -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 0.26.0+ Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -/*jslint strict: false, plusplus: false */ -/*global window: false, navigator: false, document: false, importScripts: false, - jQuery: false, clearInterval: false, setInterval: false, self: false, - setTimeout: false, opera: false */ - -var requirejs, require, define; -(function () { - //Change this version number for each release. - var version = "0.26.0+", - commentRegExp = /(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg, - cjsRequireRegExp = /require\(\s*["']([^'"\s]+)["']\s*\)/g, - currDirRegExp = /^\.\//, - jsSuffixRegExp = /\.js$/, - ostring = Object.prototype.toString, - ap = Array.prototype, - aps = ap.slice, - apsp = ap.splice, - isBrowser = !!(typeof window !== "undefined" && navigator && document), - isWebWorker = !isBrowser && typeof importScripts !== "undefined", - //PS3 indicates loaded and complete, but need to wait for complete - //specifically. Sequence is "loading", "loaded", execution, - // then "complete". The UA check is unfortunate, but not sure how - //to feature test w/o causing perf issues. - readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? - /^complete$/ : /^(complete|loaded)$/, - defContextName = "_", - //Oh the tragedy, detecting opera. See the usage of isOpera for reason. - isOpera = typeof opera !== "undefined" && opera.toString() === "[object Opera]", - reqWaitIdPrefix = "_r@@", - empty = {}, - contexts = {}, - globalDefQueue = [], - interactiveScript = null, - isDone = false, - checkLoadedDepth = 0, - useInteractive = false, - req, cfg = {}, currentlyAddingScript, s, head, baseElement, scripts, script, - src, subPath, mainScript, dataMain, i, scrollIntervalId, setReadyState, ctx, - jQueryCheck, checkLoadedTimeoutId; - - function isFunction(it) { - return ostring.call(it) === "[object Function]"; - } - - function isArray(it) { - return ostring.call(it) === "[object Array]"; - } - - /** - * Simple function to mix in properties from source into target, - * but only if target does not already have a property of the same name. - * This is not robust in IE for transferring methods that match - * Object.prototype names, but the uses of mixin here seem unlikely to - * trigger a problem related to that. - */ - function mixin(target, source, force) { - for (var prop in source) { - if (!(prop in empty) && (!(prop in target) || force)) { - target[prop] = source[prop]; - } - } - return req; - } - - /** - * Constructs an error with a pointer to an URL with more information. - * @param {String} id the error ID that maps to an ID on a web page. - * @param {String} message human readable error. - * @param {Error} [err] the original error, if there is one. - * - * @returns {Error} - */ - function makeError(id, msg, err) { - var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); - if (err) { - e.originalError = err; - } - return e; - } - - /** - * Used to set up package paths from a packagePaths or packages config object. - * @param {Object} pkgs the object to store the new package config - * @param {Array} currentPackages an array of packages to configure - * @param {String} [dir] a prefix dir to use. - */ - function configurePackageDir(pkgs, currentPackages, dir) { - var i, location, pkgObj; - - for (i = 0; (pkgObj = currentPackages[i]); i++) { - pkgObj = typeof pkgObj === "string" ? { name: pkgObj } : pkgObj; - location = pkgObj.location; - - //Add dir to the path, but avoid paths that start with a slash - //or have a colon (indicates a protocol) - if (dir && (!location || (location.indexOf("/") !== 0 && location.indexOf(":") === -1))) { - location = dir + "/" + (location || pkgObj.name); - } - - //Create a brand new object on pkgs, since currentPackages can - //be passed in again, and config.pkgs is the internal transformed - //state for all package configs. - pkgs[pkgObj.name] = { - name: pkgObj.name, - location: location || pkgObj.name, - //Remove leading dot in main, so main paths are normalized, - //and remove any trailing .js, since different package - //envs have different conventions: some use a module name, - //some use a file name. - main: (pkgObj.main || "main") - .replace(currDirRegExp, '') - .replace(jsSuffixRegExp, '') - }; - } - } - - /** - * jQuery 1.4.3-1.5.x use a readyWait/ready() pairing to hold DOM - * ready callbacks, but jQuery 1.6 supports a holdReady() API instead. - * At some point remove the readyWait/ready() support and just stick - * with using holdReady. - */ - function jQueryHoldReady($, shouldHold) { - if ($.holdReady) { - $.holdReady(shouldHold); - } else if (shouldHold) { - $.readyWait += 1; - } else { - $.ready(true); - } - } - - if (typeof define !== "undefined") { - //If a define is already in play via another AMD loader, - //do not overwrite. - return; - } - - if (typeof requirejs !== "undefined") { - if (isFunction(requirejs)) { - //Do not overwrite and existing requirejs instance. - return; - } else { - cfg = requirejs; - requirejs = undefined; - } - } - - //Allow for a require config object - if (typeof require !== "undefined" && !isFunction(require)) { - //assume it is a config object. - cfg = require; - require = undefined; - } - - /** - * Creates a new context for use in require and define calls. - * Handle most of the heavy lifting. Do not want to use an object - * with prototype here to avoid using "this" in require, in case it - * needs to be used in more super secure envs that do not want this. - * Also there should not be that many contexts in the page. Usually just - * one for the default context, but could be extra for multiversion cases - * or if a package needs a special context for a dependency that conflicts - * with the standard context. - */ - function newContext(contextName) { - var context, resume, - config = { - waitSeconds: 7, - baseUrl: s.baseUrl || "./", - paths: {}, - pkgs: {}, - catchError: {} - }, - defQueue = [], - specified = { - "require": true, - "exports": true, - "module": true - }, - urlMap = {}, - defined = {}, - loaded = {}, - waiting = {}, - waitAry = [], - waitIdCounter = 0, - managerCallbacks = {}, - plugins = {}, - pluginsQueue = {}, - resumeDepth = 0, - normalizedWaiting = {}; - - /** - * Trims the . and .. from an array of path segments. - * It will keep a leading path segment if a .. will become - * the first path segment, to help with module name lookups, - * which act like paths, but can be remapped. But the end result, - * all paths that use this function should look normalized. - * NOTE: this method MODIFIES the input array. - * @param {Array} ary the array of path segments. - */ - function trimDots(ary) { - var i, part; - for (i = 0; (part = ary[i]); i++) { - if (part === ".") { - ary.splice(i, 1); - i -= 1; - } else if (part === "..") { - if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { - //End of the line. Keep at least one non-dot - //path segment at the front so it can be mapped - //correctly to disk. Otherwise, there is likely - //no path mapping for a path starting with '..'. - //This can still fail, but catches the most reasonable - //uses of .. - break; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - - /** - * Given a relative module name, like ./something, normalize it to - * a real name that can be mapped to a path. - * @param {String} name the relative name - * @param {String} baseName a real name that the name arg is relative - * to. - * @returns {String} normalized name - */ - function normalize(name, baseName) { - var pkgName, pkgConfig; - - //Adjust any relative paths. - if (name && name.charAt(0) === ".") { - //If have a base name, try to normalize against it, - //otherwise, assume it is a top-level require that will - //be relative to baseUrl in the end. - if (baseName) { - if (config.pkgs[baseName]) { - //If the baseName is a package name, then just treat it as one - //name to concat the name with. - baseName = [baseName]; - } else { - //Convert baseName to array, and lop off the last part, - //so that . matches that "directory" and not name of the baseName's - //module. For instance, baseName of "one/two/three", maps to - //"one/two/three.js", but we want the directory, "one/two" for - //this normalization. - baseName = baseName.split("/"); - baseName = baseName.slice(0, baseName.length - 1); - } - - name = baseName.concat(name.split("/")); - trimDots(name); - - //Some use of packages may use a . path to reference the - //"main" module name, so normalize for that. - pkgConfig = config.pkgs[(pkgName = name[0])]; - name = name.join("/"); - if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { - name = pkgName; - } - } - } - return name; - } - - /** - * Creates a module mapping that includes plugin prefix, module - * name, and path. If parentModuleMap is provided it will - * also normalize the name via require.normalize() - * - * @param {String} name the module name - * @param {String} [parentModuleMap] parent module map - * for the module name, used to resolve relative names. - * - * @returns {Object} - */ - function makeModuleMap(name, parentModuleMap) { - var index = name ? name.indexOf("!") : -1, - prefix = null, - parentName = parentModuleMap ? parentModuleMap.name : null, - originalName = name, - normalizedName, url, pluginModule; - - if (index !== -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - - if (prefix) { - prefix = normalize(prefix, parentName); - } - - //Account for relative paths if there is a base name. - if (name) { - if (prefix) { - pluginModule = defined[prefix]; - if (pluginModule) { - //Plugin is loaded, use its normalize method, otherwise, - //normalize name as usual. - if (pluginModule.normalize) { - normalizedName = pluginModule.normalize(name, function (name) { - return normalize(name, parentName); - }); - } else { - normalizedName = normalize(name, parentName); - } - } else { - //Plugin is not loaded yet, so do not normalize - //the name, wait for plugin to load to see if - //it has a normalize method. To avoid possible - //ambiguity with relative names loaded from another - //plugin, use the parent's name as part of this name. - normalizedName = '__$p' + parentName + '@' + (name || ''); - } - } else { - normalizedName = normalize(name, parentName); - } - - url = urlMap[normalizedName]; - if (!url) { - //Calculate url for the module, if it has a name. - if (req.toModuleUrl) { - //Special logic required for a particular engine, - //like Node. - url = req.toModuleUrl(context, normalizedName, parentModuleMap); - } else { - url = context.nameToUrl(normalizedName, null, parentModuleMap); - } - - //Store the URL mapping for later. - urlMap[normalizedName] = url; - } - } - - return { - prefix: prefix, - name: normalizedName, - parentMap: parentModuleMap, - url: url, - originalName: originalName, - fullName: prefix ? prefix + "!" + (normalizedName || '') : normalizedName - }; - } - - /** - * Determine if priority loading is done. If so clear the priorityWait - */ - function isPriorityDone() { - var priorityDone = true, - priorityWait = config.priorityWait, - priorityName, i; - if (priorityWait) { - for (i = 0; (priorityName = priorityWait[i]); i++) { - if (!loaded[priorityName]) { - priorityDone = false; - break; - } - } - if (priorityDone) { - delete config.priorityWait; - } - } - return priorityDone; - } - - /** - * Helper function that creates a setExports function for a "module" - * CommonJS dependency. Do this here to avoid creating a closure that - * is part of a loop. - */ - function makeSetExports(moduleObj) { - return function (exports) { - moduleObj.exports = exports; - }; - } - - function makeContextModuleFunc(func, relModuleMap, enableBuildCallback) { - return function () { - //A version of a require function that passes a moduleName - //value for items that may need to - //look up paths relative to the moduleName - var args = [].concat(aps.call(arguments, 0)), lastArg; - if (enableBuildCallback && - isFunction((lastArg = args[args.length - 1]))) { - lastArg.__requireJsBuild = true; - } - args.push(relModuleMap); - return func.apply(null, args); - }; - } - - /** - * Helper function that creates a require function object to give to - * modules that ask for it as a dependency. It needs to be specific - * per module because of the implication of path mappings that may - * need to be relative to the module name. - */ - function makeRequire(relModuleMap, enableBuildCallback) { - var modRequire = makeContextModuleFunc(context.require, relModuleMap, enableBuildCallback); - - mixin(modRequire, { - nameToUrl: makeContextModuleFunc(context.nameToUrl, relModuleMap), - toUrl: makeContextModuleFunc(context.toUrl, relModuleMap), - defined: makeContextModuleFunc(context.requireDefined, relModuleMap), - specified: makeContextModuleFunc(context.requireSpecified, relModuleMap), - ready: req.ready, - isBrowser: req.isBrowser - }); - //Something used by node. - if (req.paths) { - modRequire.paths = req.paths; - } - return modRequire; - } - - /** - * Used to update the normalized name for plugin-based dependencies - * after a plugin loads, since it can have its own normalization structure. - * @param {String} pluginName the normalized plugin module name. - */ - function updateNormalizedNames(pluginName) { - - var oldFullName, oldModuleMap, moduleMap, fullName, callbacks, - i, j, k, depArray, existingCallbacks, - maps = normalizedWaiting[pluginName]; - - if (maps) { - for (i = 0; (oldModuleMap = maps[i]); i++) { - oldFullName = oldModuleMap.fullName; - moduleMap = makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap); - fullName = moduleMap.fullName; - //Callbacks could be undefined if the same plugin!name was - //required twice in a row, so use empty array in that case. - callbacks = managerCallbacks[oldFullName] || []; - existingCallbacks = managerCallbacks[fullName]; - - if (fullName !== oldFullName) { - //Update the specified object, but only if it is already - //in there. In sync environments, it may not be yet. - if (oldFullName in specified) { - delete specified[oldFullName]; - specified[fullName] = true; - } - - //Update managerCallbacks to use the correct normalized name. - //If there are already callbacks for the normalized name, - //just add to them. - if (existingCallbacks) { - managerCallbacks[fullName] = existingCallbacks.concat(callbacks); - } else { - managerCallbacks[fullName] = callbacks; - } - delete managerCallbacks[oldFullName]; - - //In each manager callback, update the normalized name in the depArray. - for (j = 0; j < callbacks.length; j++) { - depArray = callbacks[j].depArray; - for (k = 0; k < depArray.length; k++) { - if (depArray[k] === oldFullName) { - depArray[k] = fullName; - } - } - } - } - } - } - - delete normalizedWaiting[pluginName]; - } - - /* - * Queues a dependency for checking after the loader is out of a - * "paused" state, for example while a script file is being loaded - * in the browser, where it may have many modules defined in it. - * - * depName will be fully qualified, no relative . or .. path. - */ - function queueDependency(dep) { - //Make sure to load any plugin and associate the dependency - //with that plugin. - var prefix = dep.prefix, - fullName = dep.fullName; - - //Do not bother if the depName is already in transit - if (specified[fullName] || fullName in defined) { - return; - } - - if (prefix && !plugins[prefix]) { - //Queue up loading of the dependency, track it - //via context.plugins. Mark it as a plugin so - //that the build system will know to treat it - //special. - plugins[prefix] = undefined; - - //Remember this dep that needs to have normaliztion done - //after the plugin loads. - (normalizedWaiting[prefix] || (normalizedWaiting[prefix] = [])) - .push(dep); - - //Register an action to do once the plugin loads, to update - //all managerCallbacks to use a properly normalized module - //name. - (managerCallbacks[prefix] || - (managerCallbacks[prefix] = [])).push({ - onDep: function (name, value) { - if (name === prefix) { - updateNormalizedNames(prefix); - } - } - }); - - queueDependency(makeModuleMap(prefix)); - } - - context.paused.push(dep); - } - - function execManager(manager) { - var i, ret, waitingCallbacks, err, errFile, errModuleTree, - cb = manager.callback, - fullName = manager.fullName, - args = [], - ary = manager.depArray; - - //Call the callback to define the module, if necessary. - if (cb && isFunction(cb)) { - //Pull out the defined dependencies and pass the ordered - //values to the callback. - if (ary) { - for (i = 0; i < ary.length; i++) { - args.push(manager.deps[ary[i]]); - } - } - - if (config.catchError.define) { - try { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } catch (e) { - err = e; - } - } else { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } - - if (fullName) { - //If setting exports via "module" is in play, - //favor that over return value and exports. After that, - //favor a non-undefined return value over exports use. - if (manager.cjsModule && manager.cjsModule.exports !== undefined) { - ret = defined[fullName] = manager.cjsModule.exports; - } else if (ret === undefined && manager.usingExports) { - //exports already set the defined value. - ret = defined[fullName]; - } else { - //Use the return value from the function. - defined[fullName] = ret; - } - } - } else if (fullName) { - //May just be an object definition for the module. Only - //worry about defining if have a module name. - ret = defined[fullName] = cb; - } - - //Clean up waiting. Do this before error calls, and before - //calling back waitingCallbacks, so that bookkeeping is correct - //in the event of an error and error is reported in correct order, - //since the waitingCallbacks will likely have errors if the - //onError function does not throw. - if (waiting[manager.waitId]) { - delete waiting[manager.waitId]; - manager.isDone = true; - context.waitCount -= 1; - if (context.waitCount === 0) { - //Clear the wait array used for cycles. - waitAry = []; - } - } - - if (err) { - errFile = (fullName ? makeModuleMap(fullName).url : '') || - err.fileName || err.sourceURL; - errModuleTree = err.moduleTree; - err = makeError('defineerror', 'Error evaluating ' + - 'module "' + fullName + '" at location "' + - errFile + '":\n' + - err + '\nfileName:' + errFile + - '\nlineNumber: ' + (err.lineNumber || err.line), err); - err.moduleName = fullName; - err.moduleTree = errModuleTree; - return req.onError(err); - } - - if (fullName) { - //If anything was waiting for this module to be defined, - //notify them now. - waitingCallbacks = managerCallbacks[fullName]; - if (waitingCallbacks) { - for (i = 0; i < waitingCallbacks.length; i++) { - waitingCallbacks[i].onDep(fullName, ret); - } - delete managerCallbacks[fullName]; - } - } - - return undefined; - } - - function main(inName, depArray, callback, relModuleMap) { - var moduleMap = makeModuleMap(inName, relModuleMap), - name = moduleMap.name, - fullName = moduleMap.fullName, - uniques = {}, - manager = { - //Use a wait ID because some entries are anon - //async require calls. - waitId: name || reqWaitIdPrefix + (waitIdCounter++), - depCount: 0, - depMax: 0, - prefix: moduleMap.prefix, - name: name, - fullName: fullName, - deps: {}, - depArray: depArray, - callback: callback, - onDep: function (depName, value) { - if (!(depName in manager.deps)) { - manager.deps[depName] = value; - manager.depCount += 1; - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } - } - } - }, - i, depArg, depName, cjsMod; - - if (fullName) { - //If module already defined for context, or already loaded, - //then leave. Also leave if jQuery is registering but it does - //not match the desired version number in the config. - if (fullName in defined || loaded[fullName] === true || - (fullName === "jquery" && config.jQuery && - config.jQuery !== callback().fn.jquery)) { - return; - } - - //Set specified/loaded here for modules that are also loaded - //as part of a layer, where onScriptLoad is not fired - //for those cases. Do this after the inline define and - //dependency tracing is done. - specified[fullName] = true; - loaded[fullName] = true; - - //If module is jQuery set up delaying its dom ready listeners. - if (fullName === "jquery" && callback) { - jQueryCheck(callback()); - } - } - - //Add the dependencies to the deps field, and register for callbacks - //on the dependencies. - for (i = 0; i < depArray.length; i++) { - depArg = depArray[i]; - //There could be cases like in IE, where a trailing comma will - //introduce a null dependency, so only treat a real dependency - //value as a dependency. - if (depArg) { - //Split the dependency name into plugin and name parts - depArg = makeModuleMap(depArg, (name ? moduleMap : relModuleMap)); - depName = depArg.fullName; - - //Fix the name in depArray to be just the name, since - //that is how it will be called back later. - depArray[i] = depName; - - //Fast path CommonJS standard dependencies. - if (depName === "require") { - manager.deps[depName] = makeRequire(moduleMap); - } else if (depName === "exports") { - //CommonJS module spec 1.1 - manager.deps[depName] = defined[fullName] = {}; - manager.usingExports = true; - } else if (depName === "module") { - //CommonJS module spec 1.1 - manager.cjsModule = cjsMod = manager.deps[depName] = { - id: name, - uri: name ? context.nameToUrl(name, null, relModuleMap) : undefined, - exports: defined[fullName] - }; - cjsMod.setExports = makeSetExports(cjsMod); - } else if (depName in defined && !(depName in waiting)) { - //Module already defined, no need to wait for it. - manager.deps[depName] = defined[depName]; - } else if (!uniques[depName]) { - - //A dynamic dependency. - manager.depMax += 1; - - queueDependency(depArg); - - //Register to get notification when dependency loads. - (managerCallbacks[depName] || - (managerCallbacks[depName] = [])).push(manager); - - uniques[depName] = true; - } - } - } - - //Do not bother tracking the manager if it is all done. - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } else { - waiting[manager.waitId] = manager; - waitAry.push(manager); - context.waitCount += 1; - } - } - - /** - * Convenience method to call main for a define call that was put on - * hold in the defQueue. - */ - function callDefMain(args) { - main.apply(null, args); - //Mark the module loaded. Must do it here in addition - //to doing it in define in case a script does - //not call define - loaded[args[0]] = true; - } - - /** - * jQuery 1.4.3+ supports ways to hold off calling - * calling jQuery ready callbacks until all scripts are loaded. Be sure - * to track it if the capability exists.. Also, since jQuery 1.4.3 does - * not register as a module, need to do some global inference checking. - * Even if it does register as a module, not guaranteed to be the precise - * name of the global. If a jQuery is tracked for this context, then go - * ahead and register it as a module too, if not already in process. - */ - jQueryCheck = function (jqCandidate) { - if (!context.jQuery) { - var $ = jqCandidate || (typeof jQuery !== "undefined" ? jQuery : null); - - if ($) { - //If a specific version of jQuery is wanted, make sure to only - //use this jQuery if it matches. - if (config.jQuery && $.fn.jquery !== config.jQuery) { - return; - } - - if ("holdReady" in $ || "readyWait" in $) { - context.jQuery = $; - - //Manually create a "jquery" module entry if not one already - //or in process. Note this could trigger an attempt at - //a second jQuery registration, but does no harm since - //the first one wins, and it is the same value anyway. - callDefMain(["jquery", [], function () { - return jQuery; - }]); - - //Ask jQuery to hold DOM ready callbacks. - if (context.scriptCount) { - jQueryHoldReady($, true); - context.jQueryIncremented = true; - } - } - } - } - }; - - function forceExec(manager, traced) { - if (manager.isDone) { - return undefined; - } - - var fullName = manager.fullName, - depArray = manager.depArray, - depName, i; - if (fullName) { - if (traced[fullName]) { - return defined[fullName]; - } - - traced[fullName] = true; - } - - //forceExec all of its dependencies. - for (i = 0; i < depArray.length; i++) { - //Some array members may be null, like if a trailing comma - //IE, so do the explicit [i] access and check if it has a value. - depName = depArray[i]; - if (depName) { - if (!manager.deps[depName] && waiting[depName]) { - manager.onDep(depName, forceExec(waiting[depName], traced)); - } - } - } - - return fullName ? defined[fullName] : undefined; - } - - /** - * Checks if all modules for a context are loaded, and if so, evaluates the - * new ones in right dependency order. - * - * @private - */ - function checkLoaded() { - var waitInterval = config.waitSeconds * 1000, - //It is possible to disable the wait interval by using waitSeconds of 0. - expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), - noLoads = "", hasLoadedProp = false, stillLoading = false, prop, - err, manager; - - //If there are items still in the paused queue processing wait. - //This is particularly important in the sync case where each paused - //item is processed right away but there may be more waiting. - if (context.pausedCount > 0) { - return undefined; - } - - //Determine if priority loading is done. If so clear the priority. If - //not, then do not check - if (config.priorityWait) { - if (isPriorityDone()) { - //Call resume, since it could have - //some waiting dependencies to trace. - resume(); - } else { - return undefined; - } - } - - //See if anything is still in flight. - for (prop in loaded) { - if (!(prop in empty)) { - hasLoadedProp = true; - if (!loaded[prop]) { - if (expired) { - noLoads += prop + " "; - } else { - stillLoading = true; - break; - } - } - } - } - - //Check for exit conditions. - if (!hasLoadedProp && !context.waitCount) { - //If the loaded object had no items, then the rest of - //the work below does not need to be done. - return undefined; - } - if (expired && noLoads) { - //If wait time expired, throw error of unloaded modules. - err = makeError("timeout", "Load timeout for modules: " + noLoads); - err.requireType = "timeout"; - err.requireModules = noLoads; - return req.onError(err); - } - if (stillLoading || context.scriptCount) { - //Something is still waiting to load. Wait for it, but only - //if a timeout is not already in effect. - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function () { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - return undefined; - } - - //If still have items in the waiting cue, but all modules have - //been loaded, then it means there are some circular dependencies - //that need to be broken. - //However, as a waiting thing is fired, then it can add items to - //the waiting cue, and those items should not be fired yet, so - //make sure to redo the checkLoaded call after breaking a single - //cycle, if nothing else loaded then this logic will pick it up - //again. - if (context.waitCount) { - //Cycle through the waitAry, and call items in sequence. - for (i = 0; (manager = waitAry[i]); i++) { - forceExec(manager, {}); - } - - //Only allow this recursion to a certain depth. Only - //triggered by errors in calling a module in which its - //modules waiting on it cannot finish loading, or some circular - //dependencies that then may add more dependencies. - //The value of 5 is a bit arbitrary. Hopefully just one extra - //pass, or two for the case of circular dependencies generating - //more work that gets resolved in the sync node case. - if (checkLoadedDepth < 5) { - checkLoadedDepth += 1; - checkLoaded(); - } - } - - checkLoadedDepth = 0; - - //Check for DOM ready, and nothing is waiting across contexts. - req.checkReadyState(); - - return undefined; - } - - function callPlugin(pluginName, dep) { - var name = dep.name, - fullName = dep.fullName, - load; - - //Do not bother if plugin is already defined or being loaded. - if (fullName in defined || fullName in loaded) { - return; - } - - if (!plugins[pluginName]) { - plugins[pluginName] = defined[pluginName]; - } - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[fullName]) { - loaded[fullName] = false; - } - - load = function (ret) { - //Allow the build process to register plugin-loaded dependencies. - if (req.onPluginLoad) { - req.onPluginLoad(context, pluginName, name, ret); - } - - execManager({ - prefix: dep.prefix, - name: dep.name, - fullName: dep.fullName, - callback: function () { - return ret; - } - }); - loaded[fullName] = true; - }; - - //Allow plugins to load other code without having to know the - //context or how to "complete" the load. - load.fromText = function (moduleName, text) { - /*jslint evil: true */ - var hasInteractive = useInteractive; - - //Indicate a the module is in process of loading. - context.loaded[moduleName] = false; - context.scriptCount += 1; - - //Turn off interactive script matching for IE for any define - //calls in the text, then turn it back on at the end. - if (hasInteractive) { - useInteractive = false; - } - - req.exec(text); - - if (hasInteractive) { - useInteractive = true; - } - - //Support anonymous modules. - context.completeLoad(moduleName); - }; - - //Use parentName here since the plugin's name is not reliable, - //could be some weird string with no path that actually wants to - //reference the parentName's path. - plugins[pluginName].load(name, makeRequire(dep.parentMap, true), load, config); - } - - function loadPaused(dep) { - //Renormalize dependency if its name was waiting on a plugin - //to load, which as since loaded. - if (dep.prefix && dep.name && dep.name.indexOf('__$p') === 0 && defined[dep.prefix]) { - dep = makeModuleMap(dep.originalName, dep.parentMap); - } - - var pluginName = dep.prefix, - fullName = dep.fullName, - urlFetched = context.urlFetched; - - //Do not bother if the dependency has already been specified. - if (specified[fullName] || loaded[fullName]) { - return; - } else { - specified[fullName] = true; - } - - if (pluginName) { - //If plugin not loaded, wait for it. - //set up callback list. if no list, then register - //managerCallback for that plugin. - if (defined[pluginName]) { - callPlugin(pluginName, dep); - } else { - if (!pluginsQueue[pluginName]) { - pluginsQueue[pluginName] = []; - (managerCallbacks[pluginName] || - (managerCallbacks[pluginName] = [])).push({ - onDep: function (name, value) { - if (name === pluginName) { - var i, oldModuleMap, ary = pluginsQueue[pluginName]; - - //Now update all queued plugin actions. - for (i = 0; i < ary.length; i++) { - oldModuleMap = ary[i]; - //Update the moduleMap since the - //module name may be normalized - //differently now. - callPlugin(pluginName, - makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap)); - } - delete pluginsQueue[pluginName]; - } - } - }); - } - pluginsQueue[pluginName].push(dep); - } - } else { - if (!urlFetched[dep.url]) { - req.load(context, fullName, dep.url); - urlFetched[dep.url] = true; - } - } - } - - /** - * Resumes tracing of dependencies and then checks if everything is loaded. - */ - resume = function () { - var args, i, p; - - resumeDepth += 1; - - if (context.scriptCount <= 0) { - //Synchronous envs will push the number below zero with the - //decrement above, be sure to set it back to zero for good measure. - //require() calls that also do not end up loading scripts could - //push the number negative too. - context.scriptCount = 0; - } - - //Make sure any remaining defQueue items get properly processed. - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return req.onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); - } else { - callDefMain(args); - } - } - - //Skip the resume of paused dependencies - //if current context is in priority wait. - if (!config.priorityWait || isPriorityDone()) { - while (context.paused.length) { - p = context.paused; - context.pausedCount += p.length; - //Reset paused list - context.paused = []; - - for (i = 0; (args = p[i]); i++) { - loadPaused(args); - } - //Move the start time for timeout forward. - context.startTime = (new Date()).getTime(); - context.pausedCount -= p.length; - } - } - - //Only check if loaded when resume depth is 1. It is likely that - //it is only greater than 1 in sync environments where a factory - //function also then calls the callback-style require. In those - //cases, the checkLoaded should not occur until the resume - //depth is back at the top level. - if (resumeDepth === 1) { - checkLoaded(); - } - - resumeDepth -= 1; - - return undefined; - }; - - //Define the context object. Many of these fields are on here - //just to make debugging easier. - context = { - contextName: contextName, - config: config, - defQueue: defQueue, - waiting: waiting, - waitCount: 0, - specified: specified, - loaded: loaded, - urlMap: urlMap, - scriptCount: 0, - urlFetched: {}, - defined: defined, - paused: [], - pausedCount: 0, - plugins: plugins, - managerCallbacks: managerCallbacks, - makeModuleMap: makeModuleMap, - normalize: normalize, - /** - * Set a configuration for the context. - * @param {Object} cfg config object to integrate. - */ - configure: function (cfg) { - var paths, prop, packages, pkgs, packagePaths, requireWait; - - //Make sure the baseUrl ends in a slash. - if (cfg.baseUrl) { - if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== "/") { - cfg.baseUrl += "/"; - } - } - - //Save off the paths and packages since they require special processing, - //they are additive. - paths = config.paths; - packages = config.packages; - pkgs = config.pkgs; - - //Mix in the config values, favoring the new values over - //existing ones in context.config. - mixin(config, cfg, true); - - //Adjust paths if necessary. - if (cfg.paths) { - for (prop in cfg.paths) { - if (!(prop in empty)) { - paths[prop] = cfg.paths[prop]; - } - } - config.paths = paths; - } - - packagePaths = cfg.packagePaths; - if (packagePaths || cfg.packages) { - //Convert packagePaths into a packages config. - if (packagePaths) { - for (prop in packagePaths) { - if (!(prop in empty)) { - configurePackageDir(pkgs, packagePaths[prop], prop); - } - } - } - - //Adjust packages if necessary. - if (cfg.packages) { - configurePackageDir(pkgs, cfg.packages); - } - - //Done with modifications, assing packages back to context config - config.pkgs = pkgs; - } - - //If priority loading is in effect, trigger the loads now - if (cfg.priority) { - //Hold on to requireWait value, and reset it after done - requireWait = context.requireWait; - - //Allow tracing some require calls to allow the fetching - //of the priority config. - context.requireWait = false; - //But first, call resume to register any defined modules that may - //be in a data-main built file before the priority config - //call. Also grab any waiting define calls for this context. - context.takeGlobalQueue(); - resume(); - - context.require(cfg.priority); - - //Trigger a resume right away, for the case when - //the script with the priority load is done as part - //of a data-main call. In that case the normal resume - //call will not happen because the scriptCount will be - //at 1, since the script for data-main is being processed. - resume(); - - //Restore previous state. - context.requireWait = requireWait; - config.priorityWait = cfg.priority; - } - - //If a deps array or a config callback is specified, then call - //require with those args. This is useful when require is defined as a - //config object before require.js is loaded. - if (cfg.deps || cfg.callback) { - context.require(cfg.deps || [], cfg.callback); - } - - //Set up ready callback, if asked. Useful when require is defined as a - //config object before require.js is loaded. - if (cfg.ready) { - req.ready(cfg.ready); - } - }, - - requireDefined: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in defined; - }, - - requireSpecified: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in specified; - }, - - require: function (deps, callback, relModuleMap) { - var moduleName, fullName, moduleMap; - if (typeof deps === "string") { - //Synchronous access to one module. If require.get is - //available (as in the Node adapter), prefer that. - //In this case deps is the moduleName and callback is - //the relModuleMap - if (req.get) { - return req.get(context, deps, callback); - } - - //Just return the module wanted. In this scenario, the - //second arg (if passed) is just the relModuleMap. - moduleName = deps; - relModuleMap = callback; - - //Normalize module name, if it contains . or .. - moduleMap = makeModuleMap(moduleName, relModuleMap); - fullName = moduleMap.fullName; - - if (!(fullName in defined)) { - return req.onError(makeError("notloaded", "Module name '" + - moduleMap.fullName + - "' has not been loaded yet for context: " + - contextName)); - } - return defined[fullName]; - } - - main(null, deps, callback, relModuleMap); - - //If the require call does not trigger anything new to load, - //then resume the dependency processing. - if (!context.requireWait) { - while (!context.scriptCount && context.paused.length) { - //For built layers, there can be some defined - //modules waiting for intake into the context, - //in particular module plugins. Take them. - context.takeGlobalQueue(); - resume(); - } - } - return context.require; - }, - - /** - * Internal method to transfer globalQueue items to this context's - * defQueue. - */ - takeGlobalQueue: function () { - //Push all the globalDefQueue items into the context's defQueue - if (globalDefQueue.length) { - //Array splice in the values since the context code has a - //local var ref to defQueue, so cannot just reassign the one - //on context. - apsp.apply(context.defQueue, - [context.defQueue.length - 1, 0].concat(globalDefQueue)); - globalDefQueue = []; - } - }, - - /** - * Internal method used by environment adapters to complete a load event. - * A load event could be a script load or just a load pass from a synchronous - * load call. - * @param {String} moduleName the name of the module to potentially complete. - */ - completeLoad: function (moduleName) { - var args; - - context.takeGlobalQueue(); - - while (defQueue.length) { - args = defQueue.shift(); - - if (args[0] === null) { - args[0] = moduleName; - break; - } else if (args[0] === moduleName) { - //Found matching define call for this script! - break; - } else { - //Some other named define call, most likely the result - //of a build layer that included many define calls. - callDefMain(args); - args = null; - } - } - if (args) { - callDefMain(args); - } else { - //A script that does not call define(), so just simulate - //the call for it. Special exception for jQuery dynamic load. - callDefMain([moduleName, [], - moduleName === "jquery" && typeof jQuery !== "undefined" ? - function () { - return jQuery; - } : null]); - } - - //Mark the script as loaded. Note that this can be different from a - //moduleName that maps to a define call. This line is important - //for traditional browser scripts. - loaded[moduleName] = true; - - //If a global jQuery is defined, check for it. Need to do it here - //instead of main() since stock jQuery does not register as - //a module via define. - jQueryCheck(); - - //Doing this scriptCount decrement branching because sync envs - //need to decrement after resume, otherwise it looks like - //loading is complete after the first dependency is fetched. - //For browsers, it works fine to decrement after, but it means - //the checkLoaded setTimeout 50 ms cost is taken. To avoid - //that cost, decrement beforehand. - if (req.isAsync) { - context.scriptCount -= 1; - } - resume(); - if (!req.isAsync) { - context.scriptCount -= 1; - } - }, - - /** - * Converts a module name + .extension into an URL path. - * *Requires* the use of a module name. It does not support using - * plain URLs like nameToUrl. - */ - toUrl: function (moduleNamePlusExt, relModuleMap) { - var index = moduleNamePlusExt.lastIndexOf("."), - ext = null; - - if (index !== -1) { - ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - - return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap); - }, - - /** - * Converts a module name to a file path. Supports cases where - * moduleName may actually be just an URL. - */ - nameToUrl: function (moduleName, ext, relModuleMap) { - var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, - config = context.config; - - //Normalize module name if have a base relative module name to work from. - moduleName = normalize(moduleName, relModuleMap && relModuleMap.fullName); - - //If a colon is in the URL, it indicates a protocol is used and it is just - //an URL to a file, or if it starts with a slash or ends with .js, it is just a plain file. - //The slash is important for protocol-less URLs as well as full paths. - if (req.jsExtRegExp.test(moduleName)) { - //Just a plain path, not module name lookup, so just return it. - //Add extension if it is included. This is a bit wonky, only non-.js things pass - //an extension, this method probably needs to be reworked. - url = moduleName + (ext ? ext : ""); - } else { - //A module that needs to be converted to a path. - paths = config.paths; - pkgs = config.pkgs; - - syms = moduleName.split("/"); - //For each module name segment, see if there is a path - //registered for it. Start with most specific name - //and work up from it. - for (i = syms.length; i > 0; i--) { - parentModule = syms.slice(0, i).join("/"); - if (paths[parentModule]) { - syms.splice(0, i, paths[parentModule]); - break; - } else if ((pkg = pkgs[parentModule])) { - //If module name is just the package name, then looking - //for the main module. - if (moduleName === pkg.name) { - pkgPath = pkg.location + '/' + pkg.main; - } else { - pkgPath = pkg.location; - } - syms.splice(0, i, pkgPath); - break; - } - } - - //Join the path parts together, then figure out if baseUrl is needed. - url = syms.join("/") + (ext || ".js"); - url = (url.charAt(0) === '/' || url.match(/^\w+:/) ? "" : config.baseUrl) + url; - } - - return config.urlArgs ? url + - ((url.indexOf('?') === -1 ? '?' : '&') + - config.urlArgs) : url; - } - }; - - //Make these visible on the context so can be called at the very - //end of the file to bootstrap - context.jQueryCheck = jQueryCheck; - context.resume = resume; - - return context; - } - - /** - * Main entry point. - * - * If the only argument to require is a string, then the module that - * is represented by that string is fetched for the appropriate context. - * - * If the first argument is an array, then it will be treated as an array - * of dependency string names to fetch. An optional function callback can - * be specified to execute when all of those dependencies are available. - * - * Make a local req variable to help Caja compliance (it assumes things - * on a require that are not standardized), and to give a short - * name for minification/local scope use. - */ - req = requirejs = function (deps, callback) { - - //Find the right context, use default - var contextName = defContextName, - context, config; - - // Determine if have config object in the call. - if (!isArray(deps) && typeof deps !== "string") { - // deps is a config object - config = deps; - if (isArray(callback)) { - // Adjust args if there are dependencies - deps = callback; - callback = arguments[2]; - } else { - deps = []; - } - } - - if (config && config.context) { - contextName = config.context; - } - - context = contexts[contextName] || - (contexts[contextName] = newContext(contextName)); - - if (config) { - context.configure(config); - } - - return context.require(deps, callback); - }; - - /** - * Support require.config() to make it easier to cooperate with other - * AMD loaders on globally agreed names. - */ - req.config = function (config) { - return req(config); - }; - - /** - * Export require as a global, but only if it does not already exist. - */ - if (typeof require === "undefined") { - require = req; - } - - /** - * Global require.toUrl(), to match global require, mostly useful - * for debugging/work in the global space. - */ - req.toUrl = function (moduleNamePlusExt) { - return contexts[defContextName].toUrl(moduleNamePlusExt); - }; - - req.version = version; - req.isArray = isArray; - req.isFunction = isFunction; - req.mixin = mixin; - //Used to filter out dependencies that are already paths. - req.jsExtRegExp = /^\/|:|\?|\.js$/; - s = req.s = { - contexts: contexts, - //Stores a list of URLs that should not get async script tag treatment. - skipAsync: {}, - isPageLoaded: !isBrowser, - readyCalls: [] - }; - - req.isAsync = req.isBrowser = isBrowser; - if (isBrowser) { - head = s.head = document.getElementsByTagName("head")[0]; - //If BASE tag is in play, using appendChild is a problem for IE6. - //When that browser dies, this can be removed. Details in this jQuery bug: - //http://dev.jquery.com/ticket/2709 - baseElement = document.getElementsByTagName("base")[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - - /** - * Any errors that require explicitly generates will be passed to this - * function. Intercept/override it if you want custom error handling. - * @param {Error} err the error object. - */ - req.onError = function (err) { - throw err; - }; - - /** - * Does the request to load a module for the browser case. - * Make this a separate function to allow other environments - * to override it. - * - * @param {Object} context the require context to find state. - * @param {String} moduleName the name of the module. - * @param {Object} url the URL to the module. - */ - req.load = function (context, moduleName, url) { - var loaded = context.loaded; - - isDone = false; - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[moduleName]) { - loaded[moduleName] = false; - } - - context.scriptCount += 1; - req.attach(url, context, moduleName); - - //If tracking a jQuery, then make sure its ready callbacks - //are put on hold to prevent its ready callbacks from - //triggering too soon. - if (context.jQuery && !context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, true); - context.jQueryIncremented = true; - } - }; - - function getInteractiveScript() { - var scripts, i, script; - if (interactiveScript && interactiveScript.readyState === 'interactive') { - return interactiveScript; - } - - scripts = document.getElementsByTagName('script'); - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - if (script.readyState === 'interactive') { - return (interactiveScript = script); - } - } - - return null; - } - - /** - * The function that handles definitions of modules. Differs from - * require() in that a string for the module should be the first argument, - * and the function to execute after dependencies are loaded should - * return a value to define the module corresponding to the first argument's - * name. - */ - define = req.def = function (name, deps, callback) { - var node, context; - - //Allow for anonymous functions - if (typeof name !== 'string') { - //Adjust args appropriately - callback = deps; - deps = name; - name = null; - } - - //This module may not have dependencies - if (!req.isArray(deps)) { - callback = deps; - deps = []; - } - - //If no name, and callback is a function, then figure out if it a - //CommonJS thing with dependencies. - if (!name && !deps.length && req.isFunction(callback)) { - //Remove comments from the callback string, - //look for require calls, and pull them into the dependencies, - //but only if there are function args. - if (callback.length) { - callback - .toString() - .replace(commentRegExp, "") - .replace(cjsRequireRegExp, function (match, dep) { - deps.push(dep); - }); - - //May be a CommonJS thing even without require calls, but still - //could use exports, and module. Avoid doing exports and module - //work though if it just needs require. - //REQUIRES the function to expect the CommonJS variables in the - //order listed below. - deps = (callback.length === 1 ? ["require"] : ["require", "exports", "module"]).concat(deps); - } - } - - //If in IE 6-8 and hit an anonymous define() call, do the interactive - //work. - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute("data-requiremodule"); - } - context = contexts[node.getAttribute("data-requirecontext")]; - } - } - - //Always save off evaluating the def call until the script onload handler. - //This allows multiple modules to be in a file without prematurely - //tracing dependencies, and allows for anonymous module support, - //where the module name is not known until the script onload event - //occurs. If no context, use the global queue, and get it processed - //in the onscript load callback. - (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); - - return undefined; - }; - - define.amd = { - multiversion: true, - plugins: true, - jQuery: true - }; - - /** - * Executes the text. Normally just uses eval, but can be modified - * to use a more environment specific call. - * @param {String} text the text to execute/evaluate. - */ - req.exec = function (text) { - return eval(text); - }; - - /** - * Executes a module callack function. Broken out as a separate function - * solely to allow the build system to sequence the files in the built - * layer in the right sequence. - * - * @private - */ - req.execCb = function (name, callback, args, exports) { - return callback.apply(exports, args); - }; - - /** - * callback for script loads, used to check status of loading. - * - * @param {Event} evt the event from the browser for the script - * that was loaded. - * - * @private - */ - req.onScriptLoad = function (evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - var node = evt.currentTarget || evt.srcElement, contextName, moduleName, - context; - - if (evt.type === "load" || readyRegExp.test(node.readyState)) { - //Reset interactive script so a script node is not held onto for - //to long. - interactiveScript = null; - - //Pull out the name of the module and the context. - contextName = node.getAttribute("data-requirecontext"); - moduleName = node.getAttribute("data-requiremodule"); - context = contexts[contextName]; - - contexts[contextName].completeLoad(moduleName); - - //Clean up script binding. Favor detachEvent because of IE9 - //issue, see attachEvent/addEventListener comment elsewhere - //in this file. - if (node.detachEvent && !isOpera) { - //Probably IE. If not it will throw an error, which will be - //useful to know. - node.detachEvent("onreadystatechange", req.onScriptLoad); - } else { - node.removeEventListener("load", req.onScriptLoad, false); - } - } - }; - - /** - * Attaches the script represented by the URL to the current - * environment. Right now only supports browser loading, - * but can be redefined in other environments to do the right thing. - * @param {String} url the url of the script to attach. - * @param {Object} context the context that wants the script. - * @param {moduleName} the name of the module that is associated with the script. - * @param {Function} [callback] optional callback, defaults to require.onScriptLoad - * @param {String} [type] optional type, defaults to text/javascript - */ - req.attach = function (url, context, moduleName, callback, type) { - var node, loaded; - if (isBrowser) { - //In the browser so use a script tag - callback = callback || req.onScriptLoad; - node = context && context.config && context.config.xhtml ? - document.createElementNS("http://www.w3.org/1999/xhtml", "html:script") : - document.createElement("script"); - node.type = type || "text/javascript"; - node.charset = "utf-8"; - //Use async so Gecko does not block on executing the script if something - //like a long-polling comet tag is being run first. Gecko likes - //to evaluate scripts in DOM order, even for dynamic scripts. - //It will fetch them async, but only evaluate the contents in DOM - //order, so a long-polling script tag can delay execution of scripts - //after it. But telling Gecko we expect async gets us the behavior - //we want -- execute it whenever it is finished downloading. Only - //Helps Firefox 3.6+ - //Allow some URLs to not be fetched async. Mostly helps the order! - //plugin - node.async = !s.skipAsync[url]; - - if (context) { - node.setAttribute("data-requirecontext", context.contextName); - } - node.setAttribute("data-requiremodule", moduleName); - - //Set up load listener. Test attachEvent first because IE9 has - //a subtle issue in its addEventListener and script onload firings - //that do not match the behavior of all other browsers with - //addEventListener support, which fire the onload event for a - //script right after the script execution. See: - //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution - //UNFORTUNATELY Opera implements attachEvent but does not follow the script - //script execution mode. - if (node.attachEvent && !isOpera) { - //Probably IE. IE (at least 6-8) do not fire - //script onload right after executing the script, so - //we cannot tie the anonymous define call to a name. - //However, IE reports the script as being in "interactive" - //readyState at the time of the define call. - useInteractive = true; - node.attachEvent("onreadystatechange", callback); - } else { - node.addEventListener("load", callback, false); - } - node.src = url; - - //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous define - //call to the module name (which is stored on the node), hold on - //to a reference to this node, but clear after the DOM insertion. - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - return node; - } else if (isWebWorker) { - //In a web worker, use importScripts. This is not a very - //efficient use of importScripts, importScripts will block until - //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation that a build has been done so that - //only one script needs to be loaded anyway. This may need to be - //reevaluated if other use cases become common. - loaded = context.loaded; - loaded[moduleName] = false; - - importScripts(url); - - //Account for anonymous modules - context.completeLoad(moduleName); - } - return null; - }; - - //Look for a data-main script attribute, which could also adjust the baseUrl. - if (isBrowser) { - //Figure out baseUrl. Get it from the script tag with require.js in it. - scripts = document.getElementsByTagName("script"); - - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - //Set the "head" where we can append children by - //using the script's parent. - if (!head) { - head = script.parentNode; - } - - //Look for a data-main attribute to set main script for the page - //to load. If it is there, the path to data main becomes the - //baseUrl, if it is not already set. - if ((dataMain = script.getAttribute('data-main'))) { - if (!cfg.baseUrl) { - //Pull off the directory of data-main for use as the - //baseUrl. - src = dataMain.split('/'); - mainScript = src.pop(); - subPath = src.length ? src.join('/') + '/' : './'; - - //Set final config. - cfg.baseUrl = subPath; - //Strip off any trailing .js since dataMain is now - //like a module name. - dataMain = mainScript.replace(jsSuffixRegExp, ''); - } - - //Put the data-main script in the files to load. - cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; - - break; - } - } - } - - //Set baseUrl based on config. - s.baseUrl = cfg.baseUrl; - - //****** START page load functionality **************** - /** - * Sets the page as loaded and triggers check for all modules loaded. - */ - req.pageLoaded = function () { - if (!s.isPageLoaded) { - s.isPageLoaded = true; - if (scrollIntervalId) { - clearInterval(scrollIntervalId); - } - - //Part of a fix for FF < 3.6 where readyState was not set to - //complete so libraries like jQuery that check for readyState - //after page load where not getting initialized correctly. - //Original approach suggested by Andrea Giammarchi: - //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html - //see other setReadyState reference for the rest of the fix. - if (setReadyState) { - document.readyState = "complete"; - } - - req.callReady(); - } - }; - - //See if there is nothing waiting across contexts, and if not, trigger - //callReady. - req.checkReadyState = function () { - var contexts = s.contexts, prop; - for (prop in contexts) { - if (!(prop in empty)) { - if (contexts[prop].waitCount) { - return; - } - } - } - s.isDone = true; - req.callReady(); - }; - - /** - * Internal function that calls back any ready functions. If you are - * integrating RequireJS with another library without require.ready support, - * you can define this method to call your page ready code instead. - */ - req.callReady = function () { - var callbacks = s.readyCalls, i, callback, contexts, context, prop; - - if (s.isPageLoaded && s.isDone) { - if (callbacks.length) { - s.readyCalls = []; - for (i = 0; (callback = callbacks[i]); i++) { - callback(); - } - } - - //If jQuery with DOM ready delayed, release it now. - contexts = s.contexts; - for (prop in contexts) { - if (!(prop in empty)) { - context = contexts[prop]; - if (context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, false); - context.jQueryIncremented = false; - } - } - } - } - }; - - /** - * Registers functions to call when the page is loaded - */ - req.ready = function (callback) { - if (s.isPageLoaded && s.isDone) { - callback(); - } else { - s.readyCalls.push(callback); - } - return req; - }; - - if (isBrowser) { - if (document.addEventListener) { - //Standards. Hooray! Assumption here that if standards based, - //it knows about DOMContentLoaded. - document.addEventListener("DOMContentLoaded", req.pageLoaded, false); - window.addEventListener("load", req.pageLoaded, false); - //Part of FF < 3.6 readystate fix (see setReadyState refs for more info) - if (!document.readyState) { - setReadyState = true; - document.readyState = "loading"; - } - } else if (window.attachEvent) { - window.attachEvent("onload", req.pageLoaded); - - //DOMContentLoaded approximation, as found by Diego Perini: - //http://javascript.nwbox.com/IEContentLoaded/ - if (self === self.top) { - scrollIntervalId = setInterval(function () { - try { - //From this ticket: - //http://bugs.dojotoolkit.org/ticket/11106, - //In IE HTML Application (HTA), such as in a selenium test, - //javascript in the iframe can't see anything outside - //of it, so self===self.top is true, but the iframe is - //not the top window and doScroll will be available - //before document.body is set. Test document.body - //before trying the doScroll trick. - if (document.body) { - document.documentElement.doScroll("left"); - req.pageLoaded(); - } - } catch (e) {} - }, 30); - } - } - - //Check if document already complete, and if so, just trigger page load - //listeners. NOTE: does not work with Firefox before 3.6. To support - //those browsers, manually call require.pageLoaded(). - if (document.readyState === "complete") { - req.pageLoaded(); - } - } - //****** END page load functionality **************** - - //Set up default context. If require was a configuration object, use that as base config. - req(cfg); - - //If modules are built into require.js, then need to make sure dependencies are - //traced. Use a setTimeout in the browser world, to allow all the modules to register - //themselves. In a non-browser env, assume that modules are not built into require.js, - //which seems odd to do on the server. - if (req.isAsync && typeof setTimeout !== "undefined") { - ctx = s.contexts[(cfg.context || defContextName)]; - //Indicate that the script that includes require() is still loading, - //so that require()'d dependencies are not traced until the end of the - //file is parsed (approximated via the setTimeout call). - ctx.requireWait = true; - setTimeout(function () { - ctx.requireWait = false; - - //Any modules included with the require.js file will be in the - //global queue, assign them to this context. - ctx.takeGlobalQueue(); - - //Allow for jQuery to be loaded/already in the page, and if jQuery 1.4.3, - //make sure to hold onto it for readyWait triggering. - ctx.jQueryCheck(); - - if (!ctx.scriptCount) { - ctx.resume(); - } - req.checkReadyState(); - }, 0); - } -}()); diff --git a/temp/idbwrapper/0.2.1/package/example/objectstore/app.js b/temp/idbwrapper/0.2.1/package/example/objectstore/app.js deleted file mode 100644 index 21e828a52..000000000 --- a/temp/idbwrapper/0.2.1/package/example/objectstore/app.js +++ /dev/null @@ -1,93 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var objStore; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") - objStore = new IDBStore({ - storeName: 'objectstore', - keyPath: 'id', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - objStore.getAll(listItems); - } - - function listItems(data){ - var header, tpl, - props = ['id'], - content = ''; - - data.forEach(function(item){ - for(var prop in item){ - if(props.indexOf(prop) < 0){ - props.push(prop); - } - } - }); - - header = '' + props.join('') + ''; - tpl = '{' + props.join('}{') + '}'; - - data.forEach(function(item){ - content += tpl.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key] || ''; - }); - }); - - nodeCache['results-container'].innerHTML = '' + header + content + '
'; - } - - function enterData(){ - // read data from inputs - var propName, value, hasData, - data = {}, - count = 4; - - while(--count){ - propName = document.getElementById('prop_' + count).value.trim(); - if(propName.length){ - hasData = true; - value = document.getElementById('value_' + count).value.trim(); - // Don't do this at home. This is just a very dirty hack to 'guess' what - // type of data you just entered. If you do stuff like this in production - // code, UNICORNS WILL DIE. You have been warned. - data[propName] = ['{', '['].indexOf(value.substring(0,1)) !== -1 ? eval('(' + value + ')') : parseInt(value, 10) || value; - } - } - if(!hasData){ - return; - } - - // and store them away. - objStore.put(data, refreshTable); - } - - function clear(){ - objStore.clear(refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - clear: clear - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.2.1/package/example/objectstore/index.html b/temp/idbwrapper/0.2.1/package/example/objectstore/index.html deleted file mode 100644 index 44a316628..000000000 --- a/temp/idbwrapper/0.2.1/package/example/objectstore/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - IDBWrapper ObjectStore Example - - - - - -
-
- QueryResults -
-
-
-
-

- IDB is not a relational database; it's an object store. That means you - have - no such things as fixed, defined columns.
- Just enter any name as key and anything as value.
-
- To enter non-primitive values, use literal notaion. -

- - - - - - - - - - - - - - - - - - - - - -
KeyValue
- -
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.2.1/package/example/objectstore/style.css b/temp/idbwrapper/0.2.1/package/example/objectstore/style.css deleted file mode 100644 index 5bdb6b0f7..000000000 --- a/temp/idbwrapper/0.2.1/package/example/objectstore/style.css +++ /dev/null @@ -1,93 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.2.1/package/example/quicktest/index.html b/temp/idbwrapper/0.2.1/package/example/quicktest/index.html deleted file mode 100644 index f64a74323..000000000 --- a/temp/idbwrapper/0.2.1/package/example/quicktest/index.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - IndexedDB Wrapper Quick Test - - - - -
-

Open the console and click 'Open DB'. You will then see a bunch of buttons - that allow data manipulation. Click them, and check the console for - results.

- - - -
- - - - - diff --git a/temp/idbwrapper/0.2.1/package/example/quicktest/style.css b/temp/idbwrapper/0.2.1/package/example/quicktest/style.css deleted file mode 100644 index 90f382838..000000000 --- a/temp/idbwrapper/0.2.1/package/example/quicktest/style.css +++ /dev/null @@ -1,94 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.2.1/package/example/style.css b/temp/idbwrapper/0.2.1/package/example/style.css deleted file mode 100644 index fb96076ca..000000000 --- a/temp/idbwrapper/0.2.1/package/example/style.css +++ /dev/null @@ -1,87 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; -} -.hbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.2.1/package/package.json b/temp/idbwrapper/0.2.1/package/package.json deleted file mode 100644 index d671c39cb..000000000 --- a/temp/idbwrapper/0.2.1/package/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "idb-wrapper", - "version": "0.2.1", - "description": "A cross-browser wrapper for IndexedDB", - "keywords": [], - "author": "jensarps (http://jensarps.de/)", - "repository": "git://github.com/jensarps/IDBWrapper.git", - "main": "IDBStore", - "homepage": "https://github.com/jensarps/IDBWrapper", - "contributors": [ - "Josh Matthews (http://www.joshmatthews.net/blog/)", - "Raynos (http://raynos.org)" - ], - "bugs": { - "url": "https://github.com/jensarps/IDBWrapper/issues", - "email": "mail@jensarps.de" - }, - "dependencies": { - }, - "devDependencies": { - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/jensarps/IDBWrapper/raw/master/LICENSE" - } - ], - "scripts": { - } -} diff --git a/temp/idbwrapper/0.3.0/dist.tar.gz b/temp/idbwrapper/0.3.0/dist.tar.gz deleted file mode 100644 index 41e23cad6b9ddd167e4c796faa836c59399c40b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 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 hDNo@4xx6}zzadFFO{u^ - - - - - - - - diff --git a/temp/idbwrapper/0.3.0/package/.idea/encodings.xml b/temp/idbwrapper/0.3.0/package/.idea/encodings.xml deleted file mode 100644 index e206d70d8..000000000 --- a/temp/idbwrapper/0.3.0/package/.idea/encodings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/temp/idbwrapper/0.3.0/package/.idea/libraries/sass_stdlib.xml b/temp/idbwrapper/0.3.0/package/.idea/libraries/sass_stdlib.xml deleted file mode 100644 index 546bfd172..000000000 --- a/temp/idbwrapper/0.3.0/package/.idea/libraries/sass_stdlib.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/temp/idbwrapper/0.3.0/package/.idea/misc.xml b/temp/idbwrapper/0.3.0/package/.idea/misc.xml deleted file mode 100644 index 11e74ae40..000000000 --- a/temp/idbwrapper/0.3.0/package/.idea/misc.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - http://www.w3.org/1999/xhtml - - - - diff --git a/temp/idbwrapper/0.3.0/package/.idea/modules.xml b/temp/idbwrapper/0.3.0/package/.idea/modules.xml deleted file mode 100644 index 7c3d093ee..000000000 --- a/temp/idbwrapper/0.3.0/package/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/temp/idbwrapper/0.3.0/package/.idea/scopes/scope_settings.xml b/temp/idbwrapper/0.3.0/package/.idea/scopes/scope_settings.xml deleted file mode 100644 index 922003b84..000000000 --- a/temp/idbwrapper/0.3.0/package/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/temp/idbwrapper/0.3.0/package/.idea/vcs.xml b/temp/idbwrapper/0.3.0/package/.idea/vcs.xml deleted file mode 100644 index c80f2198b..000000000 --- a/temp/idbwrapper/0.3.0/package/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/temp/idbwrapper/0.3.0/package/.idea/workspace.xml b/temp/idbwrapper/0.3.0/package/.idea/workspace.xml deleted file mode 100644 index d7a47d0be..000000000 --- a/temp/idbwrapper/0.3.0/package/.idea/workspace.xml +++ /dev/null @@ -1,451 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CSS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1323962205278 - 1323962205278 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/temp/idbwrapper/0.3.0/package/CHANGELOG b/temp/idbwrapper/0.3.0/package/CHANGELOG deleted file mode 100644 index 2d8277225..000000000 --- a/temp/idbwrapper/0.3.0/package/CHANGELOG +++ /dev/null @@ -1,24 +0,0 @@ -0.3.0 / ------------------- - -* Fix potentially non-unique generated IDs -* Add batch() method [Raynos] -* Fix a bug where the success handler could be called even if there was an error -* Fix a bug where old IndexedDB implementations were not detected successfully - - - -0.2.1 / 2012-11-20 ------------------- - -* Add error handler to constructor -* Remove support for numeric transaction and cursor types. -* Misc cleanup - - - -0.2.0 / 2012-11-20 ------------------- - -* Start versioning - diff --git a/temp/idbwrapper/0.3.0/package/IDBStore.js b/temp/idbwrapper/0.3.0/package/IDBStore.js deleted file mode 100644 index ece8ea01a..000000000 --- a/temp/idbwrapper/0.3.0/package/IDBStore.js +++ /dev/null @@ -1,519 +0,0 @@ -/* - * IDBWrapper - A cross-browser wrapper for IndexedDB - * Copyright (c) 2011 - 2012 Jens Arps - * http://jensarps.de/ - * - * Licensed under the MIT (X11) license - */ - -"use strict"; - -(function (name, definition, global) { - if (typeof define === 'function') { - define(definition); - } else if (typeof module !== 'undefined' && module.exports) { - module.exports = definition(); - } else { - global[name] = definition(); - } -})('IDBStore', function () { - - var IDBStore; - - var defaults = { - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - onStoreReady: function () { - }, - onError: function(error){ - throw error; - }, - indexes: [] - }; - - IDBStore = function (kwArgs, onStoreReady) { - - for(var key in defaults){ - this[key] = typeof kwArgs[key] != 'undefined' ? kwArgs[key] : defaults[key]; - } - - this.dbName = 'IDBWrapper-' + this.storeName; - this.dbVersion = parseInt(this.dbVersion, 10); - - onStoreReady && (this.onStoreReady = onStoreReady); - - this.idb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; - this.keyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.mozIDBKeyRange; - - this.consts = { - 'READ_ONLY': 'readonly', - 'READ_WRITE': 'readwrite', - 'VERSION_CHANGE': 'versionchange', - 'NEXT': 'next', - 'NEXT_NO_DUPLICATE': 'nextunique', - 'PREV': 'prev', - 'PREV_NO_DUPLICATE': 'prevunique' - }; - - this.openDB(); - }; - - IDBStore.prototype = { - - db: null, - - dbName: null, - - dbVersion: null, - - store: null, - - storeName: null, - - keyPath: null, - - autoIncrement: null, - - indexes: null, - - features: null, - - onStoreReady: null, - - onError: null, - - _insertIdCount: 0, - - openDB: function () { - - var features = this.features = {}; - features.hasAutoIncrement = !window.mozIndexedDB; // TODO: Still, really? - - var openRequest = this.idb.open(this.dbName, this.dbVersion); - var preventSuccessCallback = false; - - openRequest.onerror = function (error) { - - var gotVersionErr = false; - if ('error' in error.target) { - gotVersionErr = error.target.error.name == "VersionError"; - } else if ('errorCode' in error.target) { - gotVersionErr = error.target.errorCode == 12; // TODO: Use const - } - - if (gotVersionErr) { - this.onError(new Error('The version number provided is lower than the existing one.')); - } else { - this.onError(error); - } - }.bind(this); - - openRequest.onsuccess = function (event) { - - if (preventSuccessCallback) { - return; - } - - if(this.db){ - this.onStoreReady(); - return; - } - - this.db = event.target.result; - - if(typeof this.db.version == 'string'){ - this.onError(new Error('The IndexedDB implementation in this browser is outdated. Please upgrade your browser.')); - return; - } - - if(!this.db.objectStoreNames.contains(this.storeName)){ - // We should never ever get here. - // Lets notify the user anyway. - this.onError(new Error('Something is wrong with the IndexedDB implementation in this browser. Please upgrade your browser.')); - return; - } - - var emptyTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - this.store = emptyTransaction.objectStore(this.storeName); - - // check indexes - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - if(!indexName){ - preventSuccessCallback = true; - this.onError(new Error('Cannot create index: No index name given.')); - return; - } - - this.normalizeIndexData(indexData); - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = this.indexComplies(actualIndex, indexData); - if(!complies){ - preventSuccessCallback = true; - this.onError(new Error('Cannot modify index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.')); - } - } else { - preventSuccessCallback = true; - this.onError(new Error('Cannot create new index "' + indexName + '" for current version. Please bump version number to ' + ( this.dbVersion + 1 ) + '.')); - } - - }, this); - - preventSuccessCallback || this.onStoreReady(); - }.bind(this); - - openRequest.onupgradeneeded = function(/* IDBVersionChangeEvent */ event){ - - this.db = event.target.result; - - if(this.db.objectStoreNames.contains(this.storeName)){ - this.store = event.target.transaction.objectStore(this.storeName); - } else { - this.store = this.db.createObjectStore(this.storeName, { keyPath: this.keyPath, autoIncrement: this.autoIncrement}); - } - - this.indexes.forEach(function(indexData){ - var indexName = indexData.name; - - if(!indexName){ - preventSuccessCallback = true; - this.onError(new Error('Cannot create index: No index name given.')); - } - - this.normalizeIndexData(indexData); - - if(this.hasIndex(indexName)){ - // check if it complies - var actualIndex = this.store.index(indexName); - var complies = this.indexComplies(actualIndex, indexData); - if(!complies){ - // index differs, need to delete and re-create - this.store.deleteIndex(indexName); - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - } else { - this.store.createIndex(indexName, indexData.keyPath, { unique: indexData.unique, multiEntry: indexData.multiEntry }); - } - - }, this); - - }.bind(this); - }, - - deleteDatabase: function () { - if (this.idb.deleteDatabase) { - this.idb.deleteDatabase(this.dbName); - } - }, - - /********************* - * data manipulation * - *********************/ - - - put: function (dataObj, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not write data.', error); - }); - onSuccess || (onSuccess = noop); - if (typeof dataObj[this.keyPath] == 'undefined' && !this.features.hasAutoIncrement) { - dataObj[this.keyPath] = this._getUID(); - } - var putTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var putRequest = putTransaction.objectStore(this.storeName).put(dataObj); - putRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - putRequest.onerror = onError; - }, - - get: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var getRequest = getTransaction.objectStore(this.storeName).get(key); - getRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getRequest.onerror = onError; - }, - - remove: function (key, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not remove data.', error); - }); - onSuccess || (onSuccess = noop); - var removeTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var deleteRequest = removeTransaction.objectStore(this.storeName).delete(key); - deleteRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - deleteRequest.onerror = onError; - }, - - batch: function (arr, onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not apply batch.', error); - }); - onSuccess || (onSuccess = noop); - var batchTransaction = this.db.transaction([this.storeName] , this.consts.READ_WRITE); - var count = arr.length; - var called = false; - - arr.forEach(function (operation) { - var type = operation.type; - var key = operation.key; - var value = operation.value; - - if (type == "remove") { - var deleteRequest = batchTransaction.objectStore(this.storeName).delete(key); - deleteRequest.onsuccess = function (event) { - count--; - if (count == 0 && !called) { - called = true; - onSuccess(); - } - }; - deleteRequest.onerror = function (err) { - batchTransaction.abort(); - if (!called) { - called = true; - onError(err, type, key); - } - }; - } else if (type == "put") { - if (typeof value[this.keyPath] == 'undefined' && !this.features.hasAutoIncrement) { - value[this.keyPath] = this._getUID() - } - var putRequest = batchTransaction.objectStore(this.storeName).put(value); - putRequest.onsuccess = function (event) { - count--; - if (count == 0 && !called) { - called = true; - onSuccess(); - } - }; - putRequest.onerror = function (err) { - batchTransaction.abort(); - if (!called) { - called = true; - onError(err, type, value); - } - }; - } - }, this); - }, - - getAll: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not read data.', error); - }); - onSuccess || (onSuccess = noop); - var getAllTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var store = getAllTransaction.objectStore(this.storeName); - if (store.getAll) { - var getAllRequest = store.getAll(); - getAllRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - getAllRequest.onerror = onError; - } else { - this._getAllCursor(getAllTransaction, onSuccess, onError); - } - }, - - _getAllCursor: function (tr, onSuccess, onError) { - var all = []; - var store = tr.objectStore(this.storeName); - var cursorRequest = store.openCursor(); - - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - all.push(cursor.value); - cursor['continue'](); - } - else { - onSuccess(all); - } - }; - cursorRequest.onError = onError; - }, - - clear: function (onSuccess, onError) { - onError || (onError = function (error) { - console.error('Could not clear store.', error); - }); - onSuccess || (onSuccess = noop); - var clearTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE); - var clearRequest = clearTransaction.objectStore(this.storeName).clear(); - clearRequest.onsuccess = function (event) { - onSuccess(event.target.result); - }; - clearRequest.onerror = onError; - }, - - _getUID: function () { - // FF bails at times on non-numeric ids. So we take an even - // worse approach now, using current time as id. Sigh. - return this._insertIdCount++ + Date.now(); - }, - - - /************ - * indexing * - ************/ - - getIndexList: function () { - return this.store.indexNames; - }, - - hasIndex: function (indexName) { - return this.store.indexNames.contains(indexName); - }, - - normalizeIndexData: function (indexData) { - indexData.keyPath = indexData.keyPath || indexData.name; - indexData.unique = !!indexData.unique; - indexData.multiEntry = !!indexData.multiEntry; - }, - - indexComplies: function (actual, expected) { - var complies = ['keyPath', 'unique', 'multiEntry'].every(function (key) { - // IE10 returns undefined for no multiEntry - if (key == 'multiEntry' && actual[key] === undefined && expected[key] === false) { - return true; - } - return expected[key] == actual[key]; - }); - return complies; - }, - - /********** - * cursor * - **********/ - - iterate: function (onItem, options) { - options = mixin({ - index: null, - order: 'ASC', - filterDuplicates: false, - keyRange: null, - writeAccess: false, - onEnd: null, - onError: function (error) { - console.error('Could not open cursor.', error); - } - }, options || {}); - - var directionType = options.order.toLowerCase() == 'desc' ? 'PREV' : 'NEXT'; - if (options.filterDuplicates) { - directionType += '_NO_DUPLICATE'; - } - - var cursorTransaction = this.db.transaction([this.storeName], this.consts[options.writeAccess ? 'READ_WRITE' : 'READ_ONLY']); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var cursorRequest = cursorTarget.openCursor(options.keyRange, this.consts[directionType]); - cursorRequest.onerror = options.onError; - cursorRequest.onsuccess = function (event) { - var cursor = event.target.result; - if (cursor) { - onItem(cursor.value, cursor, cursorTransaction); - cursor['continue'](); - } else { - if(options.onEnd){ - options.onEnd() - } else { - onItem(null); - } - } - }; - }, - - count: function (onSuccess, options) { - - options = mixin({ - index: null, - keyRange: null - }, options || {}); - - var onError = options.onError || function (error) { - console.error('Could not open cursor.', error); - }; - - var cursorTransaction = this.db.transaction([this.storeName], this.consts.READ_ONLY); - var cursorTarget = cursorTransaction.objectStore(this.storeName); - if (options.index) { - cursorTarget = cursorTarget.index(options.index); - } - - var countRequest = cursorTarget.count(options.keyRange); - countRequest.onsuccess = function (evt) { - onSuccess(evt.target.result); - }; - countRequest.onError = function (error) { - onError(error); - }; - }, - - /**************/ - /* key ranges */ - /**************/ - - makeKeyRange: function(options){ - var keyRange, - hasLower = typeof options.lower != 'undefined', - hasUpper = typeof options.upper != 'undefined'; - - switch(true){ - case hasLower && hasUpper: - keyRange = this.keyRange.bound(options.lower, options.upper, options.excludeLower, options.excludeUpper); - break; - case hasLower: - keyRange = this.keyRange.lowerBound(options.lower, options.excludeLower); - break; - case hasUpper: - keyRange = this.keyRange.upperBound(options.upper, options.excludeUpper); - break; - default: - throw new Error('Cannot create KeyRange. Provide one or both of "lower" or "upper" value.'); - break; - } - - return keyRange; - - } - - }; - - /** helpers **/ - - var noop = function () { - }; - var empty = {}; - var mixin = function (target, source) { - var name, s; - for (name in source) { - s = source[name]; - if (s !== empty[name] && s !== target[name]) { - target[name] = s; - } - } - return target; - }; - - return IDBStore; - -}, this); diff --git a/temp/idbwrapper/0.3.0/package/LICENSE b/temp/idbwrapper/0.3.0/package/LICENSE deleted file mode 100644 index 93f5d87c8..000000000 --- a/temp/idbwrapper/0.3.0/package/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 - 2012 Jens Arps - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/temp/idbwrapper/0.3.0/package/README.md b/temp/idbwrapper/0.3.0/package/README.md deleted file mode 100644 index bb5b35102..000000000 --- a/temp/idbwrapper/0.3.0/package/README.md +++ /dev/null @@ -1,358 +0,0 @@ -About -===== - -This is a wrapper for indexedDB. It is meant to - -a) ease the use of indexedDB and abstract away the differences between the -existing impls in Chrome, Firefox and IE10 (yes, it works in all three), and - -b) show how IDB works. The code is split up into short methods, so that it's -easy to see what happens in what method. - -"Showing how it works" is the main intention of this project. IndexedDB is -all the buzz, but only a few people actually know how to use it. - -The code in IDBWrapper.js is not optimized for anything, nor minified or anything. -It is meant to be read and easy to understand. So, please, go ahead and check out -the source! - -There are two tutorials to get you up and running: - -Part 1: Setup and CRUD operations -http://jensarps.de/2011/11/25/working-with-idbwrapper-part-1/ - -Part 2: Running Queries against the store -http://jensarps.de/2012/11/13/working-with-idbwrapper-part-2/ - -##November Rewrite - -I rewrote IDBWrapper to cope with all the issues, and the new version is on -master since Nov, 13th 2012. The API didn't change much, I just removed some -of the methods. Method signatures remain unchanged. - -However, if you have a previous version of IDBWrapper in use, there's an -issue: The new version won't be able to access the store created with the old -version, because database names changed. In that case, you need to manually -migrate the data: Include both versions of IDBWrapper (use a different name for -them), do a getAll() on the old store and write the data to the new store. - -I am very sorry about any inconveniences, but there was no other way. - -The 'old' version of IDBWrapper is still available in the `legacy` branch: -https://github.com/jensarps/IDBWrapper/tree/legacy - -Also, "showing how it works" is no longer the main intention behind this. Now, -it's rather "just works". - - -Examples -======== - -There are some examples to run right in your browser over here: http://jensarps.github.com/IDBWrapper/example/ - -The source for these examples are in the `example` folder of this repository. - -Usage -===== - -Including the IDBStore.js file will add an IDBStore constructor to the global scope. - -Alternatively, you can use an AMD loader such as RequireJS, or a CommonJS loader -to load the module, and you will receive the constructor in your load callback -(the constructor will then, of course, have whatever name you call it). - -You can then create an IDB store: - -```javascript -var myStore = new IDBStore(); -``` - -You may pass two parameters to the constructor: the first is an object with optional parameters, -the second is a function reference to a function that is called when the store is ready to use. - -The options object may contain the following properties (default values are shown): - -```javascript -{ - storeName: 'Store', - dbVersion: 1, - keyPath: 'id', - autoIncrement: true, - indexes: [], - onStoreReady: function(){}, - onError: function(error){ throw error; } -} -``` - -'keyPath' is the name of the property to be used as key index. If 'autoIncrement' is set to true, -the database will automatically add a unique key to the keyPath index when storing objects missing -that property. 'indexes' contains objects defining indexes (see below for details on indexes). - -'onError' gets called if an error occurred while trying to open the store. It -receives the error instance as only argument. - -As an alternative to passing a ready handler as second argument, you can also -pass it in the 'onStoreReady' property. If a callback is provided both as second -parameter and inside of the options object, the function passed as second -parameter will be used. - -Methods -======= - -Here's an overview of available methods in IDBStore: - -Data Manipulation ------------------ - -Use the following methods to read and write data: - -___ - -1) The put method. - - -```javascript -put(/*Object*/ dataObj, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`dataObj` is the Object to store. `onSuccess` will be called when the insertion/update was successful, -and it will receive the keyPath value (the id, so to say) of the inserted object as first and only -argument. `onError` will be called if the insertion/update failed and it will receive the error event -object as first and only argument. If the store already contains an object with the given keyPath id, -it will be overwritten by `dataObj`. - -___ - -2) The get method. - -```javascript -get(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to retrieve. `onSuccess` will be called if -the get operation was successful, and it will receive the stored object as first and only argument. If -no object was found with the given keyPath value, this argument will be null. `onError` will be called -if the get operation failed and it will receive the error event object as first and only argument. - -___ - -3) The getAll method. - -```javascript -getAll: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the getAll operation was successful, and it will receive an Array of -all objects currently stored in the store as first and only argument. `onError` will be called if -the getAll operation failed and it will receive the error event object as first and only argument. - -___ - -4) The remove method. - -```javascript -remove: function(/*keyPath value*/ key, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`key` is the keyPath property value (the id) of the object to remove. `onSuccess` will be called if -the remove operation was successful, and it _should_ receive `false` as first and only argument if the -object to remove was not found, and `true` if it was found and removed. - -NOTE: FF 8 will pass the key to the onSuccess handler, no matter if there is an corresponding object -or not. Chrome 15 will pass `null` if removal was successful, and call the error handler if the object -wasn't found. Chrome 17 will behave as described above. - -`onError` will be called if the remove operation failed and it will receive the error event object as first -and only argument. - -___ - -5) The clear method. - -```javascript -clear: function(/*Function?*/onSuccess, /*Function?*/onError) -``` - -`onSuccess` will be called if the clear operation was successful. `onError` will be called if the clear -operation failed and it will receive the error event object as first and only argument. - -6) The batch method. - -```javascript -batch: function (/*Array*/operations, /*Function?*/onSuccess, /*Function?*/onError) -``` - -`batch` expects an array of operations that you want to apply in a single -IndexedDB transaction. `operations` is an Array of objects, each containing two -properties, defining the type of operation. There are two operations -supported, put and remove. A put entry looks like this: - -```javascript -{ type: "put", value: dataObj } // dataObj being the object to store -``` - -A remove entry looks like this; - -```javascript -{ type: "remove", key: someKey } // someKey being the keyPath value of the item to remove -``` - -You can mix both types in the `operations` Array: - -```javascript -db.batch([ - { type: "put", value: dataObj }, - { type: "remove", key: someKey } -], onSuccess, onError) -``` - -`onSuccess` will be called if all operations were successful and will receive no -arguments. `onError` will be called if an error happens for one of the -operations and will receive three arguments: the Error instance, the type of -operation that caused the error and either the key or the value property -(depending on the type). - -If an error occurs, no changes will be made to the store, even if some -of the given operations would have succeeded. - - -Index Operations ----------------- - -To create indexes, you need to pass the index information to the IDBStore() -constructor, for example: - - -```javascript -{ - storeName: 'customers', - dbVersion: 1, - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: function(){}, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] -} -``` - -An entry in the index Array is an object containing the following properties: - -The `name` property is the identifier of the index. If you want to work with the created index later, this name is used to identify the index. This is the only property that is mandatory. - -The `keyPath` property is the name of the property in your stored data that you want to index. If you omit that, IDBWrapper will assume that it is the same as the provided name, and will use this instead. - -The `unique` property tells the store whether the indexed property in your data is unique. If you set this to true, it will add a uniqueness constraint to the store which will make it throw if you try to store data that violates that constraint. If you omit that, IDBWrapper will set this to false. - -The `multiEntry` property is kinda weird. You can read up on it here: http://www.w3.org/TR/IndexedDB/#dfn-multientry. However, you can live perfectly fine with setting this to false (or just omitting it, this is set to false by default). - - -If you want to add an index to an existing store, you need to increase the -version number of your store, as adding an index changes the structure of -the database. - -To modify an index, modify the object in the indexes Array in the constructor. -Again, you need to increase the version of your store. - -In addition, there are still some convenience methods available: - -___ - - -1) The hasIndex method. - -```javascript -hasIndex: function(/*String*/ indexName) -``` - -Return true if an index with the given name exists in the store, false if not. - -___ - -2) The getIndexList method. - -```javascript -getIndexList: function() -``` - -Returns a `DOMStringList` with all existing indices. - - -Running Queries ---------------- - -To run queries, IDBWrapper provides an `iterate()` method. To create keyRanges, -there is the `makeKeyRange()` method. In addition to these, IDBWrapper comes -with a `count()` method. - -___ - -1) The iterate method. - - -```javascript -iterate: function(/*Function*/ onItem, /*Object*/ iterateOptions) -``` - -The `onItem` callback will be called once for every match. It will receive three arguments: the object that matched the query, a reference to the current cursor object (IDBWrapper uses IndexedDB's Cursor internally to iterate), and a reference to the current ongoing transaction. - -There's one special situation: if you didn't pass an onEnd handler in the options objects (see below), the onItem handler will be called one extra time when the transaction is over. In this case, it will receive null as only argument. So, to check when the iteration is over and you won't get any more data objects, you can either pass an onEnd handler, or check for null in the onItem handler. - -The `iterateOptions` object can contain one or more of the following properties: - - -The `index` property contains the name of the index to operate on. If you omit this, IDBWrapper will use the store's keyPath as index. - -In the `keyRange` property you can pass a keyRange. - -The `order` property can be set to 'ASC' or 'DESC', and determines the ordering direction of results. If you omit this, IDBWrapper will use 'ASC'. - -The `filterDuplicates` property is an interesting one: If you set this to true (it defaults to false), and have several objects that have the same value in their key, the store will only fetch the first of those. It is not about objects being the same, it's about their key being the same. For example, in the customers database are a couple of guys having 'Smith' as last name. Setting filterDuplicates to true in the above example will make `iterate()` call the onItem callback only for the first of those. - -The `writeAccess` property defaults to false. If you need write access to the store during the iteration, you need to set this to true. - -In the `onEnd` property you can pass a callback that gets called after the iteration is over and the transaction is closed. It does not receive any arguments. - -In the `onError` property you can pass a custom error handler. In case of an error, it will be called and receives the Error object as only argument. - - -___ - - -2) The makeKeyRange method. - - -```javascript -iterate: function(/*Object*/ keyRangeOptions) -``` - -Returns an IDBKeyRange. - -The `keyRangeOptions` object must have one or more of the following properties: - -`lower`: The lower bound of the range - -`excludeLower`: Boolean, whether to exclude the lower bound itself. Default: false - -`upper`: The upper bound of the range - -`excludeUpper`: Boolean, whether to exclude the upper bound itself. Default: false - -___ - - -3) The count method. - - -```javascript -iterate: function(/*Function*/ onSuccess, /*Object*/ countOptions) -``` - -The onSuccess receives the result of the count as only argument. - -The `countOptions` object may have one or more of the following properties: - -index: The name of an index to operate on. - -keyRange: A keyRange to use - diff --git a/temp/idbwrapper/0.3.0/package/example/basic/app.js b/temp/idbwrapper/0.3.0/package/example/basic/app.js deleted file mode 100644 index e1e2a2f55..000000000 --- a/temp/idbwrapper/0.3.0/package/example/basic/app.js +++ /dev/null @@ -1,94 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}', - table: '{content}
IDLast NameFirst Name
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = new IDBStore({ - storeName: 'customer', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'customerid', 'firstname', 'lastname', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ // We want the id to be numeric: - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function updateItem(id){ - var data = { - customerid: id, - firstname: document.getElementById('firstname_' + id).value.trim(), - lastname: document.getElementById('lastname_' + id).value.trim() - }; - customers.put(data, refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - updateItem: updateItem - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.3.0/package/example/basic/index.html b/temp/idbwrapper/0.3.0/package/example/basic/index.html deleted file mode 100644 index 5d7a596c6..000000000 --- a/temp/idbwrapper/0.3.0/package/example/basic/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - IDBWrapper Basic CRUD Example - - - - - -
-
- QueryResults -
-
-
-
-

- Enter some data to save. As ID, enter a numeric value or leave blank. -

- -
-
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.3.0/package/example/basic/style.css b/temp/idbwrapper/0.3.0/package/example/basic/style.css deleted file mode 100644 index e901b00c4..000000000 --- a/temp/idbwrapper/0.3.0/package/example/basic/style.css +++ /dev/null @@ -1,86 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.3.0/package/example/index.html b/temp/idbwrapper/0.3.0/package/example/index.html deleted file mode 100644 index cbc210fbc..000000000 --- a/temp/idbwrapper/0.3.0/package/example/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - IndexedDB Wrapper Examples - - - - -
-

IDBWrapper Examples

-

- There are a couple of examples to try out / look at: -

-
    -
  • Quicktest - Just a quick test to see if IDB opens and fool around in the console.
  • -
  • Basic CRUD - A basic CRUD example using an IDB store as fixed table.
  • -
  • ObjectStore - An example to show the difference between a table and an object store.
  • -
  • Index - An example to show how to work with indexes.
  • -
-
- - \ No newline at end of file diff --git a/temp/idbwrapper/0.3.0/package/example/index/app.js b/temp/idbwrapper/0.3.0/package/example/index/app.js deleted file mode 100644 index 974280137..000000000 --- a/temp/idbwrapper/0.3.0/package/example/index/app.js +++ /dev/null @@ -1,163 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var tpls = { - row: '{customerid}{lastname}{firstname}{age}', - table: '{content}
IDLast NameFirst NameAge
' - }; - - var customers; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") for the customers - customers = app.customers = new IDBStore({ - dbVersion: 1, - storeName: 'customer-index', - keyPath: 'customerid', - autoIncrement: true, - onStoreReady: refreshTable, - indexes: [ - { name: 'lastname', keyPath: 'lastname', unique: false, multiEntry: false } - ] - }); - - // create references for some nodes we have to work with - [ - 'submit', 'submitQuery', - 'upper', 'lower', 'excludeLower', 'excludeUpper', - 'sortOrder', 'index', 'filterDuplicates', - 'customerid', 'firstname', 'lastname', 'age', - 'results-container' - ].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit buttons. - nodeCache.submit.addEventListener('click', enterData); - nodeCache.submitQuery.addEventListener('click', runQuery); - } - - function refreshTable(){ - customers.getAll(listItems); - } - - function listItems(data){ - var content = ''; - data.forEach(function(item){ - content += tpls.row.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key]; - }); - }); - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - } - - function enterData(){ - // read data from inputs… - var data = {}; - ['customerid','firstname','lastname', 'age'].forEach(function(key){ - var value = nodeCache[key].value.trim(); - if(value.length){ - if(key == 'customerid'){ - value = parseInt(value, 10); - } - data[key] = value; - } - }); - - // …and store them away. - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function clearForm(){ - ['customerid','firstname','lastname', 'age'].forEach(function(id){ - nodeCache[id].value = ''; - }); - } - - function deleteItem(id){ - customers.remove(id, refreshTable); - } - - function makeRandomEntry(){ - var lastnames = ['Smith','Miller','Doe','Frankenstein','Furter'], - firstnames = ['Peter','John','Frank', 'James', 'Jill']; - - var entry = { - lastname: lastnames[Math.floor(Math.random()*5)], - firstname: firstnames[Math.floor(Math.random()*4)], - age: Math.floor(Math.random() * (100 - 20)) + 20, - customerid: parseInt( ( "" + ( Date.now() * Math.random() ) ).substring(0, 6), 10) - }; - - return entry; - } - - function addRandomCustomer(){ - var data = makeRandomEntry(); - - customers.put(data, function(){ - clearForm(); - refreshTable(); - }); - } - - function runQuery(){ - var upper = nodeCache.upper.value, - hasUpper = upper != '', - lower = nodeCache.lower.value, - hasLower = lower != '', - - indexName = nodeCache.index.value, - sortOrder = nodeCache.sortOrder.value, - filterDuplicates = nodeCache.filterDuplicates.checked, - keyRange, - - content = ''; - - if(hasUpper || hasLower){ // create a keyRange only if bounds are given - var options = {}; - if(hasUpper){ - options.upper = upper; - options.excludeUpper = nodeCache.excludeUpper.checked; - } - if(hasLower){ - options.lower = lower; - options.excludeLower = nodeCache.excludeLower.checked; - } - keyRange = customers.makeKeyRange(options); - } - - var onItem = function (item) { - content += tpls.row.replace(/\{([^\}]+)\}/g, function (_, key) { - return item[key]; - }); - }; - var onEnd = function () { - nodeCache['results-container'].innerHTML = tpls.table.replace('{content}', content); - }; - - customers.iterate(onItem, { - index: indexName, - keyRange: keyRange, - filterDuplicates: filterDuplicates, - order: sortOrder, - onEnd: onEnd - }); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - deleteItem: deleteItem, - addRandomCustomer: addRandomCustomer - }; - - // go! - init(); - -}); diff --git a/temp/idbwrapper/0.3.0/package/example/index/index.html b/temp/idbwrapper/0.3.0/package/example/index/index.html deleted file mode 100644 index 63a50039d..000000000 --- a/temp/idbwrapper/0.3.0/package/example/index/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - IDBWrapper Basic Index Example - - - - - -
-
- QueryResults -
-
-

Query

- -
- - -
-
-
-
-
- -
- - -
- -
- - -
-
-

Add data

- -

- Add a random customer: - -

-

- Or, enter customer data below: -

- -
-
-
-
- -
-
- - - diff --git a/temp/idbwrapper/0.3.0/package/example/index/style.css b/temp/idbwrapper/0.3.0/package/example/index/style.css deleted file mode 100644 index 8f7ddd9fe..000000000 --- a/temp/idbwrapper/0.3.0/package/example/index/style.css +++ /dev/null @@ -1,89 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input, -#query { - padding: 10px; - width: 350px; - border-left: solid 1px black; -} -#input div, -#query div{ - padding: 5px; -} -#input label, -#query label{ - display: inline-block; - width: 120px; -} diff --git a/temp/idbwrapper/0.3.0/package/example/lib/requirejs/require.js b/temp/idbwrapper/0.3.0/package/example/lib/requirejs/require.js deleted file mode 100644 index ba861994a..000000000 --- a/temp/idbwrapper/0.3.0/package/example/lib/requirejs/require.js +++ /dev/null @@ -1,2013 +0,0 @@ -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 0.26.0+ Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -/*jslint strict: false, plusplus: false */ -/*global window: false, navigator: false, document: false, importScripts: false, - jQuery: false, clearInterval: false, setInterval: false, self: false, - setTimeout: false, opera: false */ - -var requirejs, require, define; -(function () { - //Change this version number for each release. - var version = "0.26.0+", - commentRegExp = /(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg, - cjsRequireRegExp = /require\(\s*["']([^'"\s]+)["']\s*\)/g, - currDirRegExp = /^\.\//, - jsSuffixRegExp = /\.js$/, - ostring = Object.prototype.toString, - ap = Array.prototype, - aps = ap.slice, - apsp = ap.splice, - isBrowser = !!(typeof window !== "undefined" && navigator && document), - isWebWorker = !isBrowser && typeof importScripts !== "undefined", - //PS3 indicates loaded and complete, but need to wait for complete - //specifically. Sequence is "loading", "loaded", execution, - // then "complete". The UA check is unfortunate, but not sure how - //to feature test w/o causing perf issues. - readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? - /^complete$/ : /^(complete|loaded)$/, - defContextName = "_", - //Oh the tragedy, detecting opera. See the usage of isOpera for reason. - isOpera = typeof opera !== "undefined" && opera.toString() === "[object Opera]", - reqWaitIdPrefix = "_r@@", - empty = {}, - contexts = {}, - globalDefQueue = [], - interactiveScript = null, - isDone = false, - checkLoadedDepth = 0, - useInteractive = false, - req, cfg = {}, currentlyAddingScript, s, head, baseElement, scripts, script, - src, subPath, mainScript, dataMain, i, scrollIntervalId, setReadyState, ctx, - jQueryCheck, checkLoadedTimeoutId; - - function isFunction(it) { - return ostring.call(it) === "[object Function]"; - } - - function isArray(it) { - return ostring.call(it) === "[object Array]"; - } - - /** - * Simple function to mix in properties from source into target, - * but only if target does not already have a property of the same name. - * This is not robust in IE for transferring methods that match - * Object.prototype names, but the uses of mixin here seem unlikely to - * trigger a problem related to that. - */ - function mixin(target, source, force) { - for (var prop in source) { - if (!(prop in empty) && (!(prop in target) || force)) { - target[prop] = source[prop]; - } - } - return req; - } - - /** - * Constructs an error with a pointer to an URL with more information. - * @param {String} id the error ID that maps to an ID on a web page. - * @param {String} message human readable error. - * @param {Error} [err] the original error, if there is one. - * - * @returns {Error} - */ - function makeError(id, msg, err) { - var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); - if (err) { - e.originalError = err; - } - return e; - } - - /** - * Used to set up package paths from a packagePaths or packages config object. - * @param {Object} pkgs the object to store the new package config - * @param {Array} currentPackages an array of packages to configure - * @param {String} [dir] a prefix dir to use. - */ - function configurePackageDir(pkgs, currentPackages, dir) { - var i, location, pkgObj; - - for (i = 0; (pkgObj = currentPackages[i]); i++) { - pkgObj = typeof pkgObj === "string" ? { name: pkgObj } : pkgObj; - location = pkgObj.location; - - //Add dir to the path, but avoid paths that start with a slash - //or have a colon (indicates a protocol) - if (dir && (!location || (location.indexOf("/") !== 0 && location.indexOf(":") === -1))) { - location = dir + "/" + (location || pkgObj.name); - } - - //Create a brand new object on pkgs, since currentPackages can - //be passed in again, and config.pkgs is the internal transformed - //state for all package configs. - pkgs[pkgObj.name] = { - name: pkgObj.name, - location: location || pkgObj.name, - //Remove leading dot in main, so main paths are normalized, - //and remove any trailing .js, since different package - //envs have different conventions: some use a module name, - //some use a file name. - main: (pkgObj.main || "main") - .replace(currDirRegExp, '') - .replace(jsSuffixRegExp, '') - }; - } - } - - /** - * jQuery 1.4.3-1.5.x use a readyWait/ready() pairing to hold DOM - * ready callbacks, but jQuery 1.6 supports a holdReady() API instead. - * At some point remove the readyWait/ready() support and just stick - * with using holdReady. - */ - function jQueryHoldReady($, shouldHold) { - if ($.holdReady) { - $.holdReady(shouldHold); - } else if (shouldHold) { - $.readyWait += 1; - } else { - $.ready(true); - } - } - - if (typeof define !== "undefined") { - //If a define is already in play via another AMD loader, - //do not overwrite. - return; - } - - if (typeof requirejs !== "undefined") { - if (isFunction(requirejs)) { - //Do not overwrite and existing requirejs instance. - return; - } else { - cfg = requirejs; - requirejs = undefined; - } - } - - //Allow for a require config object - if (typeof require !== "undefined" && !isFunction(require)) { - //assume it is a config object. - cfg = require; - require = undefined; - } - - /** - * Creates a new context for use in require and define calls. - * Handle most of the heavy lifting. Do not want to use an object - * with prototype here to avoid using "this" in require, in case it - * needs to be used in more super secure envs that do not want this. - * Also there should not be that many contexts in the page. Usually just - * one for the default context, but could be extra for multiversion cases - * or if a package needs a special context for a dependency that conflicts - * with the standard context. - */ - function newContext(contextName) { - var context, resume, - config = { - waitSeconds: 7, - baseUrl: s.baseUrl || "./", - paths: {}, - pkgs: {}, - catchError: {} - }, - defQueue = [], - specified = { - "require": true, - "exports": true, - "module": true - }, - urlMap = {}, - defined = {}, - loaded = {}, - waiting = {}, - waitAry = [], - waitIdCounter = 0, - managerCallbacks = {}, - plugins = {}, - pluginsQueue = {}, - resumeDepth = 0, - normalizedWaiting = {}; - - /** - * Trims the . and .. from an array of path segments. - * It will keep a leading path segment if a .. will become - * the first path segment, to help with module name lookups, - * which act like paths, but can be remapped. But the end result, - * all paths that use this function should look normalized. - * NOTE: this method MODIFIES the input array. - * @param {Array} ary the array of path segments. - */ - function trimDots(ary) { - var i, part; - for (i = 0; (part = ary[i]); i++) { - if (part === ".") { - ary.splice(i, 1); - i -= 1; - } else if (part === "..") { - if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { - //End of the line. Keep at least one non-dot - //path segment at the front so it can be mapped - //correctly to disk. Otherwise, there is likely - //no path mapping for a path starting with '..'. - //This can still fail, but catches the most reasonable - //uses of .. - break; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - - /** - * Given a relative module name, like ./something, normalize it to - * a real name that can be mapped to a path. - * @param {String} name the relative name - * @param {String} baseName a real name that the name arg is relative - * to. - * @returns {String} normalized name - */ - function normalize(name, baseName) { - var pkgName, pkgConfig; - - //Adjust any relative paths. - if (name && name.charAt(0) === ".") { - //If have a base name, try to normalize against it, - //otherwise, assume it is a top-level require that will - //be relative to baseUrl in the end. - if (baseName) { - if (config.pkgs[baseName]) { - //If the baseName is a package name, then just treat it as one - //name to concat the name with. - baseName = [baseName]; - } else { - //Convert baseName to array, and lop off the last part, - //so that . matches that "directory" and not name of the baseName's - //module. For instance, baseName of "one/two/three", maps to - //"one/two/three.js", but we want the directory, "one/two" for - //this normalization. - baseName = baseName.split("/"); - baseName = baseName.slice(0, baseName.length - 1); - } - - name = baseName.concat(name.split("/")); - trimDots(name); - - //Some use of packages may use a . path to reference the - //"main" module name, so normalize for that. - pkgConfig = config.pkgs[(pkgName = name[0])]; - name = name.join("/"); - if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { - name = pkgName; - } - } - } - return name; - } - - /** - * Creates a module mapping that includes plugin prefix, module - * name, and path. If parentModuleMap is provided it will - * also normalize the name via require.normalize() - * - * @param {String} name the module name - * @param {String} [parentModuleMap] parent module map - * for the module name, used to resolve relative names. - * - * @returns {Object} - */ - function makeModuleMap(name, parentModuleMap) { - var index = name ? name.indexOf("!") : -1, - prefix = null, - parentName = parentModuleMap ? parentModuleMap.name : null, - originalName = name, - normalizedName, url, pluginModule; - - if (index !== -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - - if (prefix) { - prefix = normalize(prefix, parentName); - } - - //Account for relative paths if there is a base name. - if (name) { - if (prefix) { - pluginModule = defined[prefix]; - if (pluginModule) { - //Plugin is loaded, use its normalize method, otherwise, - //normalize name as usual. - if (pluginModule.normalize) { - normalizedName = pluginModule.normalize(name, function (name) { - return normalize(name, parentName); - }); - } else { - normalizedName = normalize(name, parentName); - } - } else { - //Plugin is not loaded yet, so do not normalize - //the name, wait for plugin to load to see if - //it has a normalize method. To avoid possible - //ambiguity with relative names loaded from another - //plugin, use the parent's name as part of this name. - normalizedName = '__$p' + parentName + '@' + (name || ''); - } - } else { - normalizedName = normalize(name, parentName); - } - - url = urlMap[normalizedName]; - if (!url) { - //Calculate url for the module, if it has a name. - if (req.toModuleUrl) { - //Special logic required for a particular engine, - //like Node. - url = req.toModuleUrl(context, normalizedName, parentModuleMap); - } else { - url = context.nameToUrl(normalizedName, null, parentModuleMap); - } - - //Store the URL mapping for later. - urlMap[normalizedName] = url; - } - } - - return { - prefix: prefix, - name: normalizedName, - parentMap: parentModuleMap, - url: url, - originalName: originalName, - fullName: prefix ? prefix + "!" + (normalizedName || '') : normalizedName - }; - } - - /** - * Determine if priority loading is done. If so clear the priorityWait - */ - function isPriorityDone() { - var priorityDone = true, - priorityWait = config.priorityWait, - priorityName, i; - if (priorityWait) { - for (i = 0; (priorityName = priorityWait[i]); i++) { - if (!loaded[priorityName]) { - priorityDone = false; - break; - } - } - if (priorityDone) { - delete config.priorityWait; - } - } - return priorityDone; - } - - /** - * Helper function that creates a setExports function for a "module" - * CommonJS dependency. Do this here to avoid creating a closure that - * is part of a loop. - */ - function makeSetExports(moduleObj) { - return function (exports) { - moduleObj.exports = exports; - }; - } - - function makeContextModuleFunc(func, relModuleMap, enableBuildCallback) { - return function () { - //A version of a require function that passes a moduleName - //value for items that may need to - //look up paths relative to the moduleName - var args = [].concat(aps.call(arguments, 0)), lastArg; - if (enableBuildCallback && - isFunction((lastArg = args[args.length - 1]))) { - lastArg.__requireJsBuild = true; - } - args.push(relModuleMap); - return func.apply(null, args); - }; - } - - /** - * Helper function that creates a require function object to give to - * modules that ask for it as a dependency. It needs to be specific - * per module because of the implication of path mappings that may - * need to be relative to the module name. - */ - function makeRequire(relModuleMap, enableBuildCallback) { - var modRequire = makeContextModuleFunc(context.require, relModuleMap, enableBuildCallback); - - mixin(modRequire, { - nameToUrl: makeContextModuleFunc(context.nameToUrl, relModuleMap), - toUrl: makeContextModuleFunc(context.toUrl, relModuleMap), - defined: makeContextModuleFunc(context.requireDefined, relModuleMap), - specified: makeContextModuleFunc(context.requireSpecified, relModuleMap), - ready: req.ready, - isBrowser: req.isBrowser - }); - //Something used by node. - if (req.paths) { - modRequire.paths = req.paths; - } - return modRequire; - } - - /** - * Used to update the normalized name for plugin-based dependencies - * after a plugin loads, since it can have its own normalization structure. - * @param {String} pluginName the normalized plugin module name. - */ - function updateNormalizedNames(pluginName) { - - var oldFullName, oldModuleMap, moduleMap, fullName, callbacks, - i, j, k, depArray, existingCallbacks, - maps = normalizedWaiting[pluginName]; - - if (maps) { - for (i = 0; (oldModuleMap = maps[i]); i++) { - oldFullName = oldModuleMap.fullName; - moduleMap = makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap); - fullName = moduleMap.fullName; - //Callbacks could be undefined if the same plugin!name was - //required twice in a row, so use empty array in that case. - callbacks = managerCallbacks[oldFullName] || []; - existingCallbacks = managerCallbacks[fullName]; - - if (fullName !== oldFullName) { - //Update the specified object, but only if it is already - //in there. In sync environments, it may not be yet. - if (oldFullName in specified) { - delete specified[oldFullName]; - specified[fullName] = true; - } - - //Update managerCallbacks to use the correct normalized name. - //If there are already callbacks for the normalized name, - //just add to them. - if (existingCallbacks) { - managerCallbacks[fullName] = existingCallbacks.concat(callbacks); - } else { - managerCallbacks[fullName] = callbacks; - } - delete managerCallbacks[oldFullName]; - - //In each manager callback, update the normalized name in the depArray. - for (j = 0; j < callbacks.length; j++) { - depArray = callbacks[j].depArray; - for (k = 0; k < depArray.length; k++) { - if (depArray[k] === oldFullName) { - depArray[k] = fullName; - } - } - } - } - } - } - - delete normalizedWaiting[pluginName]; - } - - /* - * Queues a dependency for checking after the loader is out of a - * "paused" state, for example while a script file is being loaded - * in the browser, where it may have many modules defined in it. - * - * depName will be fully qualified, no relative . or .. path. - */ - function queueDependency(dep) { - //Make sure to load any plugin and associate the dependency - //with that plugin. - var prefix = dep.prefix, - fullName = dep.fullName; - - //Do not bother if the depName is already in transit - if (specified[fullName] || fullName in defined) { - return; - } - - if (prefix && !plugins[prefix]) { - //Queue up loading of the dependency, track it - //via context.plugins. Mark it as a plugin so - //that the build system will know to treat it - //special. - plugins[prefix] = undefined; - - //Remember this dep that needs to have normaliztion done - //after the plugin loads. - (normalizedWaiting[prefix] || (normalizedWaiting[prefix] = [])) - .push(dep); - - //Register an action to do once the plugin loads, to update - //all managerCallbacks to use a properly normalized module - //name. - (managerCallbacks[prefix] || - (managerCallbacks[prefix] = [])).push({ - onDep: function (name, value) { - if (name === prefix) { - updateNormalizedNames(prefix); - } - } - }); - - queueDependency(makeModuleMap(prefix)); - } - - context.paused.push(dep); - } - - function execManager(manager) { - var i, ret, waitingCallbacks, err, errFile, errModuleTree, - cb = manager.callback, - fullName = manager.fullName, - args = [], - ary = manager.depArray; - - //Call the callback to define the module, if necessary. - if (cb && isFunction(cb)) { - //Pull out the defined dependencies and pass the ordered - //values to the callback. - if (ary) { - for (i = 0; i < ary.length; i++) { - args.push(manager.deps[ary[i]]); - } - } - - if (config.catchError.define) { - try { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } catch (e) { - err = e; - } - } else { - ret = req.execCb(fullName, manager.callback, args, defined[fullName]); - } - - if (fullName) { - //If setting exports via "module" is in play, - //favor that over return value and exports. After that, - //favor a non-undefined return value over exports use. - if (manager.cjsModule && manager.cjsModule.exports !== undefined) { - ret = defined[fullName] = manager.cjsModule.exports; - } else if (ret === undefined && manager.usingExports) { - //exports already set the defined value. - ret = defined[fullName]; - } else { - //Use the return value from the function. - defined[fullName] = ret; - } - } - } else if (fullName) { - //May just be an object definition for the module. Only - //worry about defining if have a module name. - ret = defined[fullName] = cb; - } - - //Clean up waiting. Do this before error calls, and before - //calling back waitingCallbacks, so that bookkeeping is correct - //in the event of an error and error is reported in correct order, - //since the waitingCallbacks will likely have errors if the - //onError function does not throw. - if (waiting[manager.waitId]) { - delete waiting[manager.waitId]; - manager.isDone = true; - context.waitCount -= 1; - if (context.waitCount === 0) { - //Clear the wait array used for cycles. - waitAry = []; - } - } - - if (err) { - errFile = (fullName ? makeModuleMap(fullName).url : '') || - err.fileName || err.sourceURL; - errModuleTree = err.moduleTree; - err = makeError('defineerror', 'Error evaluating ' + - 'module "' + fullName + '" at location "' + - errFile + '":\n' + - err + '\nfileName:' + errFile + - '\nlineNumber: ' + (err.lineNumber || err.line), err); - err.moduleName = fullName; - err.moduleTree = errModuleTree; - return req.onError(err); - } - - if (fullName) { - //If anything was waiting for this module to be defined, - //notify them now. - waitingCallbacks = managerCallbacks[fullName]; - if (waitingCallbacks) { - for (i = 0; i < waitingCallbacks.length; i++) { - waitingCallbacks[i].onDep(fullName, ret); - } - delete managerCallbacks[fullName]; - } - } - - return undefined; - } - - function main(inName, depArray, callback, relModuleMap) { - var moduleMap = makeModuleMap(inName, relModuleMap), - name = moduleMap.name, - fullName = moduleMap.fullName, - uniques = {}, - manager = { - //Use a wait ID because some entries are anon - //async require calls. - waitId: name || reqWaitIdPrefix + (waitIdCounter++), - depCount: 0, - depMax: 0, - prefix: moduleMap.prefix, - name: name, - fullName: fullName, - deps: {}, - depArray: depArray, - callback: callback, - onDep: function (depName, value) { - if (!(depName in manager.deps)) { - manager.deps[depName] = value; - manager.depCount += 1; - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } - } - } - }, - i, depArg, depName, cjsMod; - - if (fullName) { - //If module already defined for context, or already loaded, - //then leave. Also leave if jQuery is registering but it does - //not match the desired version number in the config. - if (fullName in defined || loaded[fullName] === true || - (fullName === "jquery" && config.jQuery && - config.jQuery !== callback().fn.jquery)) { - return; - } - - //Set specified/loaded here for modules that are also loaded - //as part of a layer, where onScriptLoad is not fired - //for those cases. Do this after the inline define and - //dependency tracing is done. - specified[fullName] = true; - loaded[fullName] = true; - - //If module is jQuery set up delaying its dom ready listeners. - if (fullName === "jquery" && callback) { - jQueryCheck(callback()); - } - } - - //Add the dependencies to the deps field, and register for callbacks - //on the dependencies. - for (i = 0; i < depArray.length; i++) { - depArg = depArray[i]; - //There could be cases like in IE, where a trailing comma will - //introduce a null dependency, so only treat a real dependency - //value as a dependency. - if (depArg) { - //Split the dependency name into plugin and name parts - depArg = makeModuleMap(depArg, (name ? moduleMap : relModuleMap)); - depName = depArg.fullName; - - //Fix the name in depArray to be just the name, since - //that is how it will be called back later. - depArray[i] = depName; - - //Fast path CommonJS standard dependencies. - if (depName === "require") { - manager.deps[depName] = makeRequire(moduleMap); - } else if (depName === "exports") { - //CommonJS module spec 1.1 - manager.deps[depName] = defined[fullName] = {}; - manager.usingExports = true; - } else if (depName === "module") { - //CommonJS module spec 1.1 - manager.cjsModule = cjsMod = manager.deps[depName] = { - id: name, - uri: name ? context.nameToUrl(name, null, relModuleMap) : undefined, - exports: defined[fullName] - }; - cjsMod.setExports = makeSetExports(cjsMod); - } else if (depName in defined && !(depName in waiting)) { - //Module already defined, no need to wait for it. - manager.deps[depName] = defined[depName]; - } else if (!uniques[depName]) { - - //A dynamic dependency. - manager.depMax += 1; - - queueDependency(depArg); - - //Register to get notification when dependency loads. - (managerCallbacks[depName] || - (managerCallbacks[depName] = [])).push(manager); - - uniques[depName] = true; - } - } - } - - //Do not bother tracking the manager if it is all done. - if (manager.depCount === manager.depMax) { - //All done, execute! - execManager(manager); - } else { - waiting[manager.waitId] = manager; - waitAry.push(manager); - context.waitCount += 1; - } - } - - /** - * Convenience method to call main for a define call that was put on - * hold in the defQueue. - */ - function callDefMain(args) { - main.apply(null, args); - //Mark the module loaded. Must do it here in addition - //to doing it in define in case a script does - //not call define - loaded[args[0]] = true; - } - - /** - * jQuery 1.4.3+ supports ways to hold off calling - * calling jQuery ready callbacks until all scripts are loaded. Be sure - * to track it if the capability exists.. Also, since jQuery 1.4.3 does - * not register as a module, need to do some global inference checking. - * Even if it does register as a module, not guaranteed to be the precise - * name of the global. If a jQuery is tracked for this context, then go - * ahead and register it as a module too, if not already in process. - */ - jQueryCheck = function (jqCandidate) { - if (!context.jQuery) { - var $ = jqCandidate || (typeof jQuery !== "undefined" ? jQuery : null); - - if ($) { - //If a specific version of jQuery is wanted, make sure to only - //use this jQuery if it matches. - if (config.jQuery && $.fn.jquery !== config.jQuery) { - return; - } - - if ("holdReady" in $ || "readyWait" in $) { - context.jQuery = $; - - //Manually create a "jquery" module entry if not one already - //or in process. Note this could trigger an attempt at - //a second jQuery registration, but does no harm since - //the first one wins, and it is the same value anyway. - callDefMain(["jquery", [], function () { - return jQuery; - }]); - - //Ask jQuery to hold DOM ready callbacks. - if (context.scriptCount) { - jQueryHoldReady($, true); - context.jQueryIncremented = true; - } - } - } - } - }; - - function forceExec(manager, traced) { - if (manager.isDone) { - return undefined; - } - - var fullName = manager.fullName, - depArray = manager.depArray, - depName, i; - if (fullName) { - if (traced[fullName]) { - return defined[fullName]; - } - - traced[fullName] = true; - } - - //forceExec all of its dependencies. - for (i = 0; i < depArray.length; i++) { - //Some array members may be null, like if a trailing comma - //IE, so do the explicit [i] access and check if it has a value. - depName = depArray[i]; - if (depName) { - if (!manager.deps[depName] && waiting[depName]) { - manager.onDep(depName, forceExec(waiting[depName], traced)); - } - } - } - - return fullName ? defined[fullName] : undefined; - } - - /** - * Checks if all modules for a context are loaded, and if so, evaluates the - * new ones in right dependency order. - * - * @private - */ - function checkLoaded() { - var waitInterval = config.waitSeconds * 1000, - //It is possible to disable the wait interval by using waitSeconds of 0. - expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), - noLoads = "", hasLoadedProp = false, stillLoading = false, prop, - err, manager; - - //If there are items still in the paused queue processing wait. - //This is particularly important in the sync case where each paused - //item is processed right away but there may be more waiting. - if (context.pausedCount > 0) { - return undefined; - } - - //Determine if priority loading is done. If so clear the priority. If - //not, then do not check - if (config.priorityWait) { - if (isPriorityDone()) { - //Call resume, since it could have - //some waiting dependencies to trace. - resume(); - } else { - return undefined; - } - } - - //See if anything is still in flight. - for (prop in loaded) { - if (!(prop in empty)) { - hasLoadedProp = true; - if (!loaded[prop]) { - if (expired) { - noLoads += prop + " "; - } else { - stillLoading = true; - break; - } - } - } - } - - //Check for exit conditions. - if (!hasLoadedProp && !context.waitCount) { - //If the loaded object had no items, then the rest of - //the work below does not need to be done. - return undefined; - } - if (expired && noLoads) { - //If wait time expired, throw error of unloaded modules. - err = makeError("timeout", "Load timeout for modules: " + noLoads); - err.requireType = "timeout"; - err.requireModules = noLoads; - return req.onError(err); - } - if (stillLoading || context.scriptCount) { - //Something is still waiting to load. Wait for it, but only - //if a timeout is not already in effect. - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function () { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - return undefined; - } - - //If still have items in the waiting cue, but all modules have - //been loaded, then it means there are some circular dependencies - //that need to be broken. - //However, as a waiting thing is fired, then it can add items to - //the waiting cue, and those items should not be fired yet, so - //make sure to redo the checkLoaded call after breaking a single - //cycle, if nothing else loaded then this logic will pick it up - //again. - if (context.waitCount) { - //Cycle through the waitAry, and call items in sequence. - for (i = 0; (manager = waitAry[i]); i++) { - forceExec(manager, {}); - } - - //Only allow this recursion to a certain depth. Only - //triggered by errors in calling a module in which its - //modules waiting on it cannot finish loading, or some circular - //dependencies that then may add more dependencies. - //The value of 5 is a bit arbitrary. Hopefully just one extra - //pass, or two for the case of circular dependencies generating - //more work that gets resolved in the sync node case. - if (checkLoadedDepth < 5) { - checkLoadedDepth += 1; - checkLoaded(); - } - } - - checkLoadedDepth = 0; - - //Check for DOM ready, and nothing is waiting across contexts. - req.checkReadyState(); - - return undefined; - } - - function callPlugin(pluginName, dep) { - var name = dep.name, - fullName = dep.fullName, - load; - - //Do not bother if plugin is already defined or being loaded. - if (fullName in defined || fullName in loaded) { - return; - } - - if (!plugins[pluginName]) { - plugins[pluginName] = defined[pluginName]; - } - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[fullName]) { - loaded[fullName] = false; - } - - load = function (ret) { - //Allow the build process to register plugin-loaded dependencies. - if (req.onPluginLoad) { - req.onPluginLoad(context, pluginName, name, ret); - } - - execManager({ - prefix: dep.prefix, - name: dep.name, - fullName: dep.fullName, - callback: function () { - return ret; - } - }); - loaded[fullName] = true; - }; - - //Allow plugins to load other code without having to know the - //context or how to "complete" the load. - load.fromText = function (moduleName, text) { - /*jslint evil: true */ - var hasInteractive = useInteractive; - - //Indicate a the module is in process of loading. - context.loaded[moduleName] = false; - context.scriptCount += 1; - - //Turn off interactive script matching for IE for any define - //calls in the text, then turn it back on at the end. - if (hasInteractive) { - useInteractive = false; - } - - req.exec(text); - - if (hasInteractive) { - useInteractive = true; - } - - //Support anonymous modules. - context.completeLoad(moduleName); - }; - - //Use parentName here since the plugin's name is not reliable, - //could be some weird string with no path that actually wants to - //reference the parentName's path. - plugins[pluginName].load(name, makeRequire(dep.parentMap, true), load, config); - } - - function loadPaused(dep) { - //Renormalize dependency if its name was waiting on a plugin - //to load, which as since loaded. - if (dep.prefix && dep.name && dep.name.indexOf('__$p') === 0 && defined[dep.prefix]) { - dep = makeModuleMap(dep.originalName, dep.parentMap); - } - - var pluginName = dep.prefix, - fullName = dep.fullName, - urlFetched = context.urlFetched; - - //Do not bother if the dependency has already been specified. - if (specified[fullName] || loaded[fullName]) { - return; - } else { - specified[fullName] = true; - } - - if (pluginName) { - //If plugin not loaded, wait for it. - //set up callback list. if no list, then register - //managerCallback for that plugin. - if (defined[pluginName]) { - callPlugin(pluginName, dep); - } else { - if (!pluginsQueue[pluginName]) { - pluginsQueue[pluginName] = []; - (managerCallbacks[pluginName] || - (managerCallbacks[pluginName] = [])).push({ - onDep: function (name, value) { - if (name === pluginName) { - var i, oldModuleMap, ary = pluginsQueue[pluginName]; - - //Now update all queued plugin actions. - for (i = 0; i < ary.length; i++) { - oldModuleMap = ary[i]; - //Update the moduleMap since the - //module name may be normalized - //differently now. - callPlugin(pluginName, - makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap)); - } - delete pluginsQueue[pluginName]; - } - } - }); - } - pluginsQueue[pluginName].push(dep); - } - } else { - if (!urlFetched[dep.url]) { - req.load(context, fullName, dep.url); - urlFetched[dep.url] = true; - } - } - } - - /** - * Resumes tracing of dependencies and then checks if everything is loaded. - */ - resume = function () { - var args, i, p; - - resumeDepth += 1; - - if (context.scriptCount <= 0) { - //Synchronous envs will push the number below zero with the - //decrement above, be sure to set it back to zero for good measure. - //require() calls that also do not end up loading scripts could - //push the number negative too. - context.scriptCount = 0; - } - - //Make sure any remaining defQueue items get properly processed. - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return req.onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); - } else { - callDefMain(args); - } - } - - //Skip the resume of paused dependencies - //if current context is in priority wait. - if (!config.priorityWait || isPriorityDone()) { - while (context.paused.length) { - p = context.paused; - context.pausedCount += p.length; - //Reset paused list - context.paused = []; - - for (i = 0; (args = p[i]); i++) { - loadPaused(args); - } - //Move the start time for timeout forward. - context.startTime = (new Date()).getTime(); - context.pausedCount -= p.length; - } - } - - //Only check if loaded when resume depth is 1. It is likely that - //it is only greater than 1 in sync environments where a factory - //function also then calls the callback-style require. In those - //cases, the checkLoaded should not occur until the resume - //depth is back at the top level. - if (resumeDepth === 1) { - checkLoaded(); - } - - resumeDepth -= 1; - - return undefined; - }; - - //Define the context object. Many of these fields are on here - //just to make debugging easier. - context = { - contextName: contextName, - config: config, - defQueue: defQueue, - waiting: waiting, - waitCount: 0, - specified: specified, - loaded: loaded, - urlMap: urlMap, - scriptCount: 0, - urlFetched: {}, - defined: defined, - paused: [], - pausedCount: 0, - plugins: plugins, - managerCallbacks: managerCallbacks, - makeModuleMap: makeModuleMap, - normalize: normalize, - /** - * Set a configuration for the context. - * @param {Object} cfg config object to integrate. - */ - configure: function (cfg) { - var paths, prop, packages, pkgs, packagePaths, requireWait; - - //Make sure the baseUrl ends in a slash. - if (cfg.baseUrl) { - if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== "/") { - cfg.baseUrl += "/"; - } - } - - //Save off the paths and packages since they require special processing, - //they are additive. - paths = config.paths; - packages = config.packages; - pkgs = config.pkgs; - - //Mix in the config values, favoring the new values over - //existing ones in context.config. - mixin(config, cfg, true); - - //Adjust paths if necessary. - if (cfg.paths) { - for (prop in cfg.paths) { - if (!(prop in empty)) { - paths[prop] = cfg.paths[prop]; - } - } - config.paths = paths; - } - - packagePaths = cfg.packagePaths; - if (packagePaths || cfg.packages) { - //Convert packagePaths into a packages config. - if (packagePaths) { - for (prop in packagePaths) { - if (!(prop in empty)) { - configurePackageDir(pkgs, packagePaths[prop], prop); - } - } - } - - //Adjust packages if necessary. - if (cfg.packages) { - configurePackageDir(pkgs, cfg.packages); - } - - //Done with modifications, assing packages back to context config - config.pkgs = pkgs; - } - - //If priority loading is in effect, trigger the loads now - if (cfg.priority) { - //Hold on to requireWait value, and reset it after done - requireWait = context.requireWait; - - //Allow tracing some require calls to allow the fetching - //of the priority config. - context.requireWait = false; - //But first, call resume to register any defined modules that may - //be in a data-main built file before the priority config - //call. Also grab any waiting define calls for this context. - context.takeGlobalQueue(); - resume(); - - context.require(cfg.priority); - - //Trigger a resume right away, for the case when - //the script with the priority load is done as part - //of a data-main call. In that case the normal resume - //call will not happen because the scriptCount will be - //at 1, since the script for data-main is being processed. - resume(); - - //Restore previous state. - context.requireWait = requireWait; - config.priorityWait = cfg.priority; - } - - //If a deps array or a config callback is specified, then call - //require with those args. This is useful when require is defined as a - //config object before require.js is loaded. - if (cfg.deps || cfg.callback) { - context.require(cfg.deps || [], cfg.callback); - } - - //Set up ready callback, if asked. Useful when require is defined as a - //config object before require.js is loaded. - if (cfg.ready) { - req.ready(cfg.ready); - } - }, - - requireDefined: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in defined; - }, - - requireSpecified: function (moduleName, relModuleMap) { - return makeModuleMap(moduleName, relModuleMap).fullName in specified; - }, - - require: function (deps, callback, relModuleMap) { - var moduleName, fullName, moduleMap; - if (typeof deps === "string") { - //Synchronous access to one module. If require.get is - //available (as in the Node adapter), prefer that. - //In this case deps is the moduleName and callback is - //the relModuleMap - if (req.get) { - return req.get(context, deps, callback); - } - - //Just return the module wanted. In this scenario, the - //second arg (if passed) is just the relModuleMap. - moduleName = deps; - relModuleMap = callback; - - //Normalize module name, if it contains . or .. - moduleMap = makeModuleMap(moduleName, relModuleMap); - fullName = moduleMap.fullName; - - if (!(fullName in defined)) { - return req.onError(makeError("notloaded", "Module name '" + - moduleMap.fullName + - "' has not been loaded yet for context: " + - contextName)); - } - return defined[fullName]; - } - - main(null, deps, callback, relModuleMap); - - //If the require call does not trigger anything new to load, - //then resume the dependency processing. - if (!context.requireWait) { - while (!context.scriptCount && context.paused.length) { - //For built layers, there can be some defined - //modules waiting for intake into the context, - //in particular module plugins. Take them. - context.takeGlobalQueue(); - resume(); - } - } - return context.require; - }, - - /** - * Internal method to transfer globalQueue items to this context's - * defQueue. - */ - takeGlobalQueue: function () { - //Push all the globalDefQueue items into the context's defQueue - if (globalDefQueue.length) { - //Array splice in the values since the context code has a - //local var ref to defQueue, so cannot just reassign the one - //on context. - apsp.apply(context.defQueue, - [context.defQueue.length - 1, 0].concat(globalDefQueue)); - globalDefQueue = []; - } - }, - - /** - * Internal method used by environment adapters to complete a load event. - * A load event could be a script load or just a load pass from a synchronous - * load call. - * @param {String} moduleName the name of the module to potentially complete. - */ - completeLoad: function (moduleName) { - var args; - - context.takeGlobalQueue(); - - while (defQueue.length) { - args = defQueue.shift(); - - if (args[0] === null) { - args[0] = moduleName; - break; - } else if (args[0] === moduleName) { - //Found matching define call for this script! - break; - } else { - //Some other named define call, most likely the result - //of a build layer that included many define calls. - callDefMain(args); - args = null; - } - } - if (args) { - callDefMain(args); - } else { - //A script that does not call define(), so just simulate - //the call for it. Special exception for jQuery dynamic load. - callDefMain([moduleName, [], - moduleName === "jquery" && typeof jQuery !== "undefined" ? - function () { - return jQuery; - } : null]); - } - - //Mark the script as loaded. Note that this can be different from a - //moduleName that maps to a define call. This line is important - //for traditional browser scripts. - loaded[moduleName] = true; - - //If a global jQuery is defined, check for it. Need to do it here - //instead of main() since stock jQuery does not register as - //a module via define. - jQueryCheck(); - - //Doing this scriptCount decrement branching because sync envs - //need to decrement after resume, otherwise it looks like - //loading is complete after the first dependency is fetched. - //For browsers, it works fine to decrement after, but it means - //the checkLoaded setTimeout 50 ms cost is taken. To avoid - //that cost, decrement beforehand. - if (req.isAsync) { - context.scriptCount -= 1; - } - resume(); - if (!req.isAsync) { - context.scriptCount -= 1; - } - }, - - /** - * Converts a module name + .extension into an URL path. - * *Requires* the use of a module name. It does not support using - * plain URLs like nameToUrl. - */ - toUrl: function (moduleNamePlusExt, relModuleMap) { - var index = moduleNamePlusExt.lastIndexOf("."), - ext = null; - - if (index !== -1) { - ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - - return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap); - }, - - /** - * Converts a module name to a file path. Supports cases where - * moduleName may actually be just an URL. - */ - nameToUrl: function (moduleName, ext, relModuleMap) { - var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, - config = context.config; - - //Normalize module name if have a base relative module name to work from. - moduleName = normalize(moduleName, relModuleMap && relModuleMap.fullName); - - //If a colon is in the URL, it indicates a protocol is used and it is just - //an URL to a file, or if it starts with a slash or ends with .js, it is just a plain file. - //The slash is important for protocol-less URLs as well as full paths. - if (req.jsExtRegExp.test(moduleName)) { - //Just a plain path, not module name lookup, so just return it. - //Add extension if it is included. This is a bit wonky, only non-.js things pass - //an extension, this method probably needs to be reworked. - url = moduleName + (ext ? ext : ""); - } else { - //A module that needs to be converted to a path. - paths = config.paths; - pkgs = config.pkgs; - - syms = moduleName.split("/"); - //For each module name segment, see if there is a path - //registered for it. Start with most specific name - //and work up from it. - for (i = syms.length; i > 0; i--) { - parentModule = syms.slice(0, i).join("/"); - if (paths[parentModule]) { - syms.splice(0, i, paths[parentModule]); - break; - } else if ((pkg = pkgs[parentModule])) { - //If module name is just the package name, then looking - //for the main module. - if (moduleName === pkg.name) { - pkgPath = pkg.location + '/' + pkg.main; - } else { - pkgPath = pkg.location; - } - syms.splice(0, i, pkgPath); - break; - } - } - - //Join the path parts together, then figure out if baseUrl is needed. - url = syms.join("/") + (ext || ".js"); - url = (url.charAt(0) === '/' || url.match(/^\w+:/) ? "" : config.baseUrl) + url; - } - - return config.urlArgs ? url + - ((url.indexOf('?') === -1 ? '?' : '&') + - config.urlArgs) : url; - } - }; - - //Make these visible on the context so can be called at the very - //end of the file to bootstrap - context.jQueryCheck = jQueryCheck; - context.resume = resume; - - return context; - } - - /** - * Main entry point. - * - * If the only argument to require is a string, then the module that - * is represented by that string is fetched for the appropriate context. - * - * If the first argument is an array, then it will be treated as an array - * of dependency string names to fetch. An optional function callback can - * be specified to execute when all of those dependencies are available. - * - * Make a local req variable to help Caja compliance (it assumes things - * on a require that are not standardized), and to give a short - * name for minification/local scope use. - */ - req = requirejs = function (deps, callback) { - - //Find the right context, use default - var contextName = defContextName, - context, config; - - // Determine if have config object in the call. - if (!isArray(deps) && typeof deps !== "string") { - // deps is a config object - config = deps; - if (isArray(callback)) { - // Adjust args if there are dependencies - deps = callback; - callback = arguments[2]; - } else { - deps = []; - } - } - - if (config && config.context) { - contextName = config.context; - } - - context = contexts[contextName] || - (contexts[contextName] = newContext(contextName)); - - if (config) { - context.configure(config); - } - - return context.require(deps, callback); - }; - - /** - * Support require.config() to make it easier to cooperate with other - * AMD loaders on globally agreed names. - */ - req.config = function (config) { - return req(config); - }; - - /** - * Export require as a global, but only if it does not already exist. - */ - if (typeof require === "undefined") { - require = req; - } - - /** - * Global require.toUrl(), to match global require, mostly useful - * for debugging/work in the global space. - */ - req.toUrl = function (moduleNamePlusExt) { - return contexts[defContextName].toUrl(moduleNamePlusExt); - }; - - req.version = version; - req.isArray = isArray; - req.isFunction = isFunction; - req.mixin = mixin; - //Used to filter out dependencies that are already paths. - req.jsExtRegExp = /^\/|:|\?|\.js$/; - s = req.s = { - contexts: contexts, - //Stores a list of URLs that should not get async script tag treatment. - skipAsync: {}, - isPageLoaded: !isBrowser, - readyCalls: [] - }; - - req.isAsync = req.isBrowser = isBrowser; - if (isBrowser) { - head = s.head = document.getElementsByTagName("head")[0]; - //If BASE tag is in play, using appendChild is a problem for IE6. - //When that browser dies, this can be removed. Details in this jQuery bug: - //http://dev.jquery.com/ticket/2709 - baseElement = document.getElementsByTagName("base")[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - - /** - * Any errors that require explicitly generates will be passed to this - * function. Intercept/override it if you want custom error handling. - * @param {Error} err the error object. - */ - req.onError = function (err) { - throw err; - }; - - /** - * Does the request to load a module for the browser case. - * Make this a separate function to allow other environments - * to override it. - * - * @param {Object} context the require context to find state. - * @param {String} moduleName the name of the module. - * @param {Object} url the URL to the module. - */ - req.load = function (context, moduleName, url) { - var loaded = context.loaded; - - isDone = false; - - //Only set loaded to false for tracking if it has not already been set. - if (!loaded[moduleName]) { - loaded[moduleName] = false; - } - - context.scriptCount += 1; - req.attach(url, context, moduleName); - - //If tracking a jQuery, then make sure its ready callbacks - //are put on hold to prevent its ready callbacks from - //triggering too soon. - if (context.jQuery && !context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, true); - context.jQueryIncremented = true; - } - }; - - function getInteractiveScript() { - var scripts, i, script; - if (interactiveScript && interactiveScript.readyState === 'interactive') { - return interactiveScript; - } - - scripts = document.getElementsByTagName('script'); - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - if (script.readyState === 'interactive') { - return (interactiveScript = script); - } - } - - return null; - } - - /** - * The function that handles definitions of modules. Differs from - * require() in that a string for the module should be the first argument, - * and the function to execute after dependencies are loaded should - * return a value to define the module corresponding to the first argument's - * name. - */ - define = req.def = function (name, deps, callback) { - var node, context; - - //Allow for anonymous functions - if (typeof name !== 'string') { - //Adjust args appropriately - callback = deps; - deps = name; - name = null; - } - - //This module may not have dependencies - if (!req.isArray(deps)) { - callback = deps; - deps = []; - } - - //If no name, and callback is a function, then figure out if it a - //CommonJS thing with dependencies. - if (!name && !deps.length && req.isFunction(callback)) { - //Remove comments from the callback string, - //look for require calls, and pull them into the dependencies, - //but only if there are function args. - if (callback.length) { - callback - .toString() - .replace(commentRegExp, "") - .replace(cjsRequireRegExp, function (match, dep) { - deps.push(dep); - }); - - //May be a CommonJS thing even without require calls, but still - //could use exports, and module. Avoid doing exports and module - //work though if it just needs require. - //REQUIRES the function to expect the CommonJS variables in the - //order listed below. - deps = (callback.length === 1 ? ["require"] : ["require", "exports", "module"]).concat(deps); - } - } - - //If in IE 6-8 and hit an anonymous define() call, do the interactive - //work. - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute("data-requiremodule"); - } - context = contexts[node.getAttribute("data-requirecontext")]; - } - } - - //Always save off evaluating the def call until the script onload handler. - //This allows multiple modules to be in a file without prematurely - //tracing dependencies, and allows for anonymous module support, - //where the module name is not known until the script onload event - //occurs. If no context, use the global queue, and get it processed - //in the onscript load callback. - (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); - - return undefined; - }; - - define.amd = { - multiversion: true, - plugins: true, - jQuery: true - }; - - /** - * Executes the text. Normally just uses eval, but can be modified - * to use a more environment specific call. - * @param {String} text the text to execute/evaluate. - */ - req.exec = function (text) { - return eval(text); - }; - - /** - * Executes a module callack function. Broken out as a separate function - * solely to allow the build system to sequence the files in the built - * layer in the right sequence. - * - * @private - */ - req.execCb = function (name, callback, args, exports) { - return callback.apply(exports, args); - }; - - /** - * callback for script loads, used to check status of loading. - * - * @param {Event} evt the event from the browser for the script - * that was loaded. - * - * @private - */ - req.onScriptLoad = function (evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - var node = evt.currentTarget || evt.srcElement, contextName, moduleName, - context; - - if (evt.type === "load" || readyRegExp.test(node.readyState)) { - //Reset interactive script so a script node is not held onto for - //to long. - interactiveScript = null; - - //Pull out the name of the module and the context. - contextName = node.getAttribute("data-requirecontext"); - moduleName = node.getAttribute("data-requiremodule"); - context = contexts[contextName]; - - contexts[contextName].completeLoad(moduleName); - - //Clean up script binding. Favor detachEvent because of IE9 - //issue, see attachEvent/addEventListener comment elsewhere - //in this file. - if (node.detachEvent && !isOpera) { - //Probably IE. If not it will throw an error, which will be - //useful to know. - node.detachEvent("onreadystatechange", req.onScriptLoad); - } else { - node.removeEventListener("load", req.onScriptLoad, false); - } - } - }; - - /** - * Attaches the script represented by the URL to the current - * environment. Right now only supports browser loading, - * but can be redefined in other environments to do the right thing. - * @param {String} url the url of the script to attach. - * @param {Object} context the context that wants the script. - * @param {moduleName} the name of the module that is associated with the script. - * @param {Function} [callback] optional callback, defaults to require.onScriptLoad - * @param {String} [type] optional type, defaults to text/javascript - */ - req.attach = function (url, context, moduleName, callback, type) { - var node, loaded; - if (isBrowser) { - //In the browser so use a script tag - callback = callback || req.onScriptLoad; - node = context && context.config && context.config.xhtml ? - document.createElementNS("http://www.w3.org/1999/xhtml", "html:script") : - document.createElement("script"); - node.type = type || "text/javascript"; - node.charset = "utf-8"; - //Use async so Gecko does not block on executing the script if something - //like a long-polling comet tag is being run first. Gecko likes - //to evaluate scripts in DOM order, even for dynamic scripts. - //It will fetch them async, but only evaluate the contents in DOM - //order, so a long-polling script tag can delay execution of scripts - //after it. But telling Gecko we expect async gets us the behavior - //we want -- execute it whenever it is finished downloading. Only - //Helps Firefox 3.6+ - //Allow some URLs to not be fetched async. Mostly helps the order! - //plugin - node.async = !s.skipAsync[url]; - - if (context) { - node.setAttribute("data-requirecontext", context.contextName); - } - node.setAttribute("data-requiremodule", moduleName); - - //Set up load listener. Test attachEvent first because IE9 has - //a subtle issue in its addEventListener and script onload firings - //that do not match the behavior of all other browsers with - //addEventListener support, which fire the onload event for a - //script right after the script execution. See: - //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution - //UNFORTUNATELY Opera implements attachEvent but does not follow the script - //script execution mode. - if (node.attachEvent && !isOpera) { - //Probably IE. IE (at least 6-8) do not fire - //script onload right after executing the script, so - //we cannot tie the anonymous define call to a name. - //However, IE reports the script as being in "interactive" - //readyState at the time of the define call. - useInteractive = true; - node.attachEvent("onreadystatechange", callback); - } else { - node.addEventListener("load", callback, false); - } - node.src = url; - - //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous define - //call to the module name (which is stored on the node), hold on - //to a reference to this node, but clear after the DOM insertion. - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - return node; - } else if (isWebWorker) { - //In a web worker, use importScripts. This is not a very - //efficient use of importScripts, importScripts will block until - //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation that a build has been done so that - //only one script needs to be loaded anyway. This may need to be - //reevaluated if other use cases become common. - loaded = context.loaded; - loaded[moduleName] = false; - - importScripts(url); - - //Account for anonymous modules - context.completeLoad(moduleName); - } - return null; - }; - - //Look for a data-main script attribute, which could also adjust the baseUrl. - if (isBrowser) { - //Figure out baseUrl. Get it from the script tag with require.js in it. - scripts = document.getElementsByTagName("script"); - - for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) { - //Set the "head" where we can append children by - //using the script's parent. - if (!head) { - head = script.parentNode; - } - - //Look for a data-main attribute to set main script for the page - //to load. If it is there, the path to data main becomes the - //baseUrl, if it is not already set. - if ((dataMain = script.getAttribute('data-main'))) { - if (!cfg.baseUrl) { - //Pull off the directory of data-main for use as the - //baseUrl. - src = dataMain.split('/'); - mainScript = src.pop(); - subPath = src.length ? src.join('/') + '/' : './'; - - //Set final config. - cfg.baseUrl = subPath; - //Strip off any trailing .js since dataMain is now - //like a module name. - dataMain = mainScript.replace(jsSuffixRegExp, ''); - } - - //Put the data-main script in the files to load. - cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; - - break; - } - } - } - - //Set baseUrl based on config. - s.baseUrl = cfg.baseUrl; - - //****** START page load functionality **************** - /** - * Sets the page as loaded and triggers check for all modules loaded. - */ - req.pageLoaded = function () { - if (!s.isPageLoaded) { - s.isPageLoaded = true; - if (scrollIntervalId) { - clearInterval(scrollIntervalId); - } - - //Part of a fix for FF < 3.6 where readyState was not set to - //complete so libraries like jQuery that check for readyState - //after page load where not getting initialized correctly. - //Original approach suggested by Andrea Giammarchi: - //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html - //see other setReadyState reference for the rest of the fix. - if (setReadyState) { - document.readyState = "complete"; - } - - req.callReady(); - } - }; - - //See if there is nothing waiting across contexts, and if not, trigger - //callReady. - req.checkReadyState = function () { - var contexts = s.contexts, prop; - for (prop in contexts) { - if (!(prop in empty)) { - if (contexts[prop].waitCount) { - return; - } - } - } - s.isDone = true; - req.callReady(); - }; - - /** - * Internal function that calls back any ready functions. If you are - * integrating RequireJS with another library without require.ready support, - * you can define this method to call your page ready code instead. - */ - req.callReady = function () { - var callbacks = s.readyCalls, i, callback, contexts, context, prop; - - if (s.isPageLoaded && s.isDone) { - if (callbacks.length) { - s.readyCalls = []; - for (i = 0; (callback = callbacks[i]); i++) { - callback(); - } - } - - //If jQuery with DOM ready delayed, release it now. - contexts = s.contexts; - for (prop in contexts) { - if (!(prop in empty)) { - context = contexts[prop]; - if (context.jQueryIncremented) { - jQueryHoldReady(context.jQuery, false); - context.jQueryIncremented = false; - } - } - } - } - }; - - /** - * Registers functions to call when the page is loaded - */ - req.ready = function (callback) { - if (s.isPageLoaded && s.isDone) { - callback(); - } else { - s.readyCalls.push(callback); - } - return req; - }; - - if (isBrowser) { - if (document.addEventListener) { - //Standards. Hooray! Assumption here that if standards based, - //it knows about DOMContentLoaded. - document.addEventListener("DOMContentLoaded", req.pageLoaded, false); - window.addEventListener("load", req.pageLoaded, false); - //Part of FF < 3.6 readystate fix (see setReadyState refs for more info) - if (!document.readyState) { - setReadyState = true; - document.readyState = "loading"; - } - } else if (window.attachEvent) { - window.attachEvent("onload", req.pageLoaded); - - //DOMContentLoaded approximation, as found by Diego Perini: - //http://javascript.nwbox.com/IEContentLoaded/ - if (self === self.top) { - scrollIntervalId = setInterval(function () { - try { - //From this ticket: - //http://bugs.dojotoolkit.org/ticket/11106, - //In IE HTML Application (HTA), such as in a selenium test, - //javascript in the iframe can't see anything outside - //of it, so self===self.top is true, but the iframe is - //not the top window and doScroll will be available - //before document.body is set. Test document.body - //before trying the doScroll trick. - if (document.body) { - document.documentElement.doScroll("left"); - req.pageLoaded(); - } - } catch (e) {} - }, 30); - } - } - - //Check if document already complete, and if so, just trigger page load - //listeners. NOTE: does not work with Firefox before 3.6. To support - //those browsers, manually call require.pageLoaded(). - if (document.readyState === "complete") { - req.pageLoaded(); - } - } - //****** END page load functionality **************** - - //Set up default context. If require was a configuration object, use that as base config. - req(cfg); - - //If modules are built into require.js, then need to make sure dependencies are - //traced. Use a setTimeout in the browser world, to allow all the modules to register - //themselves. In a non-browser env, assume that modules are not built into require.js, - //which seems odd to do on the server. - if (req.isAsync && typeof setTimeout !== "undefined") { - ctx = s.contexts[(cfg.context || defContextName)]; - //Indicate that the script that includes require() is still loading, - //so that require()'d dependencies are not traced until the end of the - //file is parsed (approximated via the setTimeout call). - ctx.requireWait = true; - setTimeout(function () { - ctx.requireWait = false; - - //Any modules included with the require.js file will be in the - //global queue, assign them to this context. - ctx.takeGlobalQueue(); - - //Allow for jQuery to be loaded/already in the page, and if jQuery 1.4.3, - //make sure to hold onto it for readyWait triggering. - ctx.jQueryCheck(); - - if (!ctx.scriptCount) { - ctx.resume(); - } - req.checkReadyState(); - }, 0); - } -}()); diff --git a/temp/idbwrapper/0.3.0/package/example/objectstore/app.js b/temp/idbwrapper/0.3.0/package/example/objectstore/app.js deleted file mode 100644 index 21e828a52..000000000 --- a/temp/idbwrapper/0.3.0/package/example/objectstore/app.js +++ /dev/null @@ -1,93 +0,0 @@ -require(['../../IDBStore.js'], function(IDBStore){ - - var objStore; - - var nodeCache = {}; - - function init(){ - - // create a store ("table") - objStore = new IDBStore({ - storeName: 'objectstore', - keyPath: 'id', - autoIncrement: true, - onStoreReady: refreshTable - }); - - // create references for some nodes we have to work with - ['submit', 'results-container'].forEach(function(id){ - nodeCache[id] = document.getElementById(id); - }); - - // and listen to the form's submit button. - nodeCache.submit.addEventListener('click', enterData); - } - - function refreshTable(){ - objStore.getAll(listItems); - } - - function listItems(data){ - var header, tpl, - props = ['id'], - content = ''; - - data.forEach(function(item){ - for(var prop in item){ - if(props.indexOf(prop) < 0){ - props.push(prop); - } - } - }); - - header = '' + props.join('') + ''; - tpl = '{' + props.join('}{') + '}'; - - data.forEach(function(item){ - content += tpl.replace(/\{([^\}]+)\}/g, function(_, key){ - return item[key] || ''; - }); - }); - - nodeCache['results-container'].innerHTML = '' + header + content + '
'; - } - - function enterData(){ - // read data from inputs - var propName, value, hasData, - data = {}, - count = 4; - - while(--count){ - propName = document.getElementById('prop_' + count).value.trim(); - if(propName.length){ - hasData = true; - value = document.getElementById('value_' + count).value.trim(); - // Don't do this at home. This is just a very dirty hack to 'guess' what - // type of data you just entered. If you do stuff like this in production - // code, UNICORNS WILL DIE. You have been warned. - data[propName] = ['{', '['].indexOf(value.substring(0,1)) !== -1 ? eval('(' + value + ')') : parseInt(value, 10) || value; - } - } - if(!hasData){ - return; - } - - // and store them away. - objStore.put(data, refreshTable); - } - - function clear(){ - objStore.clear(refreshTable); - } - - // export some functions to the outside to - // make the onclick="" attributes work. - window.app = { - clear: clear - }; - - // go! - init(); - -}); \ No newline at end of file diff --git a/temp/idbwrapper/0.3.0/package/example/objectstore/index.html b/temp/idbwrapper/0.3.0/package/example/objectstore/index.html deleted file mode 100644 index 44a316628..000000000 --- a/temp/idbwrapper/0.3.0/package/example/objectstore/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - IDBWrapper ObjectStore Example - - - - - -
-
- QueryResults -
-
-
-
-

- IDB is not a relational database; it's an object store. That means you - have - no such things as fixed, defined columns.
- Just enter any name as key and anything as value.
-
- To enter non-primitive values, use literal notaion. -

- - - - - - - - - - - - - - - - - - - - - -
KeyValue
- -
-
- -
-
-
- - - diff --git a/temp/idbwrapper/0.3.0/package/example/objectstore/style.css b/temp/idbwrapper/0.3.0/package/example/objectstore/style.css deleted file mode 100644 index 5bdb6b0f7..000000000 --- a/temp/idbwrapper/0.3.0/package/example/objectstore/style.css +++ /dev/null @@ -1,93 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.3.0/package/example/quicktest/index.html b/temp/idbwrapper/0.3.0/package/example/quicktest/index.html deleted file mode 100644 index 1150ff518..000000000 --- a/temp/idbwrapper/0.3.0/package/example/quicktest/index.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - IndexedDB Wrapper Quick Test - - - - -
-

Open the console and click 'Open DB'. You will then see a bunch of buttons - that allow data manipulation. Click them, and check the console for - results.

- - - -
- - - - - diff --git a/temp/idbwrapper/0.3.0/package/example/quicktest/style.css b/temp/idbwrapper/0.3.0/package/example/quicktest/style.css deleted file mode 100644 index 90f382838..000000000 --- a/temp/idbwrapper/0.3.0/package/example/quicktest/style.css +++ /dev/null @@ -1,94 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; - text-decoration: none; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; -} -.hbox { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; - -ms-flex-direction: row; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -ms-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff, #e5e5e5); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.3.0/package/example/style.css b/temp/idbwrapper/0.3.0/package/example/style.css deleted file mode 100644 index fb96076ca..000000000 --- a/temp/idbwrapper/0.3.0/package/example/style.css +++ /dev/null @@ -1,87 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - width: 100%; - height: 100%; - margin: 0; - font-family: sans-serif; -} -a { - color: black; -} - -/* box setup */ -.vbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: vertical; - -moz-box-orient: vertical; -} -.hbox { - display: -webkit-box; - display: -moz-box; - -webkit-box-orient: horizontal; - -moz-box-orient: horizontal; -} -.flex { - -webkit-box-flex: 1; - -moz-box-flex: 1; -} -.container { - overflow: auto; - padding: 10px; -} - -/* head */ -#head { - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); - padding: 10px; - border-bottom: solid 1px #9E9E9E; -} - -/* table */ -#results-container { - border-right: solid 1px black; - padding: 10px; - overflow: auto; -} -#results-container table { - border-collapse: collapse; -} -#results-container th { - border-bottom: solid 1px #808080; -} -#results-container th, -#results-container td { - padding: 2px 5px; - font-size: 14px; -} -#results-container input { - border: none; - border-bottom: solid 1px white; - font-size: 14px; -} -#results-container input:hover, -#results-container input:active { - border-bottom: dotted 1px black; -} - -/* input */ -#input { - padding: 10px; - width: 300px; -} -#input div { - padding: 5px; -} -#input label { - display: inline-block; - width: 100px; -} - -#clear { - padding: 10px; -} \ No newline at end of file diff --git a/temp/idbwrapper/0.3.0/package/package.json b/temp/idbwrapper/0.3.0/package/package.json deleted file mode 100644 index d7f9f7051..000000000 --- a/temp/idbwrapper/0.3.0/package/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "idb-wrapper", - "version": "0.3.0", - "description": "A cross-browser wrapper for IndexedDB", - "keywords": [], - "author": "jensarps (http://jensarps.de/)", - "repository": "git://github.com/jensarps/IDBWrapper.git", - "main": "IDBStore", - "homepage": "https://github.com/jensarps/IDBWrapper", - "contributors": [ - "Josh Matthews (http://www.joshmatthews.net/blog/)", - "Raynos (http://raynos.org)" - ], - "bugs": { - "url": "https://github.com/jensarps/IDBWrapper/issues", - "email": "mail@jensarps.de" - }, - "dependencies": { - }, - "devDependencies": { - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/jensarps/IDBWrapper/raw/master/LICENSE" - } - ], - "scripts": { - } -} diff --git a/temp/loglevel/0.1.0/dist.tar.gz b/temp/loglevel/0.1.0/dist.tar.gz deleted file mode 100644 index bec4c3cf8e90c60d38f4712f2a635d3ddd241e1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12226 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 QxQeg;2fcaU@BrWd0Hz_tY5)KL diff --git a/temp/loglevel/0.1.0/package/.jshintrc b/temp/loglevel/0.1.0/package/.jshintrc deleted file mode 100644 index 284ce67f0..000000000 --- a/temp/loglevel/0.1.0/package/.jshintrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": true, - "newcap": true, - "noarg": true, - "sub": true, - "undef": true, - "unused": true, - "boss": true, - "eqnull": true, - "node": true, - "es5": true -} diff --git a/temp/loglevel/0.1.0/package/.npmignore b/temp/loglevel/0.1.0/package/.npmignore deleted file mode 100644 index 674a52cf9..000000000 --- a/temp/loglevel/0.1.0/package/.npmignore +++ /dev/null @@ -1,21 +0,0 @@ -/node_modules/ -/.idea/ -lib-cov -*.seed -*.log -*.csv -*.dat -*.out -*.pid -*.gz - -pids -logs -results - -npm-debug.log -*.iml -/dist - -_SpecRunner.html -.grunt \ No newline at end of file diff --git a/temp/loglevel/0.1.0/package/.travis.yml b/temp/loglevel/0.1.0/package/.travis.yml deleted file mode 100644 index 9a61f6bd7..000000000 --- a/temp/loglevel/0.1.0/package/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" \ No newline at end of file diff --git a/temp/loglevel/0.1.0/package/Gruntfile.js b/temp/loglevel/0.1.0/package/Gruntfile.js deleted file mode 100644 index 7d1ded4a6..000000000 --- a/temp/loglevel/0.1.0/package/Gruntfile.js +++ /dev/null @@ -1,141 +0,0 @@ -'use strict'; - -module.exports = function (grunt) { - - // Project configuration. - grunt.initConfig({ - // Metadata. - pkg: grunt.file.readJSON('package.json'), - banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' + - '<%= grunt.template.today("yyyy-mm-dd") %>\n' + - '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' + - '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + - ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */\n', - // Task configuration. - concat: { - options: { - banner: '<%= banner %>', - stripBanners: true - }, - dist: { - src: ['lib/<%= pkg.name %>.js'], - dest: 'dist/<%= pkg.name %>.js' - }, - }, - uglify: { - options: { - banner: '<%= banner %>' - }, - dist: { - src: '<%= concat.dist.dest %>', - dest: 'dist/<%= pkg.name %>.min.js' - }, - }, - jasmine: { - src: 'src/**/*.js', - options: { - specs: 'test/*-test.js', - vendor: 'test/vendor/*.js', - template: require('grunt-template-jasmine-requirejs') - } - }, - open: { - jasmine: { - path: 'http://127.0.0.1:8000/_SpecRunner.html' - } - }, - connect: { - test: { - port: 8000, - keepalive: true - } - }, - 'saucelabs-jasmine': { - all: { - username: 'pimterry', - key: 'KEY', - urls: ['http://localhost:8000/_SpecRunner.html'], - browsers: [ - {"browserName": "iehta", "platform": "Windows 2008", "version": "9"}, - // {"browserName": "firefox", "platform": "Windows 2003", "version": "3.0"}, - // {"browserName": "firefox", "platform": "Windows 2003", "version": "3.5"}, - {"browserName": "firefox", "platform": "Windows 2003", "version": "3.6"}, - {"browserName": "firefox", "platform": "Windows 2003", "version": "4"}, - {"browserName": "firefox", "platform": "Windows 2003", "version": "19"}, - {"browserName": "safari", "platform": "Mac 10.6", "version": "5"}, - {"browserName": "safari", "platform": "Mac 10.8", "version": "6"}, - {"browserName": "googlechrome", "platform": "Windows 2003"}, - {"browserName": "opera", "platform": "Windows 2003", "version": "12"}, - {"browserName": "iehta", "platform": "Windows 2003", "version": "6"}, - {"browserName": "iehta", "platform": "Windows 2003", "version": "7"}, - {"browserName": "iehta", "platform": "Windows 2008", "version": "8"}, - ], - concurrency: 3, - detailedError: true, - testTimeout:10000, - testInterval:1000, - testReadyTimeout:2000, - testname: 'loglevel jasmine test', - tags: [process.env.TRAVIS_REPO_SLUG || "local", process.env.TRAVIS_COMMIT || "manual"] - } - }, - jshint: { - options: { - jshintrc: '.jshintrc' - }, - gruntfile: { - src: 'Gruntfile.js' - }, - lib: { - options: { - jshintrc: 'lib/.jshintrc' - }, - src: ['lib/**/*.js'] - }, - test: { - options: { - jshintrc: 'test/.jshintrc' - }, - src: ['test/*.js'] - }, - }, - watch: { - gruntfile: { - files: '<%= jshint.gruntfile.src %>', - tasks: ['jshint:gruntfile'] - }, - lib: { - files: '<%= jshint.lib.src %>', - tasks: ['jshint:lib', 'jasmine'] - }, - test: { - files: '<%= jshint.test.src %>', - tasks: ['jshint:test', 'jasmine'] - }, - }, - }); - - // These plugins provide necessary tasks. - grunt.loadNpmTasks('grunt-contrib-concat'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-jasmine'); - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-contrib-watch'); - - grunt.loadNpmTasks('grunt-contrib-connect'); - grunt.loadNpmTasks('grunt-open'); - grunt.loadNpmTasks('grunt-saucelabs'); - - // Default task. - grunt.registerTask('default', ['jshint', 'jasmine', 'concat', 'uglify']); - - // Just tests - grunt.registerTask('test', ['jshint', 'jasmine']); - - // Test with a live server and an actual browser - grunt.registerTask('integration-test', ['jasmine:src:build', 'connect:test:keepalive', 'open:jasmine']); - - // Test with lots of browsers on saucelabs - grunt.registerTask('saucelabs', ['jasmine:src:build', 'connect:test', 'saucelabs-jasmine']); - -}; diff --git a/temp/loglevel/0.1.0/package/LICENSE-MIT b/temp/loglevel/0.1.0/package/LICENSE-MIT deleted file mode 100644 index d384208be..000000000 --- a/temp/loglevel/0.1.0/package/LICENSE-MIT +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2013 Tim Perry - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/temp/loglevel/0.1.0/package/README.md b/temp/loglevel/0.1.0/package/README.md deleted file mode 100644 index 8c6de08cc..000000000 --- a/temp/loglevel/0.1.0/package/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# loglevel [![Build Status](https://travis-ci.org/pimterry/loglevel.png)](https://travis-ci.org/pimterry/loglevel) - -========================================================= - -Minimal lightweight simple logging for JavaScript. loglevel replaces console.log() and friends with level-based logging and filtering, with none of console's downsides. - -This is a barebones reliable everyday logging library. It does not do fancy things, it does not let you reconfigure appenders or add complex log filtering rules or boil tea (more's the pity), but it does have the all core functionality that you actually use: - -## Features - -### Simple - -* Log things at a given level (trace/debug/info/warn/error) to the console object (as seen in all modern browers & node.js) -* Filter logging by level (all the above or 'silent'), so you can disable all but error logging in production, and then run log.setLevel("trace") in your console to turn it all back on for a furious debugging session - -### Effective - -* Log methods gracefully fall back to simpler console logging methods if more specific ones aren't available: so calls to log.debug() go to console.debug() if possible, or console.log() if not -* Logging calls still succeed even if there's no console object at all, so your site doesn't break when people visit with old browsers that don't support the console object (here's looking at you IE) and similar -* This then comes together giving a consistent reliable API that works in every JavaScript environment with a console available, and doesn't break anything anywhere else (er, *not quite true yet*: see #5) - -### Convenient - -* Log output keeps line numbers: most JS logging frameworks call console.log methods through wrapper functions, clobbering your stacktrace and making the extra info many browsers provide useless. We'll have none of that thanks. -* It works with all the standard JavaScript loading systems out of the box (CommonJS, AMD, or just as a global) -* Logging is filtered to silent by default, to keep your live site clean (or you can trivially re-enable it with an initial log.enableAll() call) - -## Downloading loglevel - -If you're using node, you can run `npm install loglevel`. (n.b. not yet, see #6) - -Alternatively if you want to grab the file directly, you can download either the [production version][min] or the [development version][max] directly. - -[min]: https://raw.github.com/pimterry/loglevel/master/dist/loglevel.min.js -[max]: https://raw.github.com/pimterry/loglevel/master/dist/loglevel.js - -## Setting it up - -loglevel supports AMD (e.g. RequireJS), CommonJS (e.g. Node.js) and direct usage (e.g. loading globally with a <script> tag) loading methods. You should be able to do nearly anything, and then skip to the next section anyway and have it work. Just in case though, here's some specific examples that definitely do the right thing: - -### CommonsJS (e.g. Node) - -```javascript -var log = require('loglevel'); -log.info("unreasonably simple"); -``` - -### AMD (e.g. RequireJS) - -```javascript -define(['loglevel'], function(log) { - log.warn("dangerously convenient"); -}); -``` - -### Directly in your web page: - -```html - - -``` - -## Documentation -_(Coming soon, see #4)_ - -## Contributing -In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Builds can be run with grunt, just run 'grunt' in the root directory of the project. - -_Also, please don't edit files in the "dist" subdirectory as they are generated via Grunt. You'll find source code in the "lib" subdirectory!_ - -## Release History -_No official release yet, this is en route extremely soon though (i.e. this week)_ - -## License -Copyright (c) 2013 Tim Perry -Licensed under the MIT license. diff --git a/temp/loglevel/0.1.0/package/lib/.jshintrc b/temp/loglevel/0.1.0/package/lib/.jshintrc deleted file mode 100644 index e4462b279..000000000 --- a/temp/loglevel/0.1.0/package/lib/.jshintrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": true, - "newcap": true, - "noarg": true, - "sub": true, - "undef": true, - "boss": true, - "eqnull": true, - "predef": [ - "console", - "exports", - "define", - "module" - ] -} diff --git a/temp/loglevel/0.1.0/package/lib/loglevel.js b/temp/loglevel/0.1.0/package/lib/loglevel.js deleted file mode 100644 index 47e8ed8fb..000000000 --- a/temp/loglevel/0.1.0/package/lib/loglevel.js +++ /dev/null @@ -1,98 +0,0 @@ -/* - * loglevel - https://github.com/pimterry/loglevel - * - * Copyright (c) 2013 Tim Perry - * Licensed under the MIT license. - */ - -(function (name, definition) { - if (typeof module !== 'undefined') { - module.exports = definition(); - } else if (typeof define === 'function' && typeof define.amd === 'object') { - define(definition); - } else { - this.name = definition(); - } -}('log', function () { - var self = {}, - noop = function() { }; - - self.levels = { "TRACE": 1, "DEBUG": 2, "INFO": 3, "WARN": 4, - "ERROR": 5, "SILENT": 6}; - - function realMethod(methodName) { - if (typeof console === "undefined") { - return noop; - } else if (typeof console[methodName] === "undefined") { - return console.log || noop; - } else { - return boundToConsole(console, methodName); - } - } - - function boundToConsole(console, methodName) { - var method = console[methodName]; - if (typeof method.bind === "undefined") { - if (typeof Function.prototype.bind === "undefined") { - return function() { - method.apply(console, arguments); - }; - } else { - return Function.prototype.bind.call(console[methodName], console); - } - } else { - return console[methodName].bind(console); - } - } - - var logMethods = [ - "trace", - "debug", - "info", - "warn", - "error" - ]; - - function clearMethods() { - for (var ii = 0; ii < logMethods.length; ii++) { - self[logMethods[ii]] = noop; - } - } - - self.setLevel = function (level) { - if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) { - if (level === self.levels.SILENT) { - clearMethods(); - return; - } else if (typeof console === "undefined") { - clearMethods(); - throw "No console available for logging"; - } else { - for (var ii = 0; ii < logMethods.length; ii++) { - var methodName = logMethods[ii]; - - if (level <= self.levels[methodName.toUpperCase()]) { - self[methodName] = realMethod(methodName); - } else { - self[methodName] = noop; - } - } - } - } else if (typeof level === "string") { - self.setLevel(self.levels[level.toUpperCase()]); - } else { - throw "log.setLevel called with invalid level: " + level; - } - }; - - self.enableAll = function() { - self.setLevel(self.levels.TRACE); - }; - - self.disableAll = function() { - self.setLevel(self.levels.SILENT); - }; - - self.disableAll(); - return self; -})); \ No newline at end of file diff --git a/temp/loglevel/0.1.0/package/package.json b/temp/loglevel/0.1.0/package/package.json deleted file mode 100644 index e4d1a0bf2..000000000 --- a/temp/loglevel/0.1.0/package/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "loglevel", - "description": "Minimal lightweight logging for JavaScript, adding reliable log level methods to any available console.log methods", - "version": "0.1.0", - "homepage": "https://github.com/pimterry/loglevel", - "author": { - "name": "Tim Perry", - "email": "pimterry@gmail.com", - "url": "http://tim-perry.co.uk" - }, - "repository": { - "type": "git", - "url": "git://github.com/pimterry/loglevel.git" - }, - "bugs": { - "url": "https://github.com/pimterry/loglevel/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/pimterry/loglevel/blob/master/LICENSE-MIT" - } - ], - "main": "lib/loglevel", - "engines": { - "node": ">= 0.6.0" - }, - "scripts": { - "test": "grunt test" - }, - "dependencies": { - }, - "devDependencies": { - "grunt": "~0.4.1", - "grunt-cli": "~0.1.6", - "grunt-contrib-concat": "~0.1.2", - "grunt-contrib-uglify": "~0.1.1", - "grunt-contrib-jshint": "~0.1.1", - "grunt-contrib-watch": "~0.2.0", - "grunt-contrib-jasmine": "~0.4.1", - "grunt-template-jasmine-requirejs": "~0.1.0", - "grunt-open": "~0.2.0", - "grunt-contrib-connect": "~0.2.0", - "grunt-saucelabs": "~3.0.7" - }, - "keywords": [] -} diff --git a/temp/loglevel/0.1.0/package/test/.jshintrc b/temp/loglevel/0.1.0/package/test/.jshintrc deleted file mode 100644 index 401ffde0b..000000000 --- a/temp/loglevel/0.1.0/package/test/.jshintrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "curly": true, - "globalstrict": true, - "eqeqeq": true, - "immed": true, - "latedef": true, - "newcap": true, - "noarg": true, - "sub": true, - "undef": true, - "boss": true, - "eqnull": true, - "predef": [ - "define", - "window", - "require", - "log", - "console", - "exports", - "_", - "afterEach", - "beforeEach", - "confirm", - "context", - "describe", - "xdescribe", - "expect", - "it", - "jasmine" - ] -} \ No newline at end of file diff --git a/temp/loglevel/0.1.0/package/test/basic-usage-test.js b/temp/loglevel/0.1.0/package/test/basic-usage-test.js deleted file mode 100644 index 331350fa0..000000000 --- a/temp/loglevel/0.1.0/package/test/basic-usage-test.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; - -define(['../lib/loglevel'], function(log) { - describe("Integration smoke tests", function() { - var describeIfConsoleAvailable = - typeof console !== "undefined" ? describe : xdescribe; - - describeIfConsoleAvailable("log methods", function() { - it("can all be called", function() { - if (typeof console !== "undefined") { - log.setLevel(log.levels.TRACE); - } - - log.trace("trace"); - log.debug("debug"); - log.info("info"); - log.warn("warn"); - log.error("error"); - }); - }); - - describe("log methods", function() { - it("can all be disabled", function() { - log.setLevel(log.levels.SILENT); - log.trace("trace"); - log.debug("debug"); - log.info("info"); - log.warn("warn"); - log.error("error"); - }); - }); - - describeIfConsoleAvailable("log levels", function() { - it("are all settable", function() { - log.setLevel(log.levels.TRACE); - log.setLevel(log.levels.DEBUG); - log.setLevel(log.levels.INFO); - log.setLevel(log.levels.WARN); - log.setLevel(log.levels.ERROR); - }); - }); - }); -}); diff --git a/temp/loglevel/0.1.0/package/test/console-fallback-test.js b/temp/loglevel/0.1.0/package/test/console-fallback-test.js deleted file mode 100644 index 2f94287a8..000000000 --- a/temp/loglevel/0.1.0/package/test/console-fallback-test.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; - -function consoleLogIsCalledBy(log, methodName) { - it(methodName + " calls console.log", function() { - log.setLevel(log.levels.TRACE); - log[methodName]("Log message for call to " + methodName); - expect(console.log.calls.length).toEqual(1); - }); -} - -define(['../lib/loglevel'], function(log) { - var originalConsole = window.console; - - describe("LogLevel fallback functionality", function() { - describe("with no console present", function() { - beforeEach(function() { - window.console = undefined; - }); - - afterEach(function() { - window.console = originalConsole; - }); - - it("silent method calls are allowed", function() { - log.setLevel(log.levels.SILENT); - log.trace("hello"); - }); - - it("setting an active level fails", function() { - expect(function() { - log.setLevel(log.levels.TRACE); - }).toThrow("No console available for logging"); - }); - - it("setting to silent level is fine", function() { - log.setLevel(log.levels.SILENT); - }); - - it("active method calls are allowed, once the active setLevel fails", function() { - try { - log.setLevel(log.levels.TRACE); - } catch (e) { } - log.trace("hello"); - }); - }); - - describe("with a console that only supports console.log", function() { - beforeEach(function() { - window.console = {"log" : jasmine.createSpy("console.log")}; - }); - - afterEach(function() { - window.console = originalConsole; - }); - - it("log can be set to silent", function() { - log.setLevel(log.levels.SILENT); - }); - - it("log can be set to an active level", function() { - log.setLevel(log.levels.ERROR); - }); - - consoleLogIsCalledBy(log, "trace"); - consoleLogIsCalledBy(log, "debug"); - consoleLogIsCalledBy(log, "info"); - consoleLogIsCalledBy(log, "warn"); - consoleLogIsCalledBy(log, "trace"); - }); - }); -}); - diff --git a/temp/loglevel/0.1.0/package/test/level-setting-test.js b/temp/loglevel/0.1.0/package/test/level-setting-test.js deleted file mode 100644 index 76dbb423b..000000000 --- a/temp/loglevel/0.1.0/package/test/level-setting-test.js +++ /dev/null @@ -1,240 +0,0 @@ -"use strict"; - -var logMethods = [ - "trace", - "debug", - "info", - "warn", - "error" -]; - -define(['../lib/loglevel'], function(log) { - var originalConsole = window.console; - - describe("Log levels", function() { - beforeEach(function() { - window.console = {}; - - for (var ii = 0; ii < logMethods.length; ii++) { - window.console[logMethods[ii]] = jasmine.createSpy(logMethods[ii]); - } - }); - - afterEach(function() { - window.console = originalConsole; - }); - - describe("initial log level", function() { - it("disables all log methods", function() { - for (var ii = 0; ii < logMethods.length; ii++) { - var method = logMethods[ii]; - log[method]("a log message"); - - expect(console[method]).not.toHaveBeenCalled(); - } - }); - }); - - describe("log.enableAll()", function() { - it("enables all log methods", function() { - log.enableAll(); - - for (var ii = 0; ii < logMethods.length; ii++) { - var method = logMethods[ii]; - log[method]("a log message"); - - expect(console[method]).toHaveBeenCalled(); - } - }); - }); - - describe("invalid setLevel inputs", function() { - it("error thrown if no level is given", function() { - expect(function() { - log.setLevel(); - }).toThrow(); - }); - - it("error thrown if null level is given", function() { - expect(function() { - log.setLevel(null); - }).toThrow(); - }); - - it("error thrown if undefined level is given", function() { - expect(function() { - log.setLevel(undefined); - }).toThrow(); - }); - - it("error thrown if invalid level number is given", function() { - expect(function() { - log.setLevel(-1); - }).toThrow(); - }); - - it("error thrown if invalid level name is given", function() { - expect(function() { - log.setLevel("InvalidLevelName"); - }).toThrow(); - }); - }); - - describe("setting log level by name", function() { - function itCanSetLogLevelTo(level) { - it("can set log level to " + level, function() { - log.disableAll(); - log.setLevel(level); - - log[level]("log message"); - expect(console[level]).toHaveBeenCalled(); - }); - } - - itCanSetLogLevelTo("trace"); - itCanSetLogLevelTo("debug"); - itCanSetLogLevelTo("info"); - itCanSetLogLevelTo("warn"); - itCanSetLogLevelTo("error"); - }); - - describe("log level settings", function() { - describe("log.trace", function() { - it("is enabled at trace level", function() { - log.setLevel(log.levels.TRACE); - - log.trace("a log message"); - expect(console.trace).toHaveBeenCalled(); - }); - - it("is disabled at debug level", function() { - log.setLevel(log.levels.DEBUG); - - log.trace("a log message"); - expect(console.trace).not.toHaveBeenCalled(); - }); - - it("is disabled at silent level", function() { - log.setLevel(log.levels.SILENT); - - log.trace("a log message"); - expect(console.trace).not.toHaveBeenCalled(); - }); - }); - - describe("log.debug", function() { - it("is enabled at trace level", function() { - log.setLevel(log.levels.TRACE); - - log.debug("a log message"); - expect(console.debug).toHaveBeenCalled(); - }); - - it("is enabled at debug level", function() { - log.setLevel(log.levels.DEBUG); - - log.debug("a log message"); - expect(console.debug).toHaveBeenCalled(); - }); - - it("is disabled at info level", function() { - log.setLevel(log.levels.INFO); - - log.debug("a log message"); - expect(console.debug).not.toHaveBeenCalled(); - }); - - it("is disabled at silent level", function() { - log.setLevel(log.levels.SILENT); - - log.debug("a log message"); - expect(console.debug).not.toHaveBeenCalled(); - }); - }); - - describe("log.info", function() { - it("is enabled at debug level", function() { - log.setLevel(log.levels.DEBUG); - - log.info("a log message"); - expect(console.info).toHaveBeenCalled(); - }); - - it("is enabled at info level", function() { - log.setLevel(log.levels.INFO); - - log.info("a log message"); - expect(console.info).toHaveBeenCalled(); - }); - - it("is disabled at warn level", function() { - log.setLevel(log.levels.WARN); - - log.info("a log message"); - expect(console.info).not.toHaveBeenCalled(); - }); - - it("is disabled at silent level", function() { - log.setLevel(log.levels.SILENT); - - log.info("a log message"); - expect(console.info).not.toHaveBeenCalled(); - }); - }); - - describe("log.warn", function() { - it("is enabled at info level", function() { - log.setLevel(log.levels.INFO); - - log.warn("a log message"); - expect(console.warn).toHaveBeenCalled(); - }); - - it("is enabled at warn level", function() { - log.setLevel(log.levels.WARN); - - log.warn("a log message"); - expect(console.warn).toHaveBeenCalled(); - }); - - it("is disabled at error level", function() { - log.setLevel(log.levels.ERROR); - - log.warn("a log message"); - expect(console.warn).not.toHaveBeenCalled(); - }); - - it("is disabled at silent level", function() { - log.setLevel(log.levels.SILENT); - - log.warn("a log message"); - expect(console.warn).not.toHaveBeenCalled(); - }); - }); - - describe("log.error", function() { - it("is enabled at warn level", function() { - log.setLevel(log.levels.WARN); - - log.error("a log message"); - expect(console.error).toHaveBeenCalled(); - }); - - it("is enabled at error level", function() { - log.setLevel(log.levels.ERROR); - - log.error("a log message"); - expect(console.error).toHaveBeenCalled(); - }); - - it("is disabled at silent level", function() { - log.setLevel(log.levels.SILENT); - - log.error("a log message"); - expect(console.error).not.toHaveBeenCalled(); - }); - }); - }); - }); -}); - diff --git a/temp/loglevel/0.1.0/package/test/vendor/json2.js b/temp/loglevel/0.1.0/package/test/vendor/json2.js deleted file mode 100644 index f7eb6463d..000000000 --- a/temp/loglevel/0.1.0/package/test/vendor/json2.js +++ /dev/null @@ -1,486 +0,0 @@ -/* - json2.js - 2012-10-08 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, regexp: true */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -if (typeof JSON !== 'object') { - JSON = {}; -} - -(function () { - 'use strict'; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) - ? this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' - : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' - ? c - : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 - ? '[]' - : gap - ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' - : '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === 'string') { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 - ? '{}' - : gap - ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' - : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ - .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') - .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' - ? walk({'': j}, '') - : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); diff --git a/temp/numeral.js/1.0.1/dist.tar.gz b/temp/numeral.js/1.0.1/dist.tar.gz deleted file mode 100644 index ab0fe018ac59241e094a90890c7732f4e47489b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5863 zcmVp453D>E z5AO_#KK~-m*Bl{v*BsJ(13t$?>YGm9z``5q2e#*8d9_q2Re7mJgRXCnLQ!+*`9m`_ zU5gA&*B*@>Go%F2bf9sGw-|UsIs(%|@Ie@k8s)NSnZt?YnDvSU%z8 zi=TrsZ)%Rif#*X*&`WCeRu86%Llg zQ?`R(OcivF4FU;hELo0N;rh6JnP+A9k%%mMb3jMbwW!;*xj^oPge>ZF;j!09bUrmL zZZRKDBB_4V7PdnD%56UExpJ@EJ@VPSG5K&Ij@|K1|CaPTAOFIj32nDe5+er-09_E!T%DcYk2Ied>69r9)W$!w)|YHnkU?G#EfgLG>Ee6zau&XfsrMM+?3D+oJ|BXqZh}c&zH5<-)5FVO_s(0SeL>F7 zPk(72v<^Uvdlyh}l{d(*?aOzk?=K0!obR1n{zgs@$==CtH2L@^V@7a0l;)0x> zllJl1QM(0Y?UVhZ_Xq8hpUF?q?&S269JRre0qx}}L6QPhyLExcj$7yZ@8Ij+Pwk`j zV+57Xe(~B06KLE5R?UTcEpwc>Som`fHDwL7d zFYtw2yxTiEVx;!o1NY~Qzx~s*-_F}Vzq=&wPLB>+Q20{|INST_sKrS^r}mHb+Q$Yt z*gM|)xy4$Y0+w?ICb;|cU5ga~y*>D|f7w1g!EWrIo?M>8R|9%^ei=3WwSCbt$liJT z0tIq-ehTPOoY3NwA%S)$Esh06O%gf*5d8lBq80OU(Aql!To>3_1r|}#@3y5xVETcx4(gt+B1KmM;n$0-)!1 zfq&~q#(zic{np7v>kpwZKmLQjZ!^mOR_j|;i2te^_1a7P_dT9J&^70t$2I4k*EQ!J z?3!~Ab)<--m?~H8g;7;s2ll zCSxpEI0KW*X}z(_d^FK?@-@fy`pT;dJYuJikbUq!=#K(cvPjc1Cv#)^vd>0@?H8E7 zamH+t0!!Bv;ws-8gX3(HV>29-*cXT^j9gR?9q$fk_nPI0aCi3K7g627430f(>`-X0 z;pQed%pos$)dX6YKk3;nwF+cqMbwn&7xb@zzMXrpT>No2^!%knlM{UrY9b@w3q53+ zcr5N<^^w*Dl*UtYdbEQ}ScFmf-GvVGx^1zKE4#u0S4kUlSn+NYMiSnk{e@a!5aGat zILD_Zgl0X*!;hf{k&$CxQ;7b$_Rw?!fk@)RwgKtbE@l*&nlS9+ThBzJ{SwhCrOoPw zUXpZbI%$Fu@>rY~L`M)l0#6bt2%!U9^4y=E-m`hVexAaMM1oE zIVmzhmS{JoGsdvehmPP_Q>BN-Ir1jdmj(x4v}#3#-cFd_@z@FNk#kGNBg_CsV1}?; zV0!EWdk)025URNl#NOBz4+bIRB`$~`g2hPojo9vK2vI1}V!P*@qgaqbos`8(BvF;g zq}G=(;KL{ryzIyZaaa@+kuahlu0|VT_S;jl%M<7`m4S6qLmWyD01afwOVSF0b;M{K zZbxORK6-Y443>&Z4aUK>4T6q1KR52juae0j41 ze{>_k9JudsNK?=ZoD_-1F|Cr#3j0Ubrx64cQ({3PW}n#}%OpjPa68?5-UMXSKr7ZF z@Ex!kHZfJOT$VQEo31pGEG3)B(uRD~vqh}V?9wfyC5#?)&-cw+=(d<0g=vA?m?a;@ z=Fthqo#ngRyhFANo=mo3Ia>=8iFC*^gyT_S97JrC9P0MN0SmF~=|O;tMWi!>E%^qL z6P_VL`=RntSG2dCMk|!XoE(O=>K@-gXPuLF2T=vWv?9Ft5rgVS_ za74|f#$6e`r4cG(hhT4es!sKzWr-vSmg$33yw?liO(D$^DO%4&w1Q>n1)B&pT~39i zf(|1iX;RUmRnc4wT}?s92Y@2zNF_#kqQ$gPpra~bE4r? z!Mwc|uUs_k6`Mg;R!~Rjbqr(8Gc1Xs|ozHkUFT@<7*ORQrygoo-lK7d-%`T&^L`Qlk z0eQeLPW3ibi|#tG{skjTrs`F-NzDkYVCq*L{YsKtOm2;|nOsc8vI^eh$_ud@L}>-1 zK>gN;I%m7F&_R&L>od)K5Z;2d4k!&Jc~-*qdz<-?ehIO;sKW;+xgpF<>4m0kg@Xp! z*r<%YBt7HM^!v8kAT_AL6EI%pO0dMQ!DJ$>Rw{4iH3|nt^lGKuIP{=sI(8p8!2J$+ zj3S=?cFL^BviJN#Rp57<@}gi7CH5I)0FbN}G+E}V-067M?QT4a?m%<_(Y_f3&AgD4 zBD$SHZ8yFO1UPC+-AJ}`0CRr#QP;b6$|IF(eOKI=vj2|))jIGEi}l^yiW6=t{ayLb z*bBFlo#tgLefSH&qW}0cCl3E~*Z~W6$KH zZV^4@Ck!0VyXL1>*v`G7Y^%ev0aL31^TMzQccblVOG<W#)Tg;`Cej z=FGZzHPbRrZ71M^^Sy?4ZL^FXeC#k27a3M4SX;~5WWYz>0Vz#dl9S^%C&tqJN$kPZVrF`hDdx2t=QBq#hnP8-7eN5EroP1R{F@KW_!!Yk z^pYri^5|toNC1QD$E_b{56{y2%rIlU{xqKd&0Oa>yLM)c#v3j(3}3wDE}m(68G~x! zQ;)&gMz+D$>OW>zY}S8V-+Y=uR%x(5GY8Y6^)EvTpM{20efPcCq@16(_}L4IsiZ4- zM&KNpc!G7Eem-=a2wfahGMP?G2B%_&opUOk1=#%%ATiBbi|=brseL!*B5=pcZ0Fz&?hncBtHn!$7BY+m+M}U5dr3I(yJkQFG zwGyuvQr94zF~ZQ>g3sn|{5=f3?1wG*ZMOj(&YY%aCB#{!$$kk<-sUX9SEv?=;Y#&S zFChI+r=J%beh5V<5p9cI!fRfJKCxVrP?kZDu9#zanvh2uPf-8BPC!4iI z?X&PF5B+5Gm#BRf{`k?LZ0?l0<#=0g3i}0*_ROEX@CRx5xi&i>rZX{b;p4`%9mMvq zDM<}0Q3A6!tr$3`9znCOnw-J1cDCxf7xWv!GXSs{ndA0)IMYTyDdl> zO!V~u%%^@<@|(MtPxKR$JEqv`&-i`Ga(*}Z0m_}Sxto*>e*s&?Eo#0u4NQkaXZN|! zNBn<(7~#k_&-G z^{?XaXp`PY<(@{3Q2)v%&ZhdC7@@w+&)}&)Q9)N-z3j$6NfGKXrm=!)Tb@>puA}5% z=k?uU^{w0NF}Q|O^+r}XQ&kOF)#X)gbHrW@HzsUy!qX&0V~SlK0Iv=9rYR8D9HL6= zjjFz?)(mCMX1YdjTdGvCM&7Mg05lGeF9HL3eJ%XPJ$iuA4dg8D5f{hfDJpVyG`H!B+c$v6aN|qq6$6!HU_HCwj0}OGp>WMr!q9tLoKbc(nL}1qmILc-*W{#wUw0&L}@I#A-=f^!y{Fguc{!pSJmw) zt493IS1>y?;~SX8DqvI~O$nK>6f?GzT^LnwHNOdiEVi676zUBuy-t?ab#C=GE114^ zm@nnowZotpswLHr#<;0)WdL!rna>+N?3hpiV%(_!t9H|luKFPaSjL!l0&AAKrr{AW{$eGY+iWSyF^}9Qb zHbGQ)c`VSPV*MTzD12Qrg!kxTR~9y^-s1|eY0qs2@wKVuS9VpZp?EdflAry)H~11I zhKRkvnBO4^--a;xCoc)z8#48j)zF;RkgXFk7!v;V-hg#RBcrR*|3;EBu;kt_Eo&aQ z_*_djldJay+7{Do<;r@2wyWv3eBHZ1%kp$fdEsSF>zLR3d&7pIlC;StVpDExG?NC* x^i~pamjcTn09X - - - - - - - - - - -
-

Numeral.js

-

A javascript library for formatting and manipulating numbers.

-

Initialize

-
-<script src="numeral-min.js"></script>
-var number = numeral(1000);
-
-

Format

-

- Numbers can be formatted to look like money, percentages, times, or even plain old numbers with decimal places, comma delineated thousands, and abbreviations. -

-
-var string = numeral(1000).format('0,000');
-// 1,000
-
-

Numbers

- - - - - - - - - -
NumberFormatString
-

Money

- - - - - - - - - -
NumberFormatString
-

Percentages

- - - - - - - - - -
NumberFormatString
-

Time

- - - - - - - - - -
NumberFormatString
-

Unformat

-

- Got a formatted string? Use the unformat function to make it useful again. -

-
-var string = numeral().unformat('($10,000.00)');
-// -10000
-
- - - - - - - - - -
StringFunctionNumber
-

Manipulate

-

- Not that you will uses these often, but they're there when you need them. -

-
-var number = numeral(1000);
-
-var added = number.add(10);
-// 1010
-
- - - - - - - - - -
BeforeFunctionAfter
-

Value

-

- The value is always available. -

-
-var number = numeral(1000);
-
-var string = number.format('0,000');
-// 1,000
-
-var value = number.value();
-// 1000
-
-

Set

-

- Set the value of your numeral object. -

-
-var number = numeral();
-
-number.set(1000);
-
-var value = number.value();
-// 1000
-
-

Acknowlegements

-

- Numeral.js, while less complex, was inspired by and heavily borrowed from Moment.js -

-
- - \ No newline at end of file diff --git a/temp/numeral.js/1.0.1/package/min/numeral-min.js b/temp/numeral.js/1.0.1/package/min/numeral-min.js deleted file mode 100644 index 63d098d4c..000000000 --- a/temp/numeral.js/1.0.1/package/min/numeral-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// numeral.js -// version : 1.0.1 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ -(function(){function s(e){this._n=e}function o(e,t){var n=Math.pow(10,t);return(Math.round(e*n)/n).toFixed(t)}function u(e,t){var n;return t.indexOf("$")>-1?n=f(e,t):t.indexOf("%")>-1?n=l(e,t):t.indexOf(":")>-1?n=c(e,t):n=p(e,t),n}function a(e,t){return t.indexOf(":")>-1?e._n=h(t):e._n=(t.indexOf("k")>-1?1e3:1)*(t.indexOf("m")>-1?1e6:1)*(t.indexOf("%")>-1?.01:1)*Number((t.indexOf("(")>-1?"-":"")+t.replace(/\$|,|%|k|m|\(|\)*/ig,"")),e._n}function f(e,t){t=t.replace("$","");var n=u(e,t);return n.indexOf("(")>-1||n.indexOf("-")>-1?(n=n.split(""),n.splice(1,0,"$"),n=n.join("")):n="$"+n,n}function l(e,t){t=t.replace("%",""),e._n=e._n*100;var n=u(e,t);return n.indexOf(")")>-1?(n=n.split(""),n.splice(-1,0,"%"),n=n.join("")):n+="%",n}function c(e,t){var n=Math.floor(e._n/60/60),r=Math.floor((e._n-n*60*60)/60),i=Math.round(e._n-n*60*60-r*60);return n+":"+(r<10?"0"+r:r)+":"+(i<10?"0"+i:i)}function h(e){var t=e.split(":"),n=0;return t.length===3?(n+=Number(t[0])*60*60,n+=Number(t[1])*60,n+=Number(t[2])):t.lenght===2&&(n+=Number(t[0])*60,n+=Number(t[1])),Number(n)}function p(e,t){var n=!1,r=!1;t.indexOf("(")>-1&&(n=!0,t=t.slice(1,-1)),t.indexOf("a")>-1&&(t=t.replace("a",""),e._n>1e6?(r="m",e._n=e._n/1e6):(r="k",e._n=e._n/1e3));var i=e._n.toString().split(".")[0],s=t.split(".")[1],u=t.indexOf(","),a="",f=!1;return e._n<0&&(i=i.slice(1),f=!0),u>-1&&(i=i.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,")),t.indexOf(".")===0&&(i=""),s&&(a="."+o(e._n,s.length).split(".")[1]),r,(n?"(":"")+(!n&&f?"-":"")+i+a+(r?r:"")+(n?")":"")}var e,t="1.0.0",n=Math.round,r,i=typeof module!="undefined"&&module.exports;e=function(e){return Number(e)||(e=0),new s(Number(e))},e.version=t,e.isNumeral=function(e){return e instanceof s},e.fn=s.prototype={clone:function(){return e(this)},format:function(t){return u(this,t?t:e.defaultFormat)},unformat:function(t){return a(this,t?t:e.defaultFormat)},value:function(){return this._n},set:function(e){return this._n=Number(e),this},add:function(e){return this._n=this._n+Number(e),this},subtract:function(e){return this._n=this._n-Number(e),this},multiply:function(e){return this._n=this._n*Number(e),this},divide:function(e){return this._n=this._n/Number(e),this},difference:function(e){return this._n-Number(e)}},i&&(module.exports=e),typeof ender=="undefined"&&(this.numeral=e),typeof define=="function"&&define.amd&&define([],function(){return e})}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.0.1/package/numeral.js b/temp/numeral.js/1.0.1/package/numeral.js deleted file mode 100644 index 8fe80ae8c..000000000 --- a/temp/numeral.js/1.0.1/package/numeral.js +++ /dev/null @@ -1,284 +0,0 @@ - -// numeral.js -// version : 1.0.1 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.0.0', - round = Math.round, i, - - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral(number) { - this._n = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision) { - var power = Math.pow(10, precision); - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - return (Math.round(value * power) / power).toFixed(precision); - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // money!!!!! - output = formatMoney(n, format); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' number - output = formatNumber(n, format); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - if (string.indexOf(':') > -1) { - n._n = unformatTime(string); - } else { - n._n = ((string.indexOf('k') > -1) ? 1000 : 1) * ((string.indexOf('m') > -1) ? 1000000 : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * Number(((string.indexOf('(') > -1) ? '-' : '') + string.replace(/\$|,|%|k|m|\(|\)*/ig, '')); - } - return n._n; - } - - function formatMoney (n, format) { - format = format.replace('$', ''); - var output = formatNumeral(n, format); - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - output.splice(1, 0, '$'); - output = output.join(''); - } else { - output = '$' + output; - } - return output; - } - - function formatPercentage (n, format) { - format = format.replace('%', ''); - n._n = n._n * 100; - var output = formatNumeral(n, format); - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, '%'); - output = output.join(''); - } else { - output = output + '%'; - } - return output; - } - - function formatTime (n, format) { - var hours = Math.floor(n._n/60/60), - minutes = Math.floor((n._n - (hours * 60 * 60))/60), - seconds = Math.round(n._n - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.lenght === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (n, format) { - var negP = false, - abbr = false; - - // see if we should use parentheses for negative number - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - format = format.replace('a', ''); - - if (n._n > 1000000) { - abbr = 'm'; - n._n = n._n / 1000000; - } else { - abbr = 'k'; - n._n = n._n / 1000; - } - } - - var w = n._n.toString().split('.')[0], - precision = format.split('.')[1], - thousands = format.indexOf(','), - d = '', - neg = false; - - // format number - if (n._n < 0) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - if (precision) { - // do to fixed - d = '.' + toFixed(n._n, precision.length).split('.')[1]; - } - - if (abbr) { - - } - - return ((negP) ? '(' : '') + ((!negP && neg) ? '-' : '') + w + d + ((abbr) ? abbr : '') + ((negP) ? ')' : ''); - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (!Number(input)) { - input = 0; - } - return new Numeral(Number(input)); - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString) { - return formatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - unformat : function (inputString) { - return unformatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - value : function () { - return this._n; - }, - - set : function (value) { - this._n = Number(value); - return this; - }, - - add : function (value) { - this._n = this._n + Number(value); - return this; - }, - - subtract : function (value) { - this._n = this._n - Number(value); - return this; - }, - - multiply : function (value) { - this._n = this._n * Number(value); - return this; - }, - - divide : function (value) { - this._n = this._n / Number(value); - return this; - }, - - difference : function (value) { - return this._n - Number(value); - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // Commenting out common js and global variable - // // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler "advanced" mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.0.1/package/package.json b/temp/numeral.js/1.0.1/package/package.json deleted file mode 100644 index 34937a81a..000000000 --- a/temp/numeral.js/1.0.1/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.0.1", - "description": "Formatand manipulate numbers.", - "homepage": "http://adamwdraper.github.com/Numeral-js/", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "time", - "money", - "percentage", - "validate" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://adamwdraper.github.com/Numeral-js/)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://adamwdraper.github.com/Numeral-js/)\n\nChangelog\n=========\n\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.0.1", - "_from": "numeral" -} \ No newline at end of file diff --git a/temp/numeral.js/1.0.2/dist.tar.gz b/temp/numeral.js/1.0.2/dist.tar.gz deleted file mode 100644 index f8d3f97aa5d433eb74e29c70010b96b1a8c70ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6091 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 - - - - - - - - - - -
-

Numeral.js

-

A javascript library for formatting and manipulating numbers.

-

Use it

-

In the Browser

-
-<script src="numeral-min.js"></script>
-
-

In Node.js

-
-npm install numeral
-
-
-var numeral = require('numeral');
-
- -

Format

-

- Numbers can be formatted to look like money, percentages, times, or even plain old numbers with decimal places, comma delineated thousands, and abbreviations. -

-
-var string = numeral(1000).format('0,000');
-// 1,000
-
-

Numbers

- - - - - - - - - -
NumberFormatString
-

Money

- - - - - - - - - -
NumberFormatString
-

Percentages

- - - - - - - - - -
NumberFormatString
-

Time

- - - - - - - - - -
NumberFormatString
-

Unformat

-

- Got a formatted string? Use the unformat function to make it useful again. -

-
-var string = numeral().unformat('($10,000.00)');
-// -10000
-
- - - - - - - - - -
StringFunctionNumber
-

Manipulate

-

- Not that you will uses these often, but they're there when you need them. -

-
-var number = numeral(1000);
-
-var added = number.add(10);
-// 1010
-
- - - - - - - - - -
BeforeFunctionAfter
-

Value

-

- The value is always available. -

-
-var number = numeral(1000);
-
-var string = number.format('0,000');
-// 1,000
-
-var value = number.value();
-// 1000
-
-

Set

-

- Set the value of your numeral object. -

-
-var number = numeral();
-
-number.set(1000);
-
-var value = number.value();
-// 1000
-
-

Clone

-

- Any Numeral object can be cloned as well. -

-
-var a = numeral(1000);
-var b = numeral(a);
-var c = a.clone();
-
-var aVal = a.set(2000).value();
-// 2000
-
-var bVal = b.value();
-// 1000
-
-var cVal = c.add(10).value();
-// 1010
-
- -

Acknowlegements

-

- Numeral.js, while less complex, was inspired by and heavily borrowed from Moment.js -

-
- - \ No newline at end of file diff --git a/temp/numeral.js/1.0.2/package/min/numeral-min.js b/temp/numeral.js/1.0.2/package/min/numeral-min.js deleted file mode 100644 index fcfeb0a9a..000000000 --- a/temp/numeral.js/1.0.2/package/min/numeral-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// numeral.js -// version : 1.0.2 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ -(function(){function s(e){this._n=e}function o(e,t){var n=Math.pow(10,t);return(Math.round(e*n)/n).toFixed(t)}function u(e,t){var n;return t.indexOf("$")>-1?n=f(e,t):t.indexOf("%")>-1?n=l(e,t):t.indexOf(":")>-1?n=c(e,t):n=p(e,t),n}function a(e,t){return t.indexOf(":")>-1?e._n=h(t):e._n=(t.indexOf("k")>-1?1e3:1)*(t.indexOf("m")>-1?1e6:1)*(t.indexOf("%")>-1?.01:1)*Number((t.indexOf("(")>-1?"-":"")+t.replace(/\$|,|%|k|m|\(|\)*/ig,"")),e._n}function f(e,t){t=t.replace("$","");var n=u(e,t);return n.indexOf("(")>-1||n.indexOf("-")>-1?(n=n.split(""),n.splice(1,0,"$"),n=n.join("")):n="$"+n,n}function l(e,t){t=t.replace("%",""),e._n=e._n*100;var n=u(e,t);return n.indexOf(")")>-1?(n=n.split(""),n.splice(-1,0,"%"),n=n.join("")):n+="%",n}function c(e,t){var n=Math.floor(e._n/60/60),r=Math.floor((e._n-n*60*60)/60),i=Math.round(e._n-n*60*60-r*60);return n+":"+(r<10?"0"+r:r)+":"+(i<10?"0"+i:i)}function h(e){var t=e.split(":"),n=0;return t.length===3?(n+=Number(t[0])*60*60,n+=Number(t[1])*60,n+=Number(t[2])):t.lenght===2&&(n+=Number(t[0])*60,n+=Number(t[1])),Number(n)}function p(e,t){var n=!1,r=!1;t.indexOf("(")>-1&&(n=!0,t=t.slice(1,-1)),t.indexOf("a")>-1&&(t=t.replace("a",""),e._n>1e6?(r="m",e._n=e._n/1e6):(r="k",e._n=e._n/1e3));var i=e._n.toString().split(".")[0],s=t.split(".")[1],u=t.indexOf(","),a="",f=!1;return e._n<0&&(i=i.slice(1),f=!0),u>-1&&(i=i.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,")),t.indexOf(".")===0&&(i=""),s&&(a="."+o(e._n,s.length).split(".")[1]),r,(n?"(":"")+(!n&&f?"-":"")+i+a+(r?r:"")+(n?")":"")}var e,t="1.0.2",n=Math.round,r,i=typeof module!="undefined"&&module.exports;e=function(t){return e.isNumeral(t)?t=t.value():Number(t)||(t=0),new s(Number(t))},e.isNumeral=function(e){return console.log(e),e instanceof s},e.version=t,e.isNumeral=function(e){return e instanceof s},e.fn=s.prototype={clone:function(){return e(this)},format:function(t){return u(this,t?t:e.defaultFormat)},unformat:function(t){return a(this,t?t:e.defaultFormat)},value:function(){return this._n},set:function(e){return this._n=Number(e),this},add:function(e){return this._n=this._n+Number(e),this},subtract:function(e){return this._n=this._n-Number(e),this},multiply:function(e){return this._n=this._n*Number(e),this},divide:function(e){return this._n=this._n/Number(e),this},difference:function(e){return this._n-Number(e)}},i&&(module.exports=e),typeof ender=="undefined"&&(this.numeral=e),typeof define=="function"&&define.amd&&define([],function(){return e})}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.0.2/package/numeral.js b/temp/numeral.js/1.0.2/package/numeral.js deleted file mode 100644 index c0c5f5598..000000000 --- a/temp/numeral.js/1.0.2/package/numeral.js +++ /dev/null @@ -1,293 +0,0 @@ - -// numeral.js -// version : 1.0.2 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.0.2', - round = Math.round, i, - - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral(number) { - this._n = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision) { - var power = Math.pow(10, precision); - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - return (Math.round(value * power) / power).toFixed(precision); - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // money!!!!! - output = formatMoney(n, format); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' number - output = formatNumber(n, format); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - if (string.indexOf(':') > -1) { - n._n = unformatTime(string); - } else { - n._n = ((string.indexOf('k') > -1) ? 1000 : 1) * ((string.indexOf('m') > -1) ? 1000000 : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * Number(((string.indexOf('(') > -1) ? '-' : '') + string.replace(/\$|,|%|k|m|\(|\)*/ig, '')); - } - return n._n; - } - - function formatMoney (n, format) { - format = format.replace('$', ''); - var output = formatNumeral(n, format); - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - output.splice(1, 0, '$'); - output = output.join(''); - } else { - output = '$' + output; - } - return output; - } - - function formatPercentage (n, format) { - format = format.replace('%', ''); - n._n = n._n * 100; - var output = formatNumeral(n, format); - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, '%'); - output = output.join(''); - } else { - output = output + '%'; - } - return output; - } - - function formatTime (n, format) { - var hours = Math.floor(n._n/60/60), - minutes = Math.floor((n._n - (hours * 60 * 60))/60), - seconds = Math.round(n._n - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.lenght === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (n, format) { - var negP = false, - abbr = false; - - // see if we should use parentheses for negative number - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - format = format.replace('a', ''); - - if (n._n > 1000000) { - abbr = 'm'; - n._n = n._n / 1000000; - } else { - abbr = 'k'; - n._n = n._n / 1000; - } - } - - var w = n._n.toString().split('.')[0], - precision = format.split('.')[1], - thousands = format.indexOf(','), - d = '', - neg = false; - - // format number - if (n._n < 0) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - if (precision) { - // do to fixed - d = '.' + toFixed(n._n, precision.length).split('.')[1]; - } - - if (abbr) { - - } - - return ((negP) ? '(' : '') + ((!negP && neg) ? '-' : '') + w + d + ((abbr) ? abbr : '') + ((negP) ? ')' : ''); - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (numeral.isNumeral(input)) { - input = input.value(); - } else if (!Number(input)) { - input = 0; - } - - return new Numeral(Number(input)); - }; - - // compare numeral object - numeral.isNumeral = function (obj) { - console.log(obj); - return obj instanceof Numeral; - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString) { - return formatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - unformat : function (inputString) { - return unformatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - value : function () { - return this._n; - }, - - set : function (value) { - this._n = Number(value); - return this; - }, - - add : function (value) { - this._n = this._n + Number(value); - return this; - }, - - subtract : function (value) { - this._n = this._n - Number(value); - return this; - }, - - multiply : function (value) { - this._n = this._n * Number(value); - return this; - }, - - divide : function (value) { - this._n = this._n / Number(value); - return this; - }, - - difference : function (value) { - return this._n - Number(value); - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // Commenting out common js and global variable - // // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler "advanced" mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.0.2/package/package.json b/temp/numeral.js/1.0.2/package/package.json deleted file mode 100644 index c594b1374..000000000 --- a/temp/numeral.js/1.0.2/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.0.2", - "description": "Format and manipulate numbers.", - "homepage": "http://adamwdraper.github.com/Numeral-js/", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "format", - "time", - "money", - "percentage" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://adamwdraper.github.com/Numeral-js/)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://adamwdraper.github.com/Numeral-js/)\n\nChangelog\n=========\n\n### 1.0.2\nAdd clone functionality\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.0.2", - "_from": "numeral" -} diff --git a/temp/numeral.js/1.0.3/dist.tar.gz b/temp/numeral.js/1.0.3/dist.tar.gz deleted file mode 100644 index cfaf43dbffb015a866740178f4492fdeff574b02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6353 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 - - - - - - - - - - -
-

Numeral.js

-

A javascript library for formatting and manipulating numbers.

-

Use it

-

In the Browser

-
-<script src="numeral-min.js"></script>
-
-

In Node.js

-
-npm install numeral
-
-
-var numeral = require('numeral');
-
- -

Format

-

- Numbers can be formatted to look like money, percentages, times, or even plain old numbers with decimal places, comma delineated thousands, and abbreviations. -

-
-var string = numeral(1000).format('0,000');
-// 1,000
-
-

Numbers

- - - - - - - - - -
NumberFormatString
-

Money

- - - - - - - - - -
NumberFormatString
-

Percentages

- - - - - - - - - -
NumberFormatString
-

Time

- - - - - - - - - -
NumberFormatString
-

Unformat

-

- Got a formatted string? Use the unformat function to make it useful again. -

-
-var string = numeral().unformat('($10,000.00)');
-// -10000
-
- - - - - - - - - -
StringFunctionNumber
-

Manipulate

-

- Not that you will uses these often, but they're there when you need them. -

-
-var number = numeral(1000);
-
-var added = number.add(10);
-// 1010
-
- - - - - - - - - -
BeforeFunctionAfter
-

Value

-

- The value is always available. -

-
-var number = numeral(1000);
-
-var string = number.format('0,000');
-// 1,000
-
-var value = number.value();
-// 1000
-
-

Set

-

- Set the value of your numeral object. -

-
-var number = numeral();
-
-number.set(1000);
-
-var value = number.value();
-// 1000
-
-

Clone

-

- Go ahead and clone any numeral object while you're at it. -

-
-var a = numeral(1000);
-var b = numeral(a);
-var c = a.clone();
-
-var aVal = a.set(2000).value();
-// 2000
-
-var bVal = b.value();
-// 1000
-
-var cVal = c.add(10).value();
-// 1010
-
- -

Acknowlegements

-

- Numeral.js, while less complex, was inspired by and heavily borrowed from Moment.js -

-
- - \ No newline at end of file diff --git a/temp/numeral.js/1.0.3/package/min/numeral-min.js b/temp/numeral.js/1.0.3/package/min/numeral-min.js deleted file mode 100644 index cb05992a3..000000000 --- a/temp/numeral.js/1.0.3/package/min/numeral-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// numeral.js -// version : 1.0.3 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ -(function(){function s(e){this._n=e}function o(e,t){var n=Math.pow(10,t);return(Math.round(e*n)/n).toFixed(t)}function u(e,t){var n;t.indexOf("$")>-1?n=f(e,t):t.indexOf("%")>-1?n=l(e,t):t.indexOf(":")>-1?n=c(e,t):n=p(e,t);return n}function a(e,t){t.indexOf(":")>-1?e._n=h(t):e._n=(t.indexOf("k")>-1?1e3:1)*(t.indexOf("m")>-1?1e6:1)*(t.indexOf("%")>-1?.01:1)*Number((t.indexOf("(")>-1?"-":"")+t.replace(/\$|,|%|k|m|th|st|nd|rd|\(|\)*/ig,""));return e._n}function f(e,t){t=t.replace("$","");var n=u(e,t);if(n.indexOf("(")>-1||n.indexOf("-")>-1){n=n.split("");n.splice(1,0,"$");n=n.join("")}else n="$"+n;return n}function l(e,t){t=t.replace("%","");e._n=e._n*100;var n=u(e,t);if(n.indexOf(")")>-1){n=n.split("");n.splice(-1,0,"%");n=n.join("")}else n+="%";return n}function c(e,t){var n=Math.floor(e._n/60/60),r=Math.floor((e._n-n*60*60)/60),i=Math.round(e._n-n*60*60-r*60);return n+":"+(r<10?"0"+r:r)+":"+(i<10?"0"+i:i)}function h(e){var t=e.split(":"),n=0;if(t.length===3){n+=Number(t[0])*60*60;n+=Number(t[1])*60;n+=Number(t[2])}else if(t.lenght===2){n+=Number(t[0])*60;n+=Number(t[1])}return Number(n)}function p(e,t){var n=!1,r=!1,i=!1;if(t.indexOf("(")>-1){n=!0;t=t.slice(1,-1)}if(t.indexOf("a")>-1){t=t.replace("a","");if(e._n>1e6){r="m";e._n=e._n/1e6}else{r="k";e._n=e._n/1e3}}if(t.indexOf("o")>-1){t=t.replace("o","");var s=e._n%100,u=["th","st","nd","rd","th"];i=s<21?s<4?u[s]:u[0]:s%10>4?u[0]:u[s%10]}var a=e._n.toString().split(".")[0],f=t.split(".")[1],l=t.indexOf(","),c="",h=!1;if(e._n<0){a=a.slice(1);h=!0}l>-1&&(a=a.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"));t.indexOf(".")===0&&(a="");f&&(c="."+o(e._n,f.length).split(".")[1]);r;return(n?"(":"")+(!n&&h?"-":"")+a+c+(i?i:"")+(r?r:"")+(n?")":"")}var e,t="1.0.3",n=Math.round,r,i=typeof module!="undefined"&&module.exports;e=function(t){e.isNumeral(t)?t=t.value():Number(t)||(t=0);return new s(Number(t))};e.isNumeral=function(e){console.log(e);return e instanceof s};e.version=t;e.isNumeral=function(e){return e instanceof s};e.fn=s.prototype={clone:function(){return e(this)},format:function(t){return u(this,t?t:e.defaultFormat)},unformat:function(t){return a(this,t?t:e.defaultFormat)},value:function(){return this._n},set:function(e){this._n=Number(e);return this},add:function(e){this._n=this._n+Number(e);return this},subtract:function(e){this._n=this._n-Number(e);return this},multiply:function(e){this._n=this._n*Number(e);return this},divide:function(e){this._n=this._n/Number(e);return this},difference:function(e){return this._n-Number(e)}};i&&(module.exports=e);typeof ender=="undefined"&&(this.numeral=e);typeof define=="function"&&define.amd&&define([],function(){return e})}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.0.3/package/numeral.js b/temp/numeral.js/1.0.3/package/numeral.js deleted file mode 100644 index 4177040b3..000000000 --- a/temp/numeral.js/1.0.3/package/numeral.js +++ /dev/null @@ -1,304 +0,0 @@ - -// numeral.js -// version : 1.0.3 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.0.3', - round = Math.round, i, - - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral(number) { - this._n = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision) { - var power = Math.pow(10, precision); - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - return (Math.round(value * power) / power).toFixed(precision); - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // money!!!!! - output = formatMoney(n, format); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' number - output = formatNumber(n, format); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - if (string.indexOf(':') > -1) { - n._n = unformatTime(string); - } else { - n._n = ((string.indexOf('k') > -1) ? 1000 : 1) * ((string.indexOf('m') > -1) ? 1000000 : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * Number(((string.indexOf('(') > -1) ? '-' : '') + string.replace(/\$|,|%|k|m|th|st|nd|rd|\(|\)*/ig, '')); - } - return n._n; - } - - function formatMoney (n, format) { - format = format.replace('$', ''); - var output = formatNumeral(n, format); - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - output.splice(1, 0, '$'); - output = output.join(''); - } else { - output = '$' + output; - } - return output; - } - - function formatPercentage (n, format) { - format = format.replace('%', ''); - n._n = n._n * 100; - var output = formatNumeral(n, format); - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, '%'); - output = output.join(''); - } else { - output = output + '%'; - } - return output; - } - - function formatTime (n, format) { - var hours = Math.floor(n._n/60/60), - minutes = Math.floor((n._n - (hours * 60 * 60))/60), - seconds = Math.round(n._n - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.lenght === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (n, format) { - var negP = false, - abbr = false, - ord = false; - - // see if we should use parentheses for negative number - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - format = format.replace('a', ''); - - if (n._n > 1000000) { - abbr = 'm'; - n._n = n._n / 1000000; - } else { - abbr = 'k'; - n._n = n._n / 1000; - } - } - - // see if ordinal is wanted - if (format.indexOf('o') > -1) { - format = format.replace('o', ''); - - var r = n._n % 100, - suffix = ['th', 'st', 'nd', 'rd', 'th']; - - ord = r < 21 ? (r < 4 ? suffix[r] : suffix[0]) : (r % 10 > 4 ? suffix[0] : suffix[r % 10]); - } - - var w = n._n.toString().split('.')[0], - precision = format.split('.')[1], - thousands = format.indexOf(','), - d = '', - neg = false; - - // format number - if (n._n < 0) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - if (precision) { - // do to fixed - d = '.' + toFixed(n._n, precision.length).split('.')[1]; - } - - if (abbr) { - - } - - return ((negP) ? '(' : '') + ((!negP && neg) ? '-' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((negP) ? ')' : ''); - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (numeral.isNumeral(input)) { - input = input.value(); - } else if (!Number(input)) { - input = 0; - } - - return new Numeral(Number(input)); - }; - - // compare numeral object - numeral.isNumeral = function (obj) { - console.log(obj); - return obj instanceof Numeral; - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString) { - return formatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - unformat : function (inputString) { - return unformatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - value : function () { - return this._n; - }, - - set : function (value) { - this._n = Number(value); - return this; - }, - - add : function (value) { - this._n = this._n + Number(value); - return this; - }, - - subtract : function (value) { - this._n = this._n - Number(value); - return this; - }, - - multiply : function (value) { - this._n = this._n * Number(value); - return this; - }, - - divide : function (value) { - this._n = this._n / Number(value); - return this; - }, - - difference : function (value) { - return this._n - Number(value); - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // Commenting out common js and global variable - // // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler "advanced" mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.0.3/package/package.json b/temp/numeral.js/1.0.3/package/package.json deleted file mode 100644 index b12c2aacd..000000000 --- a/temp/numeral.js/1.0.3/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.0.3", - "description": "Format and manipulate numbers.", - "homepage": "http://adamwdraper.github.com/Numeral-js/", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "format", - "time", - "money", - "percentage" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://adamwdraper.github.com/Numeral-js/)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://adamwdraper.github.com/Numeral-js/)\n\nChangelog\n=========\n\n### 1.0.3\nAdd ordinal formatting using 'o' in the format\n### 1.0.2\nAdd clone functionality\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.0.3", - "_from": "numeral" -} diff --git a/temp/numeral.js/1.0.4/dist.tar.gz b/temp/numeral.js/1.0.4/dist.tar.gz deleted file mode 100644 index d395a9507650deb2d6441dadda880e59cabe3209..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6375 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 pmW%;6xk4wu - - - - - - - - - - -
-

Numeral.js

-

A javascript library for formatting and manipulating numbers.

-

Use it

-

In the Browser

-
-<script src="numeral-min.js"></script>
-
-

In Node.js

-
-npm install numeral
-
-
-var numeral = require('numeral');
-
- -

Format

-

- Numbers can be formatted to look like money, percentages, times, or even plain old numbers with decimal places, comma delineated thousands, and abbreviations. -

-
-var string = numeral(1000).format('0,0');
-// 1,000
-
-

Numbers

- - - - - - - - - -
NumberFormatString
-

Money

- - - - - - - - - -
NumberFormatString
-

Percentages

- - - - - - - - - -
NumberFormatString
-

Time

- - - - - - - - - -
NumberFormatString
-

Unformat

-

- Got a formatted string? Use the unformat function to make it useful again. -

-
-var string = numeral().unformat('($10,000.00)');
-// -10000
-
- - - - - - - - - -
StringFunctionNumber
-

Manipulate

-

- Not that you will uses these often, but they're there when you need them. -

-
-var number = numeral(1000);
-
-var added = number.add(10);
-// 1010
-
- - - - - - - - - -
BeforeFunctionAfter
-

Value

-

- The value is always available. -

-
-var number = numeral(1000);
-
-var string = number.format('0,0');
-// 1,000
-
-var value = number.value();
-// 1000
-
-

Set

-

- Set the value of your numeral object. -

-
-var number = numeral();
-
-number.set(1000);
-
-var value = number.value();
-// 1000
-
-

Clone

-

- Go ahead and clone any numeral object while you're at it. -

-
-var a = numeral(1000);
-var b = numeral(a);
-var c = a.clone();
-
-var aVal = a.set(2000).value();
-// 2000
-
-var bVal = b.value();
-// 1000
-
-var cVal = c.add(10).value();
-// 1010
-
-

Acknowlegements

-

- Numeral.js, while less complex, was inspired by and heavily borrowed from Moment.js -

-
- - \ No newline at end of file diff --git a/temp/numeral.js/1.0.4/package/min/numeral-min.js b/temp/numeral.js/1.0.4/package/min/numeral-min.js deleted file mode 100644 index 229441da4..000000000 --- a/temp/numeral.js/1.0.4/package/min/numeral-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// numeral.js -// version : 1.0.4 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ -(function(){function s(e){this._n=e}function o(e,t){var n=Math.pow(10,t);return(Math.round(e*n)/n).toFixed(t)}function u(e,t){var n;t.indexOf("$")>-1?n=f(e,t):t.indexOf("%")>-1?n=l(e,t):t.indexOf(":")>-1?n=c(e,t):n=p(e,t);return n}function a(e,t){t.indexOf(":")>-1?e._n=h(t):e._n=(t.indexOf("k")>-1?1e3:1)*(t.indexOf("m")>-1?1e6:1)*(t.indexOf("%")>-1?.01:1)*Number((t.indexOf("(")>-1?"-":"")+t.replace(/\$|,|%|k|m|th|st|nd|rd|\(|\)*/ig,""));return e._n}function f(e,t){t=t.replace("$","");var n=u(e,t);if(n.indexOf("(")>-1||n.indexOf("-")>-1){n=n.split("");n.splice(1,0,"$");n=n.join("")}else n="$"+n;return n}function l(e,t){t=t.replace("%","");e._n=e._n*100;var n=u(e,t);if(n.indexOf(")")>-1){n=n.split("");n.splice(-1,0,"%");n=n.join("")}else n+="%";return n}function c(e,t){var n=Math.floor(e._n/60/60),r=Math.floor((e._n-n*60*60)/60),i=Math.round(e._n-n*60*60-r*60);return n+":"+(r<10?"0"+r:r)+":"+(i<10?"0"+i:i)}function h(e){var t=e.split(":"),n=0;if(t.length===3){n+=Number(t[0])*60*60;n+=Number(t[1])*60;n+=Number(t[2])}else if(t.lenght===2){n+=Number(t[0])*60;n+=Number(t[1])}return Number(n)}function p(e,t){var n=!1,r=!1,i=!1;if(t.indexOf("(")>-1){n=!0;t=t.slice(1,-1)}if(t.indexOf("a")>-1){t=t.replace("a","");if(e._n>1e6){r="m";e._n=e._n/1e6}else{r="k";e._n=e._n/1e3}}if(t.indexOf("o")>-1){t=t.replace("o","");var s=e._n%100,u=["th","st","nd","rd","th"];i=s<21?s<4?u[s]:u[0]:s%10>4?u[0]:u[s%10]}var a=e._n.toString().split(".")[0],f=t.split(".")[1],l=t.indexOf(","),c="",h=!1;if(e._n<0){a=a.slice(1);h=!0}l>-1&&(a=a.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"));t.indexOf(".")===0&&(a="");f&&(c="."+o(e._n,f.length).split(".")[1]);r;return(n&&h?"(":"")+(!n&&h?"-":"")+a+c+(i?i:"")+(r?r:"")+(n&&h?")":"")}var e,t="1.0.4",n=Math.round,r,i=typeof module!="undefined"&&module.exports;e=function(t){e.isNumeral(t)?t=t.value():Number(t)||(t=0);return new s(Number(t))};e.isNumeral=function(e){console.log(e);return e instanceof s};e.version=t;e.isNumeral=function(e){return e instanceof s};e.fn=s.prototype={clone:function(){return e(this)},format:function(t){return u(this,t?t:e.defaultFormat)},unformat:function(t){return a(this,t?t:e.defaultFormat)},value:function(){return this._n},set:function(e){this._n=Number(e);return this},add:function(e){this._n=this._n+Number(e);return this},subtract:function(e){this._n=this._n-Number(e);return this},multiply:function(e){this._n=this._n*Number(e);return this},divide:function(e){this._n=this._n/Number(e);return this},difference:function(e){return this._n-Number(e)}};i&&(module.exports=e);typeof ender=="undefined"&&(this.numeral=e);typeof define=="function"&&define.amd&&define([],function(){return e})}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.0.4/package/numeral.js b/temp/numeral.js/1.0.4/package/numeral.js deleted file mode 100644 index 01734a53b..000000000 --- a/temp/numeral.js/1.0.4/package/numeral.js +++ /dev/null @@ -1,304 +0,0 @@ - -// numeral.js -// version : 1.0.4 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.0.4', - round = Math.round, i, - - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral(number) { - this._n = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision) { - var power = Math.pow(10, precision); - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - return (Math.round(value * power) / power).toFixed(precision); - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // money!!!!! - output = formatMoney(n, format); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' number - output = formatNumber(n, format); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - if (string.indexOf(':') > -1) { - n._n = unformatTime(string); - } else { - n._n = ((string.indexOf('k') > -1) ? 1000 : 1) * ((string.indexOf('m') > -1) ? 1000000 : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * Number(((string.indexOf('(') > -1) ? '-' : '') + string.replace(/\$|,|%|k|m|th|st|nd|rd|\(|\)*/ig, '')); - } - return n._n; - } - - function formatMoney (n, format) { - format = format.replace('$', ''); - var output = formatNumeral(n, format); - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - output.splice(1, 0, '$'); - output = output.join(''); - } else { - output = '$' + output; - } - return output; - } - - function formatPercentage (n, format) { - format = format.replace('%', ''); - n._n = n._n * 100; - var output = formatNumeral(n, format); - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, '%'); - output = output.join(''); - } else { - output = output + '%'; - } - return output; - } - - function formatTime (n, format) { - var hours = Math.floor(n._n/60/60), - minutes = Math.floor((n._n - (hours * 60 * 60))/60), - seconds = Math.round(n._n - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.lenght === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (n, format) { - var negP = false, - abbr = false, - ord = false; - - // see if we should use parentheses for negative number - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - format = format.replace('a', ''); - - if (n._n > 1000000) { - abbr = 'm'; - n._n = n._n / 1000000; - } else { - abbr = 'k'; - n._n = n._n / 1000; - } - } - - // see if ordinal is wanted - if (format.indexOf('o') > -1) { - format = format.replace('o', ''); - - var r = n._n % 100, - suffix = ['th', 'st', 'nd', 'rd', 'th']; - - ord = r < 21 ? (r < 4 ? suffix[r] : suffix[0]) : (r % 10 > 4 ? suffix[0] : suffix[r % 10]); - } - - var w = n._n.toString().split('.')[0], - precision = format.split('.')[1], - thousands = format.indexOf(','), - d = '', - neg = false; - - // format number - if (n._n < 0) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - if (precision) { - // do to fixed - d = '.' + toFixed(n._n, precision.length).split('.')[1]; - } - - if (abbr) { - - } - - return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((negP && neg) ? ')' : ''); - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (numeral.isNumeral(input)) { - input = input.value(); - } else if (!Number(input)) { - input = 0; - } - - return new Numeral(Number(input)); - }; - - // compare numeral object - numeral.isNumeral = function (obj) { - console.log(obj); - return obj instanceof Numeral; - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString) { - return formatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - unformat : function (inputString) { - return unformatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - value : function () { - return this._n; - }, - - set : function (value) { - this._n = Number(value); - return this; - }, - - add : function (value) { - this._n = this._n + Number(value); - return this; - }, - - subtract : function (value) { - this._n = this._n - Number(value); - return this; - }, - - multiply : function (value) { - this._n = this._n * Number(value); - return this; - }, - - divide : function (value) { - this._n = this._n / Number(value); - return this; - }, - - difference : function (value) { - return this._n - Number(value); - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // Commenting out common js and global variable - // // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler "advanced" mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.0.4/package/package.json b/temp/numeral.js/1.0.4/package/package.json deleted file mode 100644 index 9f4a829bc..000000000 --- a/temp/numeral.js/1.0.4/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.0.4", - "description": "Format and manipulate numbers.", - "homepage": "http://adamwdraper.github.com/Numeral-js/", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "format", - "time", - "money", - "percentage" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://adamwdraper.github.com/Numeral-js/)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://adamwdraper.github.com/Numeral-js/)\n\nChangelog\n=========\n\n### 1.0.4\nBug fix: Non negative numbers were displaying as negative when using parentheses\n### 1.0.3\nAdd ordinal formatting using 'o' in the format\n### 1.0.2\nAdd clone functionality\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.0.4", - "_from": "numeral" -} diff --git a/temp/numeral.js/1.1.0/dist.tar.gz b/temp/numeral.js/1.1.0/dist.tar.gz deleted file mode 100644 index 3968df0cf8be666071b92d15d60f2d7e26c145d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7991 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�N>fyzdnYJ57W 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 diff --git a/temp/numeral.js/1.1.0/package/LICENSE b/temp/numeral.js/1.1.0/package/LICENSE deleted file mode 100644 index 145e65bcd..000000000 --- a/temp/numeral.js/1.1.0/package/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 Adam Draper - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/temp/numeral.js/1.1.0/package/README.md b/temp/numeral.js/1.1.0/package/README.md deleted file mode 100644 index bab4899ca..000000000 --- a/temp/numeral.js/1.1.0/package/README.md +++ /dev/null @@ -1,57 +0,0 @@ -[Numeral.js](http://adamwdraper.github.com/Numeral-js/) -======================================================= - -A javascript library for formatting and manipulating numbers. - -[Website and documentation](http://adamwdraper.github.com/Numeral-js/) - - -Changelog -========= - -### 1.1.0 - -Add Tests -Bug fix: Fix difference returning negative values - -### 1.0.4 - -Bug fix: Non negative numbers were displaying as negative when using parentheses - -### 1.0.3 - -Add ordinal formatting using 'o' in the format - -### 1.0.2 - -Add clone functionality - -### 1.0.1 - -Added abbreviations for thousands and millions using 'a' in the format - -### 1.0.0 - -Initial release - - -Acknowlegements -=============== - -Numeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com) - - -License -======= - -Numeral.js is freely distributable under the terms of the MIT license. - -Copyright (c) 2012 Adam Draper - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/temp/numeral.js/1.1.0/package/examples/example.html b/temp/numeral.js/1.1.0/package/examples/example.html deleted file mode 100644 index 0aacf71fe..000000000 --- a/temp/numeral.js/1.1.0/package/examples/example.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - - - - - -
-

Numeral.js

-

A javascript library for formatting and manipulating numbers.

-

Use it

-

In the Browser

-
-<script src="numeral-min.js"></script>
-
-

In Node.js

-
-npm install numeral
-
-
-var numeral = require('numeral');
-
- -

Format

-

- Numbers can be formatted to look like money, percentages, times, or even plain old numbers with decimal places, comma delineated thousands, and abbreviations. -

-
-var string = numeral(1000).format('0,0');
-// 1,000
-
-

Numbers

- - - - - - - - - -
NumberFormatString
-

Money

- - - - - - - - - -
NumberFormatString
-

Percentages

- - - - - - - - - -
NumberFormatString
-

Time

- - - - - - - - - -
NumberFormatString
-

Unformat

-

- Got a formatted string? Use the unformat function to make it useful again. -

-
-var string = numeral().unformat('($10,000.00)');
-// -10000
-
- - - - - - - - - -
StringFunctionNumber
-

Manipulate

-

- Not that you will uses these often, but they're there when you need them. -

-
-var number = numeral(1000);
-
-var added = number.add(10);
-// 1010
-
- - - - - - - - - -
BeforeFunctionAfter
-

Value

-

- The value is always available. -

-
-var number = numeral(1000);
-
-var string = number.format('0,0');
-// 1,000
-
-var value = number.value();
-// 1000
-
-

Set

-

- Set the value of your numeral object. -

-
-var number = numeral();
-
-number.set(1000);
-
-var value = number.value();
-// 1000
-
-

Clone

-

- Go ahead and clone any numeral object while you're at it. -

-
-var a = numeral(1000);
-var b = numeral(a);
-var c = a.clone();
-
-var aVal = a.set(2000).value();
-// 2000
-
-var bVal = b.value();
-// 1000
-
-var cVal = c.add(10).value();
-// 1010
-
- -

Acknowlegements

-

- Numeral.js, while less complex, was inspired by and heavily borrowed from Moment.js -

-
- - \ No newline at end of file diff --git a/temp/numeral.js/1.1.0/package/min/numeral-min.js b/temp/numeral.js/1.1.0/package/min/numeral-min.js deleted file mode 100644 index 85581e5af..000000000 --- a/temp/numeral.js/1.1.0/package/min/numeral-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// numeral.js -// version : 1.1.0 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ -(function(){function s(e){this._n=e}function o(e,t){var n=Math.pow(10,t);return(Math.round(e*n)/n).toFixed(t)}function u(e,t){var n;t.indexOf("$")>-1?n=f(e,t):t.indexOf("%")>-1?n=l(e,t):t.indexOf(":")>-1?n=c(e,t):n=p(e,t);return n}function a(e,t){t.indexOf(":")>-1?e._n=h(t):e._n=(t.indexOf("k")>-1?1e3:1)*(t.indexOf("m")>-1?1e6:1)*(t.indexOf("%")>-1?.01:1)*Number((t.indexOf("(")>-1?"-":"")+t.replace(/\$|,|%|k|m|th|st|nd|rd|\(|\)*/ig,""));return e._n}function f(e,t){t=t.replace("$","");var n=u(e,t);if(n.indexOf("(")>-1||n.indexOf("-")>-1){n=n.split("");n.splice(1,0,"$");n=n.join("")}else n="$"+n;return n}function l(e,t){t=t.replace("%","");e._n=e._n*100;var n=u(e,t);if(n.indexOf(")")>-1){n=n.split("");n.splice(-1,0,"%");n=n.join("")}else n+="%";return n}function c(e,t){var n=Math.floor(e._n/60/60),r=Math.floor((e._n-n*60*60)/60),i=Math.round(e._n-n*60*60-r*60);return n+":"+(r<10?"0"+r:r)+":"+(i<10?"0"+i:i)}function h(e){var t=e.split(":"),n=0;if(t.length===3){n+=Number(t[0])*60*60;n+=Number(t[1])*60;n+=Number(t[2])}else if(t.lenght===2){n+=Number(t[0])*60;n+=Number(t[1])}return Number(n)}function p(e,t){var n=!1,r=!1,i=!1;if(t.indexOf("(")>-1){n=!0;t=t.slice(1,-1)}if(t.indexOf("a")>-1){t=t.replace("a","");if(e._n>1e6){r="m";e._n=e._n/1e6}else{r="k";e._n=e._n/1e3}}if(t.indexOf("o")>-1){t=t.replace("o","");var s=e._n%100,u=["th","st","nd","rd","th"];i=s<21?s<4?u[s]:u[0]:s%10>4?u[0]:u[s%10]}var a=e._n.toString().split(".")[0],f=t.split(".")[1],l=t.indexOf(","),c="",h=!1;if(e._n<0){a=a.slice(1);h=!0}l>-1&&(a=a.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"));t.indexOf(".")===0&&(a="");f&&(c="."+o(e._n,f.length).split(".")[1]);r;return(n&&h?"(":"")+(!n&&h?"-":"")+a+c+(i?i:"")+(r?r:"")+(n&&h?")":"")}var e,t="1.1.0",n=Math.round,r,i=typeof module!="undefined"&&module.exports;e=function(t){e.isNumeral(t)?t=t.value():Number(t)||(t=0);return new s(Number(t))};e.isNumeral=function(e){console.log(e);return e instanceof s};e.version=t;e.isNumeral=function(e){return e instanceof s};e.fn=s.prototype={clone:function(){return e(this)},format:function(t){return u(this,t?t:e.defaultFormat)},unformat:function(t){return a(this,t?t:e.defaultFormat)},value:function(){return this._n},set:function(e){this._n=Number(e);return this},add:function(e){this._n=this._n+Number(e);return this},subtract:function(e){this._n=this._n-Number(e);return this},multiply:function(e){this._n=this._n*Number(e);return this},divide:function(e){this._n=this._n/Number(e);return this},difference:function(e){var t=this._n-Number(e);t<0&&(t=-t);return t}};i&&(module.exports=e);typeof ender=="undefined"&&(this.numeral=e);typeof define=="function"&&define.amd&&define([],function(){return e})}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.1.0/package/numeral.js b/temp/numeral.js/1.1.0/package/numeral.js deleted file mode 100644 index f68531e33..000000000 --- a/temp/numeral.js/1.1.0/package/numeral.js +++ /dev/null @@ -1,310 +0,0 @@ - -// numeral.js -// version : 1.1.0 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.1.0', - round = Math.round, i, - - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral(number) { - this._n = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision) { - var power = Math.pow(10, precision); - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - return (Math.round(value * power) / power).toFixed(precision); - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // money!!!!! - output = formatMoney(n, format); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' number - output = formatNumber(n, format); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - if (string.indexOf(':') > -1) { - n._n = unformatTime(string); - } else { - n._n = ((string.indexOf('k') > -1) ? 1000 : 1) * ((string.indexOf('m') > -1) ? 1000000 : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * Number(((string.indexOf('(') > -1) ? '-' : '') + string.replace(/\$|,|%|k|m|th|st|nd|rd|\(|\)*/ig, '')); - } - return n._n; - } - - function formatMoney (n, format) { - format = format.replace('$', ''); - var output = formatNumeral(n, format); - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - output.splice(1, 0, '$'); - output = output.join(''); - } else { - output = '$' + output; - } - return output; - } - - function formatPercentage (n, format) { - format = format.replace('%', ''); - n._n = n._n * 100; - var output = formatNumeral(n, format); - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, '%'); - output = output.join(''); - } else { - output = output + '%'; - } - return output; - } - - function formatTime (n, format) { - var hours = Math.floor(n._n/60/60), - minutes = Math.floor((n._n - (hours * 60 * 60))/60), - seconds = Math.round(n._n - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.lenght === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (n, format) { - var negP = false, - abbr = false, - ord = false; - - // see if we should use parentheses for negative number - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - format = format.replace('a', ''); - - if (n._n > 1000000) { - abbr = 'm'; - n._n = n._n / 1000000; - } else { - abbr = 'k'; - n._n = n._n / 1000; - } - } - - // see if ordinal is wanted - if (format.indexOf('o') > -1) { - format = format.replace('o', ''); - - var r = n._n % 100, - suffix = ['th', 'st', 'nd', 'rd', 'th']; - - ord = r < 21 ? (r < 4 ? suffix[r] : suffix[0]) : (r % 10 > 4 ? suffix[0] : suffix[r % 10]); - } - - var w = n._n.toString().split('.')[0], - precision = format.split('.')[1], - thousands = format.indexOf(','), - d = '', - neg = false; - - // format number - if (n._n < 0) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - if (precision) { - // do to fixed - d = '.' + toFixed(n._n, precision.length).split('.')[1]; - } - - if (abbr) { - - } - - return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((negP && neg) ? ')' : ''); - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (numeral.isNumeral(input)) { - input = input.value(); - } else if (!Number(input)) { - input = 0; - } - - return new Numeral(Number(input)); - }; - - // compare numeral object - numeral.isNumeral = function (obj) { - console.log(obj); - return obj instanceof Numeral; - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString) { - return formatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - unformat : function (inputString) { - return unformatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - value : function () { - return this._n; - }, - - set : function (value) { - this._n = Number(value); - return this; - }, - - add : function (value) { - this._n = this._n + Number(value); - return this; - }, - - subtract : function (value) { - this._n = this._n - Number(value); - return this; - }, - - multiply : function (value) { - this._n = this._n * Number(value); - return this; - }, - - divide : function (value) { - this._n = this._n / Number(value); - return this; - }, - - difference : function (value) { - var difference = this._n - Number(value); - - if (difference < 0) { - difference = -difference; - } - - return difference; - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // Commenting out common js and global variable - // // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler "advanced" mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.1.0/package/package.json b/temp/numeral.js/1.1.0/package/package.json deleted file mode 100644 index 3866e539d..000000000 --- a/temp/numeral.js/1.1.0/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.1.0", - "description": "Format and manipulate numbers.", - "homepage": "http://adamwdraper.github.com/Numeral-js/", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "format", - "time", - "money", - "percentage" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://adamwdraper.github.com/Numeral-js/)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://adamwdraper.github.com/Numeral-js/)\n\nChangelog\n=========\n\n### 1.1.0\nAdd Tests\nBug fix: Fix difference returning negative values\n### 1.0.4\nBug fix: Non negative numbers were displaying as negative when using parentheses\n### 1.0.3\nAdd ordinal formatting using 'o' in the format\n### 1.0.2\nAdd clone functionality\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.1.0", - "_from": "numeral" -} diff --git a/temp/numeral.js/1.1.0/package/tests/test.html b/temp/numeral.js/1.1.0/package/tests/test.html deleted file mode 100644 index 5ef855043..000000000 --- a/temp/numeral.js/1.1.0/package/tests/test.html +++ /dev/null @@ -1,509 +0,0 @@ - - - - - - - - - - - - - -
- - -
-
- - \ No newline at end of file diff --git a/temp/numeral.js/1.2.1/dist.tar.gz b/temp/numeral.js/1.2.1/dist.tar.gz deleted file mode 100644 index f3b648b863d3dbcebf2cc7282fbb7c6748a4fff1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8203 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 diff --git a/temp/numeral.js/1.2.1/package/LICENSE b/temp/numeral.js/1.2.1/package/LICENSE deleted file mode 100644 index 145e65bcd..000000000 --- a/temp/numeral.js/1.2.1/package/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 Adam Draper - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/temp/numeral.js/1.2.1/package/README.md b/temp/numeral.js/1.2.1/package/README.md deleted file mode 100644 index 0fcc5a9f7..000000000 --- a/temp/numeral.js/1.2.1/package/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[Numeral.js](http://adamwdraper.github.com/Numeral-js/) -======================================================= - -A javascript library for formatting and manipulating numbers. - -[Website and documentation](http://adamwdraper.github.com/Numeral-js/) - - -Changelog -========= - -### 1.2.1 - -Bug fix: Fix unformatting non-negative abbreviations - -### 1.2.0 - -Add language support - -Update testing for to include languages - -### 1.1.0 - -Add Tests - -Bug fix: Fix difference returning negative values - -### 1.0.4 - -Bug fix: Non negative numbers were displaying as negative when using parentheses - -### 1.0.3 - -Add ordinal formatting using 'o' in the format - -### 1.0.2 - -Add clone functionality - -### 1.0.1 - -Added abbreviations for thousands and millions using 'a' in the format - -### 1.0.0 - -Initial release - - -Acknowlegements -=============== - -Numeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com) - - -License -======= - -Numeral.js is freely distributable under the terms of the MIT license. - -Copyright (c) 2012 Adam Draper - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/temp/numeral.js/1.2.1/package/languages/fr.js b/temp/numeral.js/1.2.1/package/languages/fr.js deleted file mode 100644 index 8e6e1ceb9..000000000 --- a/temp/numeral.js/1.2.1/package/languages/fr.js +++ /dev/null @@ -1,30 +0,0 @@ -// numeral.js language configuration -// language : french (fr) -// author : Adam Draper : https://github.com/adamwdraper -(function () { - var language = { - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'm' - }, - ordinal : function (number) { - return number === 1 ? 'er' : 'ème'; - }, - money: { - symbol: '€' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && this.numeral && this.numeral.language) { - this.numeral.language('fr', language); - } -}()); \ No newline at end of file diff --git a/temp/numeral.js/1.2.1/package/min/numeral-min.js b/temp/numeral.js/1.2.1/package/min/numeral-min.js deleted file mode 100644 index 073665617..000000000 --- a/temp/numeral.js/1.2.1/package/min/numeral-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// numeral.js -// version : 1.2.1 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ -(function(){function u(e){this._n=e}function a(e,t){var n=Math.pow(10,t);return(Math.round(e*n)/n).toFixed(t)}function f(e,t){var n;t.indexOf("$")>-1?n=c(e,t):t.indexOf("%")>-1?n=h(e,t):t.indexOf(":")>-1?n=p(e,t):n=v(e,t);return n}function l(e,t){if(t.indexOf(":")>-1)e._n=d(t);else{i[s].delimiters.decimal!=="."&&(t=t.replace(i[s].delimiters.decimal,"."));var n=new RegExp(i[s].abbreviations.thousand+"(?:\\)|\\"+i[s].money.symbol+"?)$"),r=new RegExp(i[s].abbreviations.million+"(?:\\)|\\"+i[s].money.symbol+"?)$");e._n=(t.match(n)?1e3:1)*(t.match(r)?1e6:1)*(t.indexOf("%")>-1?.01:1)*Number((t.indexOf("(")>-1?"-":"")+t.replace(/[^0-9\.'-]+/g,""))}return e._n}function c(e,t){t=t.replace("$","");var n=f(e,t);if(n.indexOf("(")>-1||n.indexOf("-")>-1){n=n.split("");n.splice(1,0,i[s].money.symbol);n=n.join("")}else n=i[s].money.symbol+n;return n}function h(e,t){t=t.replace("%","");e._n=e._n*100;var n=f(e,t);if(n.indexOf(")")>-1){n=n.split("");n.splice(-1,0,"%");n=n.join("")}else n+="%";return n}function p(e,t){var n=Math.floor(e._n/60/60),r=Math.floor((e._n-n*60*60)/60),i=Math.round(e._n-n*60*60-r*60);return n+":"+(r<10?"0"+r:r)+":"+(i<10?"0"+i:i)}function d(e){var t=e.split(":"),n=0;if(t.length===3){n+=Number(t[0])*60*60;n+=Number(t[1])*60;n+=Number(t[2])}else if(t.lenght===2){n+=Number(t[0])*60;n+=Number(t[1])}return Number(n)}function v(e,t){var n=!1,r=!1,o=!1;if(t.indexOf("(")>-1){n=!0;t=t.slice(1,-1)}if(t.indexOf("a")>-1){t=t.replace("a","");if(e._n>1e6){r=i[s].abbreviations.million;e._n=e._n/1e6}else{r=i[s].abbreviations.thousand;e._n=e._n/1e3}}if(t.indexOf("o")>-1){t=t.replace("o","");o=i[s].ordinal(e._n)}var u=e._n.toString().split(".")[0],f=t.split(".")[1],l=t.indexOf(","),c="",h=!1;if(e._n<0){u=u.slice(1);h=!0}l>-1&&(u=u.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+i[s].delimiters.thousands));t.indexOf(".")===0&&(u="");f&&(c=i[s].delimiters.decimal+a(e._n,f.length).split(".")[1]);r;return(n&&h?"(":"")+(!n&&h?"-":"")+u+c+(o?o:"")+(r?r:"")+(n&&h?")":"")}function m(e,t){i[e]=t}var e,t="1.2.1",n=Math.round,r,i={},s="en",o=typeof module!="undefined"&&module.exports;e=function(t){e.isNumeral(t)?t=t.value():Number(t)||(t=0);return new u(Number(t))};e.isNumeral=function(e){return e instanceof u};e.version=t;e.isNumeral=function(e){return e instanceof u};e.language=function(e,t){if(!e)return s;e&&!t&&(s=e);(t||!i[e])&&m(e,t);return i};e.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m"},ordinal:function(e){var t=e%10;return~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th"},money:{symbol:"$"}});e.fn=u.prototype={clone:function(){return e(this)},format:function(t){return f(this,t?t:e.defaultFormat)},unformat:function(t){return l(this,t?t:e.defaultFormat)},value:function(){return this._n},set:function(e){this._n=Number(e);return this},add:function(e){this._n=this._n+Number(e);return this},subtract:function(e){this._n=this._n-Number(e);return this},multiply:function(e){this._n=this._n*Number(e);return this},divide:function(e){this._n=this._n/Number(e);return this},difference:function(e){var t=this._n-Number(e);t<0&&(t=-t);return t}};o&&(module.exports=e);typeof ender=="undefined"&&(this.numeral=e);typeof define=="function"&&define.amd&&define([],function(){return e})}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.2.1/package/numeral.js b/temp/numeral.js/1.2.1/package/numeral.js deleted file mode 100644 index e2233815b..000000000 --- a/temp/numeral.js/1.2.1/package/numeral.js +++ /dev/null @@ -1,361 +0,0 @@ - -// numeral.js -// version : 1.2.1 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.2.1', - round = Math.round, i, - // internal storage for language config files - languages = {}, - currentLanguage = 'en', - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral(number) { - this._n = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision) { - var power = Math.pow(10, precision); - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - return (Math.round(value * power) / power).toFixed(precision); - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // money!!!!! - output = formatMoney(n, format); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' number - output = formatNumber(n, format); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - if (string.indexOf(':') > -1) { - n._n = unformatTime(string); - } else { - if (languages[currentLanguage].delimiters.decimal !== '.') { - string = string.replace(languages[currentLanguage].delimiters.decimal, '.'); - } - var thousandRegExp = new RegExp(languages[currentLanguage].abbreviations.thousand + '(?:\\)|\\' + languages[currentLanguage].money.symbol + '?)$'), - millionRegExp = new RegExp(languages[currentLanguage].abbreviations.million + '(?:\\)|\\' + languages[currentLanguage].money.symbol + '?)$'); - n._n = ((string.match(thousandRegExp)) ? 1000 : 1) * ((string.match(millionRegExp)) ? 1000000 : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * Number(((string.indexOf('(') > -1) ? '-' : '') + string.replace(/[^0-9\.'-]+/g, '')); - } - return n._n; - } - - function formatMoney (n, format) { - format = format.replace('$', ''); - var output = formatNumeral(n, format); - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - output.splice(1, 0, languages[currentLanguage].money.symbol); - output = output.join(''); - } else { - output = languages[currentLanguage].money.symbol + output; - } - return output; - } - - function formatPercentage (n, format) { - format = format.replace('%', ''); - n._n = n._n * 100; - var output = formatNumeral(n, format); - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, '%'); - output = output.join(''); - } else { - output = output + '%'; - } - return output; - } - - function formatTime (n, format) { - var hours = Math.floor(n._n/60/60), - minutes = Math.floor((n._n - (hours * 60 * 60))/60), - seconds = Math.round(n._n - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.lenght === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (n, format) { - var negP = false, - abbr = false, - ord = false; - - // see if we should use parentheses for negative number - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - format = format.replace('a', ''); - - if (n._n > 1000000) { - abbr = languages[currentLanguage].abbreviations.million; - n._n = n._n / 1000000; - } else { - abbr = languages[currentLanguage].abbreviations.thousand; - n._n = n._n / 1000; - } - } - - // see if ordinal is wanted - if (format.indexOf('o') > -1) { - format = format.replace('o', ''); - - ord = languages[currentLanguage].ordinal(n._n); - } - - var w = n._n.toString().split('.')[0], - precision = format.split('.')[1], - thousands = format.indexOf(','), - d = '', - neg = false; - - // format number - if (n._n < 0) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + languages[currentLanguage].delimiters.thousands); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - if (precision) { - // do to fixed - d = languages[currentLanguage].delimiters.decimal + toFixed(n._n, precision.length).split('.')[1]; - } - - if (abbr) { - - } - - return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((negP && neg) ? ')' : ''); - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (numeral.isNumeral(input)) { - input = input.value(); - } else if (!Number(input)) { - input = 0; - } - - return new Numeral(Number(input)); - }; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // This function will load languages and then set the global language. If - // no arguments are passed in, it will simply return the current global - // language key. - numeral.language = function (key, values) { - if (!key) { - return currentLanguage; - } - - if (key && !values) { - currentLanguage = key; - } - - if (values || !languages[key]) { - loadLanguage(key, values); - } - - return languages; - }; - - numeral.language('en', { - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - money: { - symbol: '$' - } - }); - - /************************************ - Helpers - ************************************/ - - function loadLanguage(key, values) { - languages[key] = values; - } - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString) { - return formatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - unformat : function (inputString) { - return unformatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - value : function () { - return this._n; - }, - - set : function (value) { - this._n = Number(value); - return this; - }, - - add : function (value) { - this._n = this._n + Number(value); - return this; - }, - - subtract : function (value) { - this._n = this._n - Number(value); - return this; - }, - - multiply : function (value) { - this._n = this._n * Number(value); - return this; - }, - - divide : function (value) { - this._n = this._n / Number(value); - return this; - }, - - difference : function (value) { - var difference = this._n - Number(value); - - if (difference < 0) { - difference = -difference; - } - - return difference; - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // Commenting out common js and global variable - // // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler "advanced" mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.2.1/package/package.json b/temp/numeral.js/1.2.1/package/package.json deleted file mode 100644 index b98e8b53d..000000000 --- a/temp/numeral.js/1.2.1/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.2.1", - "description": "Format and manipulate numbers.", - "homepage": "http://adamwdraper.github.com/Numeral-js/", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "format", - "time", - "money", - "percentage" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://adamwdraper.github.com/Numeral-js/)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://adamwdraper.github.com/Numeral-js/)\n\nChangelog\n=========\n\n### 1.2.1\nBug fix: Fix unformatting non-negative abbreviations\n### 1.2.0\nAdd localization language support\n\nUpdate testing for to include languages\n### 1.1.0\nAdd Tests\n\nBug fix: Fix difference returning negative values\n### 1.0.4\nBug fix: Non negative numbers were displaying as negative when using parentheses\n### 1.0.3\nAdd ordinal formatting using 'o' in the format\n### 1.0.2\nAdd clone functionality\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.2.1", - "_from": "numeral" -} \ No newline at end of file diff --git a/temp/numeral.js/1.2.1/package/tests/languages/en.js b/temp/numeral.js/1.2.1/package/tests/languages/en.js deleted file mode 100644 index 07fe9a1d0..000000000 --- a/temp/numeral.js/1.2.1/package/tests/languages/en.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: en', { - setup: function() { - numeral.language('en'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10,000.0000'], - [10000.23,'0,0','10,000'], - [-10000,'0,0.0','-10,000.0'], - [10000.1234,'0.000','10000.123'], - [-10000,'(0,0.0000)','(10,000.0000)'], - [-.23,'.00','-.23'], - [-.23,'(.00)','(.23)'], - [.23,'0.00000','0.23000'], - [1230974,'0.0a','1.2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1st'], - [52,'0o','52nd'], - [23,'0o','23rd'], - [100,'0o','100th'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Money ----------------------- -test('Format Money', 4, function() { - var tests = [ - [1000.234,'$0,0.00','$1,000.23'], - [-1000.234,'($0,0)','($1,000)'], - [-1000.234,'$0.00','-$1000.23'], - [1230974,'($0.00a)','$1.23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97.488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43.000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10,000.123',10000.123], - ['(0.12345)',-.12345], - ['($1.23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23rd',23], - ['$10,000.00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.1/package/tests/languages/fr.js b/temp/numeral.js/1.2.1/package/tests/languages/fr.js deleted file mode 100644 index e7448d1d3..000000000 --- a/temp/numeral.js/1.2.1/package/tests/languages/fr.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: fr', { - setup: function() { - numeral.language('fr'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10 000,0000'], - [10000.23,'0,0','10 000'], - [-10000,'0,0.0','-10 000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10 000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1er'], - [52,'0o','52ème'], - [23,'0o','23ème'], - [100,'0o','100ème'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Money ----------------------- -test('Format Money', 4, function() { - var tests = [ - [1000.234,'$0,0.00','€1 000,23'], - [-1000.234,'($0,0)','(€1 000)'], - [-1000.234,'$0.00','-€1000,23'], - [1230974,'($0.00a)','€1,23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10 000,123',10000.123], - ['(0,12345)',-.12345], - ['(€1,23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23ème',23], - ['€10 000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.1/package/tests/languages/min/en-min.js b/temp/numeral.js/1.2.1/package/tests/languages/min/en-min.js deleted file mode 100644 index c090dcc97..000000000 --- a/temp/numeral.js/1.2.1/package/tests/languages/min/en-min.js +++ /dev/null @@ -1 +0,0 @@ -module("Language: en",{setup:function(){numeral.language("en")}});test("Format Numbers",15,function(){var e=[[1e4,"0,0.0000","10,000.0000"],[10000.23,"0,0","10,000"],[-1e4,"0,0.0","-10,000.0"],[10000.1234,"0.000","10000.123"],[-1e4,"(0,0.0000)","(10,000.0000)"],[-0.23,".00","-.23"],[-0.23,"(.00)","(.23)"],[.23,"0.00000","0.23000"],[1230974,"0.0a","1.2m"],[1460,"0a","1k"],[-104e3,"0a","-104k"],[1,"0o","1st"],[52,"0o","52nd"],[23,"0o","23rd"],[100,"0o","100th"]];for(var t=0;t - - - - - - - - - - - - - - - - -
-
-
- - \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/dist.tar.gz b/temp/numeral.js/1.2.2/dist.tar.gz deleted file mode 100644 index 5f5fa55ad1408eaf79ff063a3fcdea7cd147991f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8009 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 LROOh)0KxzO=6$mu diff --git a/temp/numeral.js/1.2.2/package/LICENSE b/temp/numeral.js/1.2.2/package/LICENSE deleted file mode 100644 index 145e65bcd..000000000 --- a/temp/numeral.js/1.2.2/package/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 Adam Draper - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/README.md b/temp/numeral.js/1.2.2/package/README.md deleted file mode 100644 index 120ae82ee..000000000 --- a/temp/numeral.js/1.2.2/package/README.md +++ /dev/null @@ -1,72 +0,0 @@ -[Numeral.js](http://adamwdraper.github.com/Numeral-js/) -======================================================= - -A javascript library for formatting and manipulating numbers. - -[Website and documentation](http://numeraljs.com/) - - -Changelog -========= - -### 1.2.2 - -Changed language definition property 'money' to 'currency' - -### 1.2.1 - -Bug fix: Fix unformatting non-negative abbreviations - -### 1.2.0 - -Add language support - -Update testing for to include languages - -### 1.1.0 - -Add Tests - -Bug fix: Fix difference returning negative values - -### 1.0.4 - -Bug fix: Non negative numbers were displaying as negative when using parentheses - -### 1.0.3 - -Add ordinal formatting using 'o' in the format - -### 1.0.2 - -Add clone functionality - -### 1.0.1 - -Added abbreviations for thousands and millions using 'a' in the format - -### 1.0.0 - -Initial release - - -Acknowlegements -=============== - -Numeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com) - - -License -======= - -Numeral.js is freely distributable under the terms of the MIT license. - -Copyright (c) 2012 Adam Draper - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/languages/en-gb.js b/temp/numeral.js/1.2.2/package/languages/en-gb.js deleted file mode 100644 index be2adf3b6..000000000 --- a/temp/numeral.js/1.2.2/package/languages/en-gb.js +++ /dev/null @@ -1,34 +0,0 @@ -// numeral.js language configuration -// language : english united kingdom (uk) -// author : Dan Ristic : https://github.com/dristic -(function () { - var language = { - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '£' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && this.numeral && this.numeral.language) { - this.numeral.language('en-gb', language); - } -}()); \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/languages/fr.js b/temp/numeral.js/1.2.2/package/languages/fr.js deleted file mode 100644 index 896c15e8a..000000000 --- a/temp/numeral.js/1.2.2/package/languages/fr.js +++ /dev/null @@ -1,30 +0,0 @@ -// numeral.js language configuration -// language : french (fr) -// author : Adam Draper : https://github.com/adamwdraper -(function () { - var language = { - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'm' - }, - ordinal : function (number) { - return number === 1 ? 'er' : 'ème'; - }, - currency: { - symbol: '€' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && this.numeral && this.numeral.language) { - this.numeral.language('fr', language); - } -}()); \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/languages/min/en-gb-min.js b/temp/numeral.js/1.2.2/package/languages/min/en-gb-min.js deleted file mode 100644 index 7f16d3776..000000000 --- a/temp/numeral.js/1.2.2/package/languages/min/en-gb-min.js +++ /dev/null @@ -1,4 +0,0 @@ -// numeral.js language configuration -// language : english united kingdom (uk) -// author : Dan Ristic : https://github.com/dristic -(function(){var e={delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m"},ordinal:function(e){var t=e%10;return~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th"},currency:{symbol:"£"}};typeof module!="undefined"&&module.exports&&(module.exports=e);typeof window!="undefined"&&this.numeral&&this.numeral.language&&this.numeral.language("en-gb",e)})(); \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/languages/min/fr-min.js b/temp/numeral.js/1.2.2/package/languages/min/fr-min.js deleted file mode 100644 index ed43b7179..000000000 --- a/temp/numeral.js/1.2.2/package/languages/min/fr-min.js +++ /dev/null @@ -1,4 +0,0 @@ -// numeral.js language configuration -// language : french (fr) -// author : Adam Draper : https://github.com/adamwdraper -(function(){var e={delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"k",million:"m"},ordinal:function(e){return e===1?"er":"ème"},currency:{symbol:"€"}};typeof module!="undefined"&&module.exports&&(module.exports=e);typeof window!="undefined"&&this.numeral&&this.numeral.language&&this.numeral.language("fr",e)})(); \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/min/numeral-min.js b/temp/numeral.js/1.2.2/package/min/numeral-min.js deleted file mode 100644 index 83166bc90..000000000 --- a/temp/numeral.js/1.2.2/package/min/numeral-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// numeral.js -// version : 1.2.2 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ -(function(){function u(e){this._n=e}function a(e,t){var n=Math.pow(10,t);return(Math.round(e*n)/n).toFixed(t)}function f(e,t){var n;t.indexOf("$")>-1?n=c(e,t):t.indexOf("%")>-1?n=h(e,t):t.indexOf(":")>-1?n=p(e,t):n=v(e,t);return n}function l(e,t){if(t.indexOf(":")>-1)e._n=d(t);else{i[s].delimiters.decimal!=="."&&(t=t.replace(i[s].delimiters.decimal,"."));var n=new RegExp(i[s].abbreviations.thousand+"(?:\\)|\\"+i[s].currency.symbol+"?)$"),r=new RegExp(i[s].abbreviations.million+"(?:\\)|\\"+i[s].currency.symbol+"?)$");e._n=(t.match(n)?1e3:1)*(t.match(r)?1e6:1)*(t.indexOf("%")>-1?.01:1)*Number((t.indexOf("(")>-1?"-":"")+t.replace(/[^0-9\.'-]+/g,""))}return e._n}function c(e,t){t=t.replace("$","");var n=f(e,t);if(n.indexOf("(")>-1||n.indexOf("-")>-1){n=n.split("");n.splice(1,0,i[s].currency.symbol);n=n.join("")}else n=i[s].currency.symbol+n;return n}function h(e,t){t=t.replace("%","");e._n=e._n*100;var n=f(e,t);if(n.indexOf(")")>-1){n=n.split("");n.splice(-1,0,"%");n=n.join("")}else n+="%";return n}function p(e,t){var n=Math.floor(e._n/60/60),r=Math.floor((e._n-n*60*60)/60),i=Math.round(e._n-n*60*60-r*60);return n+":"+(r<10?"0"+r:r)+":"+(i<10?"0"+i:i)}function d(e){var t=e.split(":"),n=0;if(t.length===3){n+=Number(t[0])*60*60;n+=Number(t[1])*60;n+=Number(t[2])}else if(t.lenght===2){n+=Number(t[0])*60;n+=Number(t[1])}return Number(n)}function v(e,t){var n=!1,r=!1,o=!1;if(t.indexOf("(")>-1){n=!0;t=t.slice(1,-1)}if(t.indexOf("a")>-1){t=t.replace("a","");if(e._n>1e6){r=i[s].abbreviations.million;e._n=e._n/1e6}else{r=i[s].abbreviations.thousand;e._n=e._n/1e3}}if(t.indexOf("o")>-1){t=t.replace("o","");o=i[s].ordinal(e._n)}var u=e._n.toString().split(".")[0],f=t.split(".")[1],l=t.indexOf(","),c="",h=!1;if(e._n<0){u=u.slice(1);h=!0}l>-1&&(u=u.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+i[s].delimiters.thousands));t.indexOf(".")===0&&(u="");f&&(c=i[s].delimiters.decimal+a(e._n,f.length).split(".")[1]);r;return(n&&h?"(":"")+(!n&&h?"-":"")+u+c+(o?o:"")+(r?r:"")+(n&&h?")":"")}function m(e,t){i[e]=t}var e,t="1.2.2",n=Math.round,r,i={},s="en",o=typeof module!="undefined"&&module.exports;e=function(t){e.isNumeral(t)?t=t.value():Number(t)||(t=0);return new u(Number(t))};e.isNumeral=function(e){return e instanceof u};e.version=t;e.isNumeral=function(e){return e instanceof u};e.language=function(e,t){if(!e)return s;e&&!t&&(s=e);(t||!i[e])&&m(e,t);return i};e.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m"},ordinal:function(e){var t=e%10;return~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th"},currency:{symbol:"$"}});e.fn=u.prototype={clone:function(){return e(this)},format:function(t){return f(this,t?t:e.defaultFormat)},unformat:function(t){return l(this,t?t:e.defaultFormat)},value:function(){return this._n},set:function(e){this._n=Number(e);return this},add:function(e){this._n=this._n+Number(e);return this},subtract:function(e){this._n=this._n-Number(e);return this},multiply:function(e){this._n=this._n*Number(e);return this},divide:function(e){this._n=this._n/Number(e);return this},difference:function(e){var t=this._n-Number(e);t<0&&(t=-t);return t}};o&&(module.exports=e);typeof ender=="undefined"&&(this.numeral=e);typeof define=="function"&&define.amd&&define([],function(){return e})}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/numeral.js b/temp/numeral.js/1.2.2/package/numeral.js deleted file mode 100644 index b8c9b5021..000000000 --- a/temp/numeral.js/1.2.2/package/numeral.js +++ /dev/null @@ -1,361 +0,0 @@ - -// numeral.js -// version : 1.2.2 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.2.2', - round = Math.round, i, - // internal storage for language config files - languages = {}, - currentLanguage = 'en', - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral(number) { - this._n = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision) { - var power = Math.pow(10, precision); - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - return (Math.round(value * power) / power).toFixed(precision); - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // currency!!!!! - output = formatCurrency(n, format); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' number - output = formatNumber(n, format); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - if (string.indexOf(':') > -1) { - n._n = unformatTime(string); - } else { - if (languages[currentLanguage].delimiters.decimal !== '.') { - string = string.replace(languages[currentLanguage].delimiters.decimal, '.'); - } - var thousandRegExp = new RegExp(languages[currentLanguage].abbreviations.thousand + '(?:\\)|\\' + languages[currentLanguage].currency.symbol + '?)$'), - millionRegExp = new RegExp(languages[currentLanguage].abbreviations.million + '(?:\\)|\\' + languages[currentLanguage].currency.symbol + '?)$'); - n._n = ((string.match(thousandRegExp)) ? 1000 : 1) * ((string.match(millionRegExp)) ? 1000000 : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * Number(((string.indexOf('(') > -1) ? '-' : '') + string.replace(/[^0-9\.'-]+/g, '')); - } - return n._n; - } - - function formatCurrency (n, format) { - format = format.replace('$', ''); - var output = formatNumeral(n, format); - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - output.splice(1, 0, languages[currentLanguage].currency.symbol); - output = output.join(''); - } else { - output = languages[currentLanguage].currency.symbol + output; - } - return output; - } - - function formatPercentage (n, format) { - format = format.replace('%', ''); - n._n = n._n * 100; - var output = formatNumeral(n, format); - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, '%'); - output = output.join(''); - } else { - output = output + '%'; - } - return output; - } - - function formatTime (n, format) { - var hours = Math.floor(n._n/60/60), - minutes = Math.floor((n._n - (hours * 60 * 60))/60), - seconds = Math.round(n._n - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.lenght === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (n, format) { - var negP = false, - abbr = false, - ord = false; - - // see if we should use parentheses for negative number - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - format = format.replace('a', ''); - - if (n._n > 1000000) { - abbr = languages[currentLanguage].abbreviations.million; - n._n = n._n / 1000000; - } else { - abbr = languages[currentLanguage].abbreviations.thousand; - n._n = n._n / 1000; - } - } - - // see if ordinal is wanted - if (format.indexOf('o') > -1) { - format = format.replace('o', ''); - - ord = languages[currentLanguage].ordinal(n._n); - } - - var w = n._n.toString().split('.')[0], - precision = format.split('.')[1], - thousands = format.indexOf(','), - d = '', - neg = false; - - // format number - if (n._n < 0) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + languages[currentLanguage].delimiters.thousands); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - if (precision) { - // do to fixed - d = languages[currentLanguage].delimiters.decimal + toFixed(n._n, precision.length).split('.')[1]; - } - - if (abbr) { - - } - - return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((negP && neg) ? ')' : ''); - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (numeral.isNumeral(input)) { - input = input.value(); - } else if (!Number(input)) { - input = 0; - } - - return new Numeral(Number(input)); - }; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // This function will load languages and then set the global language. If - // no arguments are passed in, it will simply return the current global - // language key. - numeral.language = function (key, values) { - if (!key) { - return currentLanguage; - } - - if (key && !values) { - currentLanguage = key; - } - - if (values || !languages[key]) { - loadLanguage(key, values); - } - - return languages; - }; - - numeral.language('en', { - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '$' - } - }); - - /************************************ - Helpers - ************************************/ - - function loadLanguage(key, values) { - languages[key] = values; - } - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString) { - return formatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - unformat : function (inputString) { - return unformatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - value : function () { - return this._n; - }, - - set : function (value) { - this._n = Number(value); - return this; - }, - - add : function (value) { - this._n = this._n + Number(value); - return this; - }, - - subtract : function (value) { - this._n = this._n - Number(value); - return this; - }, - - multiply : function (value) { - this._n = this._n * Number(value); - return this; - }, - - divide : function (value) { - this._n = this._n / Number(value); - return this; - }, - - difference : function (value) { - var difference = this._n - Number(value); - - if (difference < 0) { - difference = -difference; - } - - return difference; - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // Commenting out common js and global variable - // // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler "advanced" mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/package.json b/temp/numeral.js/1.2.2/package/package.json deleted file mode 100644 index b7e851e38..000000000 --- a/temp/numeral.js/1.2.2/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.2.2", - "description": "Format and manipulate numbers.", - "homepage": "http://numeraljs.com", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "format", - "time", - "money", - "percentage" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://numeraljs.com)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://adamwdraper.github.com/Numeral-js/)\n\nChangelog\n=========\n\n### 1.2.2\nChanged language definition property 'money' to 'currency'\n### 1.2.1\nBug fix: Fix unformatting non-negative abbreviations\n### 1.2.0\nAdd localization language support\n\nUpdate testing for to include languages\n### 1.1.0\nAdd Tests\n\nBug fix: Fix difference returning negative values\n### 1.0.4\nBug fix: Non negative numbers were displaying as negative when using parentheses\n### 1.0.3\nAdd ordinal formatting using 'o' in the format\n### 1.0.2\nAdd clone functionality\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.2.2", - "_from": "numeral" -} \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/tests/languages/en-gb.js b/temp/numeral.js/1.2.2/package/tests/languages/en-gb.js deleted file mode 100644 index d1e6b0b8a..000000000 --- a/temp/numeral.js/1.2.2/package/tests/languages/en-gb.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: en-gb', { - setup: function() { - numeral.language('en-gb'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10,000.0000'], - [10000.23,'0,0','10,000'], - [-10000,'0,0.0','-10,000.0'], - [10000.1234,'0.000','10000.123'], - [-10000,'(0,0.0000)','(10,000.0000)'], - [-.23,'.00','-.23'], - [-.23,'(.00)','(.23)'], - [.23,'0.00000','0.23000'], - [1230974,'0.0a','1.2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1st'], - [52,'0o','52nd'], - [23,'0o','23rd'], - [100,'0o','100th'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','£1,000.23'], - [-1000.234,'($0,0)','(£1,000)'], - [-1000.234,'$0.00','-£1000.23'], - [1230974,'($0.00a)','£1.23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97.488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43.000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10,000.123',10000.123], - ['(0.12345)',-.12345], - ['(£1.23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23rd',23], - ['£10,000.00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/tests/languages/en.js b/temp/numeral.js/1.2.2/package/tests/languages/en.js deleted file mode 100644 index 483ecda79..000000000 --- a/temp/numeral.js/1.2.2/package/tests/languages/en.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: en', { - setup: function() { - numeral.language('en'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10,000.0000'], - [10000.23,'0,0','10,000'], - [-10000,'0,0.0','-10,000.0'], - [10000.1234,'0.000','10000.123'], - [-10000,'(0,0.0000)','(10,000.0000)'], - [-.23,'.00','-.23'], - [-.23,'(.00)','(.23)'], - [.23,'0.00000','0.23000'], - [1230974,'0.0a','1.2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1st'], - [52,'0o','52nd'], - [23,'0o','23rd'], - [100,'0o','100th'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','$1,000.23'], - [-1000.234,'($0,0)','($1,000)'], - [-1000.234,'$0.00','-$1000.23'], - [1230974,'($0.00a)','$1.23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97.488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43.000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10,000.123',10000.123], - ['(0.12345)',-.12345], - ['($1.23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23rd',23], - ['$10,000.00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/tests/languages/fr.js b/temp/numeral.js/1.2.2/package/tests/languages/fr.js deleted file mode 100644 index a8d0964c7..000000000 --- a/temp/numeral.js/1.2.2/package/tests/languages/fr.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: fr', { - setup: function() { - numeral.language('fr'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10 000,0000'], - [10000.23,'0,0','10 000'], - [-10000,'0,0.0','-10 000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10 000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1er'], - [52,'0o','52ème'], - [23,'0o','23ème'], - [100,'0o','100ème'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','€1 000,23'], - [-1000.234,'($0,0)','(€1 000)'], - [-1000.234,'$0.00','-€1000,23'], - [1230974,'($0.00a)','€1,23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10 000,123',10000.123], - ['(0,12345)',-.12345], - ['(€1,23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23ème',23], - ['€10 000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.2/package/tests/test.html b/temp/numeral.js/1.2.2/package/tests/test.html deleted file mode 100644 index c92f492e1..000000000 --- a/temp/numeral.js/1.2.2/package/tests/test.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
-
-
- - \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/dist.tar.gz b/temp/numeral.js/1.2.3/dist.tar.gz deleted file mode 100644 index 9b831b778c4cbdf1bcfb1585a699db2076b6c367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8406 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 diff --git a/temp/numeral.js/1.2.3/package/LICENSE b/temp/numeral.js/1.2.3/package/LICENSE deleted file mode 100644 index 145e65bcd..000000000 --- a/temp/numeral.js/1.2.3/package/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 Adam Draper - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/README.md b/temp/numeral.js/1.2.3/package/README.md deleted file mode 100644 index e0b52a655..000000000 --- a/temp/numeral.js/1.2.3/package/README.md +++ /dev/null @@ -1,76 +0,0 @@ -[Numeral.js](http://adamwdraper.github.com/Numeral-js/) -======================================================= - -A javascript library for formatting and manipulating numbers. - -[Website and documentation](http://numeraljs.com/) - - -Changelog -========= - -### 1.2.3 - -Bug Fix: Fix unformatting for languages that use '.' as thousands delimiter - -### 1.2.2 - -Changed language definition property 'money' to 'currency' - -### 1.2.1 - -Bug fix: Fix unformatting non-negative abbreviations - -### 1.2.0 - -Add language support - -Update testing for to include languages - -### 1.1.0 - -Add Tests - -Bug fix: Fix difference returning negative values - -### 1.0.4 - -Bug fix: Non negative numbers were displaying as negative when using parentheses - -### 1.0.3 - -Add ordinal formatting using 'o' in the format - -### 1.0.2 - -Add clone functionality - -### 1.0.1 - -Added abbreviations for thousands and millions using 'a' in the format - -### 1.0.0 - -Initial release - - -Acknowlegements -=============== - -Numeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com) - - -License -======= - -Numeral.js is freely distributable under the terms of the MIT license. - -Copyright (c) 2012 Adam Draper - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/languages/en-gb.js b/temp/numeral.js/1.2.3/package/languages/en-gb.js deleted file mode 100644 index be2adf3b6..000000000 --- a/temp/numeral.js/1.2.3/package/languages/en-gb.js +++ /dev/null @@ -1,34 +0,0 @@ -// numeral.js language configuration -// language : english united kingdom (uk) -// author : Dan Ristic : https://github.com/dristic -(function () { - var language = { - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '£' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && this.numeral && this.numeral.language) { - this.numeral.language('en-gb', language); - } -}()); \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/languages/es.js b/temp/numeral.js/1.2.3/package/languages/es.js deleted file mode 100644 index c4d4653c9..000000000 --- a/temp/numeral.js/1.2.3/package/languages/es.js +++ /dev/null @@ -1,35 +0,0 @@ -// numeral.js language configuration -// language : spanish -// author : Hernan Garcia : https://github.com/hgarcia -(function () { - var language = { - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'mm' - }, - ordinal: function (number) { - var b = number % 10; - return (b === 1 || b === 3) ? 'er' : - (b === 2) ? 'do' : - (b === 7 || b === 0) ? 'mo' : - (b === 8) ? 'vo' : - (b === 9) ? 'no' : 'to'; - }, - currency: { - symbol: '$' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && this.numeral && this.numeral.language) { - this.numeral.language('es', language); - } -}()); diff --git a/temp/numeral.js/1.2.3/package/languages/fr.js b/temp/numeral.js/1.2.3/package/languages/fr.js deleted file mode 100644 index 896c15e8a..000000000 --- a/temp/numeral.js/1.2.3/package/languages/fr.js +++ /dev/null @@ -1,30 +0,0 @@ -// numeral.js language configuration -// language : french (fr) -// author : Adam Draper : https://github.com/adamwdraper -(function () { - var language = { - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'm' - }, - ordinal : function (number) { - return number === 1 ? 'er' : 'ème'; - }, - currency: { - symbol: '€' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && this.numeral && this.numeral.language) { - this.numeral.language('fr', language); - } -}()); \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/languages/min/en-gb-min.js b/temp/numeral.js/1.2.3/package/languages/min/en-gb-min.js deleted file mode 100644 index 7f16d3776..000000000 --- a/temp/numeral.js/1.2.3/package/languages/min/en-gb-min.js +++ /dev/null @@ -1,4 +0,0 @@ -// numeral.js language configuration -// language : english united kingdom (uk) -// author : Dan Ristic : https://github.com/dristic -(function(){var e={delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m"},ordinal:function(e){var t=e%10;return~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th"},currency:{symbol:"£"}};typeof module!="undefined"&&module.exports&&(module.exports=e);typeof window!="undefined"&&this.numeral&&this.numeral.language&&this.numeral.language("en-gb",e)})(); \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/languages/min/es-min.js b/temp/numeral.js/1.2.3/package/languages/min/es-min.js deleted file mode 100644 index 8bb9b6909..000000000 --- a/temp/numeral.js/1.2.3/package/languages/min/es-min.js +++ /dev/null @@ -1,4 +0,0 @@ -// numeral.js language configuration -// language : spanish -// author : Hernan Garcia : https://github.com/hgarcia -(function(){var e={delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"k",million:"mm"},ordinal:function(e){var t=e%10;return t===1||t===3?"er":t===2?"do":t===7||t===0?"mo":t===8?"vo":t===9?"no":"to"},currency:{symbol:"$"}};typeof module!="undefined"&&module.exports&&(module.exports=e);typeof window!="undefined"&&this.numeral&&this.numeral.language&&this.numeral.language("es",e)})(); \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/languages/min/fr-min.js b/temp/numeral.js/1.2.3/package/languages/min/fr-min.js deleted file mode 100644 index ed43b7179..000000000 --- a/temp/numeral.js/1.2.3/package/languages/min/fr-min.js +++ /dev/null @@ -1,4 +0,0 @@ -// numeral.js language configuration -// language : french (fr) -// author : Adam Draper : https://github.com/adamwdraper -(function(){var e={delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"k",million:"m"},ordinal:function(e){return e===1?"er":"ème"},currency:{symbol:"€"}};typeof module!="undefined"&&module.exports&&(module.exports=e);typeof window!="undefined"&&this.numeral&&this.numeral.language&&this.numeral.language("fr",e)})(); \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/min/numeral-min.js b/temp/numeral.js/1.2.3/package/min/numeral-min.js deleted file mode 100644 index a0be5459c..000000000 --- a/temp/numeral.js/1.2.3/package/min/numeral-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// numeral.js -// version : 1.2.3 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ -(function(){function u(e){this._n=e}function a(e,t){var n=Math.pow(10,t);return(Math.round(e*n)/n).toFixed(t)}function f(e,t){var n;t.indexOf("$")>-1?n=c(e,t):t.indexOf("%")>-1?n=h(e,t):t.indexOf(":")>-1?n=p(e,t):n=v(e,t);return n}function l(e,t){if(t.indexOf(":")>-1)e._n=d(t);else{i[s].delimiters.decimal!=="."&&(t=t.replace(/\./g,"").replace(i[s].delimiters.decimal,"."));var n=new RegExp(i[s].abbreviations.thousand+"(?:\\)|\\"+i[s].currency.symbol+"?)$"),r=new RegExp(i[s].abbreviations.million+"(?:\\)|\\"+i[s].currency.symbol+"?)$");e._n=(t.match(n)?1e3:1)*(t.match(r)?1e6:1)*(t.indexOf("%")>-1?.01:1)*Number((t.indexOf("(")>-1?"-":"")+t.replace(/[^0-9\.'-]+/g,""))}return e._n}function c(e,t){t=t.replace("$","");var n=f(e,t);if(n.indexOf("(")>-1||n.indexOf("-")>-1){n=n.split("");n.splice(1,0,i[s].currency.symbol);n=n.join("")}else n=i[s].currency.symbol+n;return n}function h(e,t){t=t.replace("%","");e._n=e._n*100;var n=f(e,t);if(n.indexOf(")")>-1){n=n.split("");n.splice(-1,0,"%");n=n.join("")}else n+="%";return n}function p(e,t){var n=Math.floor(e._n/60/60),r=Math.floor((e._n-n*60*60)/60),i=Math.round(e._n-n*60*60-r*60);return n+":"+(r<10?"0"+r:r)+":"+(i<10?"0"+i:i)}function d(e){var t=e.split(":"),n=0;if(t.length===3){n+=Number(t[0])*60*60;n+=Number(t[1])*60;n+=Number(t[2])}else if(t.lenght===2){n+=Number(t[0])*60;n+=Number(t[1])}return Number(n)}function v(e,t){var n=!1,r=!1,o=!1;if(t.indexOf("(")>-1){n=!0;t=t.slice(1,-1)}if(t.indexOf("a")>-1){t=t.replace("a","");if(e._n>1e6){r=i[s].abbreviations.million;e._n=e._n/1e6}else{r=i[s].abbreviations.thousand;e._n=e._n/1e3}}if(t.indexOf("o")>-1){t=t.replace("o","");o=i[s].ordinal(e._n)}var u=e._n.toString().split(".")[0],f=t.split(".")[1],l=t.indexOf(","),c="",h=!1;if(e._n<0){u=u.slice(1);h=!0}l>-1&&(u=u.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+i[s].delimiters.thousands));t.indexOf(".")===0&&(u="");f&&(c=i[s].delimiters.decimal+a(e._n,f.length).split(".")[1]);r;return(n&&h?"(":"")+(!n&&h?"-":"")+u+c+(o?o:"")+(r?r:"")+(n&&h?")":"")}function m(e,t){i[e]=t}var e,t="1.2.3",n=Math.round,r,i={},s="en",o=typeof module!="undefined"&&module.exports;e=function(t){e.isNumeral(t)?t=t.value():Number(t)||(t=0);return new u(Number(t))};e.isNumeral=function(e){return e instanceof u};e.version=t;e.isNumeral=function(e){return e instanceof u};e.language=function(e,t){if(!e)return s;e&&!t&&(s=e);(t||!i[e])&&m(e,t);return i};e.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m"},ordinal:function(e){var t=e%10;return~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th"},currency:{symbol:"$"}});e.fn=u.prototype={clone:function(){return e(this)},format:function(t){return f(this,t?t:e.defaultFormat)},unformat:function(t){return l(this,t?t:e.defaultFormat)},value:function(){return this._n},set:function(e){this._n=Number(e);return this},add:function(e){this._n=this._n+Number(e);return this},subtract:function(e){this._n=this._n-Number(e);return this},multiply:function(e){this._n=this._n*Number(e);return this},divide:function(e){this._n=this._n/Number(e);return this},difference:function(e){var t=this._n-Number(e);t<0&&(t=-t);return t}};o&&(module.exports=e);typeof ender=="undefined"&&(this.numeral=e);typeof define=="function"&&define.amd&&define([],function(){return e})}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/numeral.js b/temp/numeral.js/1.2.3/package/numeral.js deleted file mode 100644 index 784eaa342..000000000 --- a/temp/numeral.js/1.2.3/package/numeral.js +++ /dev/null @@ -1,361 +0,0 @@ - -// numeral.js -// version : 1.2.3 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.2.3', - round = Math.round, i, - // internal storage for language config files - languages = {}, - currentLanguage = 'en', - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral(number) { - this._n = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision) { - var power = Math.pow(10, precision); - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - return (Math.round(value * power) / power).toFixed(precision); - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // currency!!!!! - output = formatCurrency(n, format); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' number - output = formatNumber(n, format); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - if (string.indexOf(':') > -1) { - n._n = unformatTime(string); - } else { - if (languages[currentLanguage].delimiters.decimal !== '.') { - string = string.replace(/\./g,'').replace(languages[currentLanguage].delimiters.decimal, '.'); - } - var thousandRegExp = new RegExp(languages[currentLanguage].abbreviations.thousand + '(?:\\)|\\' + languages[currentLanguage].currency.symbol + '?)$'), - millionRegExp = new RegExp(languages[currentLanguage].abbreviations.million + '(?:\\)|\\' + languages[currentLanguage].currency.symbol + '?)$'); - n._n = ((string.match(thousandRegExp)) ? 1000 : 1) * ((string.match(millionRegExp)) ? 1000000 : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * Number(((string.indexOf('(') > -1) ? '-' : '') + string.replace(/[^0-9\.'-]+/g, '')); - } - return n._n; - } - - function formatCurrency (n, format) { - format = format.replace('$', ''); - var output = formatNumeral(n, format); - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - output.splice(1, 0, languages[currentLanguage].currency.symbol); - output = output.join(''); - } else { - output = languages[currentLanguage].currency.symbol + output; - } - return output; - } - - function formatPercentage (n, format) { - format = format.replace('%', ''); - n._n = n._n * 100; - var output = formatNumeral(n, format); - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, '%'); - output = output.join(''); - } else { - output = output + '%'; - } - return output; - } - - function formatTime (n, format) { - var hours = Math.floor(n._n/60/60), - minutes = Math.floor((n._n - (hours * 60 * 60))/60), - seconds = Math.round(n._n - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.lenght === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (n, format) { - var negP = false, - abbr = false, - ord = false; - - // see if we should use parentheses for negative number - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - format = format.replace('a', ''); - - if (n._n > 1000000) { - abbr = languages[currentLanguage].abbreviations.million; - n._n = n._n / 1000000; - } else { - abbr = languages[currentLanguage].abbreviations.thousand; - n._n = n._n / 1000; - } - } - - // see if ordinal is wanted - if (format.indexOf('o') > -1) { - format = format.replace('o', ''); - - ord = languages[currentLanguage].ordinal(n._n); - } - - var w = n._n.toString().split('.')[0], - precision = format.split('.')[1], - thousands = format.indexOf(','), - d = '', - neg = false; - - // format number - if (n._n < 0) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + languages[currentLanguage].delimiters.thousands); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - if (precision) { - // do to fixed - d = languages[currentLanguage].delimiters.decimal + toFixed(n._n, precision.length).split('.')[1]; - } - - if (abbr) { - - } - - return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((negP && neg) ? ')' : ''); - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (numeral.isNumeral(input)) { - input = input.value(); - } else if (!Number(input)) { - input = 0; - } - - return new Numeral(Number(input)); - }; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // This function will load languages and then set the global language. If - // no arguments are passed in, it will simply return the current global - // language key. - numeral.language = function (key, values) { - if (!key) { - return currentLanguage; - } - - if (key && !values) { - currentLanguage = key; - } - - if (values || !languages[key]) { - loadLanguage(key, values); - } - - return languages; - }; - - numeral.language('en', { - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '$' - } - }); - - /************************************ - Helpers - ************************************/ - - function loadLanguage(key, values) { - languages[key] = values; - } - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString) { - return formatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - unformat : function (inputString) { - return unformatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - value : function () { - return this._n; - }, - - set : function (value) { - this._n = Number(value); - return this; - }, - - add : function (value) { - this._n = this._n + Number(value); - return this; - }, - - subtract : function (value) { - this._n = this._n - Number(value); - return this; - }, - - multiply : function (value) { - this._n = this._n * Number(value); - return this; - }, - - divide : function (value) { - this._n = this._n / Number(value); - return this; - }, - - difference : function (value) { - var difference = this._n - Number(value); - - if (difference < 0) { - difference = -difference; - } - - return difference; - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // Commenting out common js and global variable - // // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler "advanced" mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this); diff --git a/temp/numeral.js/1.2.3/package/package.json b/temp/numeral.js/1.2.3/package/package.json deleted file mode 100644 index 27ca3d697..000000000 --- a/temp/numeral.js/1.2.3/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.2.3", - "description": "Format and manipulate numbers.", - "homepage": "http://numeraljs.com", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "format", - "time", - "money", - "percentage" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://numeraljs.com)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://adamwdraper.github.com/Numeral-js/)\n\nChangelog\n=========\n\n### 1.2.2\nChanged language definition property 'money' to 'currency'\n### 1.2.1\nBug fix: Fix unformatting non-negative abbreviations\n### 1.2.3\nBug Fix: Fix unformatting for languages that use '.' as thousands delimiter\n### 1.2.0\nAdd localization language support\n\nUpdate testing for to include languages\n### 1.1.0\nAdd Tests\n\nBug fix: Fix difference returning negative values\n### 1.0.4\nBug fix: Non negative numbers were displaying as negative when using parentheses\n### 1.0.3\nAdd ordinal formatting using 'o' in the format\n### 1.0.2\nAdd clone functionality\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.2.3", - "_from": "numeral" -} \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/tests/languages/en-gb.js b/temp/numeral.js/1.2.3/package/tests/languages/en-gb.js deleted file mode 100644 index d1e6b0b8a..000000000 --- a/temp/numeral.js/1.2.3/package/tests/languages/en-gb.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: en-gb', { - setup: function() { - numeral.language('en-gb'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10,000.0000'], - [10000.23,'0,0','10,000'], - [-10000,'0,0.0','-10,000.0'], - [10000.1234,'0.000','10000.123'], - [-10000,'(0,0.0000)','(10,000.0000)'], - [-.23,'.00','-.23'], - [-.23,'(.00)','(.23)'], - [.23,'0.00000','0.23000'], - [1230974,'0.0a','1.2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1st'], - [52,'0o','52nd'], - [23,'0o','23rd'], - [100,'0o','100th'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','£1,000.23'], - [-1000.234,'($0,0)','(£1,000)'], - [-1000.234,'$0.00','-£1000.23'], - [1230974,'($0.00a)','£1.23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97.488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43.000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10,000.123',10000.123], - ['(0.12345)',-.12345], - ['(£1.23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23rd',23], - ['£10,000.00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/tests/languages/en.js b/temp/numeral.js/1.2.3/package/tests/languages/en.js deleted file mode 100644 index 483ecda79..000000000 --- a/temp/numeral.js/1.2.3/package/tests/languages/en.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: en', { - setup: function() { - numeral.language('en'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10,000.0000'], - [10000.23,'0,0','10,000'], - [-10000,'0,0.0','-10,000.0'], - [10000.1234,'0.000','10000.123'], - [-10000,'(0,0.0000)','(10,000.0000)'], - [-.23,'.00','-.23'], - [-.23,'(.00)','(.23)'], - [.23,'0.00000','0.23000'], - [1230974,'0.0a','1.2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1st'], - [52,'0o','52nd'], - [23,'0o','23rd'], - [100,'0o','100th'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','$1,000.23'], - [-1000.234,'($0,0)','($1,000)'], - [-1000.234,'$0.00','-$1000.23'], - [1230974,'($0.00a)','$1.23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97.488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43.000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10,000.123',10000.123], - ['(0.12345)',-.12345], - ['($1.23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23rd',23], - ['$10,000.00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/tests/languages/es.js b/temp/numeral.js/1.2.3/package/tests/languages/es.js deleted file mode 100644 index 0e99a2f0f..000000000 --- a/temp/numeral.js/1.2.3/package/tests/languages/es.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: es', { - setup: function() { - numeral.language('es'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10.000,0000'], - [10000.23,'0,0','10.000'], - [-10000,'0,0.0','-10.000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10.000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2mm'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1er'], - [52,'0o','52do'], - [23,'0o','23er'], - [100,'0o','100mo'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','$1.000,23'], - [-1000.234,'($0,0)','($1.000)'], - [-1000.234,'$0.00','-$1000,23'], - [1230974,'($0.00a)','$1,23mm'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10.000,123',10000.123], - ['(0,12345)',-.12345], - ['($1,23mm)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23er',23], - ['$10.000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); diff --git a/temp/numeral.js/1.2.3/package/tests/languages/fr.js b/temp/numeral.js/1.2.3/package/tests/languages/fr.js deleted file mode 100644 index a8d0964c7..000000000 --- a/temp/numeral.js/1.2.3/package/tests/languages/fr.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: fr', { - setup: function() { - numeral.language('fr'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10 000,0000'], - [10000.23,'0,0','10 000'], - [-10000,'0,0.0','-10 000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10 000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1er'], - [52,'0o','52ème'], - [23,'0o','23ème'], - [100,'0o','100ème'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','€1 000,23'], - [-1000.234,'($0,0)','(€1 000)'], - [-1000.234,'$0.00','-€1000,23'], - [1230974,'($0.00a)','€1,23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10 000,123',10000.123], - ['(0,12345)',-.12345], - ['(€1,23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23ème',23], - ['€10 000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.3/package/tests/test.html b/temp/numeral.js/1.2.3/package/tests/test.html deleted file mode 100644 index 6670cff4e..000000000 --- a/temp/numeral.js/1.2.3/package/tests/test.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - diff --git a/temp/numeral.js/1.2.5/dist.tar.gz b/temp/numeral.js/1.2.5/dist.tar.gz deleted file mode 100644 index 964705ecdda18365d3ea06cf350a8feb809b0389..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9732 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,t):t.indexOf("%")>-1?n=h(e,t):t.indexOf(":")>-1?n=p(e,t):n=v(e,t);return n}function l(e,t){if(t.indexOf(":")>-1)e._n=d(t);else{i[s].delimiters.decimal!=="."&&(t=t.replace(/\./g,"").replace(i[s].delimiters.decimal,"."));var n=new RegExp(i[s].abbreviations.thousand+"(?:\\)|\\"+i[s].currency.symbol+"?)$"),r=new RegExp(i[s].abbreviations.million+"(?:\\)|\\"+i[s].currency.symbol+"?)$"),o=["KB","MB","GB","TB","PB","EB","ZB","YB"],u=!1;for(var a=0;a<=o.length;a++){u=t.indexOf(o[a])>-1?Math.pow(1024,a+1):!1;if(u)break}e._n=(u?u:1)*(t.match(n)?1e3:1)*(t.match(r)?1e6:1)*(t.indexOf("%")>-1?.01:1)*Number((t.indexOf("(")>-1?"-":"")+t.replace(/[^0-9\.'-]+/g,""));e._n=u?Math.ceil(e._n):e._n}return e._n}function c(e,t){var n=t.indexOf("$")<=1?!0:!1;t=t.replace("$","");var r=f(e,t);if(n)if(r.indexOf("(")>-1||r.indexOf("-")>-1){r=r.split("");r.splice(1,0,i[s].currency.symbol);r=r.join("")}else r=i[s].currency.symbol+r;else if(r.indexOf(")")>-1){r=r.split("");r.splice(-1,0,i[s].currency.symbol);r=r.join("")}else r+=i[s].currency.symbol;return r}function h(e,t){t=t.replace("%","");e._n=e._n*100;var n=f(e,t);if(n.indexOf(")")>-1){n=n.split("");n.splice(-1,0,"%");n=n.join("")}else n+="%";return n}function p(e,t){var n=Math.floor(e._n/60/60),r=Math.floor((e._n-n*60*60)/60),i=Math.round(e._n-n*60*60-r*60);return n+":"+(r<10?"0"+r:r)+":"+(i<10?"0"+i:i)}function d(e){var t=e.split(":"),n=0;if(t.length===3){n+=Number(t[0])*60*60;n+=Number(t[1])*60;n+=Number(t[2])}else if(t.lenght===2){n+=Number(t[0])*60;n+=Number(t[1])}return Number(n)}function v(e,t){var n=!1,r=!1,o=!1,u=!1;if(t.indexOf("(")>-1){n=!0;t=t.slice(1,-1)}if(t.indexOf("a")>-1){t=t.replace("a","");if(e._n>1e6){r=i[s].abbreviations.million;e._n=e._n/1e6}else{r=i[s].abbreviations.thousand;e._n=e._n/1e3}}if(t.indexOf("b")>-1){t=t.replace("b","");var f=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],l,c;for(var h=0;h<=f.length;h++){l=Math.pow(1024,h);c=Math.pow(1024,h+1);if(e._n>l&&e._n0&&(e._n=e._n/l);break}}}if(t.indexOf("o")>-1){t=t.replace("o","");u=i[s].ordinal(e._n)}var p=e._n.toString().split(".")[0],d=t.split(".")[1],v=t.indexOf(","),m="",g=!1;if(e._n<0){p=p.slice(1);g=!0}v>-1&&(p=p.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+i[s].delimiters.thousands));t.indexOf(".")===0&&(p="");if(d){if(d.indexOf("[")>-1){d=d.replace("]","");d=d.split("[");m=a(e._n,d[0].length+d[1].length,d[1].length).split(".")[1]}else m=a(e._n,d.length).split(".")[1];m&&(m=i[s].delimiters.decimal+m)}return(n&&g?"(":"")+(!n&&g?"-":"")+p+m+(u?u:"")+(r?r:"")+(o?o:"")+(n&&g?")":"")}function m(e,t){i[e]=t}var e,t="1.2.6",n=Math.round,r,i={},s="en",o=typeof module!="undefined"&&module.exports;e=function(t){e.isNumeral(t)?t=t.value():Number(t)||(t=0);return new u(Number(t))};e.isNumeral=function(e){return e instanceof u};e.version=t;e.isNumeral=function(e){return e instanceof u};e.language=function(e,t){if(!e)return s;e&&!t&&(s=e);(t||!i[e])&&m(e,t);return i};e.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m"},ordinal:function(e){var t=e%10;return~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th"},currency:{symbol:"$"}});e.fn=u.prototype={clone:function(){return e(this)},format:function(t){return f(this,t?t:e.defaultFormat)},unformat:function(t){return l(this,t?t:e.defaultFormat)},value:function(){return this._n},set:function(e){this._n=Number(e);return this},add:function(e){this._n=this._n+Number(e);return this},subtract:function(e){this._n=this._n-Number(e);return this},multiply:function(e){this._n=this._n*Number(e);return this},divide:function(e){this._n=this._n/Number(e);return this},difference:function(e){var t=this._n-Number(e);t<0&&(t=-t);return t}};o&&(module.exports=e);typeof ender=="undefined"&&(this.numeral=e);typeof define=="function"&&define.amd&&define([],function(){return e})}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.2.5/package/numeral.js b/temp/numeral.js/1.2.5/package/numeral.js deleted file mode 100644 index 969edfb53..000000000 --- a/temp/numeral.js/1.2.5/package/numeral.js +++ /dev/null @@ -1,437 +0,0 @@ - -// numeral.js -// version : 1.2.6 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.2.6', - round = Math.round, i, - // internal storage for language config files - languages = {}, - currentLanguage = 'en', - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral(number) { - this._n = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision, optionals) { - var power = Math.pow(10, precision), - output; - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - output = (Math.round(value * power) / power).toFixed(precision); - - if (optionals) { - var optionalsRegExp = new RegExp('0{1,' + optionals + '}$'); - output = output.replace(optionalsRegExp, ''); - } - - return output; - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // currency!!!!! - output = formatCurrency(n, format); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' numbers or bytes - output = formatNumber(n, format); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - if (string.indexOf(':') > -1) { - n._n = unformatTime(string); - } else { - if (languages[currentLanguage].delimiters.decimal !== '.') { - string = string.replace(/\./g,'').replace(languages[currentLanguage].delimiters.decimal, '.'); - } - - // see if abbreviations are there so that we can multiply to the correct number - var thousandRegExp = new RegExp(languages[currentLanguage].abbreviations.thousand + '(?:\\)|\\' + languages[currentLanguage].currency.symbol + '?)$'), - millionRegExp = new RegExp(languages[currentLanguage].abbreviations.million + '(?:\\)|\\' + languages[currentLanguage].currency.symbol + '?)$'); - - // see if bytes are there so that we can multiply to the correct number - var prefixes = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], - bytesMultiplier = false; - - for (var power = 0; power <= prefixes.length; power++) { - bytesMultiplier = (string.indexOf(prefixes[power]) > -1) ? Math.pow(1024, power + 1) : false; - - if (bytesMultiplier) { - break; - } - } - - // do some math to create our number - n._n = ((bytesMultiplier) ? bytesMultiplier : 1) * ((string.match(thousandRegExp)) ? 1000 : 1) * ((string.match(millionRegExp)) ? 1000000 : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * Number(((string.indexOf('(') > -1) ? '-' : '') + string.replace(/[^0-9\.'-]+/g, '')); - - // round if we are talking about bytes - n._n = (bytesMultiplier) ? Math.ceil(n._n) : n._n; - } - return n._n; - } - - function formatCurrency (n, format) { - var prependSymbol = (format.indexOf('$') <= 1) ? true : false; - - // remove $ for the moment - format = format.replace('$', ''); - - // format the number - var output = formatNumeral(n, format); - - // position the symbol - if (prependSymbol) { - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - output.splice(1, 0, languages[currentLanguage].currency.symbol); - output = output.join(''); - } else { - output = languages[currentLanguage].currency.symbol + output; - } - } else { - if (output.indexOf(')') > -1) { - output = output.split(''); - output.splice(-1, 0, languages[currentLanguage].currency.symbol); - output = output.join(''); - } else { - output = output + languages[currentLanguage].currency.symbol; - } - } - - return output; - } - - function formatPercentage (n, format) { - format = format.replace('%', ''); - n._n = n._n * 100; - var output = formatNumeral(n, format); - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, '%'); - output = output.join(''); - } else { - output = output + '%'; - } - return output; - } - - function formatTime (n, format) { - var hours = Math.floor(n._n/60/60), - minutes = Math.floor((n._n - (hours * 60 * 60))/60), - seconds = Math.round(n._n - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.lenght === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (n, format) { - var negP = false, - abbr = false, - bytes = false, - ord = false; - - // see if we should use parentheses for negative number - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - format = format.replace('a', ''); - - if (n._n > 1000000) { - abbr = languages[currentLanguage].abbreviations.million; - n._n = n._n / 1000000; - } else { - abbr = languages[currentLanguage].abbreviations.thousand; - n._n = n._n / 1000; - } - } - - // see if we are formatting bytes - if (format.indexOf('b') > -1) { - format = format.replace('b', ''); - - var prefixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], - min, - max; - - for (var power = 0; power <= prefixes.length; power++) { - min = Math.pow(1024, power); - max = Math.pow(1024, power+1); - - if (n._n > min && n._n < max) { - bytes = prefixes[power]; - if (min > 0) { - n._n = n._n / min; - } - break; - } - } - } - - // see if ordinal is wanted - if (format.indexOf('o') > -1) { - format = format.replace('o', ''); - - ord = languages[currentLanguage].ordinal(n._n); - } - - var w = n._n.toString().split('.')[0], - precision = format.split('.')[1], - thousands = format.indexOf(','), - d = '', - neg = false; - - // format number - if (n._n < 0) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + languages[currentLanguage].delimiters.thousands); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - if (precision) { - if (precision.indexOf('[') > -1) { - precision = precision.replace(']', ''); - precision = precision.split('['); - d = toFixed(n._n, (precision[0].length + precision[1].length), precision[1].length).split('.')[1]; - - // go throg - } else { - // do to fixed - d = toFixed(n._n, precision.length).split('.')[1]; - } - - if (d) { - d = languages[currentLanguage].delimiters.decimal + d; - } - } - - return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((bytes) ? bytes : '') + ((negP && neg) ? ')' : ''); - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (numeral.isNumeral(input)) { - input = input.value(); - } else if (!Number(input)) { - input = 0; - } - - return new Numeral(Number(input)); - }; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // This function will load languages and then set the global language. If - // no arguments are passed in, it will simply return the current global - // language key. - numeral.language = function (key, values) { - if (!key) { - return currentLanguage; - } - - if (key && !values) { - currentLanguage = key; - } - - if (values || !languages[key]) { - loadLanguage(key, values); - } - - return languages; - }; - - numeral.language('en', { - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '$' - } - }); - - /************************************ - Helpers - ************************************/ - - function loadLanguage(key, values) { - languages[key] = values; - } - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString) { - return formatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - unformat : function (inputString) { - return unformatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - value : function () { - return this._n; - }, - - set : function (value) { - this._n = Number(value); - return this; - }, - - add : function (value) { - this._n = this._n + Number(value); - return this; - }, - - subtract : function (value) { - this._n = this._n - Number(value); - return this; - }, - - multiply : function (value) { - this._n = this._n * Number(value); - return this; - }, - - divide : function (value) { - this._n = this._n / Number(value); - return this; - }, - - difference : function (value) { - var difference = this._n - Number(value); - - if (difference < 0) { - difference = -difference; - } - - return difference; - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // Commenting out common js and global variable - // // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler 'advanced' mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this); diff --git a/temp/numeral.js/1.2.5/package/package.json b/temp/numeral.js/1.2.5/package/package.json deleted file mode 100644 index 2e84c118b..000000000 --- a/temp/numeral.js/1.2.5/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.2.5", - "description": "Format and manipulate numbers.", - "homepage": "http://numeraljs.com", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "format", - "time", - "money", - "percentage" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://numeraljs.com)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://numeraljs.com)\n\nChangelog\n=========\n\n### 1.2.6\nAdd support for optional decimal places\n### 1.2.5\nAdd support for appending currency symbol\n### 1.2.4\nAdd support for humanized filesizes\n### 1.2.2\nChanged language definition property 'money' to 'currency'\n### 1.2.1\nBug fix: Fix unformatting non-negative abbreviations\n### 1.2.3\nBug Fix: Fix unformatting for languages that use '.' as thousands delimiter\n### 1.2.0\nAdd localization language support\n\nUpdate testing for to include languages\n### 1.1.0\nAdd Tests\n\nBug fix: Fix difference returning negative values\n### 1.0.4\nBug fix: Non negative numbers were displaying as negative when using parentheses\n### 1.0.3\nAdd ordinal formatting using 'o' in the format\n### 1.0.2\nAdd clone functionality\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.2.5", - "_from": "numeral" -} \ No newline at end of file diff --git a/temp/numeral.js/1.2.5/package/tests/languages/en-gb.js b/temp/numeral.js/1.2.5/package/tests/languages/en-gb.js deleted file mode 100644 index d1e6b0b8a..000000000 --- a/temp/numeral.js/1.2.5/package/tests/languages/en-gb.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: en-gb', { - setup: function() { - numeral.language('en-gb'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10,000.0000'], - [10000.23,'0,0','10,000'], - [-10000,'0,0.0','-10,000.0'], - [10000.1234,'0.000','10000.123'], - [-10000,'(0,0.0000)','(10,000.0000)'], - [-.23,'.00','-.23'], - [-.23,'(.00)','(.23)'], - [.23,'0.00000','0.23000'], - [1230974,'0.0a','1.2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1st'], - [52,'0o','52nd'], - [23,'0o','23rd'], - [100,'0o','100th'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','£1,000.23'], - [-1000.234,'($0,0)','(£1,000)'], - [-1000.234,'$0.00','-£1000.23'], - [1230974,'($0.00a)','£1.23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97.488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43.000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10,000.123',10000.123], - ['(0.12345)',-.12345], - ['(£1.23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23rd',23], - ['£10,000.00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.5/package/tests/languages/en.js b/temp/numeral.js/1.2.5/package/tests/languages/en.js deleted file mode 100644 index 483ecda79..000000000 --- a/temp/numeral.js/1.2.5/package/tests/languages/en.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: en', { - setup: function() { - numeral.language('en'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10,000.0000'], - [10000.23,'0,0','10,000'], - [-10000,'0,0.0','-10,000.0'], - [10000.1234,'0.000','10000.123'], - [-10000,'(0,0.0000)','(10,000.0000)'], - [-.23,'.00','-.23'], - [-.23,'(.00)','(.23)'], - [.23,'0.00000','0.23000'], - [1230974,'0.0a','1.2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1st'], - [52,'0o','52nd'], - [23,'0o','23rd'], - [100,'0o','100th'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','$1,000.23'], - [-1000.234,'($0,0)','($1,000)'], - [-1000.234,'$0.00','-$1000.23'], - [1230974,'($0.00a)','$1.23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97.488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43.000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10,000.123',10000.123], - ['(0.12345)',-.12345], - ['($1.23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23rd',23], - ['$10,000.00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.5/package/tests/languages/es.js b/temp/numeral.js/1.2.5/package/tests/languages/es.js deleted file mode 100644 index 0e99a2f0f..000000000 --- a/temp/numeral.js/1.2.5/package/tests/languages/es.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: es', { - setup: function() { - numeral.language('es'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10.000,0000'], - [10000.23,'0,0','10.000'], - [-10000,'0,0.0','-10.000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10.000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2mm'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1er'], - [52,'0o','52do'], - [23,'0o','23er'], - [100,'0o','100mo'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','$1.000,23'], - [-1000.234,'($0,0)','($1.000)'], - [-1000.234,'$0.00','-$1000,23'], - [1230974,'($0.00a)','$1,23mm'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10.000,123',10000.123], - ['(0,12345)',-.12345], - ['($1,23mm)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23er',23], - ['$10.000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); diff --git a/temp/numeral.js/1.2.5/package/tests/languages/fr.js b/temp/numeral.js/1.2.5/package/tests/languages/fr.js deleted file mode 100644 index a8d0964c7..000000000 --- a/temp/numeral.js/1.2.5/package/tests/languages/fr.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: fr', { - setup: function() { - numeral.language('fr'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10 000,0000'], - [10000.23,'0,0','10 000'], - [-10000,'0,0.0','-10 000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10 000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1er'], - [52,'0o','52ème'], - [23,'0o','23ème'], - [100,'0o','100ème'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','€1 000,23'], - [-1000.234,'($0,0)','(€1 000)'], - [-1000.234,'$0.00','-€1000,23'], - [1230974,'($0.00a)','€1,23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10 000,123',10000.123], - ['(0,12345)',-.12345], - ['(€1,23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23ème',23], - ['€10 000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.2.5/package/tests/languages/pt-pt.js b/temp/numeral.js/1.2.5/package/tests/languages/pt-pt.js deleted file mode 100644 index b27fafc1e..000000000 --- a/temp/numeral.js/1.2.5/package/tests/languages/pt-pt.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: pt-pt', { - setup: function() { - numeral.language('pt-pt'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10 000,0000'], - [10000.23,'0,0','10 000'], - [-10000,'0,0.0','-10 000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10 000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1º'], - [52,'0o','52º'], - [23,'0o','23º'], - [100,'0o','100º'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','€1 000,23'], - [-1000.234,'($0,0)','(€1 000)'], - [-1000.234,'$0.00','-€1000,23'], - [1230974,'($0.00a)','€1,23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10 000,123',10000.123], - ['(0,12345)',-.12345], - ['(€1,23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23º',23], - ['€10 000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); diff --git a/temp/numeral.js/1.2.5/package/tests/test.html b/temp/numeral.js/1.2.5/package/tests/test.html deleted file mode 100644 index c802187ee..000000000 --- a/temp/numeral.js/1.2.5/package/tests/test.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - diff --git a/temp/numeral.js/1.3.1/dist.tar.gz b/temp/numeral.js/1.3.1/dist.tar.gz deleted file mode 100644 index 67bce710b33d2e007da5a38ab008bed209d093e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12496 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,t):t.indexOf("%")>-1?n=h(e,t):t.indexOf(":")>-1?n=p(e,t):n=v(e,t);return n}function l(e,t){if(t.indexOf(":")>-1)e._n=d(t);else{var n=t;i[s].delimiters.decimal!=="."&&(t=t.replace(/\./g,"").replace(i[s].delimiters.decimal,"."));var r=new RegExp(i[s].abbreviations.thousand+"(?:\\)|(\\"+i[s].currency.symbol+")?(?:\\))?)?$"),o=new RegExp(i[s].abbreviations.million+"(?:\\)|(\\"+i[s].currency.symbol+")?(?:\\))?)?$"),u=["KB","MB","GB","TB","PB","EB","ZB","YB"],a=!1;for(var f=0;f<=u.length;f++){a=t.indexOf(u[f])>-1?Math.pow(1024,f+1):!1;if(a)break}e._n=(a?a:1)*(n.match(r)?1e3:1)*(n.match(o)?1e6:1)*(t.indexOf("%")>-1?.01:1)*Number((t.indexOf("(")>-1?"-":"")+t.replace(/[^0-9\.'-]+/g,""));e._n=a?Math.ceil(e._n):e._n}return e._n}function c(e,t){var n=t.indexOf("$")<=1?!0:!1,r="";if(t.indexOf(" $")>-1){r=" ";t=t.replace(" $","")}else if(t.indexOf("$ ")>-1){r=" ";t=t.replace("$ ","")}else t=t.replace("$","");var o=f(e,t);if(n)if(o.indexOf("(")>-1||o.indexOf("-")>-1){o=o.split("");o.splice(1,0,i[s].currency.symbol+r);o=o.join("")}else o=i[s].currency.symbol+r+o;else if(o.indexOf(")")>-1){o=o.split("");o.splice(-1,0,r+i[s].currency.symbol);o=o.join("")}else o=o+r+i[s].currency.symbol;return o}function h(e,t){var n="";if(t.indexOf(" %")>-1){n=" ";t=t.replace(" %","")}else t=t.replace("%","");e._n=e._n*100;var r=f(e,t);if(r.indexOf(")")>-1){r=r.split("");r.splice(-1,0,n+"%");r=r.join("")}else r=r+n+"%";return r}function p(e,t){var n=Math.floor(e._n/60/60),r=Math.floor((e._n-n*60*60)/60),i=Math.round(e._n-n*60*60-r*60);return n+":"+(r<10?"0"+r:r)+":"+(i<10?"0"+i:i)}function d(e){var t=e.split(":"),n=0;if(t.length===3){n+=Number(t[0])*60*60;n+=Number(t[1])*60;n+=Number(t[2])}else if(t.lenght===2){n+=Number(t[0])*60;n+=Number(t[1])}return Number(n)}function v(e,t){var n=!1,r="",o="",u="";if(t.indexOf("(")>-1){n=!0;t=t.slice(1,-1)}if(t.indexOf("a")>-1){if(t.indexOf(" a")>-1){r=" ";t=t.replace(" a","")}else t=t.replace("a","");if(e._n>1e6){r+=i[s].abbreviations.million;e._n=e._n/1e6}else{r+=i[s].abbreviations.thousand;e._n=e._n/1e3}}if(t.indexOf("b")>-1){if(t.indexOf(" b")>-1){o=" ";t=t.replace(" b","")}else t=t.replace("b","");var f=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],l,c;for(var h=0;h<=f.length;h++){l=Math.pow(1024,h);c=Math.pow(1024,h+1);if(e._n>l&&e._n0&&(e._n=e._n/l);break}}}if(t.indexOf("o")>-1){if(t.indexOf(" o")>-1){u=" ";t=t.replace(" o","")}else t=t.replace("o","");u+=i[s].ordinal(e._n)}var p=e._n.toString().split(".")[0],d=t.split(".")[1],v=t.indexOf(","),m="",g=!1;d||(p=a(e._n,null));if(e._n<0){p=p.slice(1);g=!0}v>-1&&(p=p.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+i[s].delimiters.thousands));t.indexOf(".")===0&&(p="");if(d){if(d.indexOf("[")>-1){d=d.replace("]","");d=d.split("[");m=a(e._n,d[0].length+d[1].length,d[1].length).split(".")[1]}else m=a(e._n,d.length).split(".")[1];m&&(m=i[s].delimiters.decimal+m)}return(n&&g?"(":"")+(!n&&g?"-":"")+p+m+(u?u:"")+(r?r:"")+(o?o:"")+(n&&g?")":"")}function m(e,t){i[e]=t}var e,t="1.3.1",n=Math.round,r,i={},s="en",o=typeof module!="undefined"&&module.exports;e=function(t){e.isNumeral(t)?t=t.value():Number(t)||(t=0);return new u(Number(t))};e.isNumeral=function(e){return e instanceof u};e.version=t;e.isNumeral=function(e){return e instanceof u};e.language=function(e,t){if(!e)return s;e&&!t&&(s=e);(t||!i[e])&&m(e,t);return i};e.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m"},ordinal:function(e){var t=e%10;return~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th"},currency:{symbol:"$"}});e.fn=u.prototype={clone:function(){return e(this)},format:function(t){return f(this,t?t:e.defaultFormat)},unformat:function(t){return l(this,t?t:e.defaultFormat)},value:function(){return this._n},set:function(e){this._n=Number(e);return this},add:function(e){this._n=this._n+Number(e);return this},subtract:function(e){this._n=this._n-Number(e);return this},multiply:function(e){this._n=this._n*Number(e);return this},divide:function(e){this._n=this._n/Number(e);return this},difference:function(e){var t=this._n-Number(e);t<0&&(t=-t);return t}};o&&(module.exports=e);typeof ender=="undefined"&&(this.numeral=e);typeof define=="function"&&define.amd&&define([],function(){return e})}).call(this); \ No newline at end of file diff --git a/temp/numeral.js/1.3.1/package/numeral.js b/temp/numeral.js/1.3.1/package/numeral.js deleted file mode 100644 index 359fcebf4..000000000 --- a/temp/numeral.js/1.3.1/package/numeral.js +++ /dev/null @@ -1,476 +0,0 @@ - -// numeral.js -// version : 1.3.1 -// author : Adam Draper -// license : MIT -// http://adamwdraper.github.com/Numeral-js/ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.3.1', - round = Math.round, i, - // internal storage for language config files - languages = {}, - currentLanguage = 'en', - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral(number) { - this._n = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision, optionals) { - var power = Math.pow(10, precision), - output; - - // Multiply up by precision, round accurately, then divide and use native toFixed(): - output = (Math.round(value * power) / power).toFixed(precision); - - if (optionals) { - var optionalsRegExp = new RegExp('0{1,' + optionals + '}$'); - output = output.replace(optionalsRegExp, ''); - } - - return output; - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // currency!!!!! - output = formatCurrency(n, format); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' numbers or bytes - output = formatNumber(n, format); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - if (string.indexOf(':') > -1) { - n._n = unformatTime(string); - } else { - var stringOriginal = string; - if (languages[currentLanguage].delimiters.decimal !== '.') { - string = string.replace(/\./g,'').replace(languages[currentLanguage].delimiters.decimal, '.'); - } - - // see if abbreviations are there so that we can multiply to the correct number - var thousandRegExp = new RegExp(languages[currentLanguage].abbreviations.thousand + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$'), - millionRegExp = new RegExp(languages[currentLanguage].abbreviations.million + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$'); - - // see if bytes are there so that we can multiply to the correct number - var prefixes = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], - bytesMultiplier = false; - - for (var power = 0; power <= prefixes.length; power++) { - bytesMultiplier = (string.indexOf(prefixes[power]) > -1) ? Math.pow(1024, power + 1) : false; - - if (bytesMultiplier) { - break; - } - } - - // do some math to create our number - n._n = ((bytesMultiplier) ? bytesMultiplier : 1) * ((stringOriginal.match(thousandRegExp)) ? 1000 : 1) * ((stringOriginal.match(millionRegExp)) ? 1000000 : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * Number(((string.indexOf('(') > -1) ? '-' : '') + string.replace(/[^0-9\.'-]+/g, '')); - - // round if we are talking about bytes - n._n = (bytesMultiplier) ? Math.ceil(n._n) : n._n; - } - return n._n; - } - - function formatCurrency (n, format) { - var prependSymbol = (format.indexOf('$') <= 1) ? true : false; - - // remove $ for the moment - var space = ''; - - // check for space before or after currency - if (format.indexOf(' $') > -1) { - space = ' '; - format = format.replace(' $', ''); - } else if (format.indexOf('$ ') > -1) { - space = ' '; - format = format.replace('$ ', ''); - } else { - format = format.replace('$', ''); - } - - // format the number - var output = formatNumeral(n, format); - - // position the symbol - if (prependSymbol) { - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - output.splice(1, 0, languages[currentLanguage].currency.symbol + space); - output = output.join(''); - } else { - output = languages[currentLanguage].currency.symbol + space + output; - } - } else { - if (output.indexOf(')') > -1) { - output = output.split(''); - output.splice(-1, 0, space + languages[currentLanguage].currency.symbol); - output = output.join(''); - } else { - output = output + space + languages[currentLanguage].currency.symbol; - } - } - - return output; - } - - function formatPercentage (n, format) { - var space = ''; - // check for space before % - if (format.indexOf(' %') > -1) { - space = ' '; - format = format.replace(' %', ''); - } else { - format = format.replace('%', ''); - } - - n._n = n._n * 100; - var output = formatNumeral(n, format); - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, space + '%'); - output = output.join(''); - } else { - output = output + space + '%'; - } - return output; - } - - function formatTime (n, format) { - var hours = Math.floor(n._n/60/60), - minutes = Math.floor((n._n - (hours * 60 * 60))/60), - seconds = Math.round(n._n - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.lenght === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (n, format) { - var negP = false, - abbr = '', - bytes = '', - ord = ''; - - // see if we should use parentheses for negative number - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - // check for space before abbreviation - if (format.indexOf(' a') > -1) { - abbr = ' '; - format = format.replace(' a', ''); - } else { - format = format.replace('a', ''); - } - - if (n._n > 1000000) { - abbr = abbr + languages[currentLanguage].abbreviations.million; - n._n = n._n / 1000000; - } else { - abbr = abbr + languages[currentLanguage].abbreviations.thousand; - n._n = n._n / 1000; - } - } - - // see if we are formatting bytes - if (format.indexOf('b') > -1) { - // check for space before - if (format.indexOf(' b') > -1) { - bytes = ' '; - format = format.replace(' b', ''); - } else { - format = format.replace('b', ''); - } - - var prefixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], - min, - max; - - for (var power = 0; power <= prefixes.length; power++) { - min = Math.pow(1024, power); - max = Math.pow(1024, power+1); - - if (n._n > min && n._n < max) { - bytes = bytes + prefixes[power]; - if (min > 0) { - n._n = n._n / min; - } - break; - } - } - } - - // see if ordinal is wanted - if (format.indexOf('o') > -1) { - // check for space before - if (format.indexOf(' o') > -1) { - ord = ' '; - format = format.replace(' o', ''); - } else { - format = format.replace('o', ''); - } - - ord = ord + languages[currentLanguage].ordinal(n._n); - } - - var w = n._n.toString().split('.')[0], - precision = format.split('.')[1], - thousands = format.indexOf(','), - d = '', - neg = false; - - if (!precision) { - w = toFixed(n._n, null); - } - - // format number - if (n._n < 0) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + languages[currentLanguage].delimiters.thousands); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - if (precision) { - if (precision.indexOf('[') > -1) { - precision = precision.replace(']', ''); - precision = precision.split('['); - d = toFixed(n._n, (precision[0].length + precision[1].length), precision[1].length).split('.')[1]; - } else { - d = toFixed(n._n, precision.length).split('.')[1]; - } - - if (d) { - d = languages[currentLanguage].delimiters.decimal + d; - } - } - - return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((bytes) ? bytes : '') + ((negP && neg) ? ')' : ''); - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (numeral.isNumeral(input)) { - input = input.value(); - } else if (!Number(input)) { - input = 0; - } - - return new Numeral(Number(input)); - }; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // This function will load languages and then set the global language. If - // no arguments are passed in, it will simply return the current global - // language key. - numeral.language = function (key, values) { - if (!key) { - return currentLanguage; - } - - if (key && !values) { - currentLanguage = key; - } - - if (values || !languages[key]) { - loadLanguage(key, values); - } - - return languages; - }; - - numeral.language('en', { - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '$' - } - }); - - /************************************ - Helpers - ************************************/ - - function loadLanguage(key, values) { - languages[key] = values; - } - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString) { - return formatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - unformat : function (inputString) { - return unformatNumeral(this, inputString ? inputString : numeral.defaultFormat); - }, - - value : function () { - return this._n; - }, - - set : function (value) { - this._n = Number(value); - return this; - }, - - add : function (value) { - this._n = this._n + Number(value); - return this; - }, - - subtract : function (value) { - this._n = this._n - Number(value); - return this; - }, - - multiply : function (value) { - this._n = this._n * Number(value); - return this; - }, - - divide : function (value) { - this._n = this._n / Number(value); - return this; - }, - - difference : function (value) { - var difference = this._n - Number(value); - - if (difference < 0) { - difference = -difference; - } - - return difference; - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // Commenting out common js and global variable - // // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler 'advanced' mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this); diff --git a/temp/numeral.js/1.3.1/package/package.json b/temp/numeral.js/1.3.1/package/package.json deleted file mode 100644 index e532bf4b8..000000000 --- a/temp/numeral.js/1.3.1/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.3.1", - "description": "Format and manipulate numbers.", - "homepage": "http://numeraljs.com", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "format", - "time", - "money", - "percentage" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://numeraljs.com)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://numeraljs.com)\n\nChangelog\n=========\n\n### 1.3.1\nBug fix: Minor fix to unformatting parser\n### 1.3.0\nAdd support for spaces before/after $, a, o, b in a format string\nBug fix: Fix unformat for languages that use '.' in ordinals\nBug fix: Fix round up floating numbers with no precision correctly.\nBug fix: Fix currency signs at the end in unformat\n### 1.2.6\nAdd support for optional decimal places\n### 1.2.5\nAdd support for appending currency symbol\n### 1.2.4\nAdd support for humanized filesizes\n### 1.2.2\nChanged language definition property 'money' to 'currency'\n### 1.2.1\nBug fix: Fix unformatting non-negative abbreviations\n### 1.2.3\nBug Fix: Fix unformatting for languages that use '.' as thousands delimiter\n### 1.2.0\nAdd localization language support\n\nUpdate testing for to include languages\n### 1.1.0\nAdd Tests\n\nBug fix: Fix difference returning negative values\n### 1.0.4\nBug fix: Non negative numbers were displaying as negative when using parentheses\n### 1.0.3\nAdd ordinal formatting using 'o' in the format\n### 1.0.2\nAdd clone functionality\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.3.1", - "_from": "numeral" -} \ No newline at end of file diff --git a/temp/numeral.js/1.3.1/package/tests/languages/cs.js b/temp/numeral.js/1.3.1/package/tests/languages/cs.js deleted file mode 100644 index 390763d79..000000000 --- a/temp/numeral.js/1.3.1/package/tests/languages/cs.js +++ /dev/null @@ -1,78 +0,0 @@ -module('Language: cs', { - setup: function() { - numeral.language('cs'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10 000,0000'], - [10000.23,'0,0','10 000'], - [-10000,'0,0.0','-10 000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10 000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2mil.'], - [1460,'0a','1tis.'], - [-104000,'0a','-104tis.'], - [1,'0o','1.'], - [52,'0o','52.'], - [23,'0o','23.'], - [100,'0o','100.'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'0,0.00$','1 000,23Kč'], - [-1000.234,'(0,0$)','(1 000Kč)'], - [-1000.234,'0.00$','-1000,23Kč'], - [1230974,'(0.00a$)','1,23mil.Kč'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}) - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 10, function() { - var tests = [ - ['10 000,123',10000.123], - ['(0,12345)',-.12345], - ['(1,23mil.Kč)',-1230000], - ['1,23mil.Kč',1230000], - ['10tis.',10000], - ['-10tis.',-10000], - ['23.',23], - ['10 000,00Kč',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); diff --git a/temp/numeral.js/1.3.1/package/tests/languages/de-de.js b/temp/numeral.js/1.3.1/package/tests/languages/de-de.js deleted file mode 100644 index 759ca0fe8..000000000 --- a/temp/numeral.js/1.3.1/package/tests/languages/de-de.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: de-de', { - setup: function() { - numeral.language('de-de'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10.000,0000'], - [10000.23,'0,0','10.000'], - [-10000,'0,0.0','-10.000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10.000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1.'], - [52,'0o','52.'], - [23,'0o','23.'], - [100,'0o','100.'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','€1.000,23'], - [-1000.234,'($0,0)','(€1.000)'], - [-1000.234,'$0.00','-€1000,23'], - [1230974,'($0.00a)','€1,23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10.000,123',10000.123], - ['(0,12345)',-.12345], - ['(€1,23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23.',23], - ['€10.000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); diff --git a/temp/numeral.js/1.3.1/package/tests/languages/en-gb.js b/temp/numeral.js/1.3.1/package/tests/languages/en-gb.js deleted file mode 100644 index d1e6b0b8a..000000000 --- a/temp/numeral.js/1.3.1/package/tests/languages/en-gb.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: en-gb', { - setup: function() { - numeral.language('en-gb'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10,000.0000'], - [10000.23,'0,0','10,000'], - [-10000,'0,0.0','-10,000.0'], - [10000.1234,'0.000','10000.123'], - [-10000,'(0,0.0000)','(10,000.0000)'], - [-.23,'.00','-.23'], - [-.23,'(.00)','(.23)'], - [.23,'0.00000','0.23000'], - [1230974,'0.0a','1.2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1st'], - [52,'0o','52nd'], - [23,'0o','23rd'], - [100,'0o','100th'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','£1,000.23'], - [-1000.234,'($0,0)','(£1,000)'], - [-1000.234,'$0.00','-£1000.23'], - [1230974,'($0.00a)','£1.23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97.488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43.000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10,000.123',10000.123], - ['(0.12345)',-.12345], - ['(£1.23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23rd',23], - ['£10,000.00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.3.1/package/tests/languages/en.js b/temp/numeral.js/1.3.1/package/tests/languages/en.js deleted file mode 100644 index 483ecda79..000000000 --- a/temp/numeral.js/1.3.1/package/tests/languages/en.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: en', { - setup: function() { - numeral.language('en'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10,000.0000'], - [10000.23,'0,0','10,000'], - [-10000,'0,0.0','-10,000.0'], - [10000.1234,'0.000','10000.123'], - [-10000,'(0,0.0000)','(10,000.0000)'], - [-.23,'.00','-.23'], - [-.23,'(.00)','(.23)'], - [.23,'0.00000','0.23000'], - [1230974,'0.0a','1.2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1st'], - [52,'0o','52nd'], - [23,'0o','23rd'], - [100,'0o','100th'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','$1,000.23'], - [-1000.234,'($0,0)','($1,000)'], - [-1000.234,'$0.00','-$1000.23'], - [1230974,'($0.00a)','$1.23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97.488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43.000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10,000.123',10000.123], - ['(0.12345)',-.12345], - ['($1.23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23rd',23], - ['$10,000.00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.3.1/package/tests/languages/es.js b/temp/numeral.js/1.3.1/package/tests/languages/es.js deleted file mode 100644 index 0e99a2f0f..000000000 --- a/temp/numeral.js/1.3.1/package/tests/languages/es.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: es', { - setup: function() { - numeral.language('es'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10.000,0000'], - [10000.23,'0,0','10.000'], - [-10000,'0,0.0','-10.000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10.000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2mm'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1er'], - [52,'0o','52do'], - [23,'0o','23er'], - [100,'0o','100mo'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','$1.000,23'], - [-1000.234,'($0,0)','($1.000)'], - [-1000.234,'$0.00','-$1000,23'], - [1230974,'($0.00a)','$1,23mm'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10.000,123',10000.123], - ['(0,12345)',-.12345], - ['($1,23mm)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23er',23], - ['$10.000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); diff --git a/temp/numeral.js/1.3.1/package/tests/languages/fr.js b/temp/numeral.js/1.3.1/package/tests/languages/fr.js deleted file mode 100644 index d77b3979c..000000000 --- a/temp/numeral.js/1.3.1/package/tests/languages/fr.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: fr', { - setup: function() { - numeral.language('fr'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10 000,0000'], - [10000.23,'0,0','10 000'], - [-10000,'0,0.0','-10 000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10 000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2m'], - [1460,'0a','1k'], - [-104000,'0a','-104k'], - [1,'0o','1er'], - [52,'0o','52e'], - [23,'0o','23e'], - [100,'0o','100e'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','€1 000,23'], - [-1000.234,'($0,0)','(€1 000)'], - [-1000.234,'$0.00','-€1000,23'], - [1230974,'($0.00a)','€1,23m'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10 000,123',10000.123], - ['(0,12345)',-.12345], - ['(€1,23m)',-1230000], - ['10k',10000], - ['-10k',-10000], - ['23e',23], - ['€10 000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.3.1/package/tests/languages/it.js b/temp/numeral.js/1.3.1/package/tests/languages/it.js deleted file mode 100644 index 77780145f..000000000 --- a/temp/numeral.js/1.3.1/package/tests/languages/it.js +++ /dev/null @@ -1,77 +0,0 @@ -module('Language: it', { - setup: function() { - numeral.language('it'); - } -}); - -// Numbers ----------------------- -test('Format Numbers', 15, function() { - var tests = [ - [10000,'0,0.0000','10.000,0000'], - [10000.23,'0,0','10.000'], - [-10000,'0,0.0','-10.000,0'], - [10000.1234,'0.000','10000,123'], - [-10000,'(0,0.0000)','(10.000,0000)'], - [-.23,'.00','-,23'], - [-.23,'(.00)','(,23)'], - [.23,'0.00000','0,23000'], - [1230974,'0.0a','1,2mil'], - [1460,'0a','1mila'], - [-104000,'0a','-104mila'], - [1,'0o','1º'], - [52,'0o','52º'], - [23,'0o','23º'], - [100,'0o','100º'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Currency ----------------------- -test('Format Currency', 4, function() { - var tests = [ - [1000.234,'$0,0.00','€1.000,23'], - [-1000.234,'($0,0)','(€1.000)'], - [-1000.234,'$0.00','-€1000,23'], - [1230974,'($0.00a)','€1,23mil'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Percentages ----------------------- -test('Format Percentages', 4, function() { - var tests = [ - [1,'0%','100%'], - [.974878234,'0.000%','97,488%'], - [-.43,'0%','-43%'], - [.43,'(0.000%)','43,000%'] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral(tests[i][0]).format(tests[i][1]), tests[i][2], tests[i][1]); - } -}); - -// Unformat ------------------------ -test('Unformat', 9, function() { - var tests = [ - ['10.000,123',10000.123], - ['(0,12345)',-.12345], - ['(€1,23mil)',-1230000], - ['10mila',10000], - ['-10mila',-10000], - ['23º',23], - ['€10.000,00',10000], - ['-76%',-.76], - ['2:23:57',8637] - ]; - - for (var i = 0; i < tests.length; i++) { - strictEqual(numeral().unformat(tests[i][0]), tests[i][1], tests[i][0]); - } -}); \ No newline at end of file diff --git a/temp/numeral.js/1.3.1/package/tests/languages/min/cs-min.js b/temp/numeral.js/1.3.1/package/tests/languages/min/cs-min.js deleted file mode 100644 index 468702f78..000000000 --- a/temp/numeral.js/1.3.1/package/tests/languages/min/cs-min.js +++ /dev/null @@ -1 +0,0 @@ -module("Language: cs",{setup:function(){numeral.language("cs")}});test("Format Numbers",15,function(){var e=[[1e4,"0,0.0000","10 000,0000"],[10000.23,"0,0","10 000"],[-1e4,"0,0.0","-10 000,0"],[10000.1234,"0.000","10000,123"],[-1e4,"(0,0.0000)","(10 000,0000)"],[-0.23,".00","-,23"],[-0.23,"(.00)","(,23)"],[.23,"0.00000","0,23000"],[1230974,"0.0a","1,2mil."],[1460,"0a","1tis."],[-104e3,"0a","-104tis."],[1,"0o","1."],[52,"0o","52."],[23,"0o","23."],[100,"0o","100."]];for(var t=0;t - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - \ No newline at end of file diff --git a/temp/numeral.js/1.3.2/dist.tar.gz b/temp/numeral.js/1.3.2/dist.tar.gz deleted file mode 100644 index 7c7dbf6e643e806fdfda6ed326f82bdcd383d1be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12614 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 diff --git a/temp/numeral.js/1.3.2/package/LICENSE b/temp/numeral.js/1.3.2/package/LICENSE deleted file mode 100644 index 145e65bcd..000000000 --- a/temp/numeral.js/1.3.2/package/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 Adam Draper - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/temp/numeral.js/1.3.2/package/README.md b/temp/numeral.js/1.3.2/package/README.md deleted file mode 100644 index 21e7b8c97..000000000 --- a/temp/numeral.js/1.3.2/package/README.md +++ /dev/null @@ -1,106 +0,0 @@ -[Numeral.js](http://adamwdraper.github.com/Numeral-js/) -======================================================= - -A javascript library for formatting and manipulating numbers. - -[Website and documentation](http://numeraljs.com/) - - -Changelog -========= - -### 1.3.2 - -Bug fix: Formatting some numbers results in the wrong value. Issue #21 - -### 1.3.1 - -Bug fix: Minor fix to unformatting parser - -### 1.3.0 - -Add support for spaces before/after $, a, o, b in a format string - -Bug fix: Fix unformat for languages that use '.' in ordinals - -Bug fix: Fix round up floating numbers with no precision correctly. - -Bug fix: Fix currency signs at the end in unformat - -### 1.2.6 - -Add support for optional decimal places - -### 1.2.5 - -Add support for appending currency symbol - -### 1.2.4 - -Add support for humanized filesizes - -### 1.2.3 - -Bug Fix: Fix unformatting for languages that use '.' as thousands delimiter - -### 1.2.2 - -Changed language definition property 'money' to 'currency' - -### 1.2.1 - -Bug fix: Fix unformatting non-negative abbreviations - -### 1.2.0 - -Add language support - -Update testing for to include languages - -### 1.1.0 - -Add Tests - -Bug fix: Fix difference returning negative values - -### 1.0.4 - -Bug fix: Non negative numbers were displaying as negative when using parentheses - -### 1.0.3 - -Add ordinal formatting using 'o' in the format - -### 1.0.2 - -Add clone functionality - -### 1.0.1 - -Added abbreviations for thousands and millions using 'a' in the format - -### 1.0.0 - -Initial release - - -Acknowlegements -=============== - -Numeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com) - - -License -======= - -Numeral.js is freely distributable under the terms of the MIT license. - -Copyright (c) 2012 Adam Draper - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/temp/numeral.js/1.3.2/package/numeral.js b/temp/numeral.js/1.3.2/package/numeral.js deleted file mode 100644 index eb50b1010e224d59bf1ee10232d5dc0dd095efe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 zcmcgx`)}Ju67J9bE4DyVQnp1&=`}!=x_8lm4B{AU(IT zT^wfY$0{s&MdN7_@x11kIDhem1~x*J^T{N{vYS{g3)YF)G|M0=vdOQC&-iUUIXd!J zO&$qiQs*300 z7qb}*dEVs~ZFuxfvdD{=|Le6Caue3)MckwuG<~rxd9h-d8uK$G-SN z&jkE^SyZAPJv;hjEmuv1b3aJYQf6pQ8=aL^AqomshaeTw zBQ{AL{5Qve)!Z{Vb7zmD79O(~S()+-iVdYxK{2BEDS6LhxR=<3f{BWUqGqeKps%c` zIQ;h=XEBeGEKIfGjtxE9TeD@7ht-x<1vH!FYnIe?gJGYq1LjYIr?am{f#LIH#LmbF zH0)`nWyNdAWQaluOGpVR;67m#fvf=8F$?n;?vsak#K#p+L&0NK7b|fSRy@$VC-U2> zOtWSFb(l8%6bi;cC~{9(QIZaDrnVx<>&xPXS5W17C^iB9@n_T4#*uSU(tOc~vJvna z`iCA^^Snt#Ql?whlx(?e^OP#0Gc^^YPq(MgI?q|0TqiM?=WBozIjnQdooVKlxZ*~B zErpZh)X~_nl6%A^`iE7yJu^AC5|XiG#r#1H&;rteo&1fjpT953wfGHF|M=eYc6REq z6SoS#y}L&qSQrlUZRJ%zf{K@E7;(p0(K}^cd#CnWB2aPBRJqkM4LPs=IGR~uek!Ug z6y!#7=;J$&4GzMdF$beE8l~8*tcvv18Z_q zg|X50b9(GXQn59gqVR(R<7nFw-kJH1@f1Eg#P4yJAMznGp+GJ;#O#$_^-y;6E<2HA z2N}J={2>-nM{w5!?w5KRSZfAMT5d%vg$*bS)&@Wi6L%p96KMCYMP)pbs2y;6+Jf2x zKwW5wy5830%4BVSQ`Fo3M#fU3&N*7z>zF53dBqTxTGJGFoZz;zlTbvhd|4%H;C2cS zQ3Gx#otMP1g}_BG^U^!XHnOp{w^(k=1jy#AZ zAPW4ta<_1bIK!Sbmyr-ImoQTzlWZ+x6floStqYZ95x7y9v&`fP7!wOnA))ArMBA`L zmmbn3%FCuk4jcmH183<76Br_d*ZyLDc{%#vUtSWFA0T0nBB;07vPfy~XrXqG7NZ4l zrJEE<;w(v1STq=h4+qv*r!Uzl`zw1x|;dsjLHxxPmuC_EjD`Q zmu!ce=A)zXzoEQ@y4^yD9?n`AL{!jN?4Y)ED@0Rcdd<&adg6oD1K>xLl> z-*u2@H!$M@!IyD{guNl`jHu3~%qp84fOTiT#yo#lsD%RmmL<>uj!=C0T0sWt0&t2p zz6m!K2BQ&Mu-SAvrM~gNu1@UOO#}NJe7jt`VAEhaGaPg(GUB-nzRi{k=8Zk92R0(o z6nYiYB-+u%!X>C<>5AlQIRm2U7j2ob4_29w8r?%CbZL;e0`AnD1?e z@Lsuh#qJbbdLJ1lmqnVTO2+Bcy}F2M`AyemWl<-xk0x>|HCl3H9$=(%t3II70>y7P zCfSD%S{64q-lJl&q?KC}tjjbJey68025+rEA2vH>=xraA`K3vFh0u@;Z;K?~6+w3k zU1N5(KU^4qmO53}wH;6lG9A+Y=HNa@L0=?GHaeY?Og7@s|1s4~&M3Kouoi}HJW9ks9r z{0&`JMc2{ibp3~m&;pG-Dv-(3DgJtm4lacn+y!)3%jIm$d`0P)J)NRJ#NN>^ftur5 zJhlYXg`Twgz<#1>I4Xip5Bl_qCHk{DwRFB+{tdi{iWhH6ONO?ek^j=o%y(54ZlO0_ZfaMKFRD+Un#@>WnCmTra3 zf$#cp zW7O0VKx^oePXh%xb?-ogKD?%`SN0uQr4F_909xdH{ff$G>c+dSOZP6A@mg=K=vcDl z85l3BSdMl}Onsq*wyK5~rZJ=U10`;Kb9i+P$*Ty^5#@DvP}BQNDjac->{hlqZs~C@hQtf^RA3;wr$hSe H|M2_|Hh?tI diff --git a/temp/numeral.js/1.3.2/package/package.json b/temp/numeral.js/1.3.2/package/package.json deleted file mode 100644 index d7e42d8fd..000000000 --- a/temp/numeral.js/1.3.2/package/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "numeral", - "version": "1.3.2", - "description": "Format and manipulate numbers.", - "homepage": "http://numeraljs.com", - "author": { - "name": "Adam Draper", - "email": "adamwdraper@gmail.com", - "url": "http://github.com/adamwdraper" - }, - "keywords": [ - "numeral", - "number", - "format", - "time", - "money", - "percentage" - ], - "main": "./numeral.js", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/adamwdraper/Numeral-js" - }, - "bugs": { - "url": "https://github.com/adamwdraper/Numeral-js/issues" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "devDependencies": {}, - "ender": "./ender.js", - "readme": "[Numeral.js](http://numeraljs.com)\n=======================================================\n\nA javascript library for formatting and manipulating numbers.\n\n[Website and documentation](http://numeraljs.com)\n\nChangelog\n=========\n\n### 1.3.2\nBug fix: Formatting some numbers results in the wrong value. Issue #21\n### 1.3.1\nBug fix: Minor fix to unformatting parser\n### 1.3.0\nAdd support for spaces before/after $, a, o, b in a format string\nBug fix: Fix unformat for languages that use '.' in ordinals\nBug fix: Fix round up floating numbers with no precision correctly.\nBug fix: Fix currency signs at the end in unformat\n### 1.2.6\nAdd support for optional decimal places\n### 1.2.5\nAdd support for appending currency symbol\n### 1.2.4\nAdd support for humanized filesizes\n### 1.2.2\nChanged language definition property 'money' to 'currency'\n### 1.2.1\nBug fix: Fix unformatting non-negative abbreviations\n### 1.2.3\nBug Fix: Fix unformatting for languages that use '.' as thousands delimiter\n### 1.2.0\nAdd localization language support\n\nUpdate testing for to include languages\n### 1.1.0\nAdd Tests\n\nBug fix: Fix difference returning negative values\n### 1.0.4\nBug fix: Non negative numbers were displaying as negative when using parentheses\n### 1.0.3\nAdd ordinal formatting using 'o' in the format\n### 1.0.2\nAdd clone functionality\n### 1.0.1\n\nAdded abbreviations for thousands and millions using 'a' in the format\n\n### 1.0.0\n\nInitial release\n\nAcknowlegements\n===============\n\nNumeral.js, while less complex, was inspired by and heavily borrowed from [Moment.js](http://momentjs.com)\n\nLicense\n=======\nNumeral.js is freely distributable under the terms of the MIT license.\nCopyright (c) 2012 Adam Draper\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use,copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "_id": "numeral@1.3.2", - "_from": "numeral" -} \ No newline at end of file
-

IDBWrapper Examples

-

- There are a couple of examples to try out / look at: -

-
    -
  • Quicktest - Just a quick test to see if IDB opens and fool around in the console.
  • -
  • Basic CRUD - A basic CRUD example using an IDB store as fixed table.
  • -
  • ObjectStore - An example to show the difference between a table and an object store.
  • -
  • Index - An example to show how to work with indexes.
  • -
-