--- a/.hgignore Sun Nov 12 22:07:33 2017 +0100
+++ b/.hgignore Wed Sep 04 17:32:50 2024 +0200
@@ -16,6 +16,7 @@
^sbin/build/compil-to-polemic-tweet\.sh$
^.git$
^.gitignore$
+^node_modules$
syntax: glob
build/LdtPlayer-release.js
@@ -24,3 +25,6 @@
*.orig
src/js/site.js
doc/jsdoc/*
+shell.nix
+dist/*
+.envrc
--- a/README.md Sun Nov 12 22:07:33 2017 +0100
+++ b/README.md Wed Sep 04 17:32:50 2024 +0200
@@ -7,27 +7,29 @@
o Reads from Youtube, Dailymotion and Flash backends
o Loads the data as JSON as well as JSONP
-
-Requirements
+Prerequisite
============
-- jQuery 1.4
-- jQuery UI 1.4
-- the java jre (for building the sources)
+- node + npm
+- `$ npm install`
Building the library
====================
-The library files are scattered in many files. An ant build script has been made to make the developer and
-minified versions of the player. It is located in sbin/build/client.xml.
-To build the library, simply run sbin/build/compil.bat if you are running windows, or sbin/build/compil.sh
-if you're running Unix.
+The library files are scattered in many files.
+It is built with vite.
+- `$ npm run build`
+
+The result of the build is in the dist/ folder.
Running the examples
====================
-You'll have to have a web server configured to serve the metadataplayer directory, because
-of the flash cross-domain policy.
+- `npm dev`
+
+or for building the dist:
+- `vite build -w` + `python -m http.server 5173`
+
The code
========
@@ -35,3 +37,5 @@
The code is scattered among several files, which are concatenated and minified during the
build process. The html templates in the templates/ directory are also "jsified" during
this process, to be used by the js code.
+
+**TODO:** finish the migration of the examples and widgets. Replace the JwPlayer widget with an open source js video player that can play youtube and wimeo videos. Adapt the AdaptivePlayer accordingly.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/package-lock.json Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,4721 @@
+{
+ "name": "metadataplayer",
+ "version": "0.0.1",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "metadataplayer",
+ "version": "0.0.1",
+ "dependencies": {
+ "backbone": "^1.6.0",
+ "backbone-relational": "^0.10.0",
+ "jquery": "^3.7.1",
+ "jquery-ui": "^1.14.0",
+ "jwplayer": "^1.0.3",
+ "lodash": "^4.17.21",
+ "mousetrap": "^1.6.5",
+ "mousetrap-global-bind": "^1.1.0",
+ "mustache": "^4.2.0",
+ "paper": "^0.12.18",
+ "popcorn-js": "github:menismu/popcorn-js",
+ "processing": "^0.2.0",
+ "raphael": "^2.3.0"
+ },
+ "devDependencies": {
+ "@rollup/plugin-inject": "^5.0.5",
+ "vite": "^5.4.1",
+ "vite-plugin-banner": "^0.7.1",
+ "vite-plugin-node-polyfills": "^0.22.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true
+ },
+ "node_modules/@mapbox/node-pre-gyp": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
+ "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "make-dir": "^3.1.0",
+ "node-fetch": "^2.6.7",
+ "nopt": "^5.0.0",
+ "npmlog": "^5.0.1",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.11"
+ },
+ "bin": {
+ "node-pre-gyp": "bin/node-pre-gyp"
+ }
+ },
+ "node_modules/@rollup/plugin-inject": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz",
+ "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+ "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
+ "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
+ "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
+ "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
+ "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
+ "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
+ "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
+ "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
+ "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
+ "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
+ "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
+ "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
+ "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
+ "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
+ "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
+ "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
+ "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
+ },
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/aproba": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
+ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
+ },
+ "node_modules/are-we-there-yet": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
+ "deprecated": "This package is no longer supported.",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/asn1.js/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/assert": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
+ "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-nan": "^1.3.2",
+ "object-is": "^1.1.5",
+ "object.assign": "^4.1.4",
+ "util": "^0.12.5"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz",
+ "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA=="
+ },
+ "node_modules/backbone": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.6.0.tgz",
+ "integrity": "sha512-13PUjmsgw/49EowNcQvfG4gmczz1ximTMhUktj0Jfrjth0MVaTxehpU+qYYX4MxnuIuhmvBLC6/ayxuAGnOhbA==",
+ "dependencies": {
+ "underscore": ">=1.8.3"
+ }
+ },
+ "node_modules/backbone-relational": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/backbone-relational/-/backbone-relational-0.10.0.tgz",
+ "integrity": "sha512-g770F1c89e6LDaah4GaN/auh4HHjumPMFBkaNeZEEJGZA+0dh5pLFgXyb45iaxcDoa2VBWWgwdd2ZnqozyPeiw==",
+ "dependencies": {
+ "backbone": ">=1.2.1",
+ "underscore": ">=1.7.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/bn.js": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
+ "dev": true
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
+ "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.11.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/body-parser/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/body-parser/node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/body-parser/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
+ "dev": true
+ },
+ "node_modules/browser-resolve": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz",
+ "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.17.0"
+ }
+ },
+ "node_modules/browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "dependencies": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "dependencies": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "node_modules/browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/browserify-rsa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+ "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "node_modules/browserify-sign": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz",
+ "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^5.2.1",
+ "browserify-rsa": "^4.1.0",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.5",
+ "hash-base": "~3.0",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.7",
+ "readable-stream": "^2.3.8",
+ "safe-buffer": "^5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/browserify-sign/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "dependencies": {
+ "pako": "~1.0.5"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
+ "dev": true
+ },
+ "node_modules/builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
+ "dev": true
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/canvas": {
+ "version": "2.11.2",
+ "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz",
+ "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@mapbox/node-pre-gyp": "^1.0.0",
+ "nan": "^2.17.0",
+ "simple-get": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/charenc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag=="
+ },
+ "node_modules/cloneable-readable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
+ "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ }
+ },
+ "node_modules/cloneable-readable/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/cloneable-readable/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/cloneable-readable/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==",
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+ "dev": true
+ },
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
+ },
+ "node_modules/constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
+ "dev": true
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ },
+ "node_modules/corser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
+ "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/create-ecdh": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ }
+ },
+ "node_modules/create-ecdh/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "node_modules/create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true
+ },
+ "node_modules/crypt": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "dependencies": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/cssstyle": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz",
+ "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==",
+ "dependencies": {
+ "rrweb-cssom": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/cssstyle/node_modules/rrweb-cssom": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
+ "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw=="
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "dependencies": {
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decimal.js": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
+ },
+ "node_modules/decompress-response": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
+ "dependencies": {
+ "mimic-response": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/des.js": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz",
+ "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "node_modules/diffie-hellman/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/domain-browser": {
+ "version": "4.23.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz",
+ "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/dotenv": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz",
+ "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/ecstatic": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz",
+ "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==",
+ "deprecated": "This package is unmaintained and deprecated. See the GH Issue 259.",
+ "dependencies": {
+ "he": "^1.1.1",
+ "mime": "^1.6.0",
+ "minimist": "^1.1.0",
+ "url-join": "^2.0.5"
+ },
+ "bin": {
+ "ecstatic": "lib/ecstatic.js"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
+ "node_modules/elliptic": {
+ "version": "6.5.7",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz",
+ "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/eve-raphael": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/eve-raphael/-/eve-raphael-0.5.0.tgz",
+ "integrity": "sha512-jrxnPsCGqng1UZuEp9DecX/AuSyAszATSjf4oEcRxvfxa1Oux4KkIPKBAAWWnpdwfARtr+Q0o9aPYWjsROD7ug=="
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "dependencies": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.19.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
+ "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.2",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.6.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/express/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/express/node_modules/qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "node_modules/finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/finalhandler/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs-minipass/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gauge": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
+ "deprecated": "This package is no longer supported.",
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
+ "signal-exit": "^3.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/google-closure-compiler": {
+ "version": "20191027.0.0",
+ "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20191027.0.0.tgz",
+ "integrity": "sha512-W8MVm/fUg6pPVDHbkP2R8HmeLXNVkjhQHwFpikAhRnF8znhjn7e78V+VXYUiOnjBwDGP1/We1sGk4QGMYY2UfA==",
+ "dependencies": {
+ "chalk": "2.x",
+ "google-closure-compiler-java": "^20191027.0.0",
+ "google-closure-compiler-js": "^20191027.0.0",
+ "minimist": "1.x",
+ "vinyl": "2.x",
+ "vinyl-sourcemaps-apply": "^0.2.0"
+ },
+ "bin": {
+ "google-closure-compiler": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "optionalDependencies": {
+ "google-closure-compiler-linux": "^20191027.0.0",
+ "google-closure-compiler-osx": "^20191027.0.0",
+ "google-closure-compiler-windows": "^20191027.0.0"
+ }
+ },
+ "node_modules/google-closure-compiler-java": {
+ "version": "20191027.0.0",
+ "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20191027.0.0.tgz",
+ "integrity": "sha512-3C0bRnXOp9yYbb6Qm0FqWm53xDmuRRB90tAA57rYzpreZg96Kxz2moVGcoYBh4jFlBkLIywHjV+AWYMaXA3lSQ=="
+ },
+ "node_modules/google-closure-compiler-js": {
+ "version": "20191027.0.0",
+ "resolved": "https://registry.npmjs.org/google-closure-compiler-js/-/google-closure-compiler-js-20191027.0.0.tgz",
+ "integrity": "sha512-D3UHBQ0fbPl3VZ2BDK4OWfqDzp/q1FywwEQBbC2qrEKa6Q1wYJRSSY21z+xwscQ1qyPHZjdqIIPXTBrnJvP0WQ=="
+ },
+ "node_modules/google-closure-compiler-linux": {
+ "version": "20191027.0.0",
+ "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20191027.0.0.tgz",
+ "integrity": "sha512-zWg+3UdqhsFOkP895azl9ioFOx+JZVFHdETZwhO59PA+zTNTulZqDCX6wqq8YFRoO3HKvYfedUp7Cp+jdaELnA==",
+ "cpu": [
+ "x64",
+ "x86"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/google-closure-compiler-osx": {
+ "version": "20191027.0.0",
+ "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20191027.0.0.tgz",
+ "integrity": "sha512-Ko/+43oeMD8u6MhKMGPhx61B5e2lR5+C9pzlhnibQwuXuDVcp2ruFbblhWBXiT2FrStTX65SZzFvza0bRVYikA==",
+ "cpu": [
+ "x64",
+ "x86"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/google-closure-compiler-windows": {
+ "version": "20191027.0.0",
+ "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20191027.0.0.tgz",
+ "integrity": "sha512-kAzGFGaeAL9qsieotjb5qq5SsYD2Vwtl7aCeIVUnzWyNfhz7WZCmAMSGwGdtaShfM+4uzOwG1mahtPWasTaBxg==",
+ "cpu": [
+ "x64",
+ "x86"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "deprecated": "this library is no longer supported",
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
+ },
+ "node_modules/hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+ "dev": true,
+ "dependencies": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "dependencies": {
+ "whatwg-encoding": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dependencies": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/http-proxy-agent/node_modules/agent-base": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/http-server": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.2.tgz",
+ "integrity": "sha512-Gp1ka7W4MLjFz8CLhFmUWa+uIf7cq93O4DZv8X0ZmNS1L4P2dbMkmlBeYhb0hGaI3M0Y1xM4waWgnIf/5Hp7dQ==",
+ "dependencies": {
+ "colors": "1.0.3",
+ "corser": "~2.0.0",
+ "ecstatic": "^3.0.0",
+ "http-proxy": "^1.8.1",
+ "opener": "~1.4.0",
+ "optimist": "0.6.x",
+ "portfinder": "^1.0.13",
+ "union": "^0.5.0"
+ },
+ "bin": {
+ "hs": "bin/http-server",
+ "http-server": "bin/http-server"
+ }
+ },
+ "node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
+ "dev": true
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+ "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
+ "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dev": true,
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/isomorphic-timers-promises": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz",
+ "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+ },
+ "node_modules/jquery": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
+ "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="
+ },
+ "node_modules/jquery-ui": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.14.0.tgz",
+ "integrity": "sha512-mPfYKBoRCf0MzaT2cyW5i3IuZ7PfTITaasO5OFLAQxrHuI+ZxruPa+4/K1OMNT8oElLWGtIxc9aRbyw20BKr8g==",
+ "dependencies": {
+ "jquery": ">=1.12.0 <5.0.0"
+ }
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
+ },
+ "node_modules/jsdom": {
+ "version": "24.1.1",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz",
+ "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==",
+ "dependencies": {
+ "cssstyle": "^4.0.1",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.4.3",
+ "form-data": "^4.0.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.12",
+ "parse5": "^7.1.2",
+ "rrweb-cssom": "^0.7.1",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^4.1.4",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "canvas": "^2.11.2"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jsdom/node_modules/agent-base": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/jsdom/node_modules/https-proxy-agent": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "dependencies": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/jwplayer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/jwplayer/-/jwplayer-1.0.3.tgz",
+ "integrity": "sha512-FkogyQxpDrO8sCXGjDNGq2WRQaq6RLqkljbOEDO77hA01gXEUQdoPYw3E5SB5+olvnJqQ9E1YfyKZGmmt2opWA==",
+ "dependencies": {
+ "php2js": "^1.0.0",
+ "request": "^2.67.0",
+ "sha1": "^1.1.1"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.11",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
+ "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "bin": {
+ "miller-rabin": "bin/miller-rabin"
+ }
+ },
+ "node_modules/miller-rabin/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
+ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "node_modules/minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
+ "dev": true
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minizlib/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mousetrap": {
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz",
+ "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA=="
+ },
+ "node_modules/mousetrap-global-bind": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mousetrap-global-bind/-/mousetrap-global-bind-1.1.0.tgz",
+ "integrity": "sha512-AfxKB0OYc/wU66E2n2HXcZmKHrd5O/6mEdtSrZAt3tsMqcpcpYAolQdj602L0SgrP38ncm/6iOpxr9SIGgxOpQ==",
+ "peerDependencies": {
+ "mousetrap": "^1.6.0"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/mustache": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
+ "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
+ "bin": {
+ "mustache": "bin/mustache"
+ }
+ },
+ "node_modules/nan": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
+ "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw=="
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/node-fetch/node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/node-fetch/node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/node-fetch/node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/node-stdlib-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz",
+ "integrity": "sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==",
+ "dev": true,
+ "dependencies": {
+ "assert": "^2.0.0",
+ "browser-resolve": "^2.0.0",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^5.7.1",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "create-require": "^1.1.1",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^4.22.0",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "isomorphic-timers-promises": "^1.0.1",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "^1.0.1",
+ "pkg-dir": "^5.0.0",
+ "process": "^0.11.10",
+ "punycode": "^1.4.1",
+ "querystring-es3": "^0.2.1",
+ "readable-stream": "^3.6.0",
+ "stream-browserify": "^3.0.0",
+ "stream-http": "^3.2.0",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.1",
+ "url": "^0.11.0",
+ "util": "^0.12.4",
+ "vm-browserify": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-stdlib-browser/node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
+ "dev": true
+ },
+ "node_modules/nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npmlog": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
+ "deprecated": "This package is no longer supported.",
+ "dependencies": {
+ "are-we-there-yet": "^2.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^3.0.0",
+ "set-blocking": "^2.0.0"
+ }
+ },
+ "node_modules/nwsapi": {
+ "version": "2.2.12",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
+ "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w=="
+ },
+ "node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
+ "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/opener": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz",
+ "integrity": "sha512-4Im9TrPJcjAYyGR5gBe3yZnBzw5n3Bfh1ceHHGNOpMurINKc6RdSIPXMyon4BZacJbJc36lLkhipioGbWh5pwg==",
+ "bin": {
+ "opener": "opener.js"
+ }
+ },
+ "node_modules/optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==",
+ "dependencies": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "node_modules/optimist/node_modules/minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw=="
+ },
+ "node_modules/os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
+ "dev": true
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "dev": true
+ },
+ "node_modules/paper": {
+ "version": "0.12.18",
+ "resolved": "https://registry.npmjs.org/paper/-/paper-0.12.18.tgz",
+ "integrity": "sha512-ZSLIEejQTJZuYHhSSqAf4jXOnii0kPhCJGAnYAANtdS72aNwXJ9cP95tZHgq1tnNpvEwgQhggy+4OarviqTCGw==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/parse-asn1": {
+ "version": "5.1.7",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz",
+ "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==",
+ "dev": true,
+ "dependencies": {
+ "asn1.js": "^4.10.1",
+ "browserify-aes": "^1.2.0",
+ "evp_bytestokey": "^1.0.3",
+ "hash-base": "~3.0",
+ "pbkdf2": "^3.1.2",
+ "safe-buffer": "^5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "dependencies": {
+ "entities": "^4.4.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-browserify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+ "dev": true
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+ },
+ "node_modules/pbkdf2": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "dev": true,
+ "dependencies": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ },
+ "node_modules/php2js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/php2js/-/php2js-1.0.0.tgz",
+ "integrity": "sha512-BwInN7glz04gg0A4Z5BC9m+okARoI69lupFlkKcNPXG7cxsG5VTA3xkEFg0xoBDfHf92KSmTyuZwgs8NAgxkvg=="
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
+ "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/popcorn-js": {
+ "version": "1.5.11",
+ "resolved": "git+ssh://git@github.com/menismu/popcorn-js.git#c7af4927ef02042dbf428a048d6d786497c1779e",
+ "license": "MIT",
+ "dependencies": {
+ "dotenv": "^6.2.0",
+ "express": "^4.16.4",
+ "google-closure-compiler": "^20191027.0.0",
+ "http-server": "^0.11.1"
+ }
+ },
+ "node_modules/portfinder": {
+ "version": "1.0.32",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
+ "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
+ "dependencies": {
+ "async": "^2.6.4",
+ "debug": "^3.2.7",
+ "mkdirp": "^0.5.6"
+ },
+ "engines": {
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/portfinder/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/portfinder/node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.41",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+ "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.1",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "node_modules/processing": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/processing/-/processing-0.2.0.tgz",
+ "integrity": "sha512-DUtC8yW9/MngzzAe98d37tKJjlWWnNjW0r7DT4mKsxKzUYx+7GPf5fS6GtJwrfsn5GCJLvrU9S9T2TxSCekZuA==",
+ "dependencies": {
+ "canvas": "*",
+ "jsdom": "*",
+ "xmlhttprequest": "*"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ },
+ "node_modules/public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/public-encrypt/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raphael": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/raphael/-/raphael-2.3.0.tgz",
+ "integrity": "sha512-w2yIenZAQnp257XUWGni4bLMVxpUpcIl7qgxEgDIXtmSypYtlNxfXWpOBxs7LBTps5sDwhRnrToJrMUrivqNTQ==",
+ "dependencies": {
+ "eve-raphael": "0.5.0"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="
+ },
+ "node_modules/replace-ext": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/request/node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/request/node_modules/tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dependencies": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
+ "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.20.0",
+ "@rollup/rollup-android-arm64": "4.20.0",
+ "@rollup/rollup-darwin-arm64": "4.20.0",
+ "@rollup/rollup-darwin-x64": "4.20.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.20.0",
+ "@rollup/rollup-linux-arm64-musl": "4.20.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.20.0",
+ "@rollup/rollup-linux-x64-gnu": "4.20.0",
+ "@rollup/rollup-linux-x64-musl": "4.20.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.20.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.20.0",
+ "@rollup/rollup-win32-x64-msvc": "4.20.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rrweb-cssom": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
+ "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg=="
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "dependencies": {
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=v12.22.7"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/send/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/serve-static": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.18.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "dev": true
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
+ "node_modules/sha1": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz",
+ "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==",
+ "dependencies": {
+ "charenc": ">= 0.0.1",
+ "crypt": ">= 0.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/simple-get": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
+ "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
+ "dependencies": {
+ "decompress-response": "^4.2.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sshpk": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/stream-browserify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
+ "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "~2.0.4",
+ "readable-stream": "^3.5.0"
+ }
+ },
+ "node_modules/stream-http": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz",
+ "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==",
+ "dev": true,
+ "dependencies": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
+ },
+ "node_modules/tar": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/timers-browserify": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
+ "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
+ "dev": true,
+ "dependencies": {
+ "setimmediate": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
+ "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
+ "dependencies": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
+ "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tty-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
+ "dev": true
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/underscore": {
+ "version": "1.13.7",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz",
+ "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g=="
+ },
+ "node_modules/union": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
+ "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
+ "dependencies": {
+ "qs": "^6.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/url": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz",
+ "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^1.4.1",
+ "qs": "^6.12.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/url-join": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz",
+ "integrity": "sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow=="
+ },
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "node_modules/url/node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
+ "dev": true
+ },
+ "node_modules/url/node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/vinyl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+ "dependencies": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-sourcemaps-apply": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==",
+ "dependencies": {
+ "source-map": "^0.5.1"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
+ "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.41",
+ "rollup": "^4.13.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-banner": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/vite-plugin-banner/-/vite-plugin-banner-0.7.1.tgz",
+ "integrity": "sha512-Bww2Xd5tOGsZ1yZ9rQiGneryvsL1u86znPrqeQjCsXPsG72pnSdV5lcQA+cy8UNDguMqyTJiCevlNUbLnT85UA==",
+ "dev": true
+ },
+ "node_modules/vite-plugin-node-polyfills": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.22.0.tgz",
+ "integrity": "sha512-F+G3LjiGbG8QpbH9bZ//GSBr9i1InSTkaulfUHFa9jkLqVGORFBoqc2A/Yu5Mmh1kNAbiAeKeK+6aaQUf3x0JA==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/plugin-inject": "^5.0.5",
+ "node-stdlib-browser": "^1.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/davidmyersdev"
+ },
+ "peerDependencies": {
+ "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0"
+ }
+ },
+ "node_modules/vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+ "dev": true
+ },
+ "node_modules/w3c-xmlserializer": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "dependencies": {
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
+ "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
+ "dependencies": {
+ "tr46": "^5.0.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/ws": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
+ },
+ "node_modules/xmlhttprequest": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+ "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/package.json Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,44 @@
+{
+ "name": "metadataplayer",
+ "private": true,
+ "version": "0.0.1",
+ "type": "module",
+ "files": [
+ "dist"
+ ],
+ "main": "./dist/LdtPlayer-core.js",
+ "module": "./dist/LdtPlayer-core.lib.js",
+ "exports": {
+ ".": {
+ "import": "./dist/LdtPlayer-core.lib.js",
+ "require": "./dist/LdtPlayer-core.js"
+ },
+ "./dist/LdtPlayer-core.css": "./dist/style.css"
+ },
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "devDependencies": {
+ "@rollup/plugin-inject": "^5.0.5",
+ "vite": "^5.4.1",
+ "vite-plugin-banner": "^0.7.1",
+ "vite-plugin-node-polyfills": "^0.22.0"
+ },
+ "dependencies": {
+ "backbone": "^1.6.0",
+ "backbone-relational": "^0.10.0",
+ "jquery": "^3.7.1",
+ "jquery-ui": "^1.14.0",
+ "jwplayer": "^1.0.3",
+ "lodash": "^4.17.21",
+ "mousetrap": "^1.6.5",
+ "mousetrap-global-bind": "^1.1.0",
+ "mustache": "^4.2.0",
+ "paper": "^0.12.18",
+ "popcorn-js": "github:menismu/popcorn-js",
+ "processing": "^0.2.0",
+ "raphael": "^2.3.0"
+ }
+}
--- a/sbin/build/build-downloads.sh Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-#!/bin/sh
-./compil.sh
-cd ../doc
-./convertdocs.sh
-cd ../../
-
-rm downloads/*.zip
-
-zip -r downloads/metadataplayer-$(date +%Y%m%d).zip test/ src doc/*.html -x *.mp4 *.webm *.ogv
-
--- a/sbin/build/client.xml Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project basedir="." default="makeall">
-
- <taskdef name="jscomp" classname="com.google.javascript.jscomp.ant.CompileTask">
- <classpath>
- <pathelement location="../res/compiler.jar" />
- </classpath>
- </taskdef>
- <taskdef resource="net/sf/antcontrib/antlib.xml">
- <classpath>
- <pathelement location="../res/ant-contrib.jar"/>
- </classpath>
- </taskdef>
- <delete dir="${basedir}/../../build" />
- <mkdir dir="${basedir}/../../build" />
-
- <target name="makeall" depends="concatenate-player,copytotest" />
-
- <target name="concatenate-core">
- <concat encoding="UTF-8" outputencoding="UTF-8" destfile="../../build/metadataplayer-core.js">
- <filelist dir="../../src/js/" files="header.js version.js" />
- <!-- core files -->
- <filelist dir="../../src/js" files="init.js utils.js model.js html-player.js" />
- <filterchain>
- <deletecharacters chars="" />
- </filterchain>
- </concat>
- </target>
-
- <target name="concatenate-player" description="Build the developer release file" depends="concatenate-core">
- <concat encoding="UTF-8" outputencoding="UTF-8" destfile="../../build/LdtPlayer-core.js">
- <filelist dir="../../src/js/libs" files="LAB.min.js" />
- <!-- core files -->
- <filelist dir="../../build" files="metadataplayer-core.js" />
- <!-- serializers -->
- <fileset dir="../../src/js/serializers" casesensitive="yes">
- <include name="**/*.js"/>
- </fileset>
- <fileset dir="../../src/js/widgets-container" casesensitive="yes">
- <include name="**/*.js"/>
- </fileset>
- <filterchain>
- <deletecharacters chars="" />
- </filterchain>
- </concat>
- </target>
-
- <target name="copytotest" description="Copy files to test directory">
- <delete dir="../../test/metadataplayer" />
- <delete dir="../../test/libs" />
- <copy todir="../../test/libs">
- <fileset dir="../../src/js/libs"/>
- </copy>
- <copy todir="../../test/metadataplayer">
- <fileset dir="../../src/widgets"/>
- </copy>
- <copy file="../../build/LdtPlayer-core.js" todir="../../test/metadataplayer/" />
- <copy file="../../src/css/LdtPlayer-core.css" todir="../../test/metadataplayer/" />
- <copy todir="../../test/metadataplayer/img">
- <fileset dir="../../src/css/img"/>
- </copy>
- </target>
-
- <target name="minify" depends="concatenate-player">
- <jscomp compilationLevel="simple" warning="quiet" debug="false"
- output="../../build/LdtPlayer.min.raw.js">
- <externs dir="${basedir}/../../src/js/">
- <file name="libs/jquery.min.js" />
- <file name="libs/jquery-ui.min.js" />
- <file name="libs/swfobject.js" />
- </externs>
- <sources dir="${basedir}/../../build">
- <file name="LdtPlayer-core.js" />
- </sources>
- </jscomp>
- <concat destfile="../../build/LdtPlayer.min.js"
- append="false">
- <filelist dir="../../src/js/" files="header.js version.js" />
- <filelist dir="../../build/" files="LdtPlayer.min.raw.js" />
- </concat>
- <delete file="../../build/LdtPlayer.min.raw.js" />
- </target>
- <property name="rhino.jar" value="${basedir}/../res/rhino.jar"/>
- <property name="jslint-wrapper.js" value="${basedir}/../res/jslint-wrapper.js"/>
- <property name="jslint.js" value="${basedir}/../res/jslint.js"/>
- <target name="jslint" description="Run jslint on the files">
- <apply executable="java" parallel="false">
- <fileset dir="../../src">
- <include name="js/**/*.js"/>
- <exclude name="js/libs/**"/>
- <include name="widgets/**/*.js"/>
- </fileset>
- <arg line="-jar"/>
- <arg path="${rhino.jar}"/>
- <arg path="${jslint-wrapper.js}"/>
- <arg path="${jslint.js}"/>
- </apply>
- </target>
-</project>
--- a/sbin/build/compil-to-platform.sh.tmpl Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#!/bin/bash
-
-echo "Compiling Metadataplayer"
-
-sh ../res/ant/bin/ant -f client.xml
-
-echo "Copying to Platform :"
-
-echo " Copying core files and widgets"
-
-cp -R ../../test/metadataplayer/* ~/shared/platform/src/ldt/ldt/static/ldt/metadataplayer
-
-echo " Copying JS libs"
-
-cp -R ../../src/js/libs/*.js ~/shared/platform/src/ldt/ldt/static/ldt/js
-
-echo " Copying SWF libs"
-
-cp -R ../../src/js/libs/*.swf ~/shared/platform/src/ldt/ldt/static/ldt/swf
-
-echo "Activating virtual environment"
-
-source ~/venv_pf/activate.sh
-
-cd ~/shared/platform/web
-
-echo "Collecting static files"
-
-python manage.py collectstatic --noinput
-
--- a/sbin/build/compil-to-polemic-tweet.sh.tmpl Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-echo "Compiling Metadataplayer"
-
-sh ../res/ant/bin/ant -f client.xml
-
-echo "Copying to Polemic Tweet :"
-
-echo " Copying core files and widgets"
-
-cp -R ../../test/metadataplayer/* ~/shared/tweet_live/web/res/metadataplayer
-
-echo " Copying libs"
-
-cp -R ../../src/js/libs/* ~/shared/tweet_live/web/res/js
-
--- a/sbin/build/compil.bat Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-..\res\ant\bin\ant.bat -f client.xml
--- a/sbin/build/compil.sh Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-#!/bin/sh
-DIR=$(dirname $0)
-sh ${DIR}/../res/ant/bin/ant -f ${DIR}/client.xml $@
--- a/sbin/build/gendoc.bat Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-compil.bat
-java -jar ../res/jsdoc/jsrun.jar ../res/jsdoc/app/run.js -a -t=../res/jsdoc/templates/jsdoc/ ../../build/LdtPlayer-release.js -d=../../doc/jsdoc/
\ No newline at end of file
--- a/sbin/build/gendoc.sh Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-#!/bin/sh
-./compil.sh
-java -jar ../res/jsdoc/jsrun.jar ../res/jsdoc/app/run.js -a -t=../res/jsdoc/templates/jsdoc/ ../../build/LdtPlayer-release.js -d=../../doc/jsdoc/
\ No newline at end of file
--- a/sbin/build/minify.bat Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-..\res\ant\bin\ant.bat -f client.xml minify
\ No newline at end of file
--- a/sbin/build/minify.sh Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-#!/bin/sh
-sh ../res/ant/bin/ant -f client.xml minify
\ No newline at end of file
--- a/sbin/doc/convertdocs.sh Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#!/bin/bash
-for f in ../../doc/*.md
-do
- python markdown2html.py $f
-done
\ No newline at end of file
--- a/sbin/doc/markdown2dokuwiki.py Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-import re, sys
-
-inputname = sys.argv[1]
-outputname = re.sub("\.\w+$",".dokuwiki",inputname)
-
-print "Converting %s to %s"%(inputname,outputname)
-
-inputfile = open(inputname,'r')
-
-markdowntext = inputfile.read()
-
-# Replacing title levels: #italic# -> ======italic======
-
-wikitext = re.sub("(?m)(^#+|#+$)", lambda matches: "=" * (7 - len(matches.group(1))), markdowntext)
-
-# Replacing italics: *italic* -> //italic//
-
-wikitext = re.sub("(?m)([^*])\*([^*]+)\*($|[^*])", lambda matches: matches.group(1) + "//" + matches.group(2) + "//" + matches.group(3), wikitext)
-
-# Replacing lists: - -> *
-
-wikitext = re.sub("(?m)^(\s*)(-)\s", lambda matches: " " * ( 2 + len(matches.group(1)) / 2) + "* ", wikitext)
-
-# Replacing lists: 1. -> -
-
-wikitext = re.sub("(?m)^(\s*)(\d+\.)\s", lambda matches: " " * ( 2 + len(matches.group(1)) / 2) + "- ", wikitext)
-
-# Replacing escaped underscores \_ -> _
-
-wikitext = re.sub("(?m)(\\\_)", "_", wikitext)
-
-# Escaping URL templates {{ -> %%{%%{
-
-wikitext = re.sub("(?m)({{)", "%%{%%{", wikitext)
-
-outputfile = open(outputname,'w')
-
-outputfile.write(wikitext)
-
-outputfile.close()
-
-inputfile.close()
\ No newline at end of file
--- a/sbin/doc/markdown2html.py Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-import re, sys, markdown, codecs
-
-inputname = sys.argv[1]
-outputname = re.sub("\.\w+$",".html",inputname)
-shortname = re.sub("(^.+\/|\.\w+$)","",inputname)
-
-print "Converting %s"%shortname
-
-f = codecs.open(inputname, mode="r", encoding="utf8")
-mdtext = f.read()
-f.close()
-html = markdown.markdown(mdtext)
-
-f = codecs.open(outputname, "w", encoding="utf8")
-
-header = """<!doctype html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<title>Metadataplayer docs: %s</title>
-</head>
-<body>
-"""%shortname
-footer = """
-</body>
-</html>"""
-
-f.write(header)
-f.write(html)
-f.write(footer)
-
-f.close()
\ No newline at end of file
Binary file sbin/res/Markdown-2.2.0.tar.gz has changed
Binary file sbin/res/ant-contrib.jar has changed
--- a/sbin/res/ant/bin/ant Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,335 +0,0 @@
-#! /bin/sh
-
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Extract launch and ant arguments, (see details below).
-ant_exec_args=
-no_config=false
-use_jikes_default=false
-ant_exec_debug=false
-show_help=false
-for arg in "$@" ; do
- if [ "$arg" = "--noconfig" ] ; then
- no_config=true
- elif [ "$arg" = "--usejikes" ] ; then
- use_jikes_default=true
- elif [ "$arg" = "--execdebug" ] ; then
- ant_exec_debug=true
- elif [ my"$arg" = my"--h" -o my"$arg" = my"--help" ] ; then
- show_help=true
- ant_exec_args="$ant_exec_args -h"
- else
- if [ my"$arg" = my"-h" -o my"$arg" = my"-help" ] ; then
- show_help=true
- fi
- ant_exec_args="$ant_exec_args \"$arg\""
- fi
-done
-
-# Source/default ant configuration
-if $no_config ; then
- rpm_mode=false
- usejikes=$use_jikes_default
-else
- # load system-wide ant configuration (ONLY if ANT_HOME has NOT been set)
- if [ -z "$ANT_HOME" -o "$ANT_HOME" = "/usr/share/ant" ]; then
- if [ -f "/etc/ant.conf" ] ; then
- . /etc/ant.conf
- fi
- fi
-
- # load user ant configuration
- if [ -f "$HOME/.ant/ant.conf" ] ; then
- . $HOME/.ant/ant.conf
- fi
- if [ -f "$HOME/.antrc" ] ; then
- . "$HOME/.antrc"
- fi
-
- # provide default configuration values
- if [ -z "$rpm_mode" ] ; then
- rpm_mode=false
- fi
- if [ -z "$usejikes" ] ; then
- usejikes=$use_jikes_default
- fi
-fi
-
-# Setup Java environment in rpm mode
-if $rpm_mode ; then
- if [ -f /usr/share/java-utils/java-functions ] ; then
- . /usr/share/java-utils/java-functions
- set_jvm
- set_javacmd
- fi
-fi
-
-# OS specific support. $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false;
-case "`uname`" in
- CYGWIN*) cygwin=true ;;
- Darwin*) darwin=true
- if [ -z "$JAVA_HOME" ] ; then
- JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
- fi
- ;;
- MINGW*) mingw=true ;;
-esac
-
-if [ -z "$ANT_HOME" -o ! -d "$ANT_HOME" ] ; then
- ## resolve links - $0 may be a link to ant's home
- PRG="$0"
- progname=`basename "$0"`
-
- # need this for relative symlinks
- while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
- done
-
- ANT_HOME=`dirname "$PRG"`/..
-
- # make it fully qualified
- ANT_HOME=`cd "$ANT_HOME" > /dev/null && pwd`
-fi
-
-# For Cygwin and Mingw, ensure paths are in UNIX format before
-# anything is touched
-if $cygwin ; then
- [ -n "$ANT_HOME" ] &&
- ANT_HOME=`cygpath --unix "$ANT_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-if $mingw ; then
- [ -n "$ANT_HOME" ] &&
- ANT_HOME="`(cd "$ANT_HOME"; pwd)`"
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
-fi
-
-# set ANT_LIB location
-ANT_LIB="${ANT_HOME}/lib"
-
-if [ -z "$JAVACMD" ] ; then
- if [ -n "$JAVA_HOME" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- JAVACMD="$JAVA_HOME/jre/sh/java"
- elif [ -x "$JAVA_HOME/jre/bin/java" ] ; then
- JAVACMD="$JAVA_HOME/jre/bin/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- else
- JAVACMD=`which java 2> /dev/null `
- if [ -z "$JAVACMD" ] ; then
- JAVACMD=java
- fi
- fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
- echo "Error: JAVA_HOME is not defined correctly."
- echo " We cannot execute $JAVACMD"
- exit 1
-fi
-
-# Build local classpath using just the launcher in non-rpm mode or
-# use the Jpackage helper in rpm mode with basic and default jars
-# specified in the ant.conf configuration. Because the launcher is
-# used, libraries linked in ANT_HOME/lib will also be included, but this
-# is discouraged as it is not java-version safe. A user should
-# request optional jars and their dependencies via the OPT_JAR_LIST
-# variable
-if $rpm_mode && [ -x /usr/bin/build-classpath ] ; then
- LOCALCLASSPATH="$(/usr/bin/build-classpath ant ant-launcher jaxp_parser_impl xml-commons-apis)"
-
- # If no optional jars have been specified then build the default list
- if [ -z "$OPT_JAR_LIST" ] ; then
- for file in /etc/ant.d/*; do
- if [ -f "$file" ]; then
- case "$file" in
- *~) ;;
- *#*) ;;
- *.rpmsave) ;;
- *.rpmnew) ;;
- *)
- for dep in `cat "$file"`; do
- case "$OPT_JAR_LIST" in
- *"$dep"*) ;;
- *) OPT_JAR_LIST="$OPT_JAR_LIST${OPT_JAR_LIST:+ }$dep"
- esac
- done
- esac
- fi
- done
- fi
-
- # If the user requested to try to add some other jars to the classpath
- if [ -n "$OPT_JAR_LIST" ] ; then
- _OPTCLASSPATH="$(/usr/bin/build-classpath $OPT_JAR_LIST 2> /dev/null)"
- if [ -n "$_OPTCLASSPATH" ] ; then
- LOCALCLASSPATH="$LOCALCLASSPATH:$_OPTCLASSPATH"
- fi
- fi
-
- # Explicitly add javac path to classpath, assume JAVA_HOME set
- # properly in rpm mode
- if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
- LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar"
- fi
- if [ -f "$JAVA_HOME/lib/classes.zip" ] ; then
- LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/classes.zip"
- fi
-
- # if CLASSPATH_OVERRIDE env var is set, LOCALCLASSPATH will be
- # user CLASSPATH first and ant-found jars after.
- # In that case, the user CLASSPATH will override ant-found jars
- #
- # if CLASSPATH_OVERRIDE is not set, we'll have the normal behaviour
- # with ant-found jars first and user CLASSPATH after
- if [ -n "$CLASSPATH" ] ; then
- # merge local and specified classpath
- if [ -z "$LOCALCLASSPATH" ] ; then
- LOCALCLASSPATH="$CLASSPATH"
- elif [ -n "$CLASSPATH_OVERRIDE" ] ; then
- LOCALCLASSPATH="$CLASSPATH:$LOCALCLASSPATH"
- else
- LOCALCLASSPATH="$LOCALCLASSPATH:$CLASSPATH"
- fi
-
- # remove class path from launcher -cp option
- CLASSPATH=""
- fi
-else
- # not using rpm_mode; use launcher to determine classpaths
- if [ -z "$LOCALCLASSPATH" ] ; then
- LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar
- else
- LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar:$LOCALCLASSPATH
- fi
-fi
-
-if [ -n "$JAVA_HOME" ] ; then
- # OSX hack to make Ant work with jikes
- if $darwin ; then
- OSXHACK="${JAVA_HOME}/../Classes"
- if [ -d "${OSXHACK}" ] ; then
- for i in "${OSXHACK}"/*.jar
- do
- JIKESPATH="$JIKESPATH:$i"
- done
- fi
- fi
-fi
-
-# Allow Jikes support (off by default)
-if $usejikes; then
- ANT_OPTS="$ANT_OPTS -Dbuild.compiler=jikes"
-fi
-
-# For Cygwin, switch paths to appropriate format before running java
-# For PATHs convert to unix format first, then to windows format to ensure
-# both formats are supported. Probably this will fail on directories with ;
-# in the name in the path. Let's assume that paths containing ; are more
-# rare than windows style paths on cygwin.
-if $cygwin; then
- if [ "$OS" = "Windows_NT" ] && cygpath -m .>/dev/null 2>/dev/null ; then
- format=mixed
- else
- format=windows
- fi
- [ -n "$ANT_HOME" ] && ANT_HOME=`cygpath --$format "$ANT_HOME"`
- ANT_LIB=`cygpath --$format "$ANT_LIB"`
- [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --$format "$JAVA_HOME"`
- LCP_TEMP=`cygpath --path --unix "$LOCALCLASSPATH"`
- LOCALCLASSPATH=`cygpath --path --$format "$LCP_TEMP"`
- if [ -n "$CLASSPATH" ] ; then
- CP_TEMP=`cygpath --path --unix "$CLASSPATH"`
- CLASSPATH=`cygpath --path --$format "$CP_TEMP"`
- fi
- CYGHOME=`cygpath --$format "$HOME"`
-fi
-
-# Show script help if requested
-if $show_help ; then
- echo $0 '[script options] [options] [target [target2 [target3] ..]]'
- echo 'Script Options:'
- echo ' --help, --h print this message and ant help'
- echo ' --noconfig suppress sourcing of /etc/ant.conf,'
- echo ' $HOME/.ant/ant.conf, and $HOME/.antrc'
- echo ' configuration files'
- echo ' --usejikes enable use of jikes by default, unless'
- echo ' set explicitly in configuration files'
- echo ' --execdebug print ant exec line generated by this'
- echo ' launch script'
- echo ' '
-fi
-# add a second backslash to variables terminated by a backslash under cygwin
-if $cygwin; then
- case "$ANT_HOME" in
- *\\ )
- ANT_HOME="$ANT_HOME\\"
- ;;
- esac
- case "$CYGHOME" in
- *\\ )
- CYGHOME="$CYGHOME\\"
- ;;
- esac
- case "$JIKESPATH" in
- *\\ )
- JIKESPATH="$JIKESPATH\\"
- ;;
- esac
- case "$LOCALCLASSPATH" in
- *\\ )
- LOCALCLASSPATH="$LOCALCLASSPATH\\"
- ;;
- esac
- case "$CLASSPATH" in
- *\\ )
- CLASSPATH="$CLASSPATH\\"
- ;;
- esac
-fi
-# Execute ant using eval/exec to preserve spaces in paths,
-# java options, and ant args
-ant_sys_opts=
-if [ -n "$CYGHOME" ]; then
- if [ -n "$JIKESPATH" ]; then
- ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\" -Dcygwin.user.home=\"$CYGHOME\""
- else
- ant_sys_opts="-Dcygwin.user.home=\"$CYGHOME\""
- fi
-else
- if [ -n "$JIKESPATH" ]; then
- ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\""
- fi
-fi
-ant_exec_command="exec \"$JAVACMD\" $ANT_OPTS -classpath \"$LOCALCLASSPATH\" -Dant.home=\"$ANT_HOME\" -Dant.library.dir=\"$ANT_LIB\" $ant_sys_opts org.apache.tools.ant.launch.Launcher $ANT_ARGS -cp \"$CLASSPATH\""
-if $ant_exec_debug ; then
- echo $ant_exec_command $ant_exec_args
-fi
-eval $ant_exec_command "$ant_exec_args"
--- a/sbin/res/ant/bin/ant.bat Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,218 +0,0 @@
-@echo off
-
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements. See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License. You may obtain a copy of the License at
-REM
-REM http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-
-REM This is an inordinately troublesome piece of code, particularly because it
-REM tries to work on both Win9x and WinNT-based systems. If we could abandon '9x
-REM support, things would be much easier, but sadly, it is not yet time.
-REM Be cautious about editing this, and only add WinNT specific stuff in code that
-REM only runs on WinNT.
-
-if "%HOME%"=="" goto homeDrivePathPre
-if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
-
-:homeDrivePathPre
-if "%HOMEDRIVE%%HOMEPATH%"=="" goto userProfilePre
-if "%HOMEDRIVE%%HOMEPATH%"=="%HOME%" goto userProfilePre
-if exist "%HOMEDRIVE%%HOMEPATH%\antrc_pre.bat" call "%HOMEDRIVE%%HOMEPATH%\antrc_pre.bat"
-
-:userProfilePre
-if "%USERPROFILE%"=="" goto alpha
-if "%USERPROFILE%"=="%HOME%" goto alpha
-if "%USERPROFILE%"=="%HOMEDRIVE%%HOMEPATH%" goto alpha
-if exist "%USERPROFILE%\antrc_pre.bat" call "%USERPROFILE%\antrc_pre.bat"
-
-:alpha
-
-if "%OS%"=="Windows_NT" @setlocal
-if "%OS%"=="WINNT" @setlocal
-
-if "%ANT_HOME%"=="" goto setDefaultAntHome
-
-:stripAntHome
-if not _%ANT_HOME:~-1%==_\ goto checkClasspath
-set ANT_HOME=%ANT_HOME:~0,-1%
-goto stripAntHome
-
-:setDefaultAntHome
-rem %~dp0 is expanded pathname of the current script under NT
-set ANT_HOME=%~dp0..
-
-:checkClasspath
-set _USE_CLASSPATH=yes
-rem CLASSPATH must not be used if it is equal to ""
-if "%CLASSPATH%"=="""" set _USE_CLASSPATH=no
-if "%CLASSPATH%"=="" set _USE_CLASSPATH=no
-
-rem Slurp the command line arguments. This loop allows for an unlimited number
-rem of arguments (up to the command line limit, anyway).
-set ANT_CMD_LINE_ARGS=
-:setupArgs
-if ""%1""=="""" goto doneStart
-if ""%1""==""-noclasspath"" goto clearclasspath
-set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
-shift
-goto setupArgs
-
-rem here is there is a -noclasspath in the options
-:clearclasspath
-set _USE_CLASSPATH=no
-shift
-goto setupArgs
-
-rem This label provides a place for the argument list loop to break out
-rem and for NT handling to skip to.
-
-:doneStart
-
-if "%_USE_CLASSPATH%"=="no" goto findAntHome
-
-:stripClasspath
-if not _%CLASSPATH:~-1%==_\ goto findAntHome
-set CLASSPATH=%CLASSPATH:~0,-1%
-goto stripClasspath
-
-:findAntHome
-rem find ANT_HOME if it does not exist due to either an invalid value passed
-rem by the user or the %0 problem on Windows 9x
-if exist "%ANT_HOME%\lib\ant.jar" goto checkJava
-
-rem check for ant in Program Files
-if not exist "%ProgramFiles%\ant" goto checkSystemDrive
-set ANT_HOME=%ProgramFiles%\ant
-goto checkJava
-
-:checkSystemDrive
-rem check for ant in root directory of system drive
-if not exist %SystemDrive%\ant\lib\ant.jar goto checkCDrive
-set ANT_HOME=%SystemDrive%\ant
-goto checkJava
-
-:checkCDrive
-rem check for ant in C:\ant for Win9X users
-if not exist C:\ant\lib\ant.jar goto noAntHome
-set ANT_HOME=C:\ant
-goto checkJava
-
-:noAntHome
-echo ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
-goto end
-
-:checkJava
-set _JAVACMD=%JAVACMD%
-
-if "%JAVA_HOME%" == "" goto noJavaHome
-if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
-if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe
-goto checkJikes
-
-:noJavaHome
-if "%_JAVACMD%" == "" set _JAVACMD=java.exe
-
-:checkJikes
-if not "%JIKESPATH%"=="" goto runAntWithJikes
-
-:runAnt
-if "%_USE_CLASSPATH%"=="no" goto runAntNoClasspath
-:runAntWithClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
-rem Check the error code of the Ant build
-if not "%OS%"=="Windows_NT" goto onError
-set ANT_ERROR=%ERRORLEVEL%
-goto end
-
-:runAntNoClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-rem Check the error code of the Ant build
-if not "%OS%"=="Windows_NT" goto onError
-set ANT_ERROR=%ERRORLEVEL%
-goto end
-
-:runAntWithJikes
-
-if not _%JIKESPATH:~-1%==_\ goto checkJikesAndClasspath
-set JIKESPATH=%JIKESPATH:~0,-1%
-goto runAntWithJikes
-
-:checkJikesAndClasspath
-
-if "%_USE_CLASSPATH%"=="no" goto runAntWithJikesNoClasspath
-
-:runAntWithJikesAndClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
-rem Check the error code of the Ant build
-if not "%OS%"=="Windows_NT" goto onError
-set ANT_ERROR=%ERRORLEVEL%
-goto end
-
-:runAntWithJikesNoClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-rem Check the error code of the Ant build
-if not "%OS%"=="Windows_NT" goto onError
-set ANT_ERROR=%ERRORLEVEL%
-goto end
-
-:onError
-rem Windows 9x way of checking the error code. It matches via brute force.
-for %%i in (1 10 100) do set err%%i=
-for %%i in (0 1 2) do if errorlevel %%i00 set err100=%%i
-if %err100%==2 goto onError200
-if %err100%==0 set err100=
-for %%i in (0 1 2 3 4 5 6 7 8 9) do if errorlevel %err100%%%i0 set err10=%%i
-if "%err100%"=="" if %err10%==0 set err10=
-:onError1
-for %%i in (0 1 2 3 4 5 6 7 8 9) do if errorlevel %err100%%err10%%%i set err1=%%i
-goto onErrorEnd
-:onError200
-for %%i in (0 1 2 3 4 5) do if errorlevel 2%%i0 set err10=%%i
-if err10==5 for %%i in (0 1 2 3 4 5) do if errorlevel 25%%i set err1=%%i
-if not err10==5 goto onError1
-:onErrorEnd
-set ANT_ERROR=%err100%%err10%%err1%
-for %%i in (1 10 100) do set err%%i=
-
-:end
-rem bug ID 32069: resetting an undefined env variable changes the errorlevel.
-if not "%_JAVACMD%"=="" set _JAVACMD=
-if not "%_ANT_CMD_LINE_ARGS%"=="" set ANT_CMD_LINE_ARGS=
-
-if "%ANT_ERROR%"=="0" goto mainEnd
-
-goto omega
-
-:mainEnd
-
-rem If there were no errors, we run the post script.
-if "%OS%"=="Windows_NT" @endlocal
-if "%OS%"=="WINNT" @endlocal
-
-if "%HOME%"=="" goto homeDrivePathPost
-if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
-
-:homeDrivePathPost
-if "%HOMEDRIVE%%HOMEPATH%"=="" goto userProfilePost
-if "%HOMEDRIVE%%HOMEPATH%"=="%HOME%" goto userProfilePost
-if exist "%HOMEDRIVE%%HOMEPATH%\antrc_post.bat" call "%HOMEDRIVE%%HOMEPATH%\antrc_post.bat"
-
-:userProfilePost
-if "%USERPROFILE%"=="" goto omega
-if "%USERPROFILE%"=="%HOME%" goto omega
-if "%USERPROFILE%"=="%HOMEDRIVE%%HOMEPATH%" goto omega
-if exist "%USERPROFILE%\antrc_post.bat" call "%USERPROFILE%\antrc_post.bat"
-
-:omega
-
-exit /b %ANT_ERROR%
--- a/sbin/res/ant/bin/ant.cmd Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- Run ant
-*/
-
-'@echo off'
-parse arg mode envarg '::' antarg
-
-if mode\='.' & mode\='..' & mode\='/' then do
- envarg = mode envarg
- mode = ''
-end
-
-if antarg = '' then do
- antarg = envarg
- envarg = ''
-end
-
-x = setlocal()
-
-env="OS2ENVIRONMENT"
-antenv = _getenv_('antenv')
-if _testenv_() = 0 then interpret 'call "' || antenv || '"' '"' || envarg || '"'
-
-if mode = '' then mode = _getenv_('ANT_MODE' '..')
-if mode \= '/' then do
- runrc = _getenv_('runrc')
- antrc = _getenv_('antrc' 'antrc.cmd')
- if mode = '..' then mode = '-r'
- else mode = ''
- interpret 'call "' || runrc || '"' antrc '"' || mode || '"'
-end
-
-if _testenv_() = 0 then do
- say 'Ant environment is not set properly'
- x = endlocal()
- exit 16
-end
-
-settings = '-Dant.home=' || ANT_HOME '-Djava.home=' || JAVA_HOME
-
-java = _getenv_('javacmd' 'java')
-opts = value('ANT_OPTS',,env)
-args = value('ANT_ARGS',,env)
-lcp = value('LOCALCLASSPATH',,env)
-cp = value('CLASSPATH',,env)
-if value('ANT_USE_CP',,env) \= '' then do
- if lcp \= '' & right(lcp, 1) \= ';' then lcp = lcp || ';'
- lcp = lcp || cp
- 'SET CLASSPATH='
-end
-if lcp\='' then lcp = '-classpath' lcp
-
-cmd = java opts lcp '-jar' ANT_HOME ||'\lib\ant-launcher.jar' settings args antarg
-launcher = stream(ANT_HOME ||'\lib\ant-launcher.jar', 'C', 'query exists')
-if launcher = '' then entry = 'org.apache.tools.ant.Main'
-else entry = 'org.apache.tools.ant.launch.Launcher'
-java opts lcp entry settings args antarg
-
-x = endlocal()
-
-return rc
-
-_testenv_: procedure expose env ANT_HOME JAVA_HOME
-ANT_HOME = value('ANT_HOME',,env)
-if ANT_HOME = '' then return 0
-JAVA_HOME = value('JAVA_HOME',,env)
-if JAVA_HOME = '' then return 0
-cp = translate(value('CLASSPATH',,env))
-if pos(translate(ANT_HOME), cp) = 0 then return 0
-if pos(translate(JAVA_HOME), cp) = 0 then return 0
-return 1
-
-_getenv_: procedure expose env
-parse arg envar default
-if default = '' then default = envar
-var = value(translate(envar),,env)
-if var = '' then var = default
-return var
--- a/sbin/res/ant/bin/antRun Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-#! /bin/sh
-
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Args: DIR command
-cd "$1"
-CMD="$2"
-shift
-shift
-
-exec "$CMD" "$@"
--- a/sbin/res/ant/bin/antRun.bat Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-@echo off
-
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements. See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License. You may obtain a copy of the License at
-REM
-REM http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-
-if "%OS%"=="Windows_NT" @setlocal
-if "%OS%"=="WINNT" @setlocal
-
-if ""%1""=="""" goto runCommand
-
-rem Change drive and directory to %1
-if "%OS%"=="Windows_NT" goto nt_cd
-if "%OS%"=="WINNT" goto nt_cd
-cd ""%1""
-goto end_cd
-:nt_cd
-cd /d ""%1""
-:end_cd
-shift
-
-rem Slurp the command line arguments. This loop allows for an unlimited number
-rem of arguments (up to the command line limit, anyway).
-set ANT_RUN_CMD=%1
-if ""%1""=="""" goto runCommand
-shift
-:loop
-if ""%1""=="""" goto runCommand
-set ANT_RUN_CMD=%ANT_RUN_CMD% %1
-shift
-goto loop
-
-:runCommand
-rem echo %ANT_RUN_CMD%
-%ANT_RUN_CMD%
-
-if "%OS%"=="Windows_NT" @endlocal
-if "%OS%"=="WINNT" @endlocal
-
--- a/sbin/res/ant/bin/antRun.pl Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-#!/usr/bin/perl
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#######################################################################
-#
-# antRun.pl
-#
-# wrapper script for invoking commands on a platform with Perl installed
-# this is akin to antRun.bat, and antRun the SH script
-#
-# created: 2001-10-18
-# author: Jeff Tulley jtulley@novell.com
-#######################################################################
-#be fussy about variables
-use strict;
-
-#turn warnings on during dev; generates a few spurious uninitialised var access warnings
-#use warnings;
-
-#and set $debug to 1 to turn on trace info (currently unused)
-my $debug=1;
-
-#######################################################################
-# change drive and directory to "%1"
-my $ANT_RUN_CMD = @ARGV[0];
-
-# assign current run command to "%2"
-chdir (@ARGV[0]) || die "Can't cd to $ARGV[0]: $!\n";
-if ($^O eq "NetWare") {
- # There is a bug in Perl 5 on NetWare, where chdir does not
- # do anything. On NetWare, the following path-prefixed form should
- # always work. (afaict)
- $ANT_RUN_CMD .= "/".@ARGV[1];
-}
-else {
- $ANT_RUN_CMD = @ARGV[1];
-}
-
-# dispose of the first two arguments, leaving only the command's args.
-shift;
-shift;
-
-# run the command
-my $returnValue = system $ANT_RUN_CMD, @ARGV;
-if ($returnValue eq 0) {
- exit 0;
-}
-else {
- # only 0 and 1 are widely recognized as exit values
- # so change the exit value to 1
- exit 1;
-}
--- a/sbin/res/ant/bin/antenv.cmd Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-'@echo off'
-call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
-call SysLoadFuncs
-
-/* Prepare the parameters for later use */
-parse arg argv
-mode = ''
-args = ''
-opts = ''
-cp = ''
-lcp = ''
-
-do i = 1 to words(argv)
- param = word(argv, i)
- select
- when param='-lcp' then mode = 'l'
- when param='-cp' | param='-classpath' then mode = 'c'
- when abbrev('-opts', param, 4) then mode = 'o'
- when abbrev('-args', param, 4) then mode = 'a'
- otherwise
- select
- when mode = 'a' then args = space(args param, 1)
- when mode = 'c' then cp = space(cp param, 1)
- when mode = 'l' then lcp = space(lcp param, 1)
- when mode = 'o' then opts = space(opts param, 1)
- otherwise
- say 'Option' param 'ignored'
- end
- end
-end
-
-env="OS2ENVIRONMENT"
-antconf = _getenv_('antconf' 'antconf.cmd')
-runrc = _getenv_('runrc')
-interpret 'call "' || runrc || '"' '"' || antconf || '"' 'ETC'
-ANT_HOME = value('ANT_HOME',,env)
-JAVA_HOME = value('JAVA_HOME',,env)
-classpath = value('CLASSPATH',,env)
-classes = stream(JAVA_HOME || "\lib\classes.zip", "C", "QUERY EXISTS")
-if classes \= '' then classpath = prepend(classpath classes)
-classes = stream(JAVA_HOME || "\lib\tools.jar", "C", "QUERY EXISTS")
-if classes \= '' then classpath = prepend(classpath classes)
-
-classpath = prepend(classpath ANT_HOME || '\lib\ant-launcher.jar')
-'SET CLASSPATH=' || classpath
-
-/* Setting classpathes, options and arguments */
-envset = _getenv_('envset')
-if cp\='' then interpret 'call "' || envset || '"' '"; CLASSPATH"' '"' || cp || '"'
-if lcp\='' then interpret 'call "' || envset || '"' '"; LOCALCLASSPATH"' '"' || lcp || '"'
-if opts\='' then interpret 'call "' || envset || '"' '"-D ANT_OPTS"' '"' || opts || '"'
-if args\='' then interpret 'call "' || envset || '"' '"ANT_ARGS"' '"' || args || '"'
-
-exit 0
-
-addpath: procedure
-parse arg path elem
-if elem = '' then do
- if path\='' & right(path, 1)\=';' then path = path || ';'
- return path
-end
-if substr(path, length(path)) = ';' then glue = ''
-else glue = ';'
-if pos(translate(elem), translate(path)) = 0 then path = path || glue || elem || ';'
-return path
-
-prepend: procedure
-parse arg path elem
-if elem = '' then do
- if path\='' & right(path, 1)\=';' then path = path || ';'
- return path
-end
-if pos(translate(elem), translate(path)) = 0 then path = elem || ';' || path
-return path
-
-_getenv_: procedure expose env
-parse arg envar default
-if default = '' then default = envar
-var = value(translate(envar),,env)
-if var = '' then var = default
-return var
--- a/sbin/res/ant/bin/complete-ant-cmd.pl Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-#!/usr/bin/perl
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# A script to allow Bash or Z-Shell to complete an Ant command-line.
-#
-# To install for Bash 2.0 or better, add the following to ~/.bashrc:
-#
-# $ complete -C complete-ant-cmd ant build.sh
-#
-# To install for Z-Shell 2.5 or better, add the following to ~/.zshrc:
-#
-# function ant_complete () {
-# local args_line args
-# read -l args_line
-# set -A args $args_line
-# set -A reply $(COMP_LINE=$args_line complete-ant-cmd ${args[1]} $1)
-# }
-# compctl -K ant_complete ant build.sh
-#
-# @author Mike Williams <mikew@cortexebusiness.com.au>
-
-my $cmdLine = $ENV{'COMP_LINE'};
-my $antCmd = $ARGV[0];
-my $word = $ARGV[1];
-
-my @completions;
-if ($word =~ /^-/) {
- list( restrict( $word, getArguments() ));
-} elsif ($cmdLine =~ /-(f|buildfile)\s+\S*$/) {
- list( getBuildFiles($word) );
-} else {
- list( restrict( $word, getTargets() ));
-}
-
-exit(0);
-
-sub list {
- for (@_) {
- print "$_\n";
- }
-}
-
-sub restrict {
- my ($word, @completions) = @_;
- grep( /^\Q$word\E/, @completions );
-}
-
-sub getArguments {
- qw(-buildfile -debug -emacs -f -find -help -listener -logfile
- -logger -projecthelp -quiet -verbose -version);
-}
-
-
-sub getBuildFiles {
- my ($word) = @_;
- grep( /\.xml$/, glob( "$word*" ));
-}
-
-sub getTargets {
-
- # Look for build-file
- my $buildFile = 'build.xml';
- if ($cmdLine =~ /-(f|buildfile)\s+(\S+)/) {
- $buildFile = $2;
- }
- return () unless (-f $buildFile);
-
- # Run "ant -projecthelp" to list targets. Keep a cache of results in a
- # cache-file.
- my $cacheFile = $buildFile;
- $cacheFile =~ s|(.*/)?(.*)|${1}.ant-targets-${2}|;
- if ((!-e $cacheFile) || (-z $cacheFile) || (-M $buildFile) < (-M $cacheFile)) {
- open( CACHE, '>'.$cacheFile ) || die "can\'t write $cacheFile: $!\n";
- open( HELP, "$antCmd -projecthelp -f '$buildFile'|" ) || return();
- my %targets;
- while( <HELP> ) {
- if (/^\s+(\S+)/) {
- $targets{$1}++;
- }
- }
- my @targets = sort keys %targets;
- for (@targets) { print CACHE "$_\n"; }
- return @targets;
- }
-
- # Read the target-cache
- open( CACHE, $cacheFile ) || die "can\'t read $cacheFile: $!\n";
- my @targets;
- while (<CACHE>) {
- chop;
- s/\r$//; # for Cygwin
- push( @targets, $_ );
- }
- close( CACHE );
- @targets;
-
-}
-
-
-
--- a/sbin/res/ant/bin/envset.cmd Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-/*
-
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-SET environment variables
-First optional parameter:
- ; parameters are considered parts of a path variable, semicolons are
- appended to each element if not already present
- -D parameters are properties for Java or Makefile etc., -D will be
- prepended and the parameters will be separated by a space
- =D the same as above but equal sign is not required
- , parameters should be comma separated in the environment variable
- - parameters should be separated by the next parameter
- Other values mean that the first parameter is missing and the environment
- variable will be set to the space separated parameters
-
-Second parameter: name of the environment variable
-
-Next parameters: values
-; implies that the equal sign is considered a part of the parameter and is
-not interpreted
-
--D requires parameters in the form name=value. If the equal sign is not found,
-the parameters are changed to name=expanded_name
-
-Other options have optional equal sign. If it is found, only the part after
-the equal sign will be oprionally expanded.
-
-If the parameter is the minus sign, the next parameter will not be expanded.
-If the parameter is a single dot, it will be replaced with the value of the
-environment variable as it existed before envset was invoked.
-
-For other parameters the batch looks for the environment variable with the
-same name (in uppercase). If it is found, it forms the expanded_name. If
-the environment variable with such a name does not exist, the expanded_name
-will hold the parameter name without case conversion.
-*/
-
-parse arg mode envar args
-
-equal = 0
-sep = ' '
-
-/* Parse command line parameters */
-select
- when mode='-' then do
- sep = envar
- parse var args envar args
- end
- when mode=';' then do
- sep = ''
- equal = -1
- end
- when mode='-D' then equal = 1
- when mode='=D' then mode = '-D'
- when mode=',' then sep = ','
-otherwise
- args = envar args
- envar = mode
- mode = ''
-end
-
-env = 'OS2ENVIRONMENT'
-envar = translate(envar)
-orig = value(envar,,env)
-newval = ''
-expand = 1
-
-/* for each parameter... */
-do i = 1 to words(args)
- if expand > 0 & word(args, i) = '-' then expand = 0
- else call addval word(args, i)
-end
-
-/* Optionally enclose path variable by quotes */
-if mode = ';' & pos(' ', newval) > 0 then newval = '"' || newval || '"'
-
-/* Set the new value, 'SET' cannot be used since it does not allow '=' */
-x = value(envar, newval, env)
-exit 0
-
-addval: procedure expose sep equal orig expand newval mode env
-parse arg var
-
-if var = '.' then expvar = orig
-else do
- if equal >= 0 then do
- parse var var name '=' val
- if val = '' then var = name
- else var = val
- end
- if expand = 0 then expvar = var
- else expvar = value(translate(var),,env)
- if expvar = '' then expvar = var
- if equal >= 0 then do
- if val = '' then do
- parse var expvar key '=' val
- if val <> '' then name = key
- else do
- if equal > 0 then val = key
- else name = key
- end
- end
- else val = expvar
- if pos(' ', val) > 0 | pos('=', val) > 0 then val = '"' || val || '"'
- if val = '' then expvar = name
- else expvar = name || '=' || val
- end
- if mode = '-D' then expvar = '-D' || expvar
- if mode = ';' then do
- if right(expvar, 1) <> ';' then expvar = expvar || ';'
- end
-end
-
-if newval = '' then newval = expvar
-else newval = newval || sep || expvar
-expand = 1
-return
--- a/sbin/res/ant/bin/lcp.bat Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-REM
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements. See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License. You may obtain a copy of the License at
-REM
-REM http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-REM
-REM
-
-set _CLASSPATHCOMPONENT=%1
-if ""%1""=="""" goto gotAllArgs
-shift
-
-:argCheck
-if ""%1""=="""" goto gotAllArgs
-set _CLASSPATHCOMPONENT=%_CLASSPATHCOMPONENT% %1
-shift
-goto argCheck
-
-:gotAllArgs
-set LOCALCLASSPATH=%LOCALCLASSPATH%;%_CLASSPATHCOMPONENT%
-
--- a/sbin/res/ant/bin/runant.pl Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,153 +0,0 @@
-#!/usr/bin/perl
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#######################################################################
-#
-# runant.pl
-#
-# wrapper script for invoking ant in a platform with Perl installed
-# this may include cgi-bin invocation, which is considered somewhat daft.
-# (slo: that should be a separate file which can be derived from this
-# and returns the XML formatted output)
-#
-# the code is not totally portable due to classpath and directory splitting
-# issues. oops. (NB, use File::Spec::Functions will help and the code is
-# structured for the catfile() call, but because of perl version funnies
-# the code is not included.
-#
-# created: 2000-8-24
-# author: Steve Loughran steve_l@sourceforge.net
-#######################################################################
-#
-# Assumptions:
-#
-# - the "java" executable/script is on the command path
-# - ANT_HOME has been set
-# - target platform uses ":" as classpath separator or perl indicates it is dos/win32
-# - target platform uses "/" as directory separator.
-
-#be fussy about variables
-use strict;
-
-#platform specifics (disabled)
-#use File::Spec::Functions;
-
-#turn warnings on during dev; generates a few spurious uninitialised var access warnings
-#use warnings;
-
-#and set $debug to 1 to turn on trace info
-my $debug=1;
-
-#######################################################################
-#
-# check to make sure environment is setup
-#
-
-my $HOME = $ENV{ANT_HOME};
-if ($HOME eq "")
- {
- die "\n\nANT_HOME *MUST* be set!\n\n";
- }
-
-my $JAVACMD = $ENV{JAVACMD};
-$JAVACMD = "java" if $JAVACMD eq "";
-
-my $onnetware = 0;
-if ($^O eq "NetWare")
-{
- $onnetware = 1;
-}
-
-my $oncygwin = ($^O eq "cygwin");
-
-#ISSUE: what java wants to split up classpath varies from platform to platform
-#and perl is not too hot at hinting which box it is on.
-#here I assume ":" 'cept on win32, dos, and netware. Add extra tests here as needed.
-my $s=":";
-if(($^O eq "MSWin32") || ($^O eq "dos") || ($^O eq "cygwin") ||
- ($onnetware == 1))
- {
- $s=";";
- }
-
-#build up standard classpath
-my $localpath = "$HOME/lib/ant-launcher.jar";
-#set JVM options and Ant arguments, if any
-my @ANT_OPTS=split(" ", $ENV{ANT_OPTS});
-my @ANT_ARGS=split(" ", $ENV{ANT_ARGS});
-
-#jikes
-if($ENV{JIKESPATH} ne "")
- {
- push @ANT_OPTS, "-Djikes.class.path=$ENV{JIKESPATH}";
- }
-
-#construct arguments to java
-my @ARGS;
-push @ARGS, @ANT_OPTS;
-
-my $CYGHOME = "";
-
-my $classpath=$ENV{CLASSPATH};
-if ($oncygwin == 1) {
- $localpath = `cygpath --path --windows $localpath`;
- chomp ($localpath);
- if (! $classpath eq "")
- {
- $classpath = `cygpath --path --windows "$classpath"`;
- chomp ($classpath);
- }
- $HOME = `cygpath --path --windows $HOME`;
- chomp ($HOME);
- $CYGHOME = `cygpath --path --windows $ENV{HOME}`;
- chomp ($CYGHOME);
-}
-push @ARGS, "-classpath", "$localpath";
-push @ARGS, "-Dant.home=$HOME";
-if ( ! $CYGHOME eq "" )
-{
- push @ARGS, "-Dcygwin.user.home=\"$CYGHOME\""
-}
-push @ARGS, "org.apache.tools.ant.launch.Launcher", @ANT_ARGS;
-push @ARGS, @ARGV;
-if (! $classpath eq "")
-{
- if ($onnetware == 1)
- {
- # make classpath literally $CLASSPATH
- # this is to avoid pushing us over the 512 character limit
- # even skip the ; - that is already in $localpath
- push @ARGS, "-lib", "\$CLASSPATH";
- }
- else
- {
- push @ARGS, "-lib", "$classpath";
- }
-}
-print "\n $JAVACMD @ARGS\n\n" if ($debug);
-
-my $returnValue = system $JAVACMD, @ARGS;
-if ($returnValue eq 0)
- {
- exit 0;
- }
-else
- {
- # only 0 and 1 are widely recognized as exit values
- # so change the exit value to 1
- exit 1;
- }
--- a/sbin/res/ant/bin/runant.py Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-#!/usr/bin/python
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-"""
-
- runant.py
-
- This script is a translation of the runant.pl written by Steve Loughran.
- It runs ant with/out arguments, it should be quite portable (thanks to
- the python os library)
- This script has been tested with Python2.0/Win2K
-
- created: 2001-04-11
- author: Pierre Dittgen pierre.dittgen@criltelecom.com
-
- Assumptions:
-
- - the "java" executable/script is on the command path
-"""
-import os, os.path, string, sys
-
-# Change it to 1 to get extra debug information
-debug = 0
-
-#######################################################################
-
-# If ANT_HOME is not set default to script's parent directory
-if os.environ.has_key('ANT_HOME'):
- ANT_HOME = os.environ['ANT_HOME']
-else:
- ANT_HOME = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
-
-# set ANT_LIB location
-ANT_LIB = os.path.join(ANT_HOME, 'lib')
-
-# set JAVACMD (check variables JAVACMD and JAVA_HOME)
-JAVACMD = None
-if not os.environ.has_key('JAVACMD'):
- if os.environ.has_key('JAVA_HOME'):
- if not os.path.exists(os.environ['JAVA_HOME']):
- print "Warning: JAVA_HOME is not defined correctly."
- else:
- JAVACMD = os.path.join(os.environ['JAVA_HOME'], 'bin', 'java')
- else:
- print "Warning: JAVA_HOME not set."
-else:
- JAVACMD = os.environ['JAVACMD']
-if not JAVACMD:
- JAVACMD = 'java'
-
-launcher_jar = os.path.join(ANT_LIB, 'ant-launcher.jar')
-if not os.path.exists(launcher_jar):
- print 'Warning: Unable to locate ant-launcher.jar. Expected to find it in %s' % \
- ANT_LIB
-
-# Build up standard classpath (LOCALCLASSPATH)
-LOCALCLASSPATH = launcher_jar
-if os.environ.has_key('LOCALCLASSPATH'):
- LOCALCLASSPATH += os.pathsep + os.environ['LOCALCLASSPATH']
-
-ANT_OPTS = ""
-if os.environ.has_key('ANT_OPTS'):
- ANT_OPTS = os.environ['ANT_OPTS']
-
-OPTS = ""
-if os.environ.has_key('JIKESPATH'):
- OPTS = '-Djikes.class.path=\"%s\"' % os.environ['JIKESPATH']
-
-ANT_ARGS = ""
-if os.environ.has_key('ANT_ARGS'):
- ANT_ARGS = os.environ['ANT_ARGS']
-
-CLASSPATH = ""
-if os.environ.has_key('CLASSPATH'):
- CLASSPATH = "-lib " + os.environ['CLASSPATH']
-
-# Builds the commandline
-cmdline = ('%s %s -classpath %s -Dant.home=%s %s ' + \
- 'org.apache.tools.ant.launch.Launcher %s %s %s') \
- % (JAVACMD, ANT_OPTS, LOCALCLASSPATH, ANT_HOME, OPTS, ANT_ARGS, \
- CLASSPATH, string.join(sys.argv[1:], ' '))
-
-if debug:
- print '\n%s\n\n' % (cmdline)
-sys.stdout.flush()
-
-# Run the biniou!
-os.system(cmdline)
--- a/sbin/res/ant/bin/runrc.cmd Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- Run RC file, name is in the first arg, second arg is either PATH
- ENV or -r or nothing
-*/
-
-parse arg name path rest
-
-if name = '' then do
- say 'RC file name is missing'
- exit 1
-end
-
-if rest \= '' then do
- say 'Too many parameters'
- exit 1
-end
-
-call runit name path
-exit 0
-
-runit: procedure
-parse arg name path dir
-
-if path \= '' & path \= '-r' then do
- dir = value(translate(path),,'OS2ENVIRONMENT')
- if dir = '' then return
- dir = translate(dir, '\', '/') /* change UNIX-like path to OS/2 */
-end
-
-if dir = '' then dir = directory()
-
-if path = '-r' then do /* recursive call */
- subdir = filespec('path', dir)
- if subdir \= '\' then do
- subdir = left(subdir, length(subdir)-1)
- call runit name path filespec('drive', dir) || subdir
- end
-end
-
-/* Look for the file and run it */
-if right(dir, 1) \= '\' then dir = dir || '\'
-rcfile = stream(dir || name, 'c', 'query exists')
-if rcfile \= '' then interpret 'call "' || rcfile || '"'
-
-return
--- a/sbin/res/ant/lib/README Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-Please refer to the Ant manual under Installing Ant / Library
-Dependencies for a list of the jar requirements for various optional
-tasks and features.
Binary file sbin/res/ant/lib/ant-antlr.jar has changed
--- a/sbin/res/ant/lib/ant-antlr.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-antlr</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + ANTLR</name>
- <description>antlr specific task.
- The implementation forks a java process, therefore the antlr jar file is only needed at runtime</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <optional>true</optional>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <!-- add a dependency with antlr 2.7.2 consistent with libraries.properties antlr 2.7.6 is also available on ibiblio-->
- <groupId>antlr</groupId>
- <artifactId>antlr</artifactId>
- <version>2.7.2</version>
- <optional>true</optional>
- <scope>runtime</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/ANTLR*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-apache-bcel.jar has changed
--- a/sbin/res/ant/lib/ant-apache-bcel.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-apache-bcel</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + BCEL</name>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>bcel</groupId>
- <artifactId>bcel</artifactId>
- <version>5.1</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/filters/util/JavaClassHelper*</include>
- <include>org/apache/tools/ant/util/depend/bcel/*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-apache-bsf.jar has changed
--- a/sbin/res/ant/lib/ant-apache-bsf.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-apache-bsf</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + BSF</name>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>bsf</groupId>
- <artifactId>bsf</artifactId>
- <version>2.4.0</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/Script*</include>
- <include>org/apache/tools/ant/taskdefs/optional/script/**</include>
- <include>org/apache/tools/ant/types/optional/*Script*</include>
- <include>org/apache/tools/ant/util/Script*</include>
- <include>org/apache/tools/ant/util/optional/Script*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-apache-log4j.jar has changed
--- a/sbin/res/ant/lib/ant-apache-log4j.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-apache-log4j</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + Log4J</name>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.13</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/listener/Log4jListener*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-apache-oro.jar has changed
--- a/sbin/res/ant/lib/ant-apache-oro.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-apache-oro</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + Apache Oro</name>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>oro</groupId>
- <artifactId>oro</artifactId>
- <version>2.0.8</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/util/regexp/JakartaOro*</include>
- <include>org/apache/tools/ant/taskdefs/optional/perforce/*</include>
- </includes>
- <testIncludes>
- <include>org/apache/tools/ant/taskdefs/optional/perforce/*</include>
- </testIncludes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-apache-regexp.jar has changed
--- a/sbin/res/ant/lib/ant-apache-regexp.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-apache-regexp</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + Apache Regexp</name>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>regexp</groupId>
- <artifactId>regexp</artifactId>
- <version>1.3</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/util/regexp/JakartaRegexp*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-
-</project>
Binary file sbin/res/ant/lib/ant-apache-resolver.jar has changed
--- a/sbin/res/ant/lib/ant-apache-resolver.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-apache-resolver</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + Apache Resolver</name>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>xml-resolver</groupId>
- <artifactId>xml-resolver</artifactId>
- <version>1.1</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/types/resolver/**</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-apache-xalan2.jar has changed
--- a/sbin/res/ant/lib/ant-apache-xalan2.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-apache-xalan2</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + Xalan 2</name>
- <description>contains Xalan2-specific features</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>xalan</groupId>
- <artifactId>xalan</artifactId>
- <version>2.7.1</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <executions>
- <execution>
- <id>create-timestamp-file</id>
- <phase>generate-resources</phase>
- <goals>
- <goal>run</goal>
- </goals>
- <configuration>
- <tasks>
- <mkdir dir="${project.build.outputDirectory}"/>
- <copy todir="${project.build.outputDirectory}/org/apache/tools/ant/taskdefs/optional/junit/xsl">
- <fileset dir="${project.build.sourceDirectory}/../etc">
- <include name="junit-frames.xsl"/>
- <include name="junit-noframes.xsl"/>
- </fileset>
- </copy>
- </tasks>
- </configuration>
- </execution>
-
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/Xalan2TraceSupport*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-commons-logging.jar has changed
--- a/sbin/res/ant/lib/ant-commons-logging.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-commons-logging</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + Commons Logging</name>
- <description>Ant Listener based on commons-logging</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging-api</artifactId>
- <version>1.0.4</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/tlistener/CommonsLoggingListener*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-commons-net.jar has changed
--- a/sbin/res/ant/lib/ant-commons-net.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-commons-net</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + Commons Net</name>
- <description>ftp, rexec and telnet tasks</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>commons-net</groupId>
- <artifactId>commons-net</artifactId>
- <version>1.4.0</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/net/FTP*</include>
- <include>org/apache/tools/ant/taskdefs/optional/net/RExec*</include>
- <include>org/apache/tools/ant/taskdefs/optional/net/TelnetTask*</include>
- </includes>
- <testIncludes>
- <include>org/apache/tools/ant/taskdefs/optional/net/FTP*</include>
- </testIncludes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-jai.jar has changed
--- a/sbin/res/ant/lib/ant-jai.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-jai</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + JAI</name>
- <description>image task and corresponding types.
- </description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>javax.media</groupId>
- <artifactId>jai-core</artifactId>
- <version>1.1.3</version>
- </dependency>
- <dependency>
- <groupId>com.sun.media</groupId>
- <artifactId>jai-codec</artifactId>
- <version>1.1.3</version>
- </dependency>
- </dependencies>
- <repositories>
- <repository>
- <id>jboss</id>
- <name>JBoss</name>
- <url>http://repository.jboss.org/maven2/</url>
- </repository>
- </repositories>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/image/*</include>
- <include>org/apache/tools/ant/types/optional/image/*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-javamail.jar has changed
--- a/sbin/res/ant/lib/ant-javamail.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-javamail</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + JavaMail</name>
- <description>implementation of the mail task based on javamail.
- Required to send emails to SMTP servers using user/password combinations
- or to send mail over SSL</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>javax.mail</groupId>
- <artifactId>mail</artifactId>
- <version>1.4</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>javax.activation</groupId>
- <artifactId>activation</artifactId>
- <version>1.1</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/email/MimeMailer*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-jdepend.jar has changed
--- a/sbin/res/ant/lib/ant-jdepend.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-jdepend</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + JDepend</name>
- <description>task jdepend invoking the jdepend parser. There is also a version 2.9.1 of the
- jdepend parser available on the maven repository</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>jdepend</groupId>
- <artifactId>jdepend</artifactId>
- <version>2.7</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/jdepend/*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-jmf.jar has changed
--- a/sbin/res/ant/lib/ant-jmf.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-jmf</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + JMF</name>
- <description>contains the sound task and a soundplayer listener
- download the dependency from http://java.sun.com/products/java-media/jmf/</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/sound/*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
- </project>
Binary file sbin/res/ant/lib/ant-jsch.jar has changed
--- a/sbin/res/ant/lib/ant-jsch.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-jsch</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + JSch</name>
- <description>contains the sshexec and scp tasks
- jsch 0.1.29 might not be available from maven</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>com.jcraft</groupId>
- <artifactId>jsch</artifactId>
- <version>0.1.42</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/ssh/*</include>
- </includes>
- <testIncludes>
- <include>org/apache/tools/ant/taskdefs/optional/ssh/*</include>
- </testIncludes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-junit.jar has changed
--- a/sbin/res/ant/lib/ant-junit.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-junit</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + JUnit</name>
- <description>contains the junit and junirreport tasks</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.2</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <executions>
- <execution>
- <id>create-timestamp-file</id>
- <phase>generate-resources</phase>
- <goals>
- <goal>run</goal>
- </goals>
- <configuration>
- <tasks>
- <mkdir dir="${project.build.outputDirectory}"/>
- <copy todir="${project.build.outputDirectory}/org/apache/tools/ant/taskdefs/optional/junit/xsl">
- <fileset dir="${project.build.sourceDirectory}/../etc">
- <include name="junit-frames.xsl"/>
- <include name="junit-noframes.xsl"/>
- </fileset>
- </copy>
- </tasks>
- </configuration>
- </execution>
-
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/junit/*</include>
- </includes>
- <excludes>
- <exclude>org/apache/tools/ant/taskdefs/optional/junit/JUnit4TestMethodAdapter*</exclude>
- </excludes>
- <testIncludes>
- <include>org/apache/tools/ant/taskdefs/optional/junit/</include>
- </testIncludes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-junit4.jar has changed
--- a/sbin/res/ant/lib/ant-junit4.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-junit4</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + JUnit 4</name>
- <description>contains JUnit 4.x support</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.8.1</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/junit/JUnit4TestMethodAdapter*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-launcher.jar has changed
--- a/sbin/res/ant/lib/ant-launcher.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-launcher</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant Launcher</name>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/launch/*.java</include>
- </includes>
-
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/ant-launcher/classes</outputDirectory>
- <testOutputDirectory>../../../../target/ant-launcher/testcases</testOutputDirectory>
- <directory>../../../../target/ant-launcher</directory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-netrexx.jar has changed
--- a/sbin/res/ant/lib/ant-netrexx.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-netrexx</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + NetRexx</name>
- <description>NetRexxC task
- dependency can be downloaded from http://www.ibm.com/software/awdtools/netrexx/download.html</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <!-- Processed too early, before maven-antrun-plugin gets a chance to work:
- <dependency>
- <groupId>com.ibm.netrexx</groupId>
- <artifactId>netrexx</artifactId>
- <version>2.0.5</version>
- <scope>system</scope>
- <systemPath>${basedir}/../../../../lib/optional/NetRexxC.jar</systemPath>
- </dependency>
- -->
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/NetRexxC*</include>
- </includes>
- <!-- Need to use this rather than system scope as above: -->
- <compilerArguments>
- <extdirs>${basedir}/../../../../lib/optional</extdirs>
- </compilerArguments>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.4</version>
- <executions>
- <execution>
- <phase>validate</phase>
- <configuration>
- <tasks>
- <ant dir="${basedir}/../../../.." antfile="fetch.xml" target="netrexx">
- <property name="dest" value="optional"/>
- </ant>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-</project>
--- a/sbin/res/ant/lib/ant-parent.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <version>1.8.2</version>
- <packaging>pom</packaging>
- <description>master POM</description>
- <licenses>
- <license>
- <name>The Apache Software License, Version 2.0</name>
- <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
- <distribution>repo</distribution>
- </license>
- </licenses>
- <name>Apache Ant</name>
- <url>http://ant.apache.org/</url>
- <inceptionYear>2000</inceptionYear>
- <organization>
- <name>The Apache Software Foundation</name>
- <url>http://www.apache.org/</url>
- </organization>
- <distributionManagement>
- <!-- Null out inherited apache distribution repo by default -->
- <repository>
- <id>dummy</id>
- <name>Dummy to avoid accidental deploys</name>
- <url></url>
- </repository>
- </distributionManagement>
- <scm>
- <connection>scm:svn:http://svn.apache.org/repos/asf/ant/core/trunk</connection>
- <developerConnection>scm:svn:https://svn.apache.org/repos/asf/ant/core/trunk</developerConnection>
- <url>http://svn.apache.org/repos/asf/ant/core/trunk</url>
- </scm>
- <ciManagement>
- <system>hudson</system>
- <url>https://hudson.apache.org/hudson/job/Ant_BuildFromPOMs/</url>
- </ciManagement>
- <mailingLists>
- <mailingList>
- <name>Ant Developers List</name>
- <subscribe>dev-subscribe@ant.apache.org</subscribe>
- <unsubscribe>dev-unsubscribe@ant.apache.org</unsubscribe>
- <post>dev@ant.apache.org</post>
- <archive>http://mail-archives.apache.org/mod_mbox/ant-dev</archive>
- </mailingList>
- <mailingList>
- <name>Ant Users List</name>
- <subscribe>user-subscribe@ant.apache.org</subscribe>
- <unsubscribe>user-unsubscribe@ant.apache.org</unsubscribe>
- <post>user@ant.apache.org</post>
- <archive>http://mail-archives.apache.org/mod_mbox/ant-user</archive>
- </mailingList>
- </mailingLists>
- <issueManagement>
- <system>bugzilla</system>
- <url>http://issues.apache.org/bugzilla/</url>
- </issueManagement>
- <modules>
- <module>ant</module>
- <module>ant-antlr</module>
- <module>ant-apache-bcel</module>
- <module>ant-apache-bsf</module>
- <module>ant-apache-log4j</module>
- <module>ant-apache-oro</module>
- <module>ant-apache-regexp</module>
- <module>ant-apache-resolver</module>
- <module>ant-apache-xalan2</module>
- <module>ant-commons-logging</module>
- <module>ant-commons-net</module>
- <module>ant-jai</module>
- <module>ant-javamail</module>
- <module>ant-jdepend</module>
- <module>ant-jmf</module>
- <module>ant-jsch</module>
- <module>ant-junit</module>
- <module>ant-junit4</module>
- <module>ant-launcher</module>
- <module>ant-netrexx</module>
- <module>ant-swing</module>
- <module>ant-testutil</module>
- </modules>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.2</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <build>
- <sourceDirectory>../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../target/classes</outputDirectory>
- <testOutputDirectory>../../../target/testcases</testOutputDirectory>
- </build>
-</project>
Binary file sbin/res/ant/lib/ant-swing.jar has changed
--- a/sbin/res/ant/lib/ant-swing.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-swing</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant + Swing</name>
- <description>a listener and a splash task based on Swing</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/taskdefs/optional/splash/*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/testcases</testSourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-
-</project>
Binary file sbin/res/ant/lib/ant-testutil.jar has changed
--- a/sbin/res/ant/lib/ant-testutil.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-testutil</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant Test Utilities</name>
- <description>test utility classes</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.2</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <includes>
- <include>org/apache/tools/ant/BuildFileTest*</include>
- <include>org/apache/tools/ant/util/regexp/RegexpMatcherTest*</include>
- <include>org/apache/tools/ant/util/regexp/RegexpTest*</include>
- <include>org/apache/tools/ant/taskdefs/optional/AbstractXSLTLiaisonTest*</include>
- <include>org/apache/tools/ant/types/AbstractFileSetTest*</include>
- </includes>
- </configuration>
- </plugin>
- </plugins>
- <sourceDirectory>../../../../src/tests/junit</sourceDirectory>
- <outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory>
- <directory>../../../../target/${project.artifactId}</directory>
- </build>
-
-</project>
Binary file sbin/res/ant/lib/ant.jar has changed
--- a/sbin/res/ant/lib/ant.pom Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- This POM has been created manually by the Ant Development Team.
- Please contact us if you are not satisfied with the data contained in this POM.
- URL : http://ant.apache.org
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-parent</artifactId>
- <relativePath>../pom.xml</relativePath>
- <version>1.8.2</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.8.2</version>
- <name>Apache Ant Core</name>
- <dependencies>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant-launcher</artifactId>
- <version>1.8.2</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- <build>
- <filters>
- <filter>../../../../target/ant/.build.timestamp.properties</filter>
- </filters>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <configuration> </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <executions>
- <execution>
- <id>create-timestamp-file</id>
- <phase>generate-resources</phase>
- <goals>
- <goal>run</goal>
- </goals>
- <configuration>
- <tasks>
- <tstamp/>
- <mkdir dir="${project.build.directory}"/>
- <touch file="${project.build.directory}/.build.timestamp.properties"/>
- <echo file="${project.build.directory}/.build.timestamp.properties" append="false"
- message="TODAY=${TODAY}"/>
- </tasks>
- </configuration>
- </execution>
- <execution>
- <id>delete-timestamp-file</id>
- <phase>clean</phase>
- <goals>
- <goal>run</goal>
- </goals>
- <configuration>
- <tasks>
- <delete file="${project.build.directory}/.build.timestamp.properties"/>
- </tasks>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- <excludes>
- <exclude>org/apache/tools/ant/filters/util/JavaClassHelper*</exclude>
- <exclude>org/apache/tools/ant/types/resolver/**</exclude>
- <exclude>org/apache/tools/ant/listener/Log4jListener*</exclude>
- <exclude>org/apache/tools/ant/listener/CommonsLoggingListener*</exclude>
- <exclude>org/apache/tools/ant/util/regexp/JakartaRegexp*</exclude>
- <exclude>org/apache/tools/ant/util/regexp/JakartaOro*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/email/MimeMailer*</exclude>
- <exclude>org/apache/tools/ant/launch/**</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/net/FTP*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/net/RExec*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/net/TelnetTask*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/perforce/*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/junit/*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/ssh/*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/image/*</exclude>
- <exclude>org/apache/tools/ant/types/optional/image/*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/Script*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/script/**</exclude>
- <exclude>org/apache/tools/ant/types/optional/*Script*</exclude>
- <exclude>org/apache/tools/ant/util/ScriptRunner.java</exclude>
- <exclude>org/apache/tools/ant/util/optional/ScriptRunner.java</exclude>
- <exclude>org/apache/tools/ant/filters/util/JavaClassHelper*</exclude>
- <exclude>org/apache/tools/ant/util/depend/bcel/*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/NetRexxC*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/Xalan2TraceSupport*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/jdepend/*</exclude>
- </excludes>
- <testExcludes>
- <exclude>org/apache/tools/ant/filters/util/JavaClassHelper*</exclude>
- <exclude>org/apache/tools/ant/types/resolver/**</exclude>
- <exclude>org/apache/tools/ant/util/Script*</exclude>
- <exclude>org/apache/tools/ant/listener/Log4jListener*</exclude>
- <exclude>org/apache/tools/ant/listener/CommonsLoggingListener*</exclude>
- <exclude>org/apache/tools/ant/util/regexp/JakartaRegexp*</exclude>
- <exclude>org/apache/tools/ant/util/regexp/JakartaOro*</exclude>
- <exclude>org/apache/tools/ant/util/regexp/Jdk14Regexp*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/email/MimeMailer*</exclude>
- <exclude>org/apache/tools/ant/launch/**</exclude>
- <exclude>org/apache/tools/ant/taskdefs/StyleTest*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/junit/</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/net/FTP*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/ssh/*</exclude>
- <exclude>org/apache/tools/ant/taskdefs/optional/perforce/*</exclude>
- </testExcludes>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <omitBasedir>true</omitBasedir>
- <systemProperties>
- <property>
- <name>ant.home</name>
- <value>${env.ANT_HOME}</value>
- </property>
- <property>
- <name>build.tests</name>
- <value>../../../../target/ant/testcases</value>
- </property>
- <property>
- <name>build.tests.value</name>
- <value>../../../../target/ant/testcases</value>
- </property>
- <property>
- <name>offline</name>
- <value>true</value>
- </property>
- <property>
- <name>root</name>
- <value>../../../..</value>
- </property>
- </systemProperties>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-report-plugin</artifactId>
- </plugin>
- </plugins>
- <resources>
- <resource>
- <directory>../../../../src/main</directory>
- <filtering>true</filtering>
- <includes>
- <include>org/apache/tools/ant/taskdefs/default.properties</include>
- <include>org/apache/tools/ant/types/default.properties</include>
- <include>org/apache/tools/ant/taskdefs/default.properties</include>
- <include>org/apache/tools/ant/types/conditions/antlib.xml</include>
- <include>org/apache/tools/ant/defaultManifest.mf</include>
- <include>org/apache/tools/ant/version.txt</include>
- </includes>
- </resource>
- <resource>
- <directory>../../../../src/resources</directory>
- <filtering>true</filtering>
- <includes>
- <include>**/antlib.xml</include>
- </includes>
- </resource>
- <resource>
- <directory>../../../../docs</directory>
- <filtering>false</filtering>
- <includes>
- <include>images/ant_logo_large.gif</include>
- </includes>
- </resource>
- </resources>
- <testResources>
- <testResource>
- <directory>../../../../src/etc/testcases</directory>
- <filtering>true</filtering>
- </testResource>
- <testResource>
- <directory>../../../../src/main</directory>
- <filtering>true</filtering>
- <excludes>
- <exclude>**/*.java</exclude>
- </excludes>
- </testResource>
- </testResources>
- <sourceDirectory>../../../../src/main</sourceDirectory>
- <testSourceDirectory>../../../../src/tests/junit</testSourceDirectory>
- <outputDirectory>../../../../target/ant/classes</outputDirectory>
- <testOutputDirectory>../../../../target/ant/testcases</testOutputDirectory>
- <directory>../../../../target/ant</directory>
- </build>
-</project>
--- a/sbin/res/ant/lib/libraries.properties Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#this file declares the libraries for use in
-#a given release of the components
-
-#if you change this, change the checksum to match
-m2.version=2.0.4
-m2.url=http://ibiblio.org/maven2/
-m2.artifact-name=maven-artifact-ant
-m2.jar.name=${m2.artifact-name}-${m2.version}-dep.jar
-#this is the URL of the antlib library, that is pulled down for everything else.
-m2.antlib.url=${m2.url}/org/apache/maven/${m2.artifact-name}/${m2.version}/${m2.jar.name}
-#this is the sha1 checksum of the artifact
-m2.sha1.checksum=4e7ddfdb91600e9b59bb965ff8eef2f06015df50
-
-# Repository to use by default for fetching dependencies.
-m2.repo=http://repo1.maven.org/maven2/
-
-#versions of different libraries. Please keep in alphabetical order, except
-#when a specific dependency forces them to be out-of-order
-antlr.version=2.7.7
-bcel.version=5.1
-bsf.version=2.4.0
-bsh.version=2.0b4
-bsh-core.version=${bsh.version}
-commons-net.version=1.4.1
-commons-logging.version=1.1
-commons-logging-api.version=${commons-logging.version}
-jai-core.version=1.1.3
-jai-codec.version=1.1.3
-jasper-compiler.version=4.1.36
-jasper-runtime.version=${jasper-compiler.version}
-jdepend.version=2.9.1
-jruby.version=0.9.8
-junit.version=4.8.1
-jsch.version=0.1.42
-jython.version=2.1
-#log4j 1.2.15 requires JMS and a few other Sun jars that are not in the m2 repo
-log4j.version=1.2.14
-#js is the javascript implementation of the rhino project
-#17R1 is compiled with Java5 so we can't use the jar when building with JDK 1.4
-js.version=1.6R7
-oro.version=2.0.8
-regexp.version=1.3
-servlet-api.version=2.3
-which.version=1.0
-xalan.version=2.7.1
-xml-resolver.version=1.2
-mail.version=1.4
-#paired
-jacl.version=1.2.6
-tcljava.version=${jacl.version}
Binary file sbin/res/compiler.jar has changed
--- a/sbin/res/jquery-1.3.2.externs.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,715 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @fileoverview Externs for jQuery 1.3.2.
- * The externs defined here are in the order of the jQuery documentation pages.
- * Note that some functions use different return types depending on the number
- * of parameters passed in. In this cases, you may need to annotate the type
- * of the result in your code, so the JSCompiler understands which type you're
- * expecting. For example:
- * <code>var elt = /** @type {Element} * / (foo.get(0));</code>
- * @see http://docs.jquery.com/
-*
- */
-
-/**
- * @param {string|Node|Element|Array.<Element>|Function} arg
- * @param {(jQueryObject|Document)=} opt_arg
- * @return {jQueryObject}
- */
-var $ = function(arg, opt_arg) {};
-
-var jQuery = {};
-
-/** @constructor */
-function jQueryObject() {};
-
-
-// http://docs.jquery.com/Core - Object accessors
-
-/**
- * @param {Function} callback
- * @return {jQueryObject}
- */
-jQueryObject.prototype.each = function(callback) {};
-
-/** @return {number} */
-jQueryObject.prototype.size = function() {};
-
-/** @type {number} */
-jQueryObject.prototype.length;
-
-/** @return {string} */
-jQueryObject.prototype.selector = function() {};
-
-/** @return {Element} */
-jQueryObject.prototype.context = function() {};
-
-/**
- * @param {number=} opt_index
- * @return {Element|Array.<Element>}
- */
-jQueryObject.prototype.get = function(opt_index) {};
-
-/**
- * @param {Element|jQueryObject} subject
- * @return {number}
- */
-jQueryObject.prototype.index = function(subject) {};
-
-
-// http://docs.jquery.com/Core - Data
-
-/**
- * @param {string} name
- * @param {string=} opt_value
- * @return {*}
- */
-jQueryObject.prototype.data = function(name, opt_value) {};
-
-/**
- * @param {string} name
- * @return {jQueryObject}
- */
-jQueryObject.prototype.removeData = function(name) {};
-
-/**
- * @param {(string|Function|Array.<Function>)=} opt_arg1
- * @param {(Function|Array.<Function>)=} opt_arg2
- * @return {Array.<Function>|jQueryObject}
- */
-jQueryObject.prototype.queue = function(opt_arg1, opt_arg2) {};
-
-/**
- * @param {string=} opt_name
- * @return {jQueryObject}
- */
-jQueryObject.prototype.dequeue = function(opt_name) {};
-
-
-// http://docs.jquery.com/Attributes - Attr
-
-/**
- * @param {string|Object} nameOrProperties
- * @param {*=} opt_value
- * @return {Object|jQueryObject}
- */
-jQueryObject.prototype.attr = function(nameOrProperties, opt_value) {};
-
-/**
- * @param {string} name
- * @return {jQueryObject}
- */
-jQueryObject.prototype.removeAttr = function(name) {};
-
-
-// http://docs.jquery.com/Attributes - Class
-
-/**
- * @param {string} klass
- * @return {jQueryObject}
- */
-jQueryObject.prototype.addClass = function(klass) {};
-
-/**
- * @param {string} klass
- * @return {boolean}
- */
-jQueryObject.prototype.hasClass = function(klass) {};
-
-/**
- * @param {string=} opt_klass
- * @return {jQueryObject}
- */
-jQueryObject.prototype.removeClass = function(opt_klass) {};
-
-/**
- * @param {string} klass
- * @param {boolean=} opt_switch
- * @return {jQueryObject}
- */
-jQueryObject.prototype.toggleClass = function(klass, opt_switch) {};
-
-
-// http://docs.jquery.com/Attributes - HTML, Text, Value
-
-/**
- * @param {string} opt_val
- * @return {string|jQueryObject}
- */
-jQueryObject.prototype.html = function(opt_val) {};
-
-/**
- * @param {string=} opt_val
- * @return {string|jQueryObject}
- */
-jQueryObject.prototype.text = function(opt_val) {};
-
-/**
- * @param {string|Array.<string>} opt_val
- * @return {string|Array|jQueryObject}
- */
-jQueryObject.prototype.val = function(opt_val) {};
-
-
-// http://docs.jquery.com/Traversing - Filtering
-
-/**
- * @param {number} index
- * @return {jQueryObject}
- */
-jQueryObject.prototype.eq = function(index) {};
-
-/**
- * @param {string|Function} arg
- * @return {jQueryObject}
- */
-jQueryObject.prototype.filter = function(arg) {};
-
-/**
- * @param {string} expr
- * @return {boolean}
- */
-jQueryObject.prototype.is = function(expr) {};
-
-/**
- * @param {Function} callback
- * @return {jQueryObject}
- */
-jQueryObject.prototype.map = function(callback) {};
-
-/**
- * @param {string} expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.not = function(expr) {};
-
-/**
- * @param {number} start
- * @param {number=} opt_end
- * @return {jQueryObject}
- */
-jQueryObject.prototype.slice = function(start, opt_end) {};
-
-
-// http://docs.jquery.com/Traversing - Finding, Chaining
-
-/**
- * @param {string|Element|Array.<Element>} expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.add = function(expr) {};
-
-/**
- * @param {string=} opt_expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.children = function(opt_expr) {};
-
-/**
- * @param {string} expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.closest = function(expr) {};
-
-/**
- * @return {jQueryObject}
- */
-jQueryObject.prototype.contents = function() {};
-
-/**
- * @param {string} expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.find = function(expr) {};
-
-/**
- * @param {string=} opt_expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.next = function(opt_expr) {};
-
-/**
- * @param {string=} opt_expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.nextAll = function(opt_expr) {};
-
-/**
- * @return {jQueryObject}
- */
-jQueryObject.prototype.offsetParent = function() {};
-
-/**
- * @param {string=} opt_expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.parent = function(opt_expr) {};
-
-/**
- * @param {string=} opt_expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.parents = function(opt_expr) {};
-
-/**
- * @param {string=} opt_expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.prev = function(opt_expr) {};
-
-/**
- * @param {string=} opt_expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.prevAll = function(opt_expr) {};
-
-/**
- * @param {string=} opt_expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.siblings = function(opt_expr) {};
-
-/**
- * @return {jQueryObject}
- */
-jQueryObject.prototype.andSelf = function() {};
-
-/**
- * @return {jQueryObject}
- */
-jQueryObject.prototype.end = function() {};
-
-
-// http://docs.jquery.com/Manipulation
-
-/**
- * @param {string|Node|Element|jQueryObject} content
- * @return {jQueryObject}
- */
-jQueryObject.prototype.append = function(content) {};
-
-/**
- * @param {string} selector
- * @return {jQueryObject}
- */
-jQueryObject.prototype.appendTo = function(selector) {};
-
-/**
- * @param {string|Node|Element|jQueryObject} content
- * @return {jQueryObject}
- */
-jQueryObject.prototype.prepend = function(content) {};
-
-/**
- * @param {string} selector
- * @return {jQueryObject}
- */
-jQueryObject.prototype.prependTo = function(selector) {};
-
-/**
- * @param {string|Node|Element|jQueryObject} content
- * @return {jQueryObject}
- */
-jQueryObject.prototype.after = function(content) {};
-
-/**
- * @param {string|Node|Element|jQueryObject} content
- * @return {jQueryObject}
- */
-jQueryObject.prototype.before = function(content) {};
-
-/**
- * @param {string} selector
- * @return {jQueryObject}
- */
-jQueryObject.prototype.insertAfter = function(selector) {};
-
-/**
- * @param {string} selector
- * @return {jQueryObject}
- */
-jQueryObject.prototype.insertBefore = function(selector) {};
-
-/**
- * @param {string|Element} arg
- * @return {jQueryObject}
- */
-jQueryObject.prototype.wrap = function(arg) {};
-
-/**
- * @param {string|Element} arg
- * @return {jQueryObject}
- */
-jQueryObject.prototype.wrapAll = function(arg) {};
-
-/**
- * @param {string|Element} arg
- * @return {jQueryObject}
- */
-jQueryObject.prototype.wrapInner = function(arg) {};
-
-/**
- * @param {string|Node|Element|jQueryObject} content
- * @return {jQueryObject}
- */
-jQueryObject.prototype.replaceWith = function(content) {};
-
-/**
- * @param {string} selector
- * @return {jQueryObject}
- */
-jQueryObject.prototype.replaceAll = function(selector) {};
-
-/**
- * @return {jQueryObject}
- */
-jQueryObject.prototype.empty = function() {};
-
-/**
- * @param {string=} opt_expr
- * @return {jQueryObject}
- */
-jQueryObject.prototype.remove = function(opt_expr) {};
-
-/**
- * @param {boolean=} opt_cloneEvents
- * @return {jQueryObject}
- */
-jQueryObject.prototype.clone = function(opt_cloneEvents) {};
-
-
-// http://docs.jquery.com/CSS
-
-/**
- * @param {string|Object} nameOrProperties
- * @param {(string|number|Function)=} opt_value
- * @return {Object|jQueryObject|string}
- */
-jQueryObject.prototype.css = function(nameOrProperties, opt_value) {};
-
-/**
- * @return {Object}
- */
-jQueryObject.prototype.offset = function() {};
-
-/**
- * @return {Object}
- */
-jQueryObject.prototype.position = function() {};
-
-/**
- * @param {number=} opt_val
- * @return {number|jQueryObject}
- */
-jQueryObject.prototype.scrollTop = function(opt_val) {};
-
-/**
- * @param {number=} opt_val
- * @return {number|jQueryObject}
- */
-jQueryObject.prototype.scrollLeft = function(opt_val) {};
-
-/**
- * @param {number=} opt_val
- * @return {number|jQueryObject}
- */
-jQueryObject.prototype.height = function(opt_val) {};
-
-/**
- * @param {number=} opt_val
- * @return {number|jQueryObject}
- */
-jQueryObject.prototype.width = function(opt_val) {};
-
-/**
- * @return {number}
- */
-jQueryObject.prototype.innerHeight = function() {};
-
-/**
- * @return {number}
- */
-jQueryObject.prototype.innerWidth = function() {};
-
-/**
- * @param {boolean=} opt_margin
- * @return {number}
- */
-jQueryObject.prototype.outerHeight = function(opt_margin) {};
-
-/**
- * @param {boolean=} opt_margin
- * @return {number}
- */
-jQueryObject.prototype.outerWidth = function(opt_margin) {};
-
-
-// http://docs.jquery.com/Events
-
-/**
- * @param {string} type
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.live = function(type, fn) {};
-
-/**
- * @param {string=} opt_type
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.die = function(opt_type, opt_fn) {};
-
-/**
- * @param {Function} over
- * @param {Function} out
- * @return {jQueryObject}
- */
-jQueryObject.prototype.hover = function(over, out) {};
-
-/**
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.blur = function(opt_fn) {};
-
-/**
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.change = function(opt_fn) {};
-
-/**
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.click = function(opt_fn) {};
-
-/**
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.dblclick = function(opt_fn) {};
-
-/**
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.error = function(opt_fn) {};
-
-/**
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.focus = function(opt_fn) {};
-
-/**
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.keydown = function(opt_fn) {};
-
-/**
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.keypress = function(opt_fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.keyup = function(fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.load = function(fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.mousedown = function(fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.mouseenter = function(fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.mouseleave = function(fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.mousemove = function(fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.mouseout = function(fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.mouseover = function(fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.mouseup = function(fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.resize = function(fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.scroll = function(fn) {};
-
-/**
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.select = function(opt_fn) {};
-
-/**
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.submit = function(opt_fn) {};
-
-/**
- * @param {Function} fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.unload = function(fn) {};
-
-
-// http://docs.jquery.com/Effects
-
-/**
- * @param {(number|string)=} opt_speed
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.show = function(opt_speed, opt_fn) {};
-
-/**
- * @param {(number|string)=} opt_speed
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.hide = function(opt_speed, opt_fn) {};
-
-/**
- * toggle() is defined as both an event and an effect... sigh.
- * @param {(Function|boolean|number|string)=} opt_arg1
- * @param {Function=} opt_fn2
- * @param {...Function} var_args
- * @return {jQueryObject}
- */
-jQueryObject.prototype.toggle = function(opt_arg1, opt_fn2, var_args) {};
-
-/**
- * @param {(number|string)=} opt_speed
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.slideDown = function(opt_speed, opt_fn) {};
-
-/**
- * @param {(number|string)=} opt_speed
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.slideUp = function(opt_speed, opt_fn) {};
-
-/**
- * @param {(number|string)=} opt_speed
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.slideToggle = function(opt_speed, opt_fn) {};
-
-/**
- * @param {(number|string)=} opt_speed
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.fadeIn = function(opt_speed, opt_fn) {};
-
-/**
- * @param {(number|string)=} opt_speed
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.fadeOut = function(opt_speed, opt_fn) {};
-
-/**
- * @param {(number|string)=} opt_speed
- * @param {number=} opt_opacity
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.fadeTo = function(opt_speed, opt_opacity, opt_fn) {};
-
-/**
- * @param {Object} params
- * @param {(number|string|Object)=} opt_durationOrOptions
- * @param {string=} opt_easing
- * @param {Function=} opt_fn
- * @return {jQueryObject}
- */
-jQueryObject.prototype.animate = function(
- params, opt_durationOrOptions, opt_easing, opt_fn) {};
-
-/**
- * @param {boolean} opt_clearQueue
- * @param {boolean} opt_gotoEnd
- * @return {jQueryObject}
- */
-jQueryObject.prototype.stop = function(opt_clearQueue, opt_gotoEnd) {};
-
-jQuery.fx = {};
-
-/** @type {boolean} */
-jQuery.fx.off;
-
-// http://docs.jquery.com/Utilities
-
-/**
- * @param {number|string|Object} value
- * @param {Array} array
- * @return {number}
- */
-jQueryObject.prototype.inArray = function(value, array) {};
--- a/sbin/res/jsdoc/LdtPlayer-release.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3541 +0,0 @@
-/*
- *
- * Copyright 2010 Institut de recherche et d'innovation
- * contributor(s) : Samuel Huron
- *
- * contact@iri.centrepompidou.fr
- * http://www.iri.centrepompidou.fr
- *
- * This software is a computer program whose purpose is to show and add annotations on a video .
- * This software is governed by the CeCILL-C license under French law and
- * abiding by the rules of distribution of free software. You can use,
- * modify and/ or redistribute the software under the terms of the CeCILL-C
- * license as circulated by CEA, CNRS and INRIA at the following URL
- * "http://www.cecill.info".
- *
- * The fact that you are presently reading this means that you have had
- * knowledge of the CeCILL-C license and that you accept its terms.
-*/
-/*! LAB.js (LABjs :: Loading And Blocking JavaScript)
- v2.0.3 (c) Kyle Simpson
- MIT License
-*/
-
-(function(global){
- var _$LAB = global.$LAB,
-
- // constants for the valid keys of the options object
- _UseLocalXHR = "UseLocalXHR",
- _AlwaysPreserveOrder = "AlwaysPreserveOrder",
- _AllowDuplicates = "AllowDuplicates",
- _CacheBust = "CacheBust",
- /*!START_DEBUG*/_Debug = "Debug",/*!END_DEBUG*/
- _BasePath = "BasePath",
-
- // stateless variables used across all $LAB instances
- root_page = /^[^?#]*\//.exec(location.href)[0],
- root_domain = /^\w+\:\/\/\/?[^\/]+/.exec(root_page)[0],
- append_to = document.head || document.getElementsByTagName("head"),
-
- // inferences... ick, but still necessary
- opera_or_gecko = (global.opera && Object.prototype.toString.call(global.opera) == "[object Opera]") || ("MozAppearance" in document.documentElement.style),
-
-/*!START_DEBUG*/
- // console.log() and console.error() wrappers
- log_msg = function(){},
- log_error = log_msg,
-/*!END_DEBUG*/
-
- // feature sniffs (yay!)
- test_script_elem = document.createElement("script"),
- explicit_preloading = typeof test_script_elem.preload == "boolean", // http://wiki.whatwg.org/wiki/Script_Execution_Control#Proposal_1_.28Nicholas_Zakas.29
- real_preloading = explicit_preloading || (test_script_elem.readyState && test_script_elem.readyState == "uninitialized"), // will a script preload with `src` set before DOM append?
- script_ordered_async = !real_preloading && test_script_elem.async === true, // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order
-
- // XHR preloading (same-domain) and cache-preloading (remote-domain) are the fallbacks (for some browsers)
- xhr_or_cache_preloading = !real_preloading && !script_ordered_async && !opera_or_gecko
- ;
-
-/*!START_DEBUG*/
- // define console wrapper functions if applicable
- if (global.console && global.console.log) {
- if (!global.console.error) global.console.error = global.console.log;
- log_msg = function(msg) { global.console.log(msg); };
- log_error = function(msg,err) { global.console.error(msg,err); };
- }
-/*!END_DEBUG*/
-
- // test for function
- function is_func(func) { return Object.prototype.toString.call(func) == "[object Function]"; }
-
- // test for array
- function is_array(arr) { return Object.prototype.toString.call(arr) == "[object Array]"; }
-
- // make script URL absolute/canonical
- function canonical_uri(src,base_path) {
- var absolute_regex = /^\w+\:\/\//;
-
- // is `src` is protocol-relative (begins with // or ///), prepend protocol
- if (/^\/\/\/?/.test(src)) {
- src = location.protocol + src;
- }
- // is `src` page-relative? (not an absolute URL, and not a domain-relative path, beginning with /)
- else if (!absolute_regex.test(src) && src.charAt(0) != "/") {
- // prepend `base_path`, if any
- src = (base_path || "") + src;
- }
- // make sure to return `src` as absolute
- return absolute_regex.test(src) ? src : ((src.charAt(0) == "/" ? root_domain : root_page) + src);
- }
-
- // merge `source` into `target`
- function merge_objs(source,target) {
- for (var k in source) { if (source.hasOwnProperty(k)) {
- target[k] = source[k]; // TODO: does this need to be recursive for our purposes?
- }}
- return target;
- }
-
- // does the chain group have any ready-to-execute scripts?
- function check_chain_group_scripts_ready(chain_group) {
- var any_scripts_ready = false;
- for (var i=0; i<chain_group.scripts.length; i++) {
- if (chain_group.scripts[i].ready && chain_group.scripts[i].exec_trigger) {
- any_scripts_ready = true;
- chain_group.scripts[i].exec_trigger();
- chain_group.scripts[i].exec_trigger = null;
- }
- }
- return any_scripts_ready;
- }
-
- // creates a script load listener
- function create_script_load_listener(elem,registry_item,flag,onload) {
- elem.onload = elem.onreadystatechange = function() {
- if ((elem.readyState && elem.readyState != "complete" && elem.readyState != "loaded") || registry_item[flag]) return;
- elem.onload = elem.onreadystatechange = null;
- onload();
- };
- }
-
- // script executed handler
- function script_executed(registry_item) {
- registry_item.ready = registry_item.finished = true;
- for (var i=0; i<registry_item.finished_listeners.length; i++) {
- registry_item.finished_listeners[i]();
- }
- registry_item.ready_listeners = [];
- registry_item.finished_listeners = [];
- }
-
- // make the request for a scriptha
- function request_script(chain_opts,script_obj,registry_item,onload,preload_this_script) {
- // setTimeout() "yielding" prevents some weird race/crash conditions in older browsers
- setTimeout(function(){
- var script, src = script_obj.real_src, xhr;
-
- // don't proceed until `append_to` is ready to append to
- if ("item" in append_to) { // check if `append_to` ref is still a live node list
- if (!append_to[0]) { // `append_to` node not yet ready
- // try again in a little bit -- note: will re-call the anonymous function in the outer setTimeout, not the parent `request_script()`
- setTimeout(arguments.callee,25);
- return;
- }
- // reassign from live node list ref to pure node ref -- avoids nasty IE bug where changes to DOM invalidate live node lists
- append_to = append_to[0];
- }
- script = document.createElement("script");
- if (script_obj.type) script.type = script_obj.type;
- if (script_obj.charset) script.charset = script_obj.charset;
-
- // should preloading be used for this script?
- if (preload_this_script) {
- // real script preloading?
- if (real_preloading) {
- /*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script preload: "+src);/*!END_DEBUG*/
- registry_item.elem = script;
- if (explicit_preloading) { // explicit preloading (aka, Zakas' proposal)
- script.preload = true;
- script.onpreload = onload;
- }
- else {
- script.onreadystatechange = function(){
- if (script.readyState == "loaded") onload();
- };
- }
- script.src = src;
- // NOTE: no append to DOM yet, appending will happen when ready to execute
- }
- // same-domain and XHR allowed? use XHR preloading
- else if (preload_this_script && src.indexOf(root_domain) == 0 && chain_opts[_UseLocalXHR]) {
- xhr = new XMLHttpRequest(); // note: IE never uses XHR (it supports true preloading), so no more need for ActiveXObject fallback for IE <= 7
- /*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script preload (xhr): "+src);/*!END_DEBUG*/
- xhr.onreadystatechange = function() {
- if (xhr.readyState == 4) {
- xhr.onreadystatechange = function(){}; // fix a memory leak in IE
- registry_item.text = xhr.responseText + "\n//@ sourceURL=" + src; // http://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/
- onload();
- }
- };
- xhr.open("GET",src);
- xhr.send();
- }
- // as a last resort, use cache-preloading
- else {
- /*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script preload (cache): "+src);/*!END_DEBUG*/
- script.type = "text/cache-script";
- create_script_load_listener(script,registry_item,"ready",function() {
- append_to.removeChild(script);
- onload();
- });
- script.src = src;
- append_to.insertBefore(script,append_to.firstChild);
- }
- }
- // use async=false for ordered async? parallel-load-serial-execute http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order
- else if (script_ordered_async) {
- /*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script load (ordered async): "+src);/*!END_DEBUG*/
- script.async = false;
- create_script_load_listener(script,registry_item,"finished",onload);
- script.src = src;
- append_to.insertBefore(script,append_to.firstChild);
- }
- // otherwise, just a normal script element
- else {
- /*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script load: "+src);/*!END_DEBUG*/
- create_script_load_listener(script,registry_item,"finished",onload);
- script.src = src;
- append_to.insertBefore(script,append_to.firstChild);
- }
- },0);
- }
-
- // create a clean instance of $LAB
- function create_sandbox() {
- var global_defaults = {},
- can_use_preloading = real_preloading || xhr_or_cache_preloading,
- queue = [],
- registry = {},
- instanceAPI
- ;
-
- // global defaults
- global_defaults[_UseLocalXHR] = true;
- global_defaults[_AlwaysPreserveOrder] = false;
- global_defaults[_AllowDuplicates] = false;
- global_defaults[_CacheBust] = false;
- /*!START_DEBUG*/global_defaults[_Debug] = false;/*!END_DEBUG*/
- global_defaults[_BasePath] = "";
-
- // execute a script that has been preloaded already
- function execute_preloaded_script(chain_opts,script_obj,registry_item) {
- var script;
-
- function preload_execute_finished() {
- if (script != null) { // make sure this only ever fires once
- script = null;
- script_executed(registry_item);
- }
- }
-
- if (registry[script_obj.src].finished) return;
- if (!chain_opts[_AllowDuplicates]) registry[script_obj.src].finished = true;
-
- script = registry_item.elem || document.createElement("script");
- if (script_obj.type) script.type = script_obj.type;
- if (script_obj.charset) script.charset = script_obj.charset;
- create_script_load_listener(script,registry_item,"finished",preload_execute_finished);
-
- // script elem was real-preloaded
- if (registry_item.elem) {
- registry_item.elem = null;
- }
- // script was XHR preloaded
- else if (registry_item.text) {
- script.onload = script.onreadystatechange = null; // script injection doesn't fire these events
- script.text = registry_item.text;
- }
- // script was cache-preloaded
- else {
- script.src = script_obj.real_src;
- }
- append_to.insertBefore(script,append_to.firstChild);
-
- // manually fire execution callback for injected scripts, since events don't fire
- if (registry_item.text) {
- preload_execute_finished();
- }
- }
-
- // process the script request setup
- function do_script(chain_opts,script_obj,chain_group,preload_this_script) {
- var registry_item,
- registry_items,
- ready_cb = function(){ script_obj.ready_cb(script_obj,function(){ execute_preloaded_script(chain_opts,script_obj,registry_item); }); },
- finished_cb = function(){ script_obj.finished_cb(script_obj,chain_group); }
- ;
-
- script_obj.src = canonical_uri(script_obj.src,chain_opts[_BasePath]);
- script_obj.real_src = script_obj.src +
- // append cache-bust param to URL?
- (chain_opts[_CacheBust] ? ((/\?.*$/.test(script_obj.src) ? "&_" : "?_") + ~~(Math.random()*1E9) + "=") : "")
- ;
-
- if (!registry[script_obj.src]) registry[script_obj.src] = {items:[],finished:false};
- registry_items = registry[script_obj.src].items;
-
- // allowing duplicates, or is this the first recorded load of this script?
- if (chain_opts[_AllowDuplicates] || registry_items.length == 0) {
- registry_item = registry_items[registry_items.length] = {
- ready:false,
- finished:false,
- ready_listeners:[ready_cb],
- finished_listeners:[finished_cb]
- };
-
- request_script(chain_opts,script_obj,registry_item,
- // which callback type to pass?
- (
- (preload_this_script) ? // depends on script-preloading
- function(){
- registry_item.ready = true;
- for (var i=0; i<registry_item.ready_listeners.length; i++) {
- registry_item.ready_listeners[i]();
- }
- registry_item.ready_listeners = [];
- } :
- function(){ script_executed(registry_item); }
- ),
- // signal if script-preloading should be used or not
- preload_this_script
- );
- }
- else {
- registry_item = registry_items[0];
- if (registry_item.finished) {
- finished_cb();
- }
- else {
- registry_item.finished_listeners.push(finished_cb);
- }
- }
- }
-
- // creates a closure for each separate chain spawned from this $LAB instance, to keep state cleanly separated between chains
- function create_chain() {
- var chainedAPI,
- chain_opts = merge_objs(global_defaults,{}),
- chain = [],
- exec_cursor = 0,
- scripts_currently_loading = false,
- group
- ;
-
- // called when a script has finished preloading
- function chain_script_ready(script_obj,exec_trigger) {
- /*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("script preload finished: "+script_obj.real_src);/*!END_DEBUG*/
- script_obj.ready = true;
- script_obj.exec_trigger = exec_trigger;
- advance_exec_cursor(); // will only check for 'ready' scripts to be executed
- }
-
- // called when a script has finished executing
- function chain_script_executed(script_obj,chain_group) {
- /*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("script execution finished: "+script_obj.real_src);/*!END_DEBUG*/
- script_obj.ready = script_obj.finished = true;
- script_obj.exec_trigger = null;
- // check if chain group is all finished
- for (var i=0; i<chain_group.scripts.length; i++) {
- if (!chain_group.scripts[i].finished) return;
- }
- // chain_group is all finished if we get this far
- chain_group.finished = true;
- advance_exec_cursor();
- }
-
- // main driver for executing each part of the chain
- function advance_exec_cursor() {
- while (exec_cursor < chain.length) {
- if (is_func(chain[exec_cursor])) {
- /*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("$LAB.wait() executing: "+chain[exec_cursor]);/*!END_DEBUG*/
- try { chain[exec_cursor++](); } catch (err) {
- /*!START_DEBUG*/if (chain_opts[_Debug]) log_error("$LAB.wait() error caught: ",err);/*!END_DEBUG*/
- }
- continue;
- }
- else if (!chain[exec_cursor].finished) {
- if (check_chain_group_scripts_ready(chain[exec_cursor])) continue;
- break;
- }
- exec_cursor++;
- }
- // we've reached the end of the chain (so far)
- if (exec_cursor == chain.length) {
- scripts_currently_loading = false;
- group = false;
- }
- }
-
- // setup next chain script group
- function init_script_chain_group() {
- if (!group || !group.scripts) {
- chain.push(group = {scripts:[],finished:true});
- }
- }
-
- // API for $LAB chains
- chainedAPI = {
- // start loading one or more scripts
- script:function(){
- for (var i=0; i<arguments.length; i++) {
- (function(script_obj,script_list){
- var splice_args;
-
- if (!is_array(script_obj)) {
- script_list = [script_obj];
- }
- for (var j=0; j<script_list.length; j++) {
- init_script_chain_group();
- script_obj = script_list[j];
-
- if (is_func(script_obj)) script_obj = script_obj();
- if (!script_obj) continue;
- if (is_array(script_obj)) {
- // set up an array of arguments to pass to splice()
- splice_args = [].slice.call(script_obj); // first include the actual array elements we want to splice in
- splice_args.unshift(j,1); // next, put the `index` and `howMany` parameters onto the beginning of the splice-arguments array
- [].splice.apply(script_list,splice_args); // use the splice-arguments array as arguments for splice()
- j--; // adjust `j` to account for the loop's subsequent `j++`, so that the next loop iteration uses the same `j` index value
- continue;
- }
- if (typeof script_obj == "string") script_obj = {src:script_obj};
- script_obj = merge_objs(script_obj,{
- ready:false,
- ready_cb:chain_script_ready,
- finished:false,
- finished_cb:chain_script_executed
- });
- group.finished = false;
- group.scripts.push(script_obj);
-
- do_script(chain_opts,script_obj,group,(can_use_preloading && scripts_currently_loading));
- scripts_currently_loading = true;
-
- if (chain_opts[_AlwaysPreserveOrder]) chainedAPI.wait();
- }
- })(arguments[i],arguments[i]);
- }
- return chainedAPI;
- },
- // force LABjs to pause in execution at this point in the chain, until the execution thus far finishes, before proceeding
- wait:function(){
- if (arguments.length > 0) {
- for (var i=0; i<arguments.length; i++) {
- chain.push(arguments[i]);
- }
- group = chain[chain.length-1];
- }
- else group = false;
-
- advance_exec_cursor();
-
- return chainedAPI;
- }
- };
-
- // the first chain link API (includes `setOptions` only this first time)
- return {
- script:chainedAPI.script,
- wait:chainedAPI.wait,
- setOptions:function(opts){
- merge_objs(opts,chain_opts);
- return chainedAPI;
- }
- };
- }
-
- // API for each initial $LAB instance (before chaining starts)
- instanceAPI = {
- // main API functions
- setGlobalDefaults:function(opts){
- merge_objs(opts,global_defaults);
- return instanceAPI;
- },
- setOptions:function(){
- return create_chain().setOptions.apply(null,arguments);
- },
- script:function(){
- return create_chain().script.apply(null,arguments);
- },
- wait:function(){
- return create_chain().wait.apply(null,arguments);
- },
-
- // built-in queuing for $LAB `script()` and `wait()` calls
- // useful for building up a chain programmatically across various script locations, and simulating
- // execution of the chain
- queueScript:function(){
- queue[queue.length] = {type:"script", args:[].slice.call(arguments)};
- return instanceAPI;
- },
- queueWait:function(){
- queue[queue.length] = {type:"wait", args:[].slice.call(arguments)};
- return instanceAPI;
- },
- runQueue:function(){
- var $L = instanceAPI, len=queue.length, i=len, val;
- for (;--i>=0;) {
- val = queue.shift();
- $L = $L[val.type].apply(null,val.args);
- }
- return $L;
- },
-
- // rollback `[global].$LAB` to what it was before this file was loaded, the return this current instance of $LAB
- noConflict:function(){
- global.$LAB = _$LAB;
- return instanceAPI;
- },
-
- // create another clean instance of $LAB
- sandbox:function(){
- return create_sandbox();
- }
- };
-
- return instanceAPI;
- }
-
- // create the main instance of $LAB
- global.$LAB = create_sandbox();
-
-
- /* The following "hack" was suggested by Andrea Giammarchi and adapted from: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html
- NOTE: this hack only operates in FF and then only in versions where document.readyState is not present (FF < 3.6?).
-
- The hack essentially "patches" the **page** that LABjs is loaded onto so that it has a proper conforming document.readyState, so that if a script which does
- proper and safe dom-ready detection is loaded onto a page, after dom-ready has passed, it will still be able to detect this state, by inspecting the now hacked
- document.readyState property. The loaded script in question can then immediately trigger any queued code executions that were waiting for the DOM to be ready.
- For instance, jQuery 1.4+ has been patched to take advantage of document.readyState, which is enabled by this hack. But 1.3.2 and before are **not** safe or
- fixed by this hack, and should therefore **not** be lazy-loaded by script loader tools such as LABjs.
- */
- (function(addEvent,domLoaded,handler){
- if (document.readyState == null && document[addEvent]){
- document.readyState = "loading";
- document[addEvent](domLoaded,handler = function(){
- document.removeEventListener(domLoaded,handler,false);
- document.readyState = "complete";
- },false);
- }
- })("addEventListener","DOMContentLoaded");
-
-})(this);/*
- mustache.js — Logic-less templates in JavaScript
-
- See http://mustache.github.com/ for more info.
-*/
-
-var Mustache = function() {
- var Renderer = function() {};
-
- Renderer.prototype = {
- otag: "{{",
- ctag: "}}",
- pragmas: {},
- buffer: [],
- pragmas_implemented: {
- "IMPLICIT-ITERATOR": true
- },
- context: {},
-
- render: function(template, context, partials, in_recursion) {
- // reset buffer & set context
- if(!in_recursion) {
- this.context = context;
- this.buffer = []; // TODO: make this non-lazy
- }
-
- // fail fast
- if(!this.includes("", template)) {
- if(in_recursion) {
- return template;
- } else {
- this.send(template);
- return;
- }
- }
-
- template = this.render_pragmas(template);
- var html = this.render_section(template, context, partials);
- if(in_recursion) {
- return this.render_tags(html, context, partials, in_recursion);
- }
-
- this.render_tags(html, context, partials, in_recursion);
- },
-
- /*
- Sends parsed lines
- */
- send: function(line) {
- if(line !== "") {
- this.buffer.push(line);
- }
- },
-
- /*
- Looks for %PRAGMAS
- */
- render_pragmas: function(template) {
- // no pragmas
- if(!this.includes("%", template)) {
- return template;
- }
-
- var that = this;
- var regex = new RegExp(this.otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" +
- this.ctag, "g");
- return template.replace(regex, function(match, pragma, options) {
- if(!that.pragmas_implemented[pragma]) {
- throw({message:
- "This implementation of mustache doesn't understand the '" +
- pragma + "' pragma"});
- }
- that.pragmas[pragma] = {};
- if(options) {
- var opts = options.split("=");
- that.pragmas[pragma][opts[0]] = opts[1];
- }
- return "";
- // ignore unknown pragmas silently
- });
- },
-
- /*
- Tries to find a partial in the curent scope and render it
- */
- render_partial: function(name, context, partials) {
- name = this.trim(name);
- if(!partials || partials[name] === undefined) {
- throw({message: "unknown_partial '" + name + "'"});
- }
- if(typeof(context[name]) != "object") {
- return this.render(partials[name], context, partials, true);
- }
- return this.render(partials[name], context[name], partials, true);
- },
-
- /*
- Renders inverted (^) and normal (#) sections
- */
- render_section: function(template, context, partials) {
- if(!this.includes("#", template) && !this.includes("^", template)) {
- return template;
- }
-
- var that = this;
- // CSW - Added "+?" so it finds the tighest bound, not the widest
- var regex = new RegExp(this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag +
- "\n*([\\s\\S]+?)" + this.otag + "\\/\\s*\\2\\s*" + this.ctag +
- "\\s*", "mg");
-
- // for each {{#foo}}{{/foo}} section do...
- return template.replace(regex, function(match, type, name, content) {
- var value = that.find(name, context);
- if(type == "^") { // inverted section
- if(!value || that.is_array(value) && value.length === 0) {
- // false or empty list, render it
- return that.render(content, context, partials, true);
- } else {
- return "";
- }
- } else if(type == "#") { // normal section
- if(that.is_array(value)) { // Enumerable, Let's loop!
- return that.map(value, function(row) {
- return that.render(content, that.create_context(row),
- partials, true);
- }).join("");
- } else if(that.is_object(value)) { // Object, Use it as subcontext!
- return that.render(content, that.create_context(value),
- partials, true);
- } else if(typeof value === "function") {
- // higher order section
- return value.call(context, content, function(text) {
- return that.render(text, context, partials, true);
- });
- } else if(value) { // boolean section
- return that.render(content, context, partials, true);
- } else {
- return "";
- }
- }
- });
- },
-
- /*
- Replace {{foo}} and friends with values from our view
- */
- render_tags: function(template, context, partials, in_recursion) {
- // tit for tat
- var that = this;
-
- var new_regex = function() {
- return new RegExp(that.otag + "(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?" +
- that.ctag + "+", "g");
- };
-
- var regex = new_regex();
- var tag_replace_callback = function(match, operator, name) {
- switch(operator) {
- case "!": // ignore comments
- return "";
- case "=": // set new delimiters, rebuild the replace regexp
- that.set_delimiters(name);
- regex = new_regex();
- return "";
- case ">": // render partial
- return that.render_partial(name, context, partials);
- case "{": // the triple mustache is unescaped
- return that.find(name, context);
- default: // escape the value
- return that.escape(that.find(name, context));
- }
- };
- var lines = template.split("\n");
- for(var i = 0; i < lines.length; i++) {
- lines[i] = lines[i].replace(regex, tag_replace_callback, this);
- if(!in_recursion) {
- this.send(lines[i]);
- }
- }
-
- if(in_recursion) {
- return lines.join("\n");
- }
- },
-
- set_delimiters: function(delimiters) {
- var dels = delimiters.split(" ");
- this.otag = this.escape_regex(dels[0]);
- this.ctag = this.escape_regex(dels[1]);
- },
-
- escape_regex: function(text) {
- // thank you Simon Willison
- if(!arguments.callee.sRE) {
- var specials = [
- '/', '.', '*', '+', '?', '|',
- '(', ')', '[', ']', '{', '}', '\\'
- ];
- arguments.callee.sRE = new RegExp(
- '(\\' + specials.join('|\\') + ')', 'g'
- );
- }
- return text.replace(arguments.callee.sRE, '\\$1');
- },
-
- /*
- find `name` in current `context`. That is find me a value
- from the view object
- */
- find: function(name, context) {
- name = this.trim(name);
-
- // Checks whether a value is thruthy or false or 0
- function is_kinda_truthy(bool) {
- return bool === false || bool === 0 || bool;
- }
-
- var value;
- if(is_kinda_truthy(context[name])) {
- value = context[name];
- } else if(is_kinda_truthy(this.context[name])) {
- value = this.context[name];
- }
-
- if(typeof value === "function") {
- return value.apply(context);
- }
- if(value !== undefined) {
- return value;
- }
- // silently ignore unkown variables
- return "";
- },
-
- // Utility methods
-
- /* includes tag */
- includes: function(needle, haystack) {
- return haystack.indexOf(this.otag + needle) != -1;
- },
-
- /*
- Does away with nasty characters
- */
- escape: function(s) {
- s = String(s === null ? "" : s);
- return s.replace(/&(?!\w+;)|["'<>\\]/g, function(s) {
- switch(s) {
- case "&": return "&";
- case "\\": return "\\\\";
- case '"': return '"';
- case "'": return ''';
- case "<": return "<";
- case ">": return ">";
- default: return s;
- }
- });
- },
-
- // by @langalex, support for arrays of strings
- create_context: function(_context) {
- if(this.is_object(_context)) {
- return _context;
- } else {
- var iterator = ".";
- if(this.pragmas["IMPLICIT-ITERATOR"]) {
- iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
- }
- var ctx = {};
- ctx[iterator] = _context;
- return ctx;
- }
- },
-
- is_object: function(a) {
- return a && typeof a == "object";
- },
-
- is_array: function(a) {
- return Object.prototype.toString.call(a) === '[object Array]';
- },
-
- /*
- Gets rid of leading and trailing whitespace
- */
- trim: function(s) {
- return s.replace(/^\s*|\s*$/g, "");
- },
-
- /*
- Why, why, why? Because IE. Cry, cry cry.
- */
- map: function(array, fn) {
- if (typeof array.map == "function") {
- return array.map(fn);
- } else {
- var r = [];
- var l = array.length;
- for(var i = 0; i < l; i++) {
- r.push(fn(array[i]));
- }
- return r;
- }
- }
- };
-
- return({
- name: "mustache.js",
- version: "0.3.1-dev",
-
- /*
- Turns a template and view into HTML
- */
- to_html: function(template, view, partials, send_fun) {
- var renderer = new Renderer();
- if(send_fun) {
- renderer.send = send_fun;
- }
- renderer.render(template, view, partials);
- if(!send_fun) {
- return renderer.buffer.join("\n");
- }
- }
- });
-}();
-// Underscore.js 1.2.3
-// (c) 2009-2011 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the MIT license.
-// Portions of Underscore are inspired or borrowed from Prototype,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-(function(){function r(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
-c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&r(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(m.call(a,h)&&(f++,!(g=m.call(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(m.call(c,
-h)&&!f--)break;g=!f}}d.pop();return g}var s=this,F=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,G=k.concat,H=k.unshift,l=p.toString,m=p.hasOwnProperty,v=k.forEach,w=k.map,x=k.reduce,y=k.reduceRight,z=k.filter,A=k.every,B=k.some,q=k.indexOf,C=k.lastIndexOf,p=Array.isArray,I=Object.keys,t=Function.prototype.bind,b=function(a){return new n(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else typeof define==="function"&&
-define.amd?define("underscore",function(){return b}):s._=b;b.VERSION="1.2.3";var j=b.each=b.forEach=function(a,c,b){if(a!=null)if(v&&a.forEach===v)a.forEach(c,b);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(b,a[e],e,a)===o)break}else for(e in a)if(m.call(a,e)&&c.call(b,a[e],e,a)===o)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.map===w)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});return e};b.reduce=b.foldl=b.inject=function(a,
-c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(x&&a.reduce===x)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(y&&a.reduceRight===y)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,
-c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,c,b){var e;D(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.filter===z)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(A&&a.every===A)return a.every(c,
-b);j(a,function(a,g,h){if(!(e=e&&c.call(b,a,g,h)))return o});return e};var D=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(B&&a.some===B)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return q&&a.indexOf===q?a.indexOf(c)!=-1:b=D(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,
-d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,
-computed:b})});return e.value};b.shuffle=function(a){var c=[],b;j(a,function(a,f){f==0?c[0]=a:(b=Math.floor(Math.random()*(f+1)),c[f]=c[b],c[b]=a)});return c};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,c){var b=a.criteria,d=c.criteria;return b<d?-1:b>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=
-function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-
-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},
-[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,
-c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(q&&a.indexOf===q)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(C&&a.lastIndexOf===C)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
-var E=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));E.prototype=a.prototype;var b=new E,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
-c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return m.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
-a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=G.apply([a],arguments);return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=
-function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=I||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)m.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){j(i.call(arguments,
-1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(m.call(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===
-Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!m.call(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)==
-"[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){s._=F;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a),function(c){J(c,
-b[c]=a[c])})};var K=0;b.uniqueId=function(a){var b=K++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,
-"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};var n=function(a){this._wrapped=a};b.prototype=n.prototype;var u=function(a,c){return c?b(a).chain():a},J=function(a,c){n.prototype[a]=function(){var a=i.call(arguments);H.call(a,this._wrapped);return u(c.apply(b,
-a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];n.prototype[a]=function(){b.apply(this._wrapped,arguments);return u(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];n.prototype[a]=function(){return u(b.apply(this._wrapped,arguments),this._chain)}});n.prototype.chain=function(){this._chain=true;return this};n.prototype.value=function(){return this._wrapped}}).call(this);
-/* main file */
-
-if ( window.IriSP === undefined && window.__IriSP === undefined ) {
- var IriSP = {};
- var __IriSP = IriSP; /* for backward compatibility */
-}
-
-IriSP.loadLibs = function( libs, config, metadata_url, callback ) {
- // Localize jQuery variable
- IriSP.jQuery = null;
- var $L = $LAB.script(libs.jQuery).script(libs.swfObject)
- .script(libs.jQueryUI)
-
- if (config.player.type === "jwplayer") {
- // load our popcorn.js lookalike
- $L = $L.script(libs.jwplayer);
- } else {
- // load the real popcorn
- $L = $L.script(libs.popcorn).script(libs["popcorn.code"]);
- if (config.player.type === "youtube") {
- $L = $L.script(libs["popcorn.youtube"]);
- }
- if (config.player.type === "vimeo")
- $L = $L.script(libs["popcorn.vimeo"]);
-
- /* do nothing for html5 */
- }
-
- /* widget specific requirements */
- for (var idx in config.gui.widgets) {
- if (config.gui.widgets[idx].type === "PolemicWidget") {
- $L.script(libs.raphael);
- }
- }
-
- // same for modules
- /*
- for (var idx in config.modules) {
- if (config.modules[idx].type === "PolemicWidget")
- $L.script(libs.raphaelJs);
- }
- */
-
- $L.wait(function() {
- IriSP.jQuery = window.jQuery.noConflict( true );
- IriSP._ = window._.noConflict();
- IriSP.underscore = IriSP._;
-
- var css_link_jquery = IriSP.jQuery( "<link>", {
- rel: "stylesheet",
- type: "text/css",
- href: libs.cssjQueryUI,
- 'class': "dynamic_css"
- } );
- var css_link_custom = IriSP.jQuery( "<link>", {
- rel: "stylesheet",
- type: "text/css",
- href: config.gui.css,
- 'class': "dynamic_css"
- } );
-
- css_link_jquery.appendTo('head');
- css_link_custom.appendTo('head');
-
- IriSP.setupDataLoader();
- IriSP.__dataloader.get(metadata_url,
- function(data) {
- /* save the data so that we could re-use it to
- configure the video
- */
- IriSP.__jsonMetadata = data;
- callback.call(window) });
- });
-};
-IriSP.annotation_template = "{{! template for an annotation displayed in a segmentWidget }}<div title='{{divTitle}}' id='{{id}}' class='Ldt-iri-chapter' style='left: {{startPixel}}px; width: {{pxWidth}}px; background-color:#{{hexa_color}};' ></div>";
-IriSP.annotationWidget_template = "{{! template for the annotation widget }}<div class='Ldt-AnnotationsWidget'> <!-- ugly div because we want to have a double border --> <div class='Ldt-Annotation-DoubleBorder'> <div class='Ldt-AnnotationContent'> <div class='Ldt-AnnotationShareIcons'> <a class='Ldt-fbShare' href=''><img src='{{img_dir}}/facebook.png' alt='share on facebook'></img></a> <a class='Ldt-TwShare' href=''><img src='{{img_dir}}/twitter.png' alt='share on twitter'></img></a> <a class='Ldt-GplusShare' href=''><img src='{{img_dir}}/google.png' alt='share on google+'></img></a> </div> <div class='Ldt-SaTitle'></div> <div class='Ldt-SaDescription'></div> </div> </div></div>";
-IriSP.annotation_loading_template = "{{! template shown while the annotation widget is loading }}<div id='Ldt-load-container'><div id='Ldt-loader'> </div> Chargement... </div>";
-IriSP.arrowWidget_template = "<div class='Ldt-arrowWidget'></div>";
-IriSP.overlay_marker_template = "{{! the template for the small bars which is z-indexed over our segment widget }}<div class='Ldt-SegmentPositionMarker' style='background-color: #F7268E;'></div>";
-IriSP.player_template = "{{! template for the radio player }}<div class='Ldt-controler demo'> <div class='Ldt-LeftPlayerControls'> <div class='Ldt-button Ldt-CtrlPlay'></div> <div class='Ldt-button Ldt-CtrlAnnotate'></div> <div class='Ldt-button Ldt-CtrlSearch'></div> </div> <div class='Ldt-RightPlayerControls'> <div class='Ldt-Time'> <div class='Ldt-ElapsedTime'></div> <div class='Ldt-TimeSeparator'>/</div> <div class='Ldt-TotalTime'></div> </div> <div class='Ldt-button Ldt-CtrlSound'></div> </div></div>";
-IriSP.search_template = "{{! template for the search container }}<div class='LdtSearchContainer' style='margin-left: {{margin_left}}; position: absolute; margin-top: -60px;'> <div class='LdtSearch' style='display: none; background-color: #EEE; width: 165px; boder: 1px; border-color: #CFCFCF; position: absolute; text-align: center;'> <input class='LdtSearchInput' style='margin-top: 2px; margin-bottom: 2px;' /> </div></div><div class='cleaner'></div>";
-IriSP.share_template = "{{! social network sharing template }}<a onclick='__IriSP.MyApiPlayer.share(\'delicious\');' title='partager avec delicious'><span class='share shareDelicious'> </span></a> <a onclick='__IriSP.MyApiPlayer.share(\'facebook\');' title='partager avec facebook'> <span class='share shareFacebook'> </span></a><a onclick='__IriSP.MyApiPlayer.share(\'twitter\');' title='partager avec twitter'> <span class='share shareTwitter'> </span></a><a onclick='__IriSP.MyApiPlayer.share(\'myspace\');' title='partager avec Myspace'> <span class='share shareMySpace'> </span></a>";
-IriSP.sliderWidget_template = "{{! template for the slider widget - it's composed of two divs we one overlayed on top of the other }}<div class='Ldt-sliderBackground'></div><div class='Ldt-sliderForeground'></div><div class='Ldt-sliderPositionMarker'></div>";
-IriSP.tooltip_template = "{{! template used by the jquery ui tooltip }}<div class='Ldt-tooltip'> <div class='title'>{{title}}</div> <div class='time'>{{begin}} : {{end}} </div> <div class='description'>{{description}}</div></div>";
-IriSP.tooltipWidget_template = "{{! template for the tooltip widget }}<div class='tip'> <div class='tipcolor' style='height:10px;width:10px'></div> <div class='tiptext'></div>";
-IriSP.tweetWidget_template = "{{! template for the tweet widget }}<div class='Ldt-tweetWidget'> <div class='Ldt-tweet-DoubleBorder'> <img src='{{img_dir}}/minimize.png' class='Ldt-tweetWidgetKeepOpen' alt='dont minimize automatically'></img> <img src='{{img_dir}}/minimize.png' class='Ldt-tweetWidgetMinimize' alt='minimize window'></img> <div class='Ldt-tweetAvatar'></div> <img src='{{img_dir}}/profile_arrow.png' class='Ldt-tweetAvatar-profileArrow'></img> <div class='Ldt-tweetContents'></div> <a href='' target='_blank' class='Ldt-Retweet'><div class='Ldt-RetweetIcon'></div> - Retweet </a> <a href='' target='_blank' class='Ldt-TweetReply'><div class='Ldt-TweetReplyIcon'></div> - Reply</a> </div></div>";/* wrapper that simulates popcorn.js because
- popcorn is a bit unstable at the time */
-
-IriSP.PopcornReplacement = {
- msgPump : {} /* used by jquery to receive and send messages */
-};
-
-IriSP.PopcornReplacement.media = {
- "paused": true,
- "muted": false
-};
-
-IriSP.PopcornReplacement.listen = function(msg, callback) {
-// IriSP.jQuery(IriSP.PopcornReplacement.msgPump).bind(msg, function(event, rest) { callback(rest); });
- if (!IriSP.PopcornReplacement.msgPump.hasOwnProperty(msg))
- IriSP.PopcornReplacement.msgPump[msg] = [];
-
- IriSP.PopcornReplacement.msgPump[msg].push(callback);
-};
-
-IriSP.PopcornReplacement.trigger = function(msg, params) {
-// IriSP.jQuery(IriSP.PopcornReplacement.msgPump).trigger(msg, params);
-
- if (!IriSP.PopcornReplacement.msgPump.hasOwnProperty(msg))
- return;
-
- var d = IriSP.PopcornReplacement.msgPump[msg];
- for(var entry in d) {
- d[entry].call(window, params);
- }
-
-};
-
-IriSP.PopcornReplacement.guid = function(prefix) {
- var str = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
- var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
- return v.toString(16);
- });
-
- return prefix + str;
-};
-
-IriSP.PopcornReplacement.__initApi = function() {
- IriSP.PopcornReplacement.trigger("loadedmetadata"); // we've done more than loading metadata of course,
- // but popcorn doesn't need to know more.
- IriSP.PopcornReplacement.media.muted = jwplayer(IriSP.PopcornReplacement._container).getMute();
-};
-
-IriSP.PopcornReplacement.jwplayer = function(container, options) {
- IriSP.PopcornReplacement._container = container.slice(1); //eschew the '#'
- options.events = {
- onReady: IriSP.PopcornReplacement.__initApi,
- onTime: IriSP.PopcornReplacement.__timeHandler,
- onPlay: IriSP.PopcornReplacement.__playHandler,
- onPause: IriSP.PopcornReplacement.__pauseHandler,
- onSeek: IriSP.PopcornReplacement.__seekHandler
- }
-
- jwplayer(IriSP.PopcornReplacement._container).setup(options);
- IriSP.PopcornReplacement.media.duration = options.duration;
- return IriSP.PopcornReplacement;
-};
-
-IriSP.PopcornReplacement.currentTime = function(time) {
- if (typeof(time) === "undefined") {
- return jwplayer(IriSP.PopcornReplacement._container).getPosition();
- } else {
- var currentTime = +time;
- jwplayer( IriSP.PopcornReplacement._container ).seek( currentTime );
- IriSP.PopcornReplacement.trigger("seeked");
- return jwplayer(IriSP.PopcornReplacement._container).getPosition();
- }
-};
-
-IriSP.PopcornReplacement.play = function() {
- IriSP.PopcornReplacement.media.paused = false;
- IriSP.PopcornReplacement.trigger("play");
-// IriSP.PopcornReplacement.trigger("playing");
- jwplayer( IriSP.PopcornReplacement._container ).play();
-};
-
-IriSP.PopcornReplacement.pause = function() {
- if ( !IriSP.PopcornReplacement.media.paused ) {
- IriSP.PopcornReplacement.media.paused = true;
- IriSP.PopcornReplacement.trigger( "pause" );
- jwplayer( IriSP.PopcornReplacement._container ).pause();
- }
-};
-
-IriSP.PopcornReplacement.muted = function(val) {
- if (typeof(val) !== "undefined") {
-
- if (jwplayer(IriSP.PopcornReplacement._container).getMute() !== val) {
- if (val) {
- jwplayer(IriSP.PopcornReplacement._container).setMute(true);
- IriSP.PopcornReplacement.media.muted = true;
- } else {
- jwplayer( IriSP.PopcornReplacement._container ).setMute(false);
- IriSP.PopcornReplacement.media.muted = false;
- }
-
- IriSP.PopcornReplacement.trigger( "volumechange" );
- }
-
- return jwplayer( IriSP.PopcornReplacement._container ).getMute();
- } else {
- return jwplayer( IriSP.PopcornReplacement._container ).getMute();
- }
-};
-
-IriSP.PopcornReplacement.mute = IriSP.PopcornReplacement.muted;
-
-IriSP.PopcornReplacement.__codes = [];
-IriSP.PopcornReplacement.code = function(options) {
- IriSP.PopcornReplacement.__codes.push(options);
- return IriSP.PopcornReplacement;
-};
-
-IriSP.PopcornReplacement.__runCode = function() {
- var currentTime = jwplayer(IriSP.PopcornReplacement._container).getPosition();
- var i = 0;
- for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
- var c = IriSP.PopcornReplacement.__codes[i];
- if (currentTime == c.start) {
- c.onStart();
- }
-
- if (currentTime == c.end) {
- c.onEnd();
- }
-
- }
-};
-
-/* called everytime the player updates itself
- (onTime event)
- */
-
-IriSP.PopcornReplacement.__timeHandler = function(event) {
- var pos = event.position;
-
- var i = 0;
- for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
- var c = IriSP.PopcornReplacement.__codes[i];
-
- if (pos >= c.start && pos < c.end &&
- pos - 0.1 <= c.start) {
- c.onStart();
- }
-
- if (pos > c.start && pos > c.end &&
- pos - 0.1 <= c.end) {
- console.log("eonedn");
- c.onEnd();
- }
-
- }
-
- IriSP.PopcornReplacement.trigger("timeupdate");
-};
-
-IriSP.PopcornReplacement.__seekHandler = function(event) {
- var i = 0;
-
- for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
- var c = IriSP.PopcornReplacement.__codes[i];
-
- if (event.position >= c.start && event.position < c.end) {
- c.onEnd();
- }
- }
-
- for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
- var c = IriSP.PopcornReplacement.__codes[i];
-
- if (typeof(event.offset) === "undefined")
- event.offset = 0;
-
- if (event.offset >= c.start && event.offset < c.end) {
- c.onStart();
- }
-
- }
-
- IriSP.PopcornReplacement.trigger("timeupdate");
-};
-
-
-IriSP.PopcornReplacement.__playHandler = function(event) {
- IriSP.PopcornReplacement.media.paused = false;
- IriSP.PopcornReplacement.trigger("play");
-};
-
-IriSP.PopcornReplacement.__pauseHandler = function(event) {
- IriSP.PopcornReplacement.media.paused = true;
- IriSP.PopcornReplacement.trigger("pause");
-};
-
-IriSP.PopcornReplacement.roundTime = function() {
- var currentTime = IriSP.PopcornReplacement.currentTime();
- return Math.round(currentTime);
-};
-/* utils.js - various utils that don't belong anywhere else */
-
-/* trace function, for debugging */
-
-IriSP.traceNum = 0;
-IriSP.trace = function( msg, value ) {
-/*
- if( IriSP.config.gui.debug === true ) {
- IriSP.traceNum += 1;
- IriSP.jQuery( "<div>"+IriSP.traceNum+" - "+msg+" : "+value+"</div>" ).appendTo( "#Ldt-output" );
- }
-*/
-};
-
-/* used in callbacks - because in callbacks we lose "this",
- we need to have a special function which wraps "this" in
- a closure. This way, the
-*/
-IriSP.wrap = function (obj, fn) {
- return function() {
- var args = Array.prototype.slice.call(arguments, 0);
- return fn.apply(obj, args);
- }
-}
-
-/* convert a time to a percentage in the media */
-IriSP.timeToPourcent = function(time, timetotal){
- var time = Math.abs(time);
- var timetotal = Math.abs(timetotal);
-
- return Math.floor((time/timetotal) * 100);
-};
-
-IriSP.padWithZeros = function(num) {
- if (Math.abs(num) < 10) {
- return "0" + num.toString();
- } else {
- return num.toString();
- }
-};
-/* convert a number of seconds to a tuple of the form
- [hours, minutes, seconds]
-*/
-IriSP.secondsToTime = function(secs) {
- var hours = Math.abs(parseInt( secs / 3600 ) % 24);
- var minutes = Math.abs(parseInt( secs / 60 ) % 60);
- var seconds = parseFloat(Math.abs(secs % 60).toFixed(0));
-
- var toString_fn = function() {
- var ret = "";
- if (hours > 0)
- ret = IriSP.padWithZeros(this.hours) + ":";
- ret += IriSP.padWithZeros(this.minutes) + ":" + IriSP.padWithZeros(this.seconds);
-
- return ret;
- }
- return {"hours" : hours, "minutes" : minutes, "seconds" : seconds, toString: toString_fn};
-};
-
-IriSP.secondsToString
-
-/* format a tweet - replaces @name by a link to the profile, #hashtag, etc. */
-IriSP.formatTweet = function(tweet) {
- /*
- an array of arrays which hold a regexp and its replacement.
- */
- var regExps = [
- /* copied from http://codegolf.stackexchange.com/questions/464/shortest-url-regex-match-in-javascript/480#480 */
- [/((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gi, "<a href='$1'>$1</a>"],
- [/@(\w+)/gi, "<a href='http://twitter.com/$1'>@$1</a>"], // matches a @handle
- [/#(\w+)/gi, "<a href='http://twitter.com/search?q=%23$1'>#$1</a>"],// matches a hashtag
- [/(\+\+)/gi, "<span class='Ldt-PolemicPlusPlus'>$1</span>"],
- [/(--)/gi, "<span class='Ldt-PolemicMinusMinus'>$1</span>"],
- [/(==)/gi, "<span class='Ldt-PolemicEqualEqual'>$1</span>"],
- [/(\?\?)/gi, "<span class='Ldt-PolemicQuestion'>$1</span>"]
- ];
-
- var i = 0;
- for(i = 0; i < regExps.length; i++) {
- tweet = tweet.replace(regExps[i][0], regExps[i][1]);
- }
-
- return tweet;
-};
-
-IriSP.countProperties = function(obj) {
- var count = 0;
-
- for(var prop in obj) {
- if(obj.hasOwnProperty(prop))
- ++count;
- }
-
- return count;
-};
-
-// conversion de couleur Decimal vers HexaDecimal || 000 si fff
-IriSP.DEC_HEXA_COLOR = function (dec) {
- var hexa='0123456789ABCDEF';
- var hex='';
- var tmp;
- while (dec>15){
- tmp = dec-(Math.floor(dec/16))*16;
- hex = hexa.charAt(tmp)+hex;
- dec = Math.floor(dec/16);
- }
- hex = hexa.charAt(dec)+hex;
- return(hex);
-};
-
-/* shortcut to have global variables in templates */
-IriSP.templToHTML = function(template, values) {
- var params = IriSP.jQuery.extend(IriSP.default_templates_vars, values);
- return Mustache.to_html(template, params);
-};
-
-/* we need to be stricter than encodeURIComponent,
- because of twitter
-*/
-IriSP.encodeURI = function(str) {
- return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
- replace(/\)/g, '%29').replace(/\*/g, '%2A');
-}
-
-IriSP.__guidCounter = 0;
-IriSP.guid = function(prefix) {
- IriSP.__guidCounter += 1;
- return prefix + IriSP.__guidCounter;
-};
-/* for ie compatibility
-if (Object.prototype.__defineGetter__&&!Object.defineProperty) {
- Object.defineProperty=function(obj,prop,desc) {
- if ("get" in desc) obj.__defineGetter__(prop,desc.get);
- if ("set" in desc) obj.__defineSetter__(prop,desc.set);
- }
-}
-*/
-/* data.js - this file deals with how the players gets and sends data */
-
-IriSP.DataLoader = function() {
- this._cache = {};
-
- /*
- A structure to hold callbacks for specific urls. We need it because
- ajax calls are asynchronous, so it means that sometimes we ask
- multiple times for a ressource because the first call hasn't been
- received yet.
- */
- this._callbacks = {};
-};
-
-IriSP.DataLoader.prototype.get = function(url, callback) {
-
- var base_url = url.split("&")[0]
- if (this._cache.hasOwnProperty(base_url)) {
- callback(this._cache[base_url]);
- } else {
- if (!this._callbacks.hasOwnProperty(base_url)) {
- this._callbacks[base_url] = [];
- this._callbacks[base_url].push(callback);
- /* we need a closure because this gets lost when it's called back */
-
- // uncomment you don't want to use caching.
- // IriSP.jQuery.get(url, callback);
-
- var func = function(data) {
- this._cache[base_url] = data;
- var i = 0;
-
- for (i = 0; i < this._callbacks[base_url].length; i++) {
- this._callbacks[base_url][i](this._cache[base_url]);
- }
- };
-
- /* automagically choose between json and jsonp */
- if (url.indexOf(document.location.hostname) === -1 &&
- url.indexOf("http://") !== -1 /* not a relative url */ ) {
- // we contacting a foreign domain, use JSONP
-
- IriSP.jQuery.get(url, {}, IriSP.wrap(this, func), "jsonp");
- } else {
-
- // otherwise, hey, whatever rows your boat
- IriSP.jQuery.get(url, IriSP.wrap(this, func));
- }
-
- } else {
- /* simply push the callback - it'll get called when the ressource
- has been received */
-
- this._callbacks[base_url].push(callback);
-
- }
- }
-}
-
-/* the base abstract "class" */
-IriSP.Serializer = function(DataLoader, url) {
- this._DataLoader = DataLoader;
- this._url = url;
- this._data = [];
-};
-
-IriSP.Serializer.prototype.serialize = function(data) { };
-IriSP.Serializer.prototype.deserialize = function(data) {};
-
-IriSP.Serializer.prototype.currentMedia = function() {
-};
-
-IriSP.Serializer.prototype.sync = function(callback) {
- callback.call(this, this._data);
-};
-
-IriSP.SerializerFactory = function(DataLoader) {
- this._dataloader = DataLoader;
-};
-
-IriSP.SerializerFactory.prototype.getSerializer = function(metadataOptions) {
- /* This function returns serializer set-up with the correct
- configuration - takes a metadata struct describing the metadata source
- */
-
- if (metadataOptions === undefined)
- /* return an empty serializer */
- return IriSP.Serializer("", "");
-
- switch(metadataOptions.type) {
- case "json":
- return new IriSP.JSONSerializer(this._dataloader, metadataOptions.src);
- break;
-
- case "dummy": /* only used for unit testing - not defined in production */
- return new IriSP.MockSerializer(this._dataloader, metadataOptions.src);
- break;
-
- case "empty":
- return new IriSP.Serializer("", "empty");
- break;
-
- default:
- return undefined;
- }
-};
-/* site.js - all our site-dependent config : player chrome, cdn locations, etc...*/
-
-IriSP.lib = {
- jQuery : "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js",
- jQueryUI : "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.js",
- jQueryToolTip : "http://cdn.jquerytools.org/1.2.4/all/jquery.tools.min.js",
- swfObject : "http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",
- cssjQueryUI : "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css",
- popcorn : "/mdp/src/js/libs/popcorn.js",
- jwplayer : "/mdp/src/js/libs/jwplayer.js",
- popcornReplacement: "/mdp/src/js/libs/pop.js",
- raphael: "/mdp/src/js/libs/raphael.js",
- "popcorn.mediafragment" : "/mdp/src/js/libs/popcorn.mediafragment.js",
- "popcorn.code" : "/mdp/src/js/libs/popcorn.code.js",
- "popcorn.jwplayer": "/mdp/src/js/libs/popcorn.jwplayer.js",
- "popcorn.youtube": "/mdp/src/js/libs/popcorn.youtube.js"
-};
-
-//Player Configuration
-IriSP.config = undefined;
-
-IriSP.widgetsDefaults = {
- "LayoutManager" : {spacer_div_height : "0px" },
- "PlayerWidget" : {},
- "AnnotationsWidget": {
- "share_text" : "I'm watching ",
- "fb_link" : "http://www.facebook.com/share.php?u=",
- "tw_link" : "http://twitter.com/home?status=",
- "gplus_link" : ""
- },
- "TweetsWidget" : {
- default_profile_picture : "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png",
- tweet_display_period: 10000 // how long do we show a tweet ?
- },
- "SliderWidget" : {
- minimize_period: 850 // how long does the slider stays maximized after the user leaves the zone ?
- },
- "Main" : {
- autoplay: true
- }
-
-};
-
-IriSP.paths = {
-// "imgs": "/tweetlive/res/metadataplayer/src/css/imgs"
- "imgs": "/mdp/src/css/imgs"
-};
-IriSP.default_templates_vars = {
- "img_dir" : IriSP.paths.imgs
-};
-
-/* ui.js - ui related functions */
-
-/* FIXME: use an sharing library */
-IriSP.LdtShareTool = IriSP.share_template; /* the contents come from share.html */
-
-IriSP.createPlayerChrome = function(){
- var width = IriSP.config.gui.width;
- var height = IriSP.config.gui.height;
- var heightS = IriSP.config.gui.height-20;
-
- // AUDIO */
- // PB dans le html : ;
- IriSP.trace( "__IriSP.createMyHtml",IriSP.config.gui.container );
-
-
- /* FIXME : factor this in another file */
- if( IriSP.config.gui.mode=="radio" ){
-
- IriSP.jQuery( "#"+IriSP.config.gui.container ).before(IriSP.search_template);
- var radioPlayer = Mustache.to_html(IriSP.radio_template, {"share_template" : IriSP.share_template});
- IriSP.jQuery(radioPlayer).appendTo("#"+IriSP.config.gui.container);
-
- // special tricks for IE 7
- if (IriSP.jQuery.browser.msie==true && IriSP.jQuery.browser.version=="7.0"){
- //LdtSearchContainer
- //__IriSP.jQuery("#LdtPlayer").attr("margin-top","50px");
- IriSP.jQuery("#Ldt-Root").css("padding-top","25px");
- IriSP.trace("__IriSP.createHtml","IE7 SPECIAL ");
- }
- } else if(IriSP.config.gui.mode=="video") {
-
- var videoPlayer = Mustache.to_html(IriSP.video_template, {"share_template" : IriSP.share_template, "heightS" : heightS});
- IriSP.jQuery(videoPlayer).appendTo("#"+IriSP.config.gui.container);
- }
-
- IriSP.jQuery("#Ldt-Annotations").width(width-(75*2));
- IriSP.jQuery("#Ldt-Show-Arrow-container").width(width-(75*2));
- IriSP.jQuery("#Ldt-ShowAnnotation-audio").width(width-10);
- IriSP.jQuery("#Ldt-ShowAnnotation-video").width(width-10);
- IriSP.jQuery("#Ldt-SaKeyword").width(width-10);
- IriSP.jQuery("#Ldt-controler").width(width-10);
- IriSP.jQuery("#Ldt-Control").attr("z-index","100");
- IriSP.jQuery("#Ldt-controler").hide();
-
- IriSP.jQuery(IriSP.annotation_loading_template).appendTo("#Ldt-ShowAnnotation-audio");
-
- if(IriSP.config.gui.mode=='radio'){
- IriSP.jQuery("#Ldt-load-container").attr("width",IriSP.config.gui.width);
- }
- // Show or not the output
- if(IriSP.config.gui.debug===true){
- IriSP.jQuery("#Ldt-output").show();
- } else {
- IriSP.jQuery("#Ldt-output").hide();
- }
-
-};
-
-
-/* create the buttons and the slider */
-IriSP.createInterface = function( width, height, duration ) {
-
- IriSP.jQuery( "#Ldt-controler" ).show();
- //__IriSP.jQuery("#Ldt-Root").css('display','visible');
- IriSP.trace( "__IriSP.createInterface" , width+","+height+","+duration+"," );
-
- IriSP.jQuery( "#Ldt-ShowAnnotation").click( function () {
- //__IriSP.jQuery(this).slideUp();
- } );
-
- var LdtpPlayerY = IriSP.jQuery("#Ldt-PlaceHolder").attr("top");
- var LdtpPlayerX = IriSP.jQuery("#Ldt-PlaceHolder").attr("left");
-
- IriSP.jQuery( "#slider-range-min" ).slider( { //range: "min",
- value: 0,
- min: 1,
- max: duration/1000,//1:54:52.66 = 3600+3240+
- step: 0.1,
- slide: function(event, ui) {
-
- //__IriSP.jQuery("#amount").val(ui.value+" s");
- //player.sendEvent('SEEK', ui.value)
- IriSP.MyApiPlayer.seek(ui.value);
- //changePageUrlOffset(ui.value);
- //player.sendEvent('PAUSE')
- }
- } );
-
- IriSP.trace("__IriSP.createInterface","ICI");
- IriSP.jQuery("#amount").val(IriSP.jQuery("#slider-range-min").slider("value")+" s");
- IriSP.jQuery(".Ldt-Control1 button:first").button({
- icons: {
- primary: 'ui-icon-play'
- },
- text: false
- }).next().button({
- icons: {
- primary: 'ui-icon-seek-next'
- },
- text: false
- });
- IriSP.jQuery(".Ldt-Control2 button:first").button({
- icons: {
- primary: 'ui-icon-search'//,
- //secondary: 'ui-icon-volume-off'
- },
- text: false
- }).next().button({
- icons: {
- primary: 'ui-icon-volume-on'
- },
- text: false
- });
-
- // /!\ PB A MODIFIER
- //__IriSP.MyTags.draw();
- IriSP.trace("__IriSP.createInterface","ICI2");
- IriSP.jQuery( "#ldt-CtrlPlay" ).attr( "style", "background-color:#CD21C24;" );
-
- IriSP.jQuery( "#Ldt-load-container" ).hide();
-
- if( IriSP.config.gui.mode=="radio" & IriSP.jQuery.browser.msie != true ) {
- IriSP.jQuery( "#Ldtplayer1" ).attr( "height", "0" );
- }
- IriSP.trace( "__IriSP.createInterface" , "3" );
-
- IriSP.trace( "__IriSP.createInterface", "END" );
-
- };
-/* the widget classes and definitions */
-
-IriSP.Widget = function(Popcorn, config, Serializer) {
-
- if (config === undefined || config === null) {
- config = {}
- }
-
- this._Popcorn = Popcorn;
- this._config = config;
- this._serializer = Serializer;
-
- if (config.hasOwnProperty("container")) {
- this._id = config.container;
- this.selector = IriSP.jQuery("#" + this._id);
- }
-
- if (config.hasOwnProperty("spacer")) {
- this._spacerId = config.spacer;
- this.spacer = IriSP.jQuery("#" + this._spacerId);
- }
-
-
- if (config.hasOwnProperty("width")) {
- // this.width and not this._width because we consider it public.
- this.width = config.width;
- }
-
- if (config.hasOwnProperty("height")) {
- this.height = config.height;
- }
-
- if (config.hasOwnProperty("heightmax")) {
- this.heightmax = config.heightmax;
- }
-
- if (config.hasOwnProperty("widthmax")) {
- this.widthmax = config.widthmax;
- }
-
-};
-
-IriSP.Widget.prototype.draw = function() {
- /* implemented by "sub-classes" */
-};
-
-IriSP.Widget.prototype.redraw = function() {
- /* implemented by "sub-classes" */
-};
-/* modules are non-graphical entities, similar to widgets */
-
-IriSP.Module = function(Popcorn, config, Serializer) {
-
- if (config === undefined || config === null) {
- config = {}
- }
-
- this._Popcorn = Popcorn;
- this._config = config;
- this._serializer = Serializer;
-};
-/* layout.js - very basic layout management */
-
-/*
- a layout manager manages a div and the layout of objects
- inside it.
-*/
-
-IriSP.LayoutManager = function(options) {
- this._Popcorn = null;
- this._widgets = [];
-
- this._div = "LdtPlayer";
- this._width = 640;
-
- if (options === undefined) {
- options = {};
- };
-
- if (options.hasOwnProperty('container')) {
- this._div = options.container;
- }
-
- if (options.hasOwnProperty('width')) {
- this._width = options.width;
- }
-
- if (options.hasOwnProperty('height')) {
- this._height = options.height;
- }
-
- /* this is a shortcut */
- this.selector = IriSP.jQuery("#" + this._div);
-
- this.selector.css("width", this._width);
-
- if (this._height !== undefined)
- this.selector.css("height", this._height);
-};
-
-/* we need this special setter because of a chicken and egg problem :
- we want the manager to use popcorn but the popcorn div will be managed
- by the manager. So we need a way to set the instance the manager uses
-*/
-
-IriSP.LayoutManager.prototype.setPopcornInstance = function(popcorn) {
- this._Popcorn = popcorn;
-}
-
-/* stem is a string to append to the id of the widget */
-IriSP.LayoutManager.prototype.createDiv = function(stem) {
- if (typeof(stem) === "undefined")
- stem = "";
-
- var newDiv = IriSP.guid(this._div + "_widget_" + stem + "_");
- var spacerDiv = IriSP.guid("LdtPlayer_spacer_");
- this._widgets.push(newDiv);
-
- var divTempl = "<div id='{{id}}' style='width: {{width}}px; position: relative;'></div";
- var spacerTempl = "<div id='{{spacer_id}}' style='width: {{width}}px; position: relative; height: {{spacer_div_height}};'></div";
-
- var divCode = Mustache.to_html(divTempl, {id: newDiv, width: this._width});
- var spacerCode = Mustache.to_html(spacerTempl, {spacer_id: spacerDiv, width: this._width,
- spacer_div_height: IriSP.widgetsDefaults.LayoutManager.spacer_div_height });
-
- this.selector.append(divCode);
- this.selector.append(spacerCode);
-
- return [newDiv, spacerDiv];
-};
-/* init.js - initialization and configuration of Popcorn and the widgets
-exemple json configuration:
-
- */
-
-IriSP.setupDataLoader = function() {
- /* we set it up separately because we need to
- get data at the very beginning, for instance when
- setting up the video */
- IriSP.__dataloader = new IriSP.DataLoader();
-};
-
-IriSP.configurePopcorn = function (layoutManager, options) {
- var pop;
- var ret = layoutManager.createDiv();
- var containerDiv = ret[0];
-
- switch(options.type) {
- /*
- todo : dynamically create the div/video tag which
- will contain the video.
- */
- case "html5":
- var tmpId = Popcorn.guid("video");
- IriSP.jQuery("#" + containerDiv).append("<video src='" + options.file + "' id='" + tmpId + "'></video>");
-
- if (options.hasOwnProperty("width"))
- IriSP.jQuery("#" + containerDiv).css("width", options.width);
-
- if (options.hasOwnProperty("height"))
- IriSP.jQuery("#" + containerDiv).css("height", options.height);
-
- pop = Popcorn("#" + tmpId);
- break;
-
- case "jwplayer":
- var opts = IriSP.jQuery.extend({}, options);
- delete opts.container;
-
- if (options.provider === "rtmp") {
- /* exit if we can't access the metadata */
- if (typeof(IriSP.__jsonMetadata) === "undefined") {
- break;
- };
-
-
- // the json format is totally illogical
- opts.streamer = IriSP.__jsonMetadata["medias"][0]["meta"]["item"]["value"];
- var source = IriSP.__jsonMetadata["medias"][0]["href"];
-
- // the source if a full url but jwplayer wants an url relative to the
- // streamer url, so we've got to remove the common part.
- opts.file = source.slice(opts.streamer.length);
- } else {
- /* other providers type, video for instance -
- pass everything as is */
- }
-
- pop = IriSP.PopcornReplacement.jwplayer("#" + containerDiv, opts);
- break;
-
- case "youtube":
- var opts = IriSP.jQuery.extend({}, options);
- delete opts.container;
- opts.controls = 0;
- opts.autostart = false;
- templ = "width: {{width}}px; height: {{height}}px;";
- var str = Mustache.to_html(templ, {width: opts.width, height: opts.height});
- // Popcorn.youtube wants us to specify the size of the player in the style attribute of its container div.
- IriSP.jQuery("#" + containerDiv).attr("style", str);
-
- pop = Popcorn.youtube("#" + containerDiv, opts.video, opts);
- break;
-
- default:
- pop = undefined;
- };
-
- return pop;
-};
-
-IriSP.configureWidgets = function (popcornInstance, layoutManager, guiOptions) {
-
- var serialFactory = new IriSP.SerializerFactory(IriSP.__dataloader);
- var params = {width: guiOptions.width, height: guiOptions.height};
-
- var ret_widgets = [];
- var index;
-
- for (index = 0; index < guiOptions.widgets.length; index++) {
- var widgetConfig = guiOptions.widgets[index];
- var widget = IriSP.instantiateWidget(popcornInstance, serialFactory, layoutManager, widgetConfig);
- ret_widgets.push(widget);
-
- };
-
- return ret_widgets;
-};
-
-IriSP.configureModules = function (popcornInstance, modulesList) {
-
- var serialFactory = new IriSP.SerializerFactory(IriSP.__dataloader);
- var ret_modules = [];
- var index;
-
- for (index = 0; index < modulesList.length; index++) {
- var moduleConfig = modulesList[index];
-
- var serializer = serialFactory.getSerializer(moduleConfig.metadata);
- var module = new IriSP[moduleConfig.type](popcornInstance, moduleConfig, serializer);
- ret_modules.push(module);
- };
-
- return ret_modules;
-};
-
-IriSP.instantiateWidget = function(popcornInstance, serialFactory, layoutManager, widgetConfig) {
- /* create div returns us a container for the widget and a spacer */
- var ret = layoutManager.createDiv(widgetConfig.type);
- var container = ret[0];
- var spacer = ret[1];
-
- var arr = IriSP.jQuery.extend({}, widgetConfig);
- arr.container = container;
- arr.spacer = spacer;
-
- var serializer = serialFactory.getSerializer(widgetConfig.metadata);
-
- if (typeof serializer == "undefined")
- debugger;
-
- // instantiate the object passed as a string
- var widget = new IriSP[widgetConfig.type](popcornInstance, arr, serializer);
-
- if (widgetConfig.hasOwnProperty("requires")) {
- // also create the widgets this one depends on.
- // the dependency widget is available in the parent widget context as
- // this.WidgetName (for instance, this.TipWidget);
-
- var i = 0;
- for(i = 0; i < widgetConfig.requires.length; i++) {
- var widgetName = widgetConfig.requires[i]["type"];
- widget[widgetName] = IriSP.instantiateWidget(popcornInstance, serialFactory, layoutManager, widgetConfig.requires[i]);
- }
- }
-
- serializer.sync(IriSP.wrap(widget, function() { this.draw(); }));
- return widget;
-};
-/* mediafragment module */
-
-IriSP.MediaFragment = function(Popcorn, config, Serializer) {
- IriSP.Module.call(this, Popcorn, config, Serializer);
-
- this.mutex = false; /* a mutex because we access the url from two different functions */
-
- this._Popcorn.listen( "loadedmetadata", IriSP.wrap(this, IriSP.MediaFragment.advanceTime));
- this._Popcorn.listen( "pause", IriSP.wrap(this, IriSP.MediaFragment.updateTime));
- this._Popcorn.listen( "seeked", IriSP.wrap(this, IriSP.MediaFragment.updateTime));
- this._Popcorn.listen( "IriSP.PolemicTweet.click", IriSP.wrap(this, IriSP.MediaFragment.updateAnnotation));
- this._Popcorn.listen( "IriSP.SegmentsWidget.click", IriSP.wrap(this, IriSP.MediaFragment.updateAnnotation));
-};
-
-IriSP.MediaFragment.advanceTime = function() {
- var url = window.location.href;
-
- if ( url.split( "#" )[ 1 ] != null ) {
- pageoffset = url.split( "#" )[1];
-
- if ( pageoffset.substring(0, 2) === "t=") {
- // timecode
- if ( pageoffset.substring( 2 ) != null ) {
- var offsettime = pageoffset.substring( 2 );
- this._Popcorn.currentTime( parseFloat( offsettime ) );
- }
- } else if ( pageoffset.substring(0, 2) === "a=") {
- // annotation
- var annotationId = pageoffset.substring( 2 );
-
- // there's no better way than that because
- // of possible race conditions
- this._serializer.sync(IriSP.wrap(this, function() {
- IriSP.MediaFragment.lookupAnnotation.call(this, annotationId);
- }));
- }
- }
-};
-
-IriSP.MediaFragment.updateTime = function() {
- if (this.mutex === true) {
- return;
- }
-
- var history = window.history;
- if ( !history.pushState ) {
- return false;
- }
-
- splitArr = window.location.href.split( "#" )
- history.replaceState( {}, "", splitArr[0] + "#t=" + this._Popcorn.currentTime().toFixed( 2 ) );
-};
-
-
-IriSP.MediaFragment.updateAnnotation = function(annotationId) {
- var _this = this;
- this.mutex = true;
-
- var history = window.history;
- if ( !history.pushState ) {
- return false;
- }
-
- splitArr = window.location.href.split( "#" )
- history.replaceState( {}, "", splitArr[0] + "#a=" + annotationId);
-
- window.setTimeout(function() { _this.mutex = false }, 50);
-};
-
-// lookup and seek to the beginning of an annotation
-IriSP.MediaFragment.lookupAnnotation = function(annotationId) {
- var annotation = undefined;
- var annotations = this._serializer._data.annotations;
-
- var i;
- for (i = 0; i < annotations.length; i++) {
- if (annotations[i].id === annotationId) {
- annotation = annotations[i];
- break;
- }
- }
-
- if (typeof(annotation) !== "undefined") {
- this._Popcorn.currentTime(annotation.begin / 1000);
- }
-};
-IriSP.AnnotationsWidget = function(Popcorn, config, Serializer) {
- IriSP.Widget.call(this, Popcorn, config, Serializer);
-
-};
-
-
-IriSP.AnnotationsWidget.prototype = new IriSP.Widget();
-
-IriSP.AnnotationsWidget.prototype.clear = function() {
- this.selector.find(".Ldt-SaTitle").text("");
- this.selector.find(".Ldt-SaDescription").text("");
- this.selector.find(".Ldt-SaKeywordText").text("");
-};
-
-IriSP.AnnotationsWidget.prototype.displayAnnotation = function(annotation) {
-
- var title = annotation.content.title;
- var description = annotation.content.description;
- var keywords = "" // FIXME;
- var begin = +annotation.begin / 1000;
- var end = +annotation.end / 1000;
- var duration = +this._serializer.currentMedia().meta["dc:duration"];
-
- var title_templ = "{{title}} - ( {{begin}} - {{end}} )";
- var endstr = Mustache.to_html(title_templ, {title: title, begin: IriSP.secondsToTime(begin), end: IriSP.secondsToTime(end)});
-
- this.selector.find(".Ldt-SaTitle").text(endstr);
- this.selector.find(".Ldt-SaDescription").text(description);
-
- // update sharing buttons
- var defaults = IriSP.widgetsDefaults.AnnotationsWidget;
- var text = defaults.share_text;
- var fb_link = defaults.fb_link;
- var tw_link = defaults.tw_link;
- var gplus_link = defaults.gplus_link;
- var url = document.location.href + "#a=" + annotation.id;
- this.selector.find(".Ldt-fbShare").attr("href", fb_link + IriSP.encodeURI(text) + IriSP.encodeURI(url));
- this.selector.find(".Ldt-TwShare").attr("href", tw_link + IriSP.encodeURI(text) + IriSP.encodeURI(url));
- this.selector.find(".Ldt-GplusShare").attr("href", fb_link + IriSP.encodeURI(text) + IriSP.encodeURI(url));
-};
-
-IriSP.AnnotationsWidget.prototype.clearWidget = function() {
-
-
- /* retract the pane between two annotations */
- this.selector.find(".Ldt-SaTitle").text("");
- this.selector.find(".Ldt-SaDescription").text("");
- this.selector.find(".Ldt-SaKeywordText").html("");
- this.selector.find(".Ldt-ShowAnnotation").slideUp();
-};
-
-IriSP.AnnotationsWidget.prototype.draw = function() {
- var _this = this;
-
- var annotationMarkup = IriSP.templToHTML(IriSP.annotationWidget_template);
- this.selector.append(annotationMarkup);
- var view;
-
- if (typeof(this._serializer._data.views) !== "undefined" && this._serializer._data.views !== null)
- view = this._serializer._data.views[0];
-
- var view_type = "";
-
- if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
- view_type = view.annotation_types[0];
- }
-
- var annotations = this._serializer._data.annotations;
- var i;
-
- for (i in annotations) {
- var annotation = annotations[i];
- var begin = Math.round((+ annotation.begin) / 1000);
- var end = Math.round((+ annotation.end) / 1000);
-
- if (view_type != "" && typeof(annotation.meta) !== "undefined" && typeof(annotation.meta["id-ref"]) !== "undefined"
- && annotation.meta["id-ref"] != view_type) {
- continue;
- }
-
-
- var conf = {start: begin, end: end,
- onStart:
- function(annotation) {
- return function() {
- _this.displayAnnotation(annotation);
-
- } }(annotation),
- onEnd:
- function() { _this.clearWidget.call(_this); }
- };
- this._Popcorn = this._Popcorn.code(conf);
- }
-
-};
-IriSP.ArrowWidget = function(Popcorn, config, Serializer) {
- IriSP.Widget.call(this, Popcorn, config, Serializer);
-
- this._oldAnnotation = null;
-
-};
-
-
-IriSP.ArrowWidget.prototype = new IriSP.Widget();
-
-IriSP.ArrowWidget.prototype.clear = function() {
-
-};
-
-IriSP.ArrowWidget.prototype.clearWidget = function() {
-};
-
-IriSP.ArrowWidget.prototype.draw = function() {
- var templ = Mustache.to_html(IriSP.arrowWidget_template, {});
- this.selector.append(templ);
- this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.timeUpdateHandler));
-};
-
-IriSP.ArrowWidget.prototype.timeUpdateHandler = function(percents) {
- var currentTime = this._Popcorn.currentTime();
- var currentAnnotation = this._serializer.currentAnnotations(currentTime)[0]; // FIXME : use the others ?
-
- /* move the arrow only if the current annotation changes */
- if (currentAnnotation != this._oldAnnotation) {
- var begin = (+ currentAnnotation.begin) / 1000;
- var end = (+ currentAnnotation.end) / 1000;
-
- var duration = +this._serializer.currentMedia().meta["dc:duration"] / 1000;
- var middle_time = (begin + end) / 2;
- var percents = Math.floor((middle_time / duration) * 100);
-
- // we need to apply a fix because the arrow has a certain length
- // it's half the length of the arrow (27 / 2). We need to convert
- // it in percents though.
- var totalWidth = this.selector.width();
- var correction = ((27 / 2) / totalWidth) * 100;
- var corrected_percents = percents - correction;
-
- /* don't move out of the screen */
- if (corrected_percents <= 0)
- corrected_percents = 0;
-
- this.selector.children(".Ldt-arrowWidget").animate({"left" : corrected_percents + "%"});
-
- this._oldAnnotation = currentAnnotation;
- }
-}
-IriSP.PlayerWidget = function(Popcorn, config, Serializer) {
- IriSP.Widget.call(this, Popcorn, config, Serializer);
-
- this._searchBlockOpen = false;
- this._searchLastValue = "";
-};
-
-IriSP.PlayerWidget.prototype = new IriSP.Widget();
-
-IriSP.PlayerWidget.prototype.draw = function() {
- var self = this;
- var width = this.width;
- var height = this.height;
- var heightS = this.height-20;
-
- var Player_templ = Mustache.to_html(IriSP.player_template, {"share_template" : IriSP.share_template});
- this.selector.append(Player_templ);
-
- this.selector.children(".Ldt-controler").show();
-
- // handle clicks by the user on the video.
- this._Popcorn.listen("play", IriSP.wrap(this, this.playButtonUpdater));
- this._Popcorn.listen("pause", IriSP.wrap(this, this.playButtonUpdater));
-
- this._Popcorn.listen("volumechange", IriSP.wrap(this, this.muteButtonUpdater));
-
- this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.timeDisplayUpdater));
- this._Popcorn.listen("IriSP.search.matchFound", IriSP.wrap(this, this.searchMatch));
- this._Popcorn.listen("IriSP.search.noMatchFound", IriSP.wrap(this, this.searchNoMatch));
-
-
- this.selector.find(".Ldt-CtrlPlay").click(function() { self.playHandler.call(self); });
- this.selector.find(".Ldt-CtrlNext").click(function() { });
- this.selector.find(".Ldt-CtrlSearch").click(function() { self.searchButtonHandler.call(self); });
-
- this.selector.find('.Ldt-CtrlSound').click(function() { self.muteHandler.call(self); } );
-
- this.selector.find(".Ldt-CtrlPlay").attr( "style", "background-color:#CD21C24;" );
-
- var searchButtonPos = this.selector.find(".Ldt-CtrlSearch").position();
- var searchBox = Mustache.to_html(IriSP.search_template, {margin_left : searchButtonPos.left + "px"});
- this.selector.append(searchBox);
-
- // trigger an IriSP.PlayerWidget.MouseOver to the widgets that are interested (i.e : sliderWidget)
- this.selector.hover(function() { self._Popcorn.trigger("IriSP.PlayerWidget.MouseOver"); },
- function() { self._Popcorn.trigger("IriSP.PlayerWidget.MouseOut"); });
-
- this.muteButtonUpdater(); /* some player - jwplayer notable - save the state of the mute button between sessions */
-};
-
-/* Update the elasped time div */
-IriSP.PlayerWidget.prototype.timeDisplayUpdater = function() {
-
- if (this._previousSecond === undefined)
- this._previousSecond = this._Popcorn.roundTime();
-
- else {
- /* we're still in the same second, so it's not necessary to update time */
- if (this._Popcorn.roundTime() == this._previousSecond)
- return;
-
- }
-
- // we get it at each call because it may change.
- var duration = +this._serializer.currentMedia().meta["dc:duration"] / 1000;
- var totalTime = IriSP.secondsToTime(duration);
- var elapsedTime = IriSP.secondsToTime(this._Popcorn.currentTime());
-
- this.selector.find(".Ldt-ElapsedTime").html(elapsedTime.toString());
- this.selector.find(".Ldt-TotalTime").html(totalTime.toString());
- this._previousSecond = this._Popcorn.roundTime();
-};
-
-/* update the icon of the button - separate function from playHandler
- because in some cases (for instance, when the user directly clicks on
- the jwplayer window) we have to change the icon without playing/pausing
-*/
-IriSP.PlayerWidget.prototype.playButtonUpdater = function() {
- var status = this._Popcorn.media.paused;
-
- if ( status == true ){
- this.selector.find(".Ldt-CtrlPlay").attr("title", "Play");
-
- // we use templToHTML because it has some predefined
- // vars like where to get the images
- var templ = IriSP.templToHTML("url({{img_dir}}/play_sprite.png)");
- this.selector.find(".Ldt-CtrlPlay").css("background-image", templ);
-
- } else {
- this.selector.find(".Ldt-CtrlPlay").attr("title", "Pause");
-
- // we use templToHTML because it has some predefined
- // vars like where to get the images
- var templ = IriSP.templToHTML("url({{img_dir}}/pause_sprite.png)");
- this.selector.find(".Ldt-CtrlPlay").css("background-image", templ);
- }
-
- return;
-};
-
-
-IriSP.PlayerWidget.prototype.playHandler = function() {
- var status = this._Popcorn.media.paused;
-
- if ( status == true ){
- this._Popcorn.play();
- } else {
- this._Popcorn.pause();
- }
-};
-
-IriSP.PlayerWidget.prototype.muteHandler = function() {
- if (!this._Popcorn.muted()) {
- this._Popcorn.mute(true);
- } else {
- this._Popcorn.mute(false);
- }
-};
-
-IriSP.PlayerWidget.prototype.muteButtonUpdater = function() {
- var status = this._Popcorn.media.muted;
-
- if ( status == true ){
- this.selector.find(".Ldt-CtrlSound").attr("title", "Unmute");
-
- // we use templToHTML because it has some predefined
- // vars like where to get the images
- var templ = IriSP.templToHTML("url({{img_dir}}/sound_sprite.png)");
- this.selector.find(".Ldt-CtrlSound").css("background-image", templ);
-
- } else {
- this.selector.find(".Ldt-CtrlSound").attr("title", "Mute");
-
- // we use templToHTML because it has some predefined
- // vars like where to get the images
- var templ = IriSP.templToHTML("url({{img_dir}}/mute_sprite.png)");
- this.selector.find(".Ldt-CtrlSound").css("background-image", templ);
- }
-
- return;
-};
-
-
-IriSP.PlayerWidget.prototype.searchButtonHandler = function() {
- var self = this;
-
- /* show the search field if it is not shown */
- if ( this._searchBlockOpen == false ) {
- this.selector.find(".LdtSearch").show(100);
-
- this.selector.find(".LdtSearchInput").css('background-color','#fff');
- this.selector.find(".LdtSearchInput").focus();
- this.selector.find(".LdtSearchInput").attr('value', this._searchLastValue);
- this._Popcorn.trigger("IriSP.search", this._searchLastValue); // trigger the search to make it more natural.
-
- this._searchBlockOpen = true;
- this.selector.find(".LdtSearchInput").bind('keyup', null, function() { self.searchHandler.call(self); } );
-
- // we need this variable because some widget can find a match in
- // their data while at the same time other's don't. As we want the
- // search field to become green when there's a match, we need a
- // variable to remember that we had one.
- this._positiveMatch = false;
-
- // tell the world the field is open
- this._Popcorn.trigger("IriSP.search.open");
-
- } else {
- this._searchLastValue = this.selector.find(".LdtSearchInput").attr('value');
- this.selector.find(".LdtSearchInput").attr('value','');
- this.selector.find(".LdtSearch").hide(100);
-
- // unbind the watcher event.
- this.selector.find(".LdtSearchInput").unbind('keypress set');
- this._searchBlockOpen = false;
-
- this._positiveMatch = false;
-
- this._Popcorn.trigger("IriSP.search.closed");
- }
-};
-
-/* this handler is called whenever the content of the search
- field changes */
-IriSP.PlayerWidget.prototype.searchHandler = function() {
- this._searchLastValue = this.selector.find(".LdtSearchInput").attr('value');
- this._positiveMatch = false;
-
- // do nothing if the search field is empty, instead of highlighting everything.
- if (this._searchLastValue == "") {
- this._Popcorn.trigger("IriSP.search.cleared");
- this.selector.find(".LdtSearchInput").css('background-color','');
- } else {
- this._Popcorn.trigger("IriSP.search", this._searchLastValue);
- }
-};
-
-/*
- handler for the IriSP.search.found message, which is sent by some views when they
- highlight a match.
-*/
-IriSP.PlayerWidget.prototype.searchMatch = function() {
- this._positiveMatch = true;
- this.selector.find(".LdtSearchInput").css('background-color','#e1ffe1');
-}
-
-/* the same, except that no value could be found */
-IriSP.PlayerWidget.prototype.searchNoMatch = function() {
- if (this._positiveMatch !== true)
- this.selector.find(".LdtSearchInput").css('background-color', "#d62e3a");
-}
-
-/*
- *
- * Copyright 2010 Institut de recherche et d'innovation
- * contributor(s) : Samuel Huron
- *
- * contact@iri.centrepompidou.fr
- * http://www.iri.centrepompidou.fr
- *
- * This software is a computer program whose purpose is to show and add annotations on a video .
- * This software is governed by the CeCILL-C license under French law and
- * abiding by the rules of distribution of free software. You can use,
- * modify and/ or redistribute the software under the terms of the CeCILL-C
- * license as circulated by CEA, CNRS and INRIA at the following URL
- * "http://www.cecill.info".
- *
- * The fact that you are presently reading this means that you have had
- * knowledge of the CeCILL-C license and that you accept its terms.
-*/
-// CHART TIMELINE / VERSION PROTOTYPE ::
-
-IriSP.PolemicWidget = function(Popcorn, config, Serializer) {
- IriSP.Widget.call(this, Popcorn, config, Serializer);
-
- this.userPol = new Array();
- this.userNoPol = new Array();
- this.userst = new Array();
- this.numberOfTweet = 0;
- this.Users;
- this.TweetPolemic;
- this.yMax = this.height;
- this.PaperSlider;
- this.heightOfChart;
- this.tweets = new Array();
- this.svgElements = {};
-
- // Make and define the Raphael area
- this.paper = Raphael(document.getElementById(this._id), config.width, config.height);
-
- this.oldSearchMatches = [];
-
- // event handlers
- this._Popcorn.listen("IriSP.search", IriSP.wrap(this, function(searchString) { this.searchHandler(searchString); }));
- this._Popcorn.listen("IriSP.search.closed", IriSP.wrap(this, this.searchFieldClosedHandler));
- this._Popcorn.listen("IriSP.search.cleared", IriSP.wrap(this, this.searchFieldClearedHandler));
-
-};
-
-IriSP.PolemicWidget.prototype = new IriSP.Widget();
-
-IriSP.PolemicWidget.prototype.draw = function() {
-
- // variable
- // yMax
-
- var self = this;
- var yCoef = 2; // coef for height of 1 tweet
- var frameSize = 5; // frame size
- var margin = 1; // marge between frame
- var lineSize = this.width; // timeline pixel width
- var nbrframes = lineSize/frameSize; // frame numbers
- var numberOfTweet = 0; // number of tweet overide later
- var duration = +this._serializer.currentMedia().meta["dc:duration"]; // timescale width
- var frameLength = lineSize / frameSize; // frame timescale
- var timeline;
- var colors = new Array("","#1D973D","#C5A62D","#CE0A15","#036AAE","#585858");
-
- // array
- //var tweets = new Array();
- var element = new Array();
- var cluster = new Array();
- var frames = new Array(frameLength);
- var slices = new Array();
-
-
- // Classes =======================================================================
- var Frames = function(){
-
- var Myclusters;
- var x;
- var y;
- var width;
- var height;
- };
- Frames = function(json){
- // make my clusters
- // ou Frame vide
- };
- Frames.prototype.draw = function(){
- };
- Frames.prototype.zoom = function(){
- };
- Frames.prototype.inside = function(){
- };
- var Clusters = function(){
- var Object;
- var yDist;
- var x;
- var y;
- var width;
- var height;
- };
- Clusters = function(json){
- // make my object
- };
- var Tweet = function(){
- };
- // Classes =======================================================================
-
- // Refactoring (parametere) ************************************************************
- // color translastion
- var qTweet_0 =0;
- var qTweet_Q =0;
- var qTweet_REF=0;
- var qTweet_OK =0;
- var qTweet_KO =0;
- function colorTranslation(value){
- if(value == "Q"){
- qTweet_Q+=1;
- return 2;
- }else if(value =="REF"){
- qTweet_REF+=1;
- return 4;
- }else if(value =="OK"){
- qTweet_OK+=1;
- return 1;
- }else if(value =="KO"){
- qTweet_KO+=1;
- return 3;
- }else if(value ==""){
- qTweet_0+=1;
- return 5;
- }
- }
-
-
- this._serializer.sync(function(data) { loaded_callback.call(self, data) });
-
- function loaded_callback (json) {
-
- // get current view (the first ???)
- view = json.views[0];
-
- // the tweets are by definition of the second annotation type FIXME ?
- tweet_annot_type = null;
- if(typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
- tweet_annot_type = view.annotation_types[1];
- }
-
- for(var i = 0; i < json.annotations.length; i++) {
- var item = json.annotations[i];
- var MyTime = Math.floor(item.begin/duration*lineSize);
- var Myframe = Math.floor(MyTime/lineSize*frameLength);
-
- if (typeof(item.meta) !== "undefined"
- && typeof(item.meta["id-ref"]) !== "undefined"
- && item.meta["id-ref"] === tweet_annot_type) {
-
- var MyTJson = JSON.parse(item.meta['dc:source']['content']);
-
- if (item.content['polemics'] != undefined
- && item.content['polemics'][0] != null) {
-
- // a tweet can have many polemics at the same time.
- for(var j=0; j<item.content['polemics'].length; j++){
-
- this.tweets[numberOfTweet] = {
- id:i,
- qualification:colorTranslation(item.content['polemics'][j]),
- yIndicator:MyTime,
- yframe:Myframe,
- title:item.content['title'],
- timeframe:item.begin,
- userId: MyTJson.id,
- userScreenName: MyTJson.screen_name,
- tsource:MyTJson,
- cinecast_id: item.id
- };
- numberOfTweet+=1;
-
- }
- }
- else {
- this.tweets[numberOfTweet] = {
- id:i,
- qualification:colorTranslation(""),
- yIndicator:MyTime,
- yframe:Myframe,
- title:item.content['title'],
- timeframe:item.begin,
- userId: MyTJson.id,
- userScreenName: MyTJson.screen_name,
- tsource:MyTJson,
- cinecast_id: item.id
- };
- numberOfTweet+=1;
- }
-
- }
- };
-
- DrawTweets.call (this); // FIXME: ugly.
-
- };
-
- // tweet Drawing (in raphael)
- function DrawTweets (){
- // GROUPES TWEET ============================================
- // Count nbr of cluster and tweet in a frame an save int in "frames"
- numberOfTweet = this.tweets.length;
- for(var i=0; i<nbrframes; i++) {
- for(var j=0; j<numberOfTweet; j++) {
-
- if (i==this.tweets[j].yframe){
-
- var k = this.tweets[j].qualification;
-
- // make array for frame cluster
- if(frames[i]==undefined){
- frames[i] = {id:i,
- qualifVol:new Array(),
- mytweetsID:new Array()
- };
- }
- // add my tweet to frame
- frames[i].mytweetsID.push(this.tweets[j]);
-
- // count opinion by frame
- if( frames[i].qualifVol[k] == undefined){
- frames[i].qualifVol[k] = 1;
- }else{
- frames[i].qualifVol[k] += 1;
- }
-
- }
- }
- }
-
- // GROUPES TWEET ============================================
- // max of tweet by Frame
- var max = 0;
- for(var i = 0; i < nbrframes; i++) {
- var moy = 0;
- for (var j = 0; j < 6; j++) {
- if (frames[i] != undefined) {
- if (frames[i].qualifVol[j] != undefined) {
- moy += frames[i].qualifVol[j];
- }
- }
- }
-
- if (moy > max) {
- max = moy;
- }
- }
-
- var tweetDrawed = new Array();
- var TweetHeight = 5;
-
- // DRAW TWEETS ============================================
- for(var i = 0; i < nbrframes; i++) {
- var addEheight = 5;
- if (frames[i] != undefined){
- // by type
-
- for (var j = 6; j > -1; j--) {
- if (frames[i].qualifVol[j] != undefined) {
- // show tweet by type
- for (var k = 0; k < frames[i].mytweetsID.length; k++) {
-
- if (frames[i].mytweetsID[k].qualification == j) {
- var x = i * frameSize;
- var y = this.heightmax - addEheight;
-
- if (this.yMax > y) {
- this.yMax = y;
- }
-
- var e = this.paper.rect(x, y, frameSize - margin, TweetHeight /* height */)
- .attr({stroke:"#00","stroke-width":0.1, fill: colors[j]});
-
- addEheight += TweetHeight;
-
- e.color = colors[j];
- e.time = frames[i].mytweetsID[k].timeframe;
- e.title = frames[i].mytweetsID[k].title;
- e.id = frames[i].mytweetsID[k].cinecast_id;
-
- this.svgElements[e.id] = e;
-
- /*
- e.mouseover(function(element) { return function (event) {
- // event.clientX and event.clientY are to raphael what event.pageX and pageY are to jquery.
- self.TooltipWidget.show.call(self.TooltipWidget, element.title, element.attr("fill"), event.clientX - 106, event.clientY - 160);
- element.displayed = true;
- }}(e)).mouseout(function(element) { return function () {
- self.TooltipWidget.hide.call(self.TooltipWidget);
- }}(e)).mousedown(function () {
- self._Popcorn.currentTime(this.time/1000);
- self._Popcorn.trigger("IriSP.PolemicTweet.click", this.id);
- });
- */
-
- IriSP.jQuery(e.node).mouseenter(function(element) { return function (event) {
- // event.clientX and event.clientY are to raphael what event.pageX and pageY are to jquery.
- self.TooltipWidget.show.call(self.TooltipWidget, element.title, element.attr("fill"), event.pageX - 106, event.pageY - 160);
- element.displayed = true;
- }}(e)).mousedown(function(element) { return function () {
- self._Popcorn.currentTime(element.time/1000);
- self._Popcorn.trigger("IriSP.PolemicTweet.click", element.id);
- }
- }(e));
-
- IriSP.jQuery(e.node).attr('id', 't' + k + '');
- IriSP.jQuery(e.node).attr('title', frames[i].mytweetsID[k].title);
- IriSP.jQuery(e.node).attr('begin', frames[i].mytweetsID[k].timeframe);
- }
- }
- }
- }
- }
-
- }
- // DRAW UI :: resize border and bgd
- this.paperBackground = this.paper.rect(0, 0, this.width, this.heightmax).attr({fill:"#F8F8F8","stroke-width":0.1,opacity: 1});
-
- // outer borders
- this.outerBorders = [];
- this.outerBorders.push(this.paper.rect(0, this.height - 1, this.width, 1).attr({fill:"#ababab",stroke: "none",opacity: 1}));
- this.outerBorders.push(this.paper.rect(0, 0, this.width, 1).attr({fill:"#ababab",stroke: "none",opacity: 1}));
-
- // inner borders
- this.innerBorders = [];
- this.innerBorders.push(this.paper.rect(1, this.height - 2, this.width, 1).attr({fill:"#efefef",stroke: "none",opacity: 1}));
- this.innerBorders.push(this.paper.rect(1, 1, this.width, 1).attr({fill:"#efefef",stroke: "none",opacity: 1}));
- this.innerBorders.push(this.paper.rect(1, 1, 1, this.height - 2).attr({fill:"#d0d1d1",stroke: "none",opacity: 0.8}));
- this.innerBorders.push(this.paper.rect(this.width - 2, 1, 1, this.height - 2).attr({fill:"#efefef",stroke: "none",opacity: 1}));
-
-
-
- this.paperSlider = this.paper.rect(0, 0, 0, this.heightmax).attr({fill:"#D4D5D5", stroke: "none", opacity: 1});
-
- // the small white line displayed over the slider.
- this.sliderTip = this.paper.rect(0, 0, 1, this.heightmax).attr({fill:"#fc00ff", stroke: "none", opacity: 1});
- // decalage
- // tweetSelection = this.paper.rect(-100,-100,5,5).attr({fill:"#fff",stroke: "none",opacity: 1});
-
-
- this.paperSlider.toBack();
- this.paperBackground.toBack();
- this.sliderTip.toFront();
- }
-
- this.selector.mouseleave(IriSP.wrap(this, function() { self.TooltipWidget.hide.call(self.TooltipWidget); }));
- this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.sliderUpdater));
-}
-
-IriSP.PolemicWidget.prototype.sliderUpdater = function() {
-
- var time = +this._Popcorn.currentTime();
- var duration = +this._serializer.currentMedia().meta["dc:duration"];
-
- this.paperSlider.attr("width", time * (this.width / (duration / 1000)));
-
- this.sliderTip.attr("x", time * (this.width / (duration / 1000)));
-};
-
-IriSP.PolemicWidget.prototype.searchHandler = function(searchString) {
- if (searchString == "")
- return;
-
- var matches = this._serializer.searchTweetsOccurences(searchString);
-
- if (IriSP.countProperties(matches) > 0) {
- this._Popcorn.trigger("IriSP.search.matchFound");
- } else {
- this._Popcorn.trigger("IriSP.search.noMatchFound");
- }
-
- for (var id in matches) {
- if (this.svgElements.hasOwnProperty(id)) {
- var e = this.svgElements[id];
- this.svgElements[id].attr({fill: "#fc00ff"});
- }
- }
-
- // clean up the blocks that were in the previous search
- // but who aren't in the current one.
- for (var id in this.oldSearchMatches) {
- if (!matches.hasOwnProperty(id)) {
- var e = this.svgElements[id];
- e.attr({fill: e.color});
- }
- }
-
- this.oldSearchMatches = matches;
-};
-
-IriSP.PolemicWidget.prototype.searchFieldClearedHandler = function() {
- // clean up the blocks that were in the previous search
- // but who aren't in the current one.
- for (var id in this.oldSearchMatches) {
- var e = this.svgElements[id];
- e.attr({fill: e.color});
- }
-
-};
-
-IriSP.PolemicWidget.prototype.searchFieldClosedHandler = function() {
- // clean up the blocks that were in the previous search
- // but who aren't in the current one.
- for (var id in this.oldSearchMatches) {
- var e = this.svgElements[id];
- e.attr({fill: e.color});
- }
-
-};
-
-IriSP.SegmentsWidget = function(Popcorn, config, Serializer) {
-
- var self = this;
- IriSP.Widget.call(this, Popcorn, config, Serializer);
- this.oldSearchMatches = [];
-
- // event handlers
- this._Popcorn.listen("IriSP.search", function(searchString) { self.searchHandler.call(self, searchString); });
- this._Popcorn.listen("IriSP.search.closed", function() { self.searchFieldClosedHandler.call(self); });
- this._Popcorn.listen("IriSP.search.cleared", function() { self.searchFieldClearedHandler.call(self); });
-};
-
-IriSP.SegmentsWidget.prototype = new IriSP.Widget();
-
-/* Get the width of a segment, in pixels. */
-IriSP.SegmentsWidget.prototype.segmentToPixel = function(annotation) {
- var begin = Math.round((+ annotation.begin) / 1000);
- var end = Math.round((+ annotation.end) / 1000);
- var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
-
- var startPourcent = IriSP.timeToPourcent(begin, duration);
- var startPixel = Math.floor(this.selector.parent().width() * (startPourcent / 100));
-
- var endPourcent = Math.floor(IriSP.timeToPourcent(end, duration) - startPourcent);
- var endPixel = Math.floor(this.selector.parent().width() * (endPourcent / 100));
-
- return endPixel;
-};
-
-/* compute the total length of a group of segments */
-IriSP.SegmentsWidget.prototype.segmentsLength = function(segmentsList) {
- var self = this;
- var total = 0;
-
- for (var i = 0; i < segmentsList.length; i++)
- total += self.segmentToPixel(segmentsList[i].annotation);
-
- return total;
-};
-
-IriSP.SegmentsWidget.prototype.draw = function() {
-
- var self = this;
- var annotations = this._serializer._data.annotations;
-
- this.selector.addClass("Ldt-SegmentsWidget");
- this.selector.append(Mustache.to_html(IriSP.overlay_marker_template));
-
- var view_type = this._serializer.getNonTweetIds()[0];
-
- this.positionMarker = this.selector.children(":first");
-
- this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.positionUpdater));
-
-
- var i = 0;
-
- var segments_annotations = [];
-
- for (i = 0; i < annotations.length; i++) {
- var annotation = annotations[i];
-
- /* filter the annotations whose type is not the one we want */
- if (view_type != "" && typeof(annotation.meta) !== "undefined" && typeof(annotation.meta["id-ref"]) !== "undefined"
- && annotation.meta["id-ref"] != view_type) {
- continue;
- }
-
- segments_annotations.push(annotation);
- }
-
- var totalWidth = this.selector.width() - segments_annotations.length;
- var lastSegment = IriSP.underscore.max(segments_annotations, function(annotation) { return annotation.end; });
-
- for (i = 0; i < segments_annotations.length; i++) {
-
- var annotation = segments_annotations[i];
- var begin = (+ annotation.begin);
- var end = (+ annotation.end);
- var duration = this._serializer.currentMedia().meta["dc:duration"];
- var id = annotation.id;
-
- var startPixel = Math.floor(this.selector.parent().width() * (begin / duration));
-
- var endPixel = Math.floor(this.selector.parent().width() * (end / duration));
-
- if (annotation.id !== lastSegment.id)
- var pxWidth = endPixel - startPixel -1;
- else
- /* the last segment has no segment following it */
- var pxWidth = endPixel - startPixel;
-
- var divTitle = (annotation.content.title + " - " + annotation.content.description).substr(0,55);
-
- if (typeof(annotation.content.color) !== "undefined")
- var color = annotation.content.color;
- else
- var color = annotation.color;
-
- var hexa_color = IriSP.DEC_HEXA_COLOR(color);
-
- if (hexa_color === "FFCC00")
- hexa_color = "333";
- if (hexa_color.length == 4)
- hexa_color = hexa_color + '00';
-
- var annotationTemplate = Mustache.to_html(IriSP.annotation_template,
- {"divTitle" : divTitle, "id" : id, "startPixel" : startPixel,
- "pxWidth" : pxWidth, "hexa_color" : hexa_color,
- "seekPlace" : Math.round(begin/1000)});
-
-
- this.selector.append(annotationTemplate);
-
- /* add a special class to the last segment and change its border */
- if (annotation.id === lastSegment.id) {
- this.selector.find("#" + id).addClass("Ldt-lastSegment");
- this.selector.find(".Ldt-lastSegment").css("border-color", "#" + hexa_color);
- }
-
- IriSP.jQuery("#" + id).fadeTo(0, 0.3);
-
- IriSP.jQuery("#" + id).mouseover(
- /* we wrap the handler in another function because js's scoping
- rules are function-based - otherwise, the internal vars like
- divTitle are preserved but they are looked-up from the draw
- method scope, so after that the loop is run, so they're not
- preserved */
- (function(divTitle) {
- return function(event) {
- IriSP.jQuery(this).animate({opacity: 0.6}, 5);
- var offset = IriSP.jQuery(this).offset();
- var correction = IriSP.jQuery(this).outerWidth() / 2;
-
- var offset_x = offset.left + correction - 106;
- if (offset_x < 0)
- offset_x = 0;
-
- self.TooltipWidget.show(divTitle, color, offset_x, event.pageY - 160);
- } })(divTitle)).mouseout(function(){
- IriSP.jQuery(this).animate({opacity: 0.3}, 5);
- self.TooltipWidget.hide();
- });
-
- IriSP.jQuery("#" + id).click(function(_this, annotation) {
- return function() { _this.clickHandler(annotation)};
- }(this, annotation));
- }
-};
-
-/* restores the view after a search */
-IriSP.SegmentsWidget.prototype.clear = function() {
- this.selector.children(".Ldt-iri-chapter").animate({opacity:0.3}, 100);
-};
-
-IriSP.SegmentsWidget.prototype.clickHandler = function(annotation) {
- this._Popcorn.trigger("IriSP.SegmentsWidget.click", annotation.id);
- var begin = (+ annotation.begin) / 1000;
- this._Popcorn.currentTime(Math.round(begin));
-};
-
-IriSP.SegmentsWidget.prototype.searchHandler = function(searchString) {
-
- if (searchString == "")
- return;
-
- var matches = this._serializer.searchOccurences(searchString);
-
- if (IriSP.countProperties(matches) > 0) {
- this._Popcorn.trigger("IriSP.search.matchFound");
- } else {
- this._Popcorn.trigger("IriSP.search.noMatchFound");
- }
-
- // un-highlight all the blocks
- this.selector.children(".Ldt-iri-chapter").css("opacity", 0.1);
-
- // then highlight the ones with matches.
- for (var id in matches) {
- var factor = 0.5 + matches[id] * 0.2;
- this.selector.find("#"+id).dequeue();
- this.selector.find("#"+id).animate({opacity:factor}, 200);
- }
-
-
- this.oldSearchMatches = matches;
-};
-
-IriSP.SegmentsWidget.prototype.searchFieldClearedHandler = function() {
- this.clear();
-};
-
-IriSP.SegmentsWidget.prototype.searchFieldClosedHandler = function() {
- this.clear();
-};
-
-IriSP.SegmentsWidget.prototype.positionUpdater = function() {
- var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
- var time = this._Popcorn.currentTime();
- //var position = ((time / duration) * 100).toFixed(2);
- var position = ((time / duration) * 100).toFixed(2);
-
- this.positionMarker.css("left", position + "%");
-};
-IriSP.SliderWidget = function(Popcorn, config, Serializer) {
- IriSP.Widget.call(this, Popcorn, config, Serializer);
-};
-
-IriSP.SliderWidget.prototype = new IriSP.Widget();
-
-IriSP.SliderWidget.prototype.draw = function() {
- var self = this;
-
- this.selector.append(Mustache.to_html(IriSP.sliderWidget_template, {}));
- this.selector.addClass("Ldt-SliderMinimized");
-
- this.sliderBackground = this.selector.find(".Ldt-sliderBackground");
- this.sliderForeground = this.selector.find(".Ldt-sliderForeground");
- this.positionMarker = this.selector.find(".Ldt-sliderPositionMarker");
-
-
- // a special variable to stop methods from tinkering
- // with the positionMarker when the user is dragging it
- this.draggingOngoing = false;
-
- // another special variable used by the timeout handler to
- // open or close the slider.
- this.sliderMaximized = false;
- this.timeOutId = null;
-
-
- this.positionMarker.draggable({axis: "x",
- start: IriSP.wrap(this, this.positionMarkerDraggingStartedHandler),
- stop: IriSP.wrap(this, this.positionMarkerDraggedHandler),
- containment: "parent"
- });
- this.positionMarker.css("position", "absolute");
-
- this.sliderBackground.click(function(event) { self.backgroundClickHandler.call(self, event); });
- this.sliderForeground.click(function(event) { self.foregroundClickHandler.call(self, event); });
-
- this.selector.hover(IriSP.wrap(this, this.mouseOverHandler), IriSP.wrap(this, this.mouseOutHandler));
-
- // update the positions
- this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.sliderUpdater));
-
- // special messages :
- this._Popcorn.listen("IriSP.PlayerWidget.MouseOver", IriSP.wrap(this, this.mouseOverHandler));
- this._Popcorn.listen("IriSP.PlayerWidget.MouseOut", IriSP.wrap(this, this.mouseOutHandler));
-};
-
-/* update the slider and the position marker as time passes */
-IriSP.SliderWidget.prototype.sliderUpdater = function() {
- if(this.draggingOngoing || this._disableUpdate)
- return;
-
- var time = this._Popcorn.currentTime();
-
- var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
- var percent = ((time / duration) * 100).toFixed(2);
-
- /* we do these complicated calculations to center exactly
- the position Marker */
- var pixels_to_percents = 100 / this.selector.width(); /* how much is a pixel in percents */
- var positionMarker_width = this.positionMarker.width();
- var correction = (pixels_to_percents * positionMarker_width) / 2;
-
- var newPos = percent - correction;
- if (newPos <= 0)
- newPos = 0;
-
- this.sliderForeground.css("width", percent + "%");
- this.positionMarker.css("left", newPos + "%");
-
-};
-
-IriSP.SliderWidget.prototype.backgroundClickHandler = function(event) {
- /* this piece of code is a little bit convoluted - here's how it works :
- we want to handle clicks on the progress bar and convert those to seeks in the media.
- However, jquery only gives us a global position, and we want a number of pixels relative
- to our container div, so we get the parent position, and compute an offset to this position,
- and finally compute the progress ratio in the media.
- Finally we multiply this ratio with the duration to get the correct time
- */
-
- var parentOffset = this.sliderBackground.parent().offset();
- var width = this.sliderBackground.width();
- var relX = event.pageX - parentOffset.left;
-
- var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
- var newTime = ((relX / width) * duration).toFixed(2);
-
- this._Popcorn.currentTime(newTime);
-};
-
-/* same function as the previous one, except that it handles clicks
- on the foreground element */
-IriSP.SliderWidget.prototype.foregroundClickHandler = function(event) {
- var parentOffset = this.sliderForeground.parent().offset();
- var width = this.sliderBackground.width();
- var relX = event.pageX - parentOffset.left;
-
- var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
- var newTime = ((relX / width) * duration).toFixed(2);
-
- this._Popcorn.currentTime(newTime);
-};
-
-/* handles mouse over the slider */
-IriSP.SliderWidget.prototype.mouseOverHandler = function(event) {
-
- if (this.timeOutId !== null) {
- window.clearTimeout(this.timeOutId);
- }
-
- this.sliderMaximized = true;
-
- this.sliderBackground.animate({"height": "9px"}, 100);
- this.sliderForeground.animate({"height": "9px"}, 100);
- this.positionMarker.animate({"height": "9px", "width": "9px"}, 100);
- //this.positionMarker.css("margin-top", "-4px");
-
-// this.selector.removeClass("Ldt-SliderMinimized");
-// this.selector.addClass("Ldt-SliderMaximized");
-};
-
-/* handles when the mouse leaves the slider */
-IriSP.SliderWidget.prototype.mouseOutHandler = function(event) {
-
- this.timeOutId = window.setTimeout(IriSP.wrap(this, this.minimizeOnTimeout),
- IriSP.widgetsDefaults.SliderWidget.minimize_period);
-};
-
-IriSP.SliderWidget.prototype.minimizeOnTimeout = function(event) {
- this.sliderBackground.animate({"height": "5px"}, 100);
- this.sliderForeground.animate({"height": "5px"}, 100);
- this.positionMarker.animate({"height": "5px", "width": "5px"}, 100);
- this.positionMarker.css("margin-top", "0px");
- this.sliderMinimized = true;
-
-// this.selector.removeClass("Ldt-SliderMaximized");
-// this.selector.addClass("Ldt-SliderMinimized");
-
-};
-
-// called when the user starts dragging the position indicator
-IriSP.SliderWidget.prototype.positionMarkerDraggingStartedHandler = function(event, ui) {
- this.draggingOngoing = true;
-};
-
-IriSP.SliderWidget.prototype.positionMarkerDraggedHandler = function(event, ui) {
- this._disableUpdate = true; // disable slider position updates while dragging is ongoing.
- window.setTimeout(IriSP.wrap(this, function() { this._disableUpdate = false; }), 500);
-
- var parentOffset = this.sliderForeground.parent().offset();
- var width = this.sliderBackground.width();
- var relX = event.pageX - parentOffset.left;
-
- var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
- var newTime = ((relX / width) * duration).toFixed(2);
-
- this._Popcorn.currentTime(newTime);
-
- this.draggingOngoing = false;
-};
-
-/* this widget displays a small tooltip */
-IriSP.TooltipWidget = function(Popcorn, config, Serializer) {
- IriSP.Widget.call(this, Popcorn, config, Serializer);
- this._shown = false;
- this._displayedText = "";
- this._hideTimeout = -1;
-};
-
-
-IriSP.TooltipWidget.prototype = new IriSP.Widget();
-
-IriSP.TooltipWidget.prototype.draw = function() {
- var templ = Mustache.to_html(IriSP.tooltipWidget_template);
-
- this.selector.append(templ);
- this.hide();
-
-};
-
-IriSP.TooltipWidget.prototype.clear = function() {
- this.selector.find(".tiptext").text("");
-};
-
-IriSP.TooltipWidget.prototype.show = function(text, color, x, y) {
-
- if (this._displayedText == text)
- return;
-
- this.selector.find(".tipcolor").css("background-color", color);
- this._displayedText = text;
- this.selector.find(".tiptext").text(text);
- //this.selector.find(".tip").css("left", x).css("top", y);
- this.selector.find(".tip").css("left", x).css("top", y);
- this.selector.find(".tip").show();
- this._shown = true;
-};
-
-IriSP.TooltipWidget.prototype.hide = function() {
- this.selector.find(".tip").hide();
- this._shown = false;
-};/* a widget that displays tweet - used in conjunction with the polemicWidget */
-
-IriSP.TweetsWidget = function(Popcorn, config, Serializer) {
- IriSP.Widget.call(this, Popcorn, config, Serializer);
-
- this._displayingTweet = false;
- this._timeoutId = undefined;
-};
-
-
-IriSP.TweetsWidget.prototype = new IriSP.Widget();
-
-
-IriSP.TweetsWidget.prototype.drawTweet = function(annotation) {
-
- var title = IriSP.formatTweet(annotation.content.title);
- var img = annotation.content.img.src;
- if (typeof(img) === "undefined" || img === "" || img === "None") {
- img = IriSP.widgetsDefaults.TweetsWidget.default_profile_picture;
- }
-
- var imageMarkup = IriSP.templToHTML("<img src='{{src}}' alt='user image'></img>",
- {src : img});
-
- if (typeof(annotation.meta["dc:source"].content) !== "undefined") {
- var tweetContents = JSON.parse(annotation.meta["dc:source"].content);
- var creator = tweetContents.user.screen_name;
- var real_name = tweetContents.user.name;
-
- imageMarkup = IriSP.templToHTML("<a href='http://twitter.com/{{creator}}'><img src='{{src}}' alt='user image'></img></a>",
- {src : img, creator: creator});
-
- var formatted_date = new Date(tweetContents.created_at).toLocaleDateString();
- title = IriSP.templToHTML("<a class='Ldt-tweet_userHandle' href='http://twitter.com/{{creator}}'>@{{creator}}</a> - " +
- "<div class='Ldt-tweet_realName'>{{real_name}}</div>" +
- "<div class='Ldt-tweet_tweetContents'>{{{ contents }}}</div>" +
- "<div class='Ldt-tweet_date'>{{ date }}</div>",
- {creator: creator, real_name: real_name, contents : title, date : formatted_date});
-
- this.selector.find(".Ldt-TweetReply").attr("href", "http://twitter.com/home?status=@" + creator + ":%20");
-
-
- var rtText = Mustache.to_html("http://twitter.com/home?status=RT @{{creator}}: {{text}}",
- {creator: creator, text: IriSP.encodeURI(annotation.content.title)});
- this.selector.find(".Ldt-Retweet").attr("href", rtText);
- }
-
- this.selector.find(".Ldt-tweetContents").html(title);
- this.selector.find(".Ldt-tweetAvatar").html(imageMarkup);
- this.selector.show("blind", 250);
-};
-
-IriSP.TweetsWidget.prototype.displayTweet = function(annotation) {
- if (this._displayingTweet === false) {
- this._displayingTweet = true;
- } else {
- window.clearTimeout(this._timeoutId);
- }
-
- this.drawTweet(annotation);
-
- var time = this._Popcorn.currentTime();
- this._timeoutId = window.setTimeout(IriSP.wrap(this, this.clearPanel), IriSP.widgetsDefaults.TweetsWidget.tweet_display_period);
-};
-
-
-IriSP.TweetsWidget.prototype.clearPanel = function() {
- this._displayingTweet = false;
- this._timeoutId = undefined;
- this.closePanel();
-
-};
-
-IriSP.TweetsWidget.prototype.closePanel = function() {
- if (this._timeoutId != undefined) {
- /* we're called from the "close window" link */
- /* cancel the timeout */
- window.clearTimeout(this._timeoutId);
- this._timeoutId = null;
- }
-
- this.selector.hide("blind", 400);
-
-};
-
-/* cancel the timeout if the user clicks on the keep panel open button */
-IriSP.TweetsWidget.prototype.keepPanel = function() {
- if (this._timeoutId != undefined) {
- /* we're called from the "close window" link */
- /* cancel the timeout */
- window.clearTimeout(this._timeoutId);
- this._timeoutId = null;
- }
-};
-
-IriSP.TweetsWidget.prototype.draw = function() {
- var _this = this;
-
- var tweetMarkup = IriSP.templToHTML(IriSP.tweetWidget_template, {"share_template" : IriSP.share_template});
- this.selector.append(tweetMarkup);
- this.selector.hide();
- this.selector.find(".Ldt-tweetWidgetMinimize").click(IriSP.wrap(this, this.closePanel));
- this.selector.find(".Ldt-tweetWidgetKeepOpen").click(IriSP.wrap(this, this.keepPanel));
-
- this._Popcorn.listen("IriSP.PolemicTweet.click", IriSP.wrap(this, this.PolemicTweetClickHandler));
-};
-
-IriSP.TweetsWidget.prototype.PolemicTweetClickHandler = function(tweet_id) {
- var index, annotation;
- for (index in this._serializer._data.annotations) {
- annotation = this._serializer._data.annotations[index];
-
- if (annotation.id === tweet_id)
- break;
- }
-
- if (annotation.id !== tweet_id)
- /* we haven't found it */
- return;
-
- this.displayTweet(annotation);
- return;
-};
-
-IriSP.JSONSerializer = function(DataLoader, url) {
- IriSP.Serializer.call(this, DataLoader, url);
-};
-
-IriSP.JSONSerializer.prototype = new IriSP.Serializer();
-
-IriSP.JSONSerializer.prototype.serialize = function(data) {
- return JSON.stringify(data);
-};
-
-IriSP.JSONSerializer.prototype.deserialize = function(data) {
- return JSON.parse(data);
-};
-
-IriSP.JSONSerializer.prototype.sync = function(callback) {
- /* we don't have to do much because jQuery handles json for us */
-
- var self = this;
-
- var fn = function(data) {
- self._data = data;
- // sort the data too
- self._data["annotations"].sort(function(a, b)
- { var a_begin = +a.begin;
- var b_begin = +b.begin;
- return a_begin - b_begin;
- });
-
- callback(data);
- };
-
- this._DataLoader.get(this._url, fn);
-};
-
-IriSP.JSONSerializer.prototype.currentMedia = function() {
- return this._data.medias[0]; /* FIXME: don't hardcode it */
-};
-
-/* this function searches for an annotation which matches title, description and keyword
- "" matches any field.
- Note: it ignores tweets.
-*/
-IriSP.JSONSerializer.prototype.searchAnnotations = function(title, description, keyword) {
- /* we can have many types of annotations. We want search to only look for regular segments */
- /* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
- null or undefined.
- */
- var view;
-
- if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
- view = this._data.views[0];
-
- var searchViewType = "";
-
- if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
- searchViewType = view.annotation_types[0];
- }
-
- var filterfn = function(annotation) {
- if( searchViewType != "" &&
- typeof(annotation.meta) !== "undefined" &&
- typeof(annotation.meta["id-ref"]) !== "undefined" &&
- annotation.meta["id-ref"] !== searchViewType) {
- return true; // don't pass
- } else {
- return false;
- }
- };
-
- return this.searchAnnotationsFilter(title, description, keyword, filterfn);
-
-};
-
-/* only look for tweets */
-IriSP.JSONSerializer.prototype.searchTweets = function(title, description, keyword) {
- /* we can have many types of annotations. We want search to only look for regular segments */
- /* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
- null or undefined.
- */
- var view;
-
- if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
- view = this._data.views[0];
-
- var searchViewType = "";
-
- if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
- searchViewType = view.annotation_types[0];
- }
-
- var filterfn = function(annotation) {
- if( searchViewType != "" &&
- typeof(annotation.meta) !== "undefined" &&
- typeof(annotation.meta["id-ref"]) !== "undefined" &&
- annotation.meta["id-ref"] !== searchViewType) {
- return false; // pass
- } else {
- return true;
- }
- };
-
- return this.searchAnnotationsFilter(title, description, keyword, filterfn);
-
-};
-
-/*
- the previous function call this one, which is more general:
- */
-IriSP.JSONSerializer.prototype.searchAnnotationsFilter = function(title, description, keyword, filter) {
-
- var rTitle;
- var rDescription;
- var rKeyword;
- /* match anything if given the empty string */
- if (title == "")
- title = ".*";
- if (description == "")
- description = ".*";
- if (keyword == "")
- keyword = ".*";
-
- rTitle = new RegExp(title, "i");
- rDescription = new RegExp(description, "i");
- rKeyword = new RegExp(keyword, "i");
-
- var ret_array = [];
-
- var i;
- for (i in this._data.annotations) {
- var annotation = this._data.annotations[i];
-
- /* filter the annotations whose type is not the one we want */
- if (filter(annotation)) {
- continue;
- }
-
- if (rTitle.test(annotation.content.title) &&
- rDescription.test(annotation.content.description)) {
- /* FIXME : implement keyword support */
- ret_array.push(annotation);
- }
- }
-
- return ret_array;
-};
-
-/* breaks a string in words and searches each of these words. Returns an array
- of objects with the id of the annotation and its number of occurences.
-
- FIXME: optimize ? seems to be n^2 in the worst case.
-*/
-IriSP.JSONSerializer.prototype.searchOccurences = function(searchString) {
- var ret = { };
- var keywords = searchString.split(/\s+/);
-
- for (var i in keywords) {
- var keyword = keywords[i];
-
- // search this keyword in descriptions and title
- var found_annotations = []
- found_annotations = found_annotations.concat(this.searchAnnotations(keyword, "", ""));
- found_annotations = found_annotations.concat(this.searchAnnotations("", keyword, ""));
-
- for (var j in found_annotations) {
- var current_annotation = found_annotations[j];
-
- if (!ret.hasOwnProperty(current_annotation.id)) {
- ret[current_annotation.id] = 1;
- } else {
- ret[current_annotation.id] += 1;
- }
-
- }
-
- };
-
- return ret;
-};
-
-/* breaks a string in words and searches each of these words. Returns an array
- of objects with the id of the annotation and its number of occurences.
-
- FIXME: optimize ? seems to be n^2 in the worst case.
-*/
-IriSP.JSONSerializer.prototype.searchTweetsOccurences = function(searchString) {
- var ret = { };
- var keywords = searchString.split(/\s+/);
-
- for (var i in keywords) {
- var keyword = keywords[i];
-
- // search this keyword in descriptions and title
- var found_annotations = []
- found_annotations = found_annotations.concat(this.searchTweets(keyword, "", ""));
- found_annotations = found_annotations.concat(this.searchTweets("", keyword, ""));
-
- for (var j in found_annotations) {
- var current_annotation = found_annotations[j];
-
- if (!ret.hasOwnProperty(current_annotation.id)) {
- ret[current_annotation.id] = 1;
- } else {
- ret[current_annotation.id] += 1;
- }
-
- }
-
- };
-
- return ret;
-};
-
-/* takes the currentTime and returns all the annotations that are displayable at the moment
- NB: only takes account the first type of annotations - ignores tweets
- currentTime is in seconds.
- */
-
-IriSP.JSONSerializer.prototype.currentAnnotations = function(currentTime) {
- var view;
- var currentTimeMs = 1000 * currentTime;
-
- if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
- view = this._data.views[0];
-
- var view_type = "";
-
- if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length >= 1) {
- view_type = view.annotation_types[0];
- }
-
- var ret_array = [];
-
- var i;
-
- for (i in this._data.annotations) {
- var annotation = this._data.annotations[i];
-
- if (annotation.meta["id-ref"] === view_type && annotation.begin <= currentTimeMs && annotation.end >= currentTimeMs)
- ret_array.push(annotation);
- }
-
- return ret_array;
-};
-
-
-/* this function returns a list of ids of tweet lines */
-IriSP.JSONSerializer.prototype.getTweetIds = function() {
- if (typeof(this._data.lists) === "undefined" || this._data.lists === null)
- return [];
-
- var tweetsId = [];
-
- /* first get the list containing the tweets */
- var tweets = IriSP.underscore.filter(this._data.lists, function(entry) { return entry.id.indexOf("tweet") !== -1 });
-
- // FIXME: collect tweets from multiple sources ?
- tweetsId = IriSP.underscore.pluck(tweets[0].items, "id-ref");
-
- return tweetsId;
-};
-
-/* this function returns a list of lines which are not tweet lines */
-IriSP.JSONSerializer.prototype.getNonTweetIds = function() {
- if (typeof(this._data.lists) === "undefined" || this._data.lists === null)
- return [];
-
- /* get all the ids */
- var ids = IriSP.underscore.map(this._data.lists, function(entry) {
- return IriSP.underscore.pluck(entry.items, "id-ref"); });
-
- var illegal_values = this.getTweetIds();
- return IriSP.underscore.difference(ids, illegal_values);
-
-};
--- a/sbin/res/jsdoc/README.txt Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,183 +0,0 @@
-======================================================================
-
-DESCRIPTION:
-
-This is the source code for JsDoc Toolkit, an automatic documentation
-generation tool for JavaScript. It is written in JavaScript and is run
-from a command line (or terminal) using Java and Mozilla's Rhino
-JavaScript runtime engine.
-
-Using this tool you can automatically turn JavaDoc-like comments in
-your JavaScript source code into published output files, such as HTML
-or XML.
-
-For more information, to report a bug, or to browse the technical
-documentation for this tool please visit the official JsDoc Toolkit
-project homepage at http://code.google.com/p/jsdoc-toolkit/
-
-For the most up-to-date documentation on JsDoc Toolkit see the
-official wiki at http://code.google.com/p/jsdoc-toolkit/w/list
-
-======================================================================
-
-REQUIREMENTS:
-
-JsDoc Toolkit is known to work with:
-java version "1.6.0_03"
-Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
-on Windows XP,
-and java version "1.5.0_19"
-Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_19-b02-304)
-on Mac OS X 10.5.
-
-Other versions of java may or may not work with JsDoc Toolkit.
-
-======================================================================
-
-USAGE:
-
-Running JsDoc Toolkit requires you to have Java installed on your
-computer. For more information see http://www.java.com/getjava/
-
-Before running the JsDoc Toolkit app you should change your current
-working directory to the jsdoc-toolkit folder. Then follow the
-examples below, or as shown on the project wiki.
-
-On a computer running Windows a valid command line to run JsDoc
-Toolkit might look like this:
-
-> java -jar jsrun.jar app\run.js -a -t=templates\jsdoc mycode.js
-
-On Mac OS X or Linux the same command would look like this:
-
-$ java -jar jsrun.jar app/run.js -a -t=templates/jsdoc mycode.js
-
-The above assumes your current working directory contains jsrun.jar,
-the "app" and "templates" subdirectories from the standard JsDoc
-Toolkit distribution and that the relative path to the code you wish
-to document is "mycode.js".
-
-The output documentation files will be saved to a new directory named
-"out" (by default) in the current directory, or if you specify a
--d=somewhere_else option, to the somewhere_else directory.
-
-For help (usage notes) enter this on the command line:
-
-$ java -jar jsrun.jar app/run.js --help
-
-More information about the various command line options used by JsDoc
-Toolkit are available on the project wiki.
-
-======================================================================
-
-RUNNING VIA SHELL SCRIPT
-
-Avi Deitcher has contributed the file jsrun.sh with the following usage notes:
-
-A script to simplify running jsdoc from the command-line, especially when
-running from within a development or build environment such as ant.
-
-Normally, to run jsdoc, you need a command-line as the following:
-java -Djsdoc.dir=/some/long/dir/path/to/jsdoc -jar
-/some/long/dir/path/to/jsdoc/jsrun.jar /some/long/dir/path/to/jsdoc/app/run.js
--t=template -r=4 /some/long/dir/path/to/my/src/code
-
-This can get tedious to redo time and again, and difficult to use from within a build environment.
-
-To simplify the process, jsrun.sh will automatically run this path, as well as passing through any arguments.
-
-Usage: jsrun.sh <run.js arguments>
-
-All <run.js arguments> will be passed through.
-Additionally, jsrun.sh will take the following actions:
-1) If the environment variable JSDOCDIR is set, it will add
-"-Djsdoc.dir=$JSDOCDIR" to the command-line
-2) If the environment variable JSDOCTEMPLATEDIR is set, it will add
-"-Djsdoc.template.dir=$JSDOCTEMPLATEDIR" to the command-line
-3) java with the appropriate path to jsrun.jar and run.js will be instantiated
-
-If not variables are set, it is assumed that the path to jsrun.jar and app/ is in the current working directory.
-
-Example:
-# jsrun.sh ./src/
-Assuming JSDOCDIR=/some/path/to/my/jsdoc will cause the following command to
-execute:
-java -Djsdoc.dir=/some/path/to/my/jsdoc -jar /some/path/to/my/jsdoc/jsrun.jar
-/some/path/to/my/jsdoc/app/run.js ./src/
-
-======================================================================
-
-TESTING:
-
-To run the suite of unit tests included with JsDoc Toolkit enter this
-on the command line:
-
-$ java -jar jsrun.jar app/run.js -T
-
-To see a dump of the internal data structure that JsDoc Toolkit has
-built from your source files use this command:
-
-$ java -jar jsrun.jar app/run.js mycode.js -Z
-
-======================================================================
-
-LICENSE:
-
-JSDoc.pm
-
-This project is based on the JSDoc.pm tool, created by Michael
-Mathews and Gabriel Reid. More information on JsDoc.pm can
-be found on the JSDoc.pm homepage: http://jsdoc.sourceforge.net/
-
-Complete documentation on JsDoc Toolkit can be found on the project
-wiki at http://code.google.com/p/jsdoc-toolkit/w/list
-
-Rhino
-
-Rhino (JavaScript in Java) is open source and licensed by Mozilla
-under the MPL 1.1 or later/GPL 2.0 or later licenses, the text of
-which is available at http://www.mozilla.org/MPL/
-
-You can obtain the source code for Rhino from the Mozilla web site at
-http://www.mozilla.org/rhino/download.html
-
-JsDoc Toolkit is a larger work that uses the Rhino JavaScript engine
-but is not derived from it in any way. The Rhino library is used
-without modification and without any claims whatsoever.
-
-The Rhino Debugger
-
-You can obtain more information about the Rhino Debugger from the
-Mozilla web site at http://www.mozilla.org/rhino/debugger.html
-
-JsDoc Toolkit is a larger work that uses the Rhino Debugger but
-is not derived from it in any way. The Rhino Debugger is used
-without modification and without any claims whatsoever.
-
-JsDoc Toolkit
-
-All code specific to JsDoc Toolkit are free, open source and licensed
-for use under the X11/MIT License.
-
-JsDoc Toolkit is Copyright (c)2009 Michael Mathews <micmath@gmail.com>
-
-This program is free software; you can redistribute it and/or
-modify it under the terms below.
-
-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 must 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.
--- a/sbin/res/jsdoc/app/frame.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-IO.include("frame/Opt.js");
-IO.include("frame/Chain.js");
-IO.include("frame/Link.js");
-IO.include("frame/String.js");
-IO.include("frame/Hash.js");
-IO.include("frame/Namespace.js");
-//IO.include("frame/Reflection.js");
-
-/** A few helper functions to make life a little easier. */
-
-function defined(o) {
- return (o !== undefined);
-}
-
-function copy(o) { // todo check for circular refs
- if (o == null || typeof(o) != 'object') return o;
- var c = new o.constructor();
- for(var p in o) c[p] = copy(o[p]);
- return c;
-}
-
-function isUnique(arr) {
- var l = arr.length;
- for(var i = 0; i < l; i++ ) {
- if (arr.lastIndexOf(arr[i]) > i) return false;
- }
- return true;
-}
-
-/** Returns the given string with all regex meta characters backslashed. */
-RegExp.escapeMeta = function(str) {
- return str.replace(/([$^\\\/()|?+*\[\]{}.-])/g, "\\$1");
-}
--- a/sbin/res/jsdoc/app/frame/Chain.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/**@constructor*/
-function ChainNode(object, link) {
- this.value = object;
- this.link = link; // describes this node's relationship to the previous node
-}
-
-/**@constructor*/
-function Chain(valueLinks) {
- this.nodes = [];
- this.cursor = -1;
-
- if (valueLinks && valueLinks.length > 0) {
- this.push(valueLinks[0], "//");
- for (var i = 1, l = valueLinks.length; i < l; i+=2) {
- this.push(valueLinks[i+1], valueLinks[i]);
- }
- }
-}
-
-Chain.prototype.push = function(o, link) {
- if (this.nodes.length > 0 && link) this.nodes.push(new ChainNode(o, link));
- else this.nodes.push(new ChainNode(o));
-}
-
-Chain.prototype.unshift = function(o, link) {
- if (this.nodes.length > 0 && link) this.nodes[0].link = link;
- this.nodes.unshift(new ChainNode(o));
- this.cursor++;
-}
-
-Chain.prototype.get = function() {
- if (this.cursor < 0 || this.cursor > this.nodes.length-1) return null;
- return this.nodes[this.cursor];
-}
-
-Chain.prototype.first = function() {
- this.cursor = 0;
- return this.get();
-}
-
-Chain.prototype.last = function() {
- this.cursor = this.nodes.length-1;
- return this.get();
-}
-
-Chain.prototype.next = function() {
- this.cursor++;
- return this.get();
-}
-
-Chain.prototype.prev = function() {
- this.cursor--;
- return this.get();
-}
-
-Chain.prototype.toString = function() {
- var string = "";
- for (var i = 0, l = this.nodes.length; i < l; i++) {
- if (this.nodes[i].link) string += " -("+this.nodes[i].link+")-> ";
- string += this.nodes[i].value.toString();
- }
- return string;
-}
-
-Chain.prototype.joinLeft = function() {
- var result = "";
- for (var i = 0, l = this.cursor; i < l; i++) {
- if (result && this.nodes[i].link) result += this.nodes[i].link;
- result += this.nodes[i].value.toString();
- }
- return result;
-}
-
-
-/* USAGE:
-
-var path = "one/two/three.four/five-six";
-var pathChain = new Chain(path.split(/([\/.-])/));
-print(pathChain);
-
-var lineage = new Chain();
-lineage.push("Port");
-lineage.push("Les", "son");
-lineage.push("Dawn", "daughter");
-lineage.unshift("Purdie", "son");
-
-print(lineage);
-
-// walk left
-for (var node = lineage.last(); node !== null; node = lineage.prev()) {
- print("< "+node.value);
-}
-
-// walk right
-var node = lineage.first()
-while (node !== null) {
- print(node.value);
- node = lineage.next();
- if (node && node.link) print("had a "+node.link+" named");
-}
-
-*/
\ No newline at end of file
--- a/sbin/res/jsdoc/app/frame/Dumper.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/**
- * @class
-<pre>
-This is a lightly modified version of Kevin Jones' JavaScript
-library Data.Dump. To download the original visit:
- <a href="http://openjsan.org/doc/k/ke/kevinj/Data/Dump/">http://openjsan.org/doc/k/ke/kevinj/Data/Dump/</a>
-
-AUTHORS
-
-The Data.Dump JavaScript module is written by Kevin Jones
-(kevinj@cpan.org), based on Data::Dump by Gisle Aas (gisle@aas.no),
-based on Data::Dumper by Gurusamy Sarathy (gsar@umich.edu).
-
-COPYRIGHT
-
-Copyright 2007 Kevin Jones. Copyright 1998-2000,2003-2004 Gisle Aas.
-Copyright 1996-1998 Gurusamy Sarathy.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the Perl Artistic License
-
-See http://www.perl.com/perl/misc/Artistic.html
-</pre>
- * @static
- */
-Dumper = {
- /** @param [...] The objects to dump. */
- dump: function () {
- if (arguments.length > 1)
- return this._dump(arguments);
- else if (arguments.length == 1)
- return this._dump(arguments[0]);
- else
- return "()";
- },
-
- _dump: function (obj) {
- if (typeof obj == 'undefined') return 'undefined';
- var out;
- if (obj.serialize) { return obj.serialize(); }
- var type = this._typeof(obj);
- if (obj.circularReference) obj.circularReference++;
- switch (type) {
- case 'circular':
- out = "{ //circularReference\n}";
- break;
- case 'object':
- var pairs = new Array;
-
- for (var prop in obj) {
- if (prop != "circularReference" && obj.hasOwnProperty(prop)) { //hide inherited properties
- pairs.push(prop + ': ' + this._dump(obj[prop]));
- }
- }
-
- out = '{' + this._format_list(pairs) + '}';
- break;
-
- case 'string':
- for (var prop in Dumper.ESC) {
- if (Dumper.ESC.hasOwnProperty(prop)) {
- obj = obj.replace(prop, Dumper.ESC[prop]);
- }
- }
-
- // Escape UTF-8 Strings
- if (obj.match(/^[\x00-\x7f]*$/)) {
- out = '"' + obj.replace(/\"/g, "\\\"").replace(/([\n\r]+)/g, "\\$1") + '"';
- }
- else {
- out = "unescape('"+escape(obj)+"')";
- }
- break;
-
- case 'array':
- var elems = new Array;
-
- for (var i=0; i<obj.length; i++) {
- elems.push( this._dump(obj[i]) );
- }
-
- out = '[' + this._format_list(elems) + ']';
- break;
-
- case 'date':
- // firefox returns GMT strings from toUTCString()...
- var utc_string = obj.toUTCString().replace(/GMT/,'UTC');
- out = 'new Date("' + utc_string + '")';
- break;
-
- case 'element':
- // DOM element
- out = this._dump_dom(obj);
- break;
-
- default:
- out = obj;
- }
-
- out = String(out).replace(/\n/g, '\n ');
- out = out.replace(/\n (.*)$/,"\n$1");
-
- return out;
- },
-
- _format_list: function (list) {
- if (!list.length) return '';
- var nl = list.toString().length > 60 ? '\n' : ' ';
- return nl + list.join(',' + nl) + nl;
- },
-
- _typeof: function (obj) {
- if (obj && obj.circularReference && obj.circularReference > 1) return 'circular';
- if (Array.prototype.isPrototypeOf(obj)) return 'array';
- if (Date.prototype.isPrototypeOf(obj)) return 'date';
- if (typeof obj.nodeType != 'undefined') return 'element';
- return typeof(obj);
- },
-
- _dump_dom: function (obj) {
- return '"' + Dumper.nodeTypes[obj.nodeType] + '"';
- }
-};
-
-Dumper.ESC = {
- "\t": "\\t",
- "\n": "\\n",
- "\f": "\\f"
-};
-
-Dumper.nodeTypes = {
- 1: "ELEMENT_NODE",
- 2: "ATTRIBUTE_NODE",
- 3: "TEXT_NODE",
- 4: "CDATA_SECTION_NODE",
- 5: "ENTITY_REFERENCE_NODE",
- 6: "ENTITY_NODE",
- 7: "PROCESSING_INSTRUCTION_NODE",
- 8: "COMMENT_NODE",
- 9: "DOCUMENT_NODE",
- 10: "DOCUMENT_TYPE_NODE",
- 11: "DOCUMENT_FRAGMENT_NODE",
- 12: "NOTATION_NODE"
-};
\ No newline at end of file
--- a/sbin/res/jsdoc/app/frame/Hash.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/**
- @constructor
- @example
- var _index = new Hash();
- _index.set("a", "apple");
- _index.set("b", "blue");
- _index.set("c", "coffee");
-
- for (var p = _index.first(); p; p = _index.next()) {
- print(p.key+" is for "+p.value);
- }
-
- */
-var Hash = function() {
- this._map = {};
- this._keys = [];
- this._vals = [];
- this.reset();
-}
-
-Hash.prototype.set = function(k, v) {
- if (k != "") {
- this._keys.push(k);
- this._map["="+k] = this._vals.length;
- this._vals.push(v);
- }
-}
-
-Hash.prototype.replace = function(k, k2, v) {
- if (k == k2) return;
-
- var offset = this._map["="+k];
- this._keys[offset] = k2;
- if (typeof v != "undefined") this._vals[offset] = v;
- this._map["="+k2] = offset;
- delete(this._map["="+k]);
-}
-
-Hash.prototype.drop = function(k) {
- if (k != "") {
- var offset = this._map["="+k];
- this._keys.splice(offset, 1);
- this._vals.splice(offset, 1);
- delete(this._map["="+k]);
- for (var p in this._map) {
- if (this._map[p] >= offset) this._map[p]--;
- }
- if (this._cursor >= offset && this._cursor > 0) this._cursor--;
- }
-}
-
-Hash.prototype.get = function(k) {
- if (k != "") {
- return this._vals[this._map["="+k]];
- }
-}
-
-Hash.prototype.keys = function() {
- return this._keys;
-}
-
-Hash.prototype.hasKey = function(k) {
- if (k != "") {
- return (typeof this._map["="+k] != "undefined");
- }
-}
-
-Hash.prototype.values = function() {
- return this._vals;
-}
-
-Hash.prototype.reset = function() {
- this._cursor = 0;
-}
-
-Hash.prototype.first = function() {
- this.reset();
- return this.next();
-}
-
-Hash.prototype.next = function() {
- if (this._cursor++ < this._keys.length)
- return {key: this._keys[this._cursor-1], value: this._vals[this._cursor-1]};
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/frame/Link.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-/** Handle the creation of HTML links to documented symbols.
- @constructor
-*/
-function Link() {
- this.alias = "";
- this.src = "";
- this.file = "";
- this.text = "";
- this.innerName = "";
- this.classLink = false;
- this.targetName = "";
-
- this.target = function(targetName) {
- if (defined(targetName)) this.targetName = targetName;
- return this;
- }
- this.inner = function(inner) {
- if (defined(inner)) this.innerName = inner;
- return this;
- }
- this.withText = function(text) {
- if (defined(text)) this.text = text;
- return this;
- }
- this.toSrc = function(filename) {
- if (defined(filename)) this.src = filename;
- return this;
- }
- this.toSymbol = function(alias) {
- if (defined(alias)) this.alias = new String(alias);
- return this;
- }
- this.toClass = function(alias) {
- this.classLink = true;
- return this.toSymbol(alias);
- }
- this.toFile = function(file) {
- if (defined(file)) this.file = file;
- return this;
- }
-
- this.toString = function() {
- var linkString;
- var thisLink = this;
-
- if (this.alias) {
- linkString = this.alias.replace(/(^|[^a-z$0-9_#.:^-])([|a-z$0-9_#.:^-]+)($|[^a-z$0-9_#.:^-])/i,
- function(match, prematch, symbolName, postmatch) {
- var symbolNames = symbolName.split("|");
- var links = [];
- for (var i = 0, l = symbolNames.length; i < l; i++) {
- thisLink.alias = symbolNames[i];
- links.push(thisLink._makeSymbolLink(symbolNames[i]));
- }
- return prematch+links.join("|")+postmatch;
- }
- );
- }
- else if (this.src) {
- linkString = thisLink._makeSrcLink(this.src);
- }
- else if (this.file) {
- linkString = thisLink._makeFileLink(this.file);
- }
-
- return linkString;
- }
-}
-
-/** prefixed for hashes */
-Link.hashPrefix = "";
-
-/** Appended to the front of relative link paths. */
-Link.base = "";
-
-Link.symbolNameToLinkName = function(symbol) {
- var linker = "",
- ns = "";
-
- if (symbol.isStatic) linker = ".";
- else if (symbol.isInner) linker = "-";
-
- if (symbol.isEvent && !/^event:/.test(symbol.name)) {
- ns = "event:";
- }
- return Link.hashPrefix+linker+ns+symbol.name;
-}
-
-Link.getSymbol= function(alias) {
- var symbol= Link.symbolSet.getSymbol(alias);
-
- if (symbol)
- return symbol;
-
- if ('#'!==alias.charAt(0) || !Link.currentSymbol)
- return null;
-
- // resolve relative name
- var container= Link.currentSymbol;
-
- while (container)
- {
- symbol= Link.symbolSet.getSymbol(container.alias + alias);
- if (symbol)
- return symbol;
-
- // No superclass
- if (!container.augments.length)
- return null;
-
- container= Link.symbolSet.getSymbol(container.augments[0].desc);
- }
-
- return null;
-}
-
-/** Create a link to another symbol. */
-Link.prototype._makeSymbolLink = function(alias) {
- var linkBase = Link.base+publish.conf.symbolsDir;
- var linkTo = Link.getSymbol(alias);
- var linkPath;
- var target = (this.targetName)? " target=\""+this.targetName+"\"" : "";
-
- // if there is no symbol by that name just return the name unaltered
- if (!linkTo)
- return this.text || alias;
-
- // it's a symbol in another file
- else {
- if (!linkTo.is("CONSTRUCTOR") && !linkTo.isNamespace) { // it's a method or property
- linkPath= (Link.filemap) ? Link.filemap[linkTo.memberOf] :
- escape(linkTo.memberOf) || "_global_";
- linkPath += publish.conf.ext + "#" + Link.symbolNameToLinkName(linkTo);
- }
- else {
- linkPath = (Link.filemap)? Link.filemap[linkTo.alias] : escape(linkTo.alias);
- linkPath += publish.conf.ext;// + (this.classLink? "":"#" + Link.hashPrefix + "constructor");
- }
- linkPath = linkBase + linkPath
- }
-
- var linkText= this.text || alias;
-
- var link = {linkPath: linkPath, linkText: linkText, linkInner: (this.innerName? "#"+this.innerName : "")};
-
- if (typeof JSDOC.PluginManager != "undefined") {
- JSDOC.PluginManager.run("onSymbolLink", link);
- }
-
- return "<a href=\""+link.linkPath+link.linkInner+"\""+target+">"+link.linkText+"</a>";
-}
-
-/** Create a link to a source file. */
-Link.prototype._makeSrcLink = function(srcFilePath) {
- var target = (this.targetName)? " target=\""+this.targetName+"\"" : "";
-
- // transform filepath into a filename
- var srcFile = srcFilePath.replace(/\.\.?[\\\/]/g, "").replace(/[:\\\/]/g, "_");
- var outFilePath = Link.base + publish.conf.srcDir + srcFile + publish.conf.ext;
-
- if (!this.text) this.text = FilePath.fileName(srcFilePath);
- return "<a href=\""+outFilePath+"\""+target+">"+this.text+"</a>";
-}
-
-/** Create a link to a source file. */
-Link.prototype._makeFileLink = function(filePath) {
- var target = (this.targetName)? " target=\""+this.targetName+"\"" : "";
-
- var outFilePath = Link.base + filePath;
-
- if (!this.text) this.text = filePath;
- return "<a href=\""+outFilePath+"\""+target+">"+this.text+"</a>";
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/frame/Namespace.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-_global_ = this;
-
-function Namespace(name, f) {
- var n = name.split(".");
- for (var o = _global_, i = 0, l = n.length; i < l; i++) {
- o = o[n[i]] = o[n[i]] || {};
- }
-
- if (f) f();
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/frame/Opt.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/** @namespace */
-Opt = {
- /**
- * Get commandline option values.
- * @param {Array} args Commandline arguments. Like ["-a=xml", "-b", "--class=new", "--debug"]
- * @param {object} optNames Map short names to long names. Like {a:"accept", b:"backtrace", c:"class", d:"debug"}.
- * @return {object} Short names and values. Like {a:"xml", b:true, c:"new", d:true}
- */
- get: function(args, optNames) {
- var opt = {"_": []}; // the unnamed option allows multiple values
- for (var i = 0; i < args.length; i++) {
- var arg = new String(args[i]);
- var name;
- var value;
- if (arg.charAt(0) == "-") {
- if (arg.charAt(1) == "-") { // it's a longname like --foo
- arg = arg.substring(2);
- var m = arg.split("=");
- name = m.shift();
- value = m.shift();
- if (typeof value == "undefined") value = true;
-
- for (var n in optNames) { // convert it to a shortname
- if (name == optNames[n]) {
- name = n;
- }
- }
- }
- else { // it's a shortname like -f
- arg = arg.substring(1);
- var m = arg.split("=");
- name = m.shift();
- value = m.shift();
- if (typeof value == "undefined") value = true;
-
- for (var n in optNames) { // find the matching key
- if (name == n || name+'[]' == n) {
- name = n;
- break;
- }
- }
- }
- if (name.match(/(.+)\[\]$/)) { // it's an array type like n[]
- name = RegExp.$1;
- if (!opt[name]) opt[name] = [];
- }
-
- if (opt[name] && opt[name].push) {
- opt[name].push(value);
- }
- else {
- opt[name] = value;
- }
- }
- else { // not associated with any optname
- opt._.push(args[i]);
- }
- }
- return opt;
- }
-}
-
-/*t:
- plan(11, "Testing Opt.");
-
- is(
- typeof Opt,
- "object",
- "Opt is an object."
- );
-
- is(
- typeof Opt.get,
- "function",
- "Opt.get is a function."
- );
-
- var optNames = {a:"accept", b:"backtrace", c:"class", d:"debug", "e[]":"exceptions"};
- var t_options = Opt.get(["-a=xml", "-b", "--class=new", "--debug", "-e=one", "-e=two", "foo", "bar"], optNames);
-
- is(
- t_options.a,
- "xml",
- "an option defined with a short name can be accessed by its short name."
- );
-
- is(
- t_options.b,
- true,
- "an option defined with a short name and no value are true."
- );
-
- is(
- t_options.c,
- "new",
- "an option defined with a long name can be accessed by its short name."
- );
-
- is(
- t_options.d,
- true,
- "an option defined with a long name and no value are true."
- );
-
- is(
- typeof t_options.e,
- "object",
- "an option that can accept multiple values is defined."
- );
-
- is(
- t_options.e.length,
- 2,
- "an option that can accept multiple values can have more than one value."
- );
-
- is(
- t_options.e[1],
- "two",
- "an option that can accept multiple values can be accessed as an array."
- );
-
- is(
- typeof t_options._,
- "object",
- "the property '_' is defined for unnamed options."
- );
-
- is(
- t_options._[0],
- "foo",
- "the property '_' can be accessed as an array."
- );
- */
\ No newline at end of file
--- a/sbin/res/jsdoc/app/frame/Reflection.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/**@constructor*/
-function Reflection(obj) {
- this.obj = obj;
-}
-
-Reflection.prototype.getConstructorName = function() {
- if (this.obj.constructor.name) return this.obj.constructor.name;
- var src = this.obj.constructor.toSource();
- var name = src.substring(name.indexOf("function")+8, src.indexOf('(')).replace(/ /g,'');
- return name;
-}
-
-Reflection.prototype.getMethod = function(name) {
- for (var p in this.obj) {
- if (p == name && typeof(this.obj[p]) == "function") return this.obj[p];
- }
- return null;
-}
-
-Reflection.prototype.getParameterNames = function() {
- var src = this.obj.toSource();
- src = src.substring(
- src.indexOf("(", 8)+1, src.indexOf(")")
- );
- return src.split(/, ?/);
-}
--- a/sbin/res/jsdoc/app/frame/String.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-/**
- @name String
- @class Additions to the core string object.
-*/
-
-/** @author Steven Levithan, released as public domain. */
-String.prototype.trim = function() {
- var str = this.replace(/^\s+/, '');
- for (var i = str.length - 1; i >= 0; i--) {
- if (/\S/.test(str.charAt(i))) {
- str = str.substring(0, i + 1);
- break;
- }
- }
- return str;
-}
-/*t:
- plan(6, "Testing String.prototype.trim.");
-
- var s = " a bc ".trim();
- is(s, "a bc", "multiple spaces front and back are trimmed.");
-
- s = "a bc\n\n".trim();
- is(s, "a bc", "newlines only in back are trimmed.");
-
- s = "\ta bc".trim();
- is(s, "a bc", "tabs only in front are trimmed.");
-
- s = "\n \t".trim();
- is(s, "", "an all-space string is trimmed to empty.");
-
- s = "a b\nc".trim();
- is(s, "a b\nc", "a string with no spaces in front or back is trimmed to itself.");
-
- s = "".trim();
- is(s, "", "an empty string is trimmed to empty.");
-
-*/
-
-String.prototype.balance = function(open, close) {
- var i = 0;
- while (this.charAt(i) != open) {
- if (i == this.length) return [-1, -1];
- i++;
- }
-
- var j = i+1;
- var balance = 1;
- while (j < this.length) {
- if (this.charAt(j) == open) balance++;
- if (this.charAt(j) == close) balance--;
- if (balance == 0) break;
- j++;
- if (j == this.length) return [-1, -1];
- }
-
- return [i, j];
-}
-/*t:
- plan(16, "Testing String.prototype.balance.");
-
- var s = "{abc}".balance("{","}");
- is(s[0], 0, "opener in first is found.");
- is(s[1], 4, "closer in last is found.");
-
- s = "ab{c}de".balance("{","}");
- is(s[0], 2, "opener in middle is found.");
- is(s[1], 4, "closer in middle is found.");
-
- s = "a{b{c}de}f".balance("{","}");
- is(s[0], 1, "nested opener is found.");
- is(s[1], 8, "nested closer is found.");
-
- s = "{}".balance("{","}");
- is(s[0], 0, "opener with no content is found.");
- is(s[1], 1, "closer with no content is found.");
-
- s = "".balance("{","}");
- is(s[0], -1, "empty string opener is -1.");
- is(s[1], -1, "empty string closer is -1.");
-
- s = "{abc".balance("{","}");
- is(s[0], -1, "opener with no closer returns -1.");
- is(s[1], -1, "no closer returns -1.");
-
- s = "abc".balance("{","}");
- is(s[0], -1, "no opener or closer returns -1 for opener.");
- is(s[1], -1, "no opener or closer returns -1 for closer.");
-
- s = "a<bc}de".balance("<","}");
- is(s[0], 1, "unmatching opener is found.");
- is(s[1], 4, "unmatching closer is found.");
-*/
\ No newline at end of file
--- a/sbin/res/jsdoc/app/frame/Testrun.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/**
- * @fileOverview
- * @name JsTestrun
- * @author Michael Mathews micmath@gmail.com
- * @url $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/tags/jsdoc_toolkit-2.4.0/jsdoc-toolkit/app/frame/Testrun.js $
- * @revision $Id: Testrun.js 418 2008-01-15 21:40:33Z micmath $
- * @license <a href="http://en.wikipedia.org/wiki/MIT_License">X11/MIT License</a>
- * (See the accompanying README file for full details.)
- */
-
-/**
- Yet another unit testing tool for JavaScript.
- @author Michael Mathews <a href="mailto:micmath@gmail.com">micmath@gmail.com</a>
- @param {object} testCases Properties are testcase names, values are functions to execute as tests.
-*/
-function testrun(testCases) {
- var ran = 0;
- for (t in testCases) {
- var result = testCases[t]();
- ran++;
- }
-
- return testrun.reportOut+"-------------------------------\n"+((testrun.fails>0)? ":( Failed "+testrun.fails+"/" : ":) Passed all ")+testrun.count+" test"+((testrun.count == 1)? "":"s")+".\n";
-}
-
-
-testrun.count = 0;
-testrun.current = null;
-testrun.passes = 0;
-testrun.fails = 0;
-testrun.reportOut = "";
-
-/** @private */
-testrun.report = function(text) {
- testrun.reportOut += text+"\n";
-}
-
-/**
- Check if test evaluates to true.
- @param {string} test To be evaluated.
- @param {string} message Optional. To be displayed in the report.
- @return {boolean} True if the string test evaluates to true.
-*/
-ok = function(test, message) {
- testrun.count++;
-
- var result;
- try {
- result = eval(test);
-
- if (result) {
- testrun.passes++;
- testrun.report(" OK "+testrun.count+" - "+((message != null)? message : ""));
- }
- else {
- testrun.fails++;
- testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
- }
- }
- catch(e) {
- testrun.fails++
- testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
-
- }
-}
-
-/**
- Check if test is same as expected.
- @param {string} test To be evaluated.
- @param {string} expected
- @param {string} message Optional. To be displayed in the report.
- @return {boolean} True if (test == expected). Note that the comparison is not a strict equality check.
-*/
-is = function(test, expected, message) {
- testrun.count++;
-
- var result;
- try {
- result = eval(test);
-
- if (result == expected) {
- testrun.passes++
- testrun.report(" OK "+testrun.count+" - "+((message != null)? message : ""));
- }
- else {
- testrun.fails++
- testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
- testrun.report("expected: "+expected);
- testrun.report(" got: "+result);
- }
- }
- catch(e) {
- testrun.fails++
- testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
- testrun.report("expected: "+expected);
- testrun.report(" got: "+result);}
-}
-
-/**
- Check if test matches pattern.
- @param {string} test To be evaluated.
- @param {string} pattern Used to create a RegExp.
- @param {string} message Optional. To be displayed in the report.
- @return {boolean} True if test matches pattern.
-*/
-like = function(test, pattern, message) {
- testrun.count++;
-
- var result;
- try {
- result = eval(test);
- var rgx = new RegExp(pattern);
-
- if (rgx.test(result)) {
- testrun.passes++
- testrun.report(" OK "+testrun.count+" - "+((message != null)? message : ""));
- }
- else {
- testrun.fails++
- testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
- testrun.report(" this: "+result);
- testrun.report("is not like: "+pattern);
- }
- }
- catch(e) {
- testrun.fails++
- testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
- }
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/handlers/FOODOC.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/**
- This is the main container for the FOODOC handler.
- @namespace
-*/
-FOODOC = {
-};
-
-/** The current version string of this application. */
-FOODOC.VERSION = "1.0";
-
-FOODOC.handle = function(srcFile, src) {
- LOG.inform("Handling file '" + srcFile + "'");
-
- return [
- new JSDOC.Symbol(
- "foo",
- [],
- "VIRTUAL",
- new JSDOC.DocComment("/** This is a foo. */")
- )
- ];
-};
-
-FOODOC.publish = function(symbolgroup) {
- LOG.inform("Publishing symbolgroup.");
-};
--- a/sbin/res/jsdoc/app/handlers/XMLDOC.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/**
- * This is the main container for the XMLDOC handler.
- * @namespace
- * @author Brett Fattori (bfattori@fry.com)
- * @version $Revision: 498 $
- */
-XMLDOC = {
-
-};
-
-/** The current version string of this application. */
-XMLDOC.VERSION = "1.0";
-
-/** Include the library necessary to handle XML files */
-IO.includeDir("handlers/XMLDOC/");
-
-/**
- * @type Symbol[]
- */
-XMLDOC.handle = function(srcFile, src) {
-
-};
-
-XMLDOC.publish = function(symbolgroup) {
-
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/handlers/XMLDOC/DomReader.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-LOG.inform("XMLDOC.DomReader loaded");
-
-XMLDOC.DomReader = function(root) {
-
- this.dom = root;
-
- /**
- * The current node the reader is on
- */
- this.node = root;
-
- /**
- * Get the current node the reader is on
- * @type XMLDOC.Parser.node
- */
- XMLDOC.DomReader.prototype.getNode = function() {
- return this.node;
- };
-
- /**
- * Set the node the reader should be positioned on.
- * @param node {XMLDOC.Parser.node}
- */
- XMLDOC.DomReader.prototype.setNode = function(node) {
- this.node = node;
- };
-
- /**
- * A helper method to make sure the current node will
- * never return null, unless null is passed as the root.
- * @param step {String} An expression to evaluate - should return a node or null
- */
- XMLDOC.DomReader.prototype.navigate = function(step) {
- var n;
- if ((n = step) != null)
- {
- this.node = n;
- return this.node;
- }
- return null;
- };
-
- /**
- * Get the root node of the current node's document.
- */
- XMLDOC.DomReader.prototype.root = function() {
- this.navigate(this.dom);
- };
-
- /**
- * Get the parent of the current node.
- */
- XMLDOC.DomReader.prototype.parent = function() {
- return this.navigate(this.node.parentNode());
- };
-
- /**
- * Get the first child of the current node.
- */
- XMLDOC.DomReader.prototype.firstChild = function() {
- return this.navigate(this.node.firstChild());
- };
-
- /**
- * Get the last child of the current node.
- */
- XMLDOC.DomReader.prototype.lastChild = function() {
- return this.navigate(this.node.lastChild());
- };
-
- /**
- * Get the next sibling of the current node.
- */
- XMLDOC.DomReader.prototype.nextSibling = function() {
- return this.navigate(this.node.nextSibling());
- };
-
- /**
- * Get the previous sibling of the current node.
- */
- XMLDOC.DomReader.prototype.prevSibling = function() {
- return this.navigate(this.node.prevSibling());
- };
-
- //===============================================================================================
- // Support methods
-
- /**
- * Walk the tree starting with the current node, calling the plug-in for
- * each node visited. Each time the plug-in is called, the DomReader
- * is passed as the only parameter. Use the {@link XMLDOC.DomReader#getNode} method
- * to access the current node. <i>This method uses a depth first traversal pattern.</i>
- *
- * @param srcFile {String} The source file being evaluated
- */
- XMLDOC.DomReader.prototype.getSymbols = function(srcFile)
- {
- XMLDOC.DomReader.symbols = [];
- XMLDOC.DomReader.currentFile = srcFile;
- JSDOC.Symbol.srcFile = (srcFile || "");
-
- if (defined(JSDOC.PluginManager)) {
- JSDOC.PluginManager.run("onDomGetSymbols", this);
- }
-
- return XMLDOC.DomReader.symbols;
- };
-
- /**
- * Find the node with the given name using a depth first traversal.
- * Does not modify the DomReader's current node.
- *
- * @param name {String} The name of the node to find
- * @return the node that was found, or null if not found
- */
- XMLDOC.DomReader.prototype.findNode = function(name)
- {
- var findNode = null;
-
- // Start at the current node and move into the subtree,
- // looking for the node with the given name
- function deeper(node, find)
- {
- var look = null;
-
- if (node) {
- if (node.name == find)
- {
- return node;
- }
-
- if (node.firstChild())
- {
- look = deeper(node.firstChild(), find);
- }
-
- if (!look && node.nextSibling())
- {
- look = deeper(node.nextSibling(), find);
- }
- }
-
- return look;
- }
-
- return deeper(this.getNode().firstChild(), name);
- };
-
- /**
- * Find the next node with the given name using a depth first traversal.
- *
- * @param name {String} The name of the node to find
- */
- XMLDOC.DomReader.prototype.findPreviousNode = function(name)
- {
- };
-
-};
-
--- a/sbin/res/jsdoc/app/handlers/XMLDOC/XMLDoc.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-LOG.inform("XMLDOC.symbolize loaded");
-
-/**
- * Convert the source file to a set of symbols
- */
-XMLDOC.symbolize = function(srcFile, src) {
-
- LOG.inform("Symbolizing file '" + srcFile + "'");
-
- // XML files already have a defined structure, so we don't need to
- // do anything but parse them. The DOM reader can create a symbol
- // table from the parsed XML.
- var dr = new XMLDOC.DomReader(XMLDOC.Parser.parse(src));
- return dr.getSymbols(srcFile);
-
-};
--- a/sbin/res/jsdoc/app/handlers/XMLDOC/XMLParse.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,292 +0,0 @@
-LOG.inform("XMLDOC.Parser loaded");
-
-/**
- * XML Parser object. Returns an {@link #XMLDOC.Parser.node} which is
- * the root element of the parsed document.
- * <p/>
- * By default, this parser will only handle well formed XML. To
- * allow the parser to handle HTML, set the <tt>XMLDOC.Parser.strictMode</tt>
- * variable to <tt>false</tt> before calling <tt>XMLDOC.Parser.parse()</tt>.
- * <p/>
- * <i>Note: If you pass poorly formed XML, it will cause the parser to throw
- * an exception.</i>
- *
- * @author Brett Fattori (bfattori@fry.com)
- * @author $Author: micmath $
- * @version $Revision: 497 $
- */
-XMLDOC.Parser = {};
-
-/**
- * Strict mode setting. Setting this to false allows HTML-style source to
- * be parsed. Normally, well formed XML has defined end tags, or empty tags
- * are properly formed. Default: <tt>true</tt>
- * @type Boolean
- */
-XMLDOC.Parser.strictMode = true;
-
-/**
- * A node in an XML Document. Node types are ROOT, ELEMENT, COMMENT, PI, and TEXT.
- * @param parent {XMLDOC.Parser.node} The parent node
- * @param name {String} The node name
- * @param type {String} One of the types
- */
-XMLDOC.Parser.node = function(parent, name, type)
-{
- this.name = name;
- this.type = type || "ELEMENT";
- this.parent = parent;
- this.charData = "";
- this.attrs = {};
- this.nodes = [];
- this.cPtr = 0;
-
- XMLDOC.Parser.node.prototype.getAttributeNames = function() {
- var a = [];
- for (var o in this.attrs)
- {
- a.push(o);
- }
-
- return a;
- };
-
- XMLDOC.Parser.node.prototype.getAttribute = function(attr) {
- return this.attrs[attr];
- };
-
- XMLDOC.Parser.node.prototype.setAttribute = function(attr, val) {
- this.attrs[attr] = val;
- };
-
- XMLDOC.Parser.node.prototype.getChild = function(idx) {
- return this.nodes[idx];
- };
-
- XMLDOC.Parser.node.prototype.parentNode = function() {
- return this.parent;
- };
-
- XMLDOC.Parser.node.prototype.firstChild = function() {
- return this.nodes[0];
- };
-
- XMLDOC.Parser.node.prototype.lastChild = function() {
- return this.nodes[this.nodes.length - 1];
- };
-
- XMLDOC.Parser.node.prototype.nextSibling = function() {
- var p = this.parent;
- if (p && (p.nodes.indexOf(this) + 1 != p.nodes.length))
- {
- return p.getChild(p.nodes.indexOf(this) + 1);
- }
- return null;
- };
-
- XMLDOC.Parser.node.prototype.prevSibling = function() {
- var p = this.parent;
- if (p && (p.nodes.indexOf(this) - 1 >= 0))
- {
- return p.getChild(p.nodes.indexOf(this) - 1);
- }
- return null;
- };
-};
-
-/**
- * Parse an XML Document from the specified source. The XML should be
- * well formed, unless strict mode is disabled, then the parser will
- * handle HTML-style XML documents.
- * @param src {String} The source to parse
- */
-XMLDOC.Parser.parse = function(src)
-{
- var A = [];
-
- // Normailize whitespace
- A = src.split("\r\n");
- src = A.join("\n");
- A = src.split("\r");
- src = A.join("\n");
-
- // Remove XML and DOCTYPE specifier
- src.replace(/<\?XML .*\?>/i, "");
- src.replace(/<!DOCTYPE .*\>/i, "");
-
- // The document is the root node and cannot be modified or removed
- var doc = new XMLDOC.Parser.node(null, "ROOT", "DOCUMENT");
-
- // Let's break it down
- XMLDOC.Parser.eat(doc, src);
-
- return doc;
-};
-
-/**
- * The XML fragment processing routine. This method is private and should not be called
- * directly.
- * @param parentNode {XMLDOC.Parser.node} The node which is the parent of this fragment
- * @param src {String} The source within the fragment to process
- * @private
- */
-XMLDOC.Parser.eat = function(parentNode, src)
-{
- // A simple tag def
- var reTag = new RegExp("<(!|)(\\?|--|)((.|\\s)*?)\\2>","g");
-
- // Special tag types
- var reCommentTag = /<!--((.|\s)*?)-->/;
- var rePITag = /<\?((.|\s)*?)\?>/;
-
- // A start tag (with potential empty marker)
- var reStartTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*)\4)*(\/)?>/;
-
- // An empty HTML style tag (not proper XML, but we'll accept it so we can process HTML)
- var reHTMLEmptyTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*)\4)*>/;
-
- // Fully enclosing tag with nested tags
- var reEnclosingTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*?)\4)*>((.|\s)*?)<\/\1>/;
-
- // Breaks down attributes
- var reAttributes = new RegExp(" +([\\w_\\-]*)=(\"|')(.*?)\\2","g");
-
- // Find us a tag
- var tag;
- while ((tag = reTag.exec(src)) != null)
- {
- if (tag.index > 0)
- {
- // The next tag has some text before it
- var text = src.substring(0, tag.index).replace(/^[ \t\n]+((.|\n)*?)[ \t\n]+$/, "$1");
-
- if (text.length > 0 && (text != "\n"))
- {
- var txtnode = new XMLDOC.Parser.node(parentNode, "", "TEXT");
- txtnode.charData = text;
-
- // Append the new text node
- parentNode.nodes.push(txtnode);
- }
-
- // Reset the lastIndex of reTag
- reTag.lastIndex -= src.substring(0, tag.index).length;
-
- // Eat the text
- src = src.substring(tag.index);
- }
-
- if (reCommentTag.test(tag[0]))
- {
- // Is this a comment?
- var comment = new XMLDOC.Parser.node(parentNode, "", "COMMENT");
- comment.charData = reCommentTag.exec(tag[0])[1];
-
- // Append the comment
- parentNode.nodes.push(comment);
-
- // Move the lastIndex of reTag
- reTag.lastIndex -= tag[0].length;
-
- // Eat the tag
- src = src.replace(reCommentTag, "");
- }
- else if (rePITag.test(tag[0]))
- {
- // Is this a processing instruction?
- var pi = new XMLDOC.Parser.node(parentNode, "", "PI");
- pi.charData = rePITag.exec(tag[0])[1];
-
- // Append the processing instruction
- parentNode.nodes.push(pi);
-
- // Move the lastIndex of reTag
- reTag.lastIndex -= tag[0].length;
-
- // Eat the tag
- src = src.replace(rePITag, "");
- }
- else if (reStartTag.test(tag[0]))
- {
- // Break it down
- var e = reStartTag.exec(tag[0]);
- var elem = new XMLDOC.Parser.node(parentNode, e[1], "ELEMENT");
-
- // Get attributes from the tag
- var a;
- while ((a = reAttributes.exec(e[2])) != null )
- {
- elem.attrs[a[1]] = a[3];
- }
-
- // Is this an empty XML-style tag?
- if (e[6] == "/")
- {
- // Append the empty element
- parentNode.nodes.push(elem);
-
- // Move the lastIndex of reTag (include the start tag length)
- reTag.lastIndex -= e[0].length;
-
- // Eat the tag
- src = src.replace(reStartTag, "");
- }
- else
- {
- // Check for malformed XML tags
- var htmlParsed = false;
- var htmlStartTag = reHTMLEmptyTag.exec(src);
-
- // See if there isn't an end tag within this block
- var reHTMLEndTag = new RegExp("</" + htmlStartTag[1] + ">");
- var htmlEndTag = reHTMLEndTag.exec(src);
-
- if (XMLDOC.Parser.strictMode && htmlEndTag == null)
- {
- // Poorly formed XML fails in strict mode
- var err = new Error("Malformed XML passed to XMLDOC.Parser... Error contains malformed 'src'");
- err.src = src;
- throw err;
- }
- else if (htmlEndTag == null)
- {
- // This is an HTML-style empty tag, store the element for it in non-strict mode
- parentNode.nodes.push(elem);
-
- // Eat the tag
- src = src.replace(reHTMLEmptyTag, "");
- htmlParsed = true;
- }
-
- // If we didn't parse HTML-style, it must be an enclosing tag
- if (!htmlParsed)
- {
- var enc = reEnclosingTag.exec(src);
-
- // Go deeper into the document
- XMLDOC.Parser.eat(elem, enc[6]);
-
- // Append the new element node
- parentNode.nodes.push(elem);
-
- // Eat the tag
- src = src.replace(reEnclosingTag, "");
- }
- }
-
- // Reset the lastIndex of reTag
- reTag.lastIndex = 0;
- }
- }
-
- // No tag was found... append the text if there is any
- src = src.replace(/^[ \t\n]+((.|\n)*?)[ \t\n]+$/, "$1");
- if (src.length > 0 && (src != "\n"))
- {
- var txtNode = new XMLDOC.Parser.node(parentNode, "", "TEXT");
- txtNode.charData = src;
-
- // Append the new text node
- parentNode.nodes.push(txtNode);
- }
-};
--- a/sbin/res/jsdoc/app/lib/JSDOC.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/**
- @overview
- @date $Date: 2010-06-13 22:02:44 +0100 (Sun, 13 Jun 2010) $
- @version $Revision: 837 $
- @location $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/tags/jsdoc_toolkit-2.4.0/jsdoc-toolkit/app/lib/JSDOC.js $
- @name JSDOC.js
- */
-
-/**
- This is the main container for the JSDOC application.
- @namespace
-*/
-JSDOC = {
-};
-
-/**
- @requires Opt
- */
-if (typeof arguments == "undefined") arguments = [];
-JSDOC.opt = Opt.get(
- arguments,
- {
- a: "allfunctions",
- c: "conf",
- d: "directory",
- "D[]": "define",
- e: "encoding",
- "E[]": "exclude",
- h: "help",
- m: "multiple",
- n: "nocode",
- o: "out",
- p: "private",
- q: "quiet",
- r: "recurse",
- S: "securemodules",
- s: "suppress",
- t: "template",
- T: "testmode",
- u: "unique",
- v: "verbose",
- x: "ext"
- }
-);
-
-/** The current version string of this application. */
-JSDOC.VERSION = "2.4.0";
-
-/** Print out usage information and quit. */
-JSDOC.usage = function() {
- print("USAGE: java -jar jsrun.jar app/run.js [OPTIONS] <SRC_DIR> <SRC_FILE> ...");
- print("");
- print("OPTIONS:");
- print(" -a or --allfunctions\n Include all functions, even undocumented ones.\n");
- print(" -c or --conf\n Load a configuration file.\n");
- print(" -d=<PATH> or --directory=<PATH>\n Output to this directory (defaults to \"out\").\n");
- print(" -D=\"myVar:My value\" or --define=\"myVar:My value\"\n Multiple. Define a variable, available in JsDoc as JSDOC.opt.D.myVar.\n");
- print(" -e=<ENCODING> or --encoding=<ENCODING>\n Use this encoding to read and write files.\n");
- print(" -E=\"REGEX\" or --exclude=\"REGEX\"\n Multiple. Exclude files based on the supplied regex.\n");
- print(" -h or --help\n Show this message and exit.\n");
- print(" -m or --multiples\n Don't warn about symbols being documented more than once.\n");
- print(" -n or --nocode\n Ignore all code, only document comments with @name tags.\n");
- print(" -o=<PATH> or --out=<PATH>\n Print log messages to a file (defaults to stdout).\n");
- print(" -p or --private\n Include symbols tagged as private, underscored and inner symbols.\n");
- print(" -q or --quiet\n Do not output any messages, not even warnings.\n");
- print(" -r=<DEPTH> or --recurse=<DEPTH>\n Descend into src directories.\n");
- print(" -s or --suppress\n Suppress source code output.\n");
- print(" -S or --securemodules\n Use Secure Modules mode to parse source code.\n");
- print(" -t=<PATH> or --template=<PATH>\n Required. Use this template to format the output.\n");
- print(" -T or --test\n Run all unit tests and exit.\n");
- print(" -u or --unique\n Force file names to be unique, but not based on symbol names.\n");
- print(" -v or --verbose\n Provide verbose feedback about what is happening.\n");
- print(" -x=<EXT>[,EXT]... or --ext=<EXT>[,EXT]...\n Scan source files with the given extension/s (defaults to js).\n");
-
- quit();
-}
-
-/*t:
- plan(4, "Testing JSDOC namespace.");
-
- is(
- typeof JSDOC,
- "object",
- "JSDOC.usage is a function."
- );
-
- is(
- typeof JSDOC.VERSION,
- "string",
- "JSDOC.VERSION is a string."
- );
-
- is(
- typeof JSDOC.usage,
- "function",
- "JSDOC.usage is a function."
- );
-
- is(
- typeof JSDOC.opt,
- "object",
- "JSDOC.opt is a object."
- );
- */
-
-if (this.IO) IO.includeDir("lib/JSDOC/");
--- a/sbin/res/jsdoc/app/lib/JSDOC/DocComment.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,204 +0,0 @@
-if (typeof JSDOC == "undefined") JSDOC = {};
-
-/**
- Create a new DocComment. This takes a raw documentation comment,
- and wraps it in useful accessors.
- @class Represents a documentation comment object.
- */
-JSDOC.DocComment = function(/**String*/comment) {
- this.init();
- if (typeof comment != "undefined") {
- this.parse(comment);
- }
-}
-
-JSDOC.DocComment.prototype.init = function() {
- this.isUserComment = true;
- this.src = "";
- this.meta = "";
- this.tagTexts = [];
- this.tags = [];
-}
-
-/**
- @requires JSDOC.DocTag
- */
-JSDOC.DocComment.prototype.parse = function(/**String*/comment) {
- if (comment == "") {
- comment = "/** @desc */";
- this.isUserComment = false;
- }
-
- this.src = JSDOC.DocComment.unwrapComment(comment);
-
- this.meta = "";
- if (this.src.indexOf("#") == 0) {
- this.src.match(/#(.+[+-])([\s\S]*)$/);
- if (RegExp.$1) this.meta = RegExp.$1;
- if (RegExp.$2) this.src = RegExp.$2;
- }
-
- if (typeof JSDOC.PluginManager != "undefined") {
- JSDOC.PluginManager.run("onDocCommentSrc", this);
- }
-
- this.fixDesc();
-
- this.src = JSDOC.DocComment.shared+"\n"+this.src;
-
- this.tagTexts =
- this.src
- .split(/(^|[\r\n])\s*@/)
- .filter(function($){return $.match(/\S/)});
-
- /**
- The tags found in the comment.
- @type JSDOC.DocTag[]
- */
- this.tags = this.tagTexts.map(function($){return new JSDOC.DocTag($)});
-
- if (typeof JSDOC.PluginManager != "undefined") {
- JSDOC.PluginManager.run("onDocCommentTags", this);
- }
-}
-
-/*t:
- plan(5, "testing JSDOC.DocComment");
- requires("../frame/String.js");
- requires("../lib/JSDOC/DocTag.js");
-
- var com = new JSDOC.DocComment("/**@foo some\n* comment here*"+"/");
- is(com.tagTexts[0], "foo some\ncomment here", "first tag text is found.");
- is(com.tags[0].title, "foo", "the title is found in a comment with one tag.");
-
- var com = new JSDOC.DocComment("/** @foo first\n* @bar second*"+"/");
- is(com.getTag("bar").length, 1, "getTag() returns one tag by that title.");
-
- JSDOC.DocComment.shared = "@author John Smith";
- var com = new JSDOC.DocComment("/**@foo some\n* comment here*"+"/");
- is(com.tags[0].title, "author", "shared comment is added.");
- is(com.tags[1].title, "foo", "shared comment is added to existing tag.");
-*/
-
-/**
- If no @desc tag is provided, this function will add it.
- */
-JSDOC.DocComment.prototype.fixDesc = function() {
- if (this.meta && this.meta != "@+") return;
- if (/^\s*[^@\s]/.test(this.src)) {
- this.src = "@desc "+this.src;
- }
-}
-
-/*t:
- plan(5, "testing JSDOC.DocComment#fixDesc");
-
- var com = new JSDOC.DocComment();
-
- com.src = "this is a desc\n@author foo";
- com.fixDesc();
- is(com.src, "@desc this is a desc\n@author foo", "if no @desc tag is provided one is added.");
-
- com.src = "x";
- com.fixDesc();
- is(com.src, "@desc x", "if no @desc tag is provided one is added to a single character.");
-
- com.src = "\nx";
- com.fixDesc();
- is(com.src, "@desc \nx", "if no @desc tag is provided one is added to return and character.");
-
- com.src = " ";
- com.fixDesc();
- is(com.src, " ", "if no @desc tag is provided one is not added to just whitespace.");
-
- com.src = "";
- com.fixDesc();
- is(com.src, "", "if no @desc tag is provided one is not added to empty.");
-*/
-
-/**
- Remove slash-star comment wrapper from a raw comment string.
- @type String
- */
-JSDOC.DocComment.unwrapComment = function(/**String*/comment) {
- if (!comment) return "";
- var unwrapped = comment.replace(/(^\/\*\*|\*\/$)/g, "").replace(/^\s*\* ?/gm, "");
- return unwrapped;
-}
-
-/*t:
- plan(5, "testing JSDOC.DocComment.unwrapComment");
-
- var com = "/**x*"+"/";
- var unwrapped = JSDOC.DocComment.unwrapComment(com);
- is(unwrapped, "x", "a single character jsdoc is found.");
-
- com = "/***x*"+"/";
- unwrapped = JSDOC.DocComment.unwrapComment(com);
- is(unwrapped, "x", "three stars are allowed in the opener.");
-
- com = "/****x*"+"/";
- unwrapped = JSDOC.DocComment.unwrapComment(com);
- is(unwrapped, "*x", "fourth star in the opener is kept.");
-
- com = "/**x\n * y\n*"+"/";
- unwrapped = JSDOC.DocComment.unwrapComment(com);
- is(unwrapped, "x\ny\n", "leading stars and spaces are trimmed.");
-
- com = "/**x\n * y\n*"+"/";
- unwrapped = JSDOC.DocComment.unwrapComment(com);
- is(unwrapped, "x\n y\n", "only first space after leading stars are trimmed.");
-*/
-
-/**
- Provides a printable version of the comment.
- @type String
- */
-JSDOC.DocComment.prototype.toString = function() {
- return this.src;
-}
-
-/*t:
- plan(1, "testing JSDOC.DocComment#fixDesc");
- var com = new JSDOC.DocComment();
- com.src = "foo";
- is(""+com, "foo", "stringifying a comment returns the unwrapped src.");
-*/
-
-/**
- Given the title of a tag, returns all tags that have that title.
- @type JSDOC.DocTag[]
- */
-JSDOC.DocComment.prototype.getTag = function(/**String*/tagTitle) {
- return this.tags.filter(function($){return $.title == tagTitle});
-}
-
-JSDOC.DocComment.prototype.deleteTag = function(/**String*/tagTitle) {
- this.tags = this.tags.filter(function($){return $.title != tagTitle})
-}
-
-/*t:
- plan(1, "testing JSDOC.DocComment#getTag");
- requires("../frame/String.js");
- requires("../lib/JSDOC/DocTag.js");
-
- var com = new JSDOC.DocComment("/**@foo some\n* @bar\n* @bar*"+"/");
- is(com.getTag("bar").length, 2, "getTag returns expected number of tags.");
-*/
-
-/**
- Used to store the currently shared tag text.
-*/
-JSDOC.DocComment.shared = "";
-
-/*t:
- plan(2, "testing JSDOC.DocComment.shared");
- requires("../frame/String.js");
- requires("../lib/JSDOC/DocTag.js");
-
- JSDOC.DocComment.shared = "@author Michael";
-
- var com = new JSDOC.DocComment("/**@foo\n* @foo*"+"/");
- is(com.getTag("author").length, 1, "getTag returns shared tag.");
- is(com.getTag("foo").length, 2, "getTag returns unshared tags too.");
-*/
\ No newline at end of file
--- a/sbin/res/jsdoc/app/lib/JSDOC/DocTag.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,294 +0,0 @@
-if (typeof JSDOC == "undefined") JSDOC = {};
-
-/**
- @constructor
- */
-JSDOC.DocTag = function(src) {
- this.init();
- if (typeof src != "undefined") {
- this.parse(src);
- }
-}
-
-/**
- Create and initialize the properties of this.
- */
-JSDOC.DocTag.prototype.init = function() {
- this.title = "";
- this.type = "";
- this.name = "";
- this.isOptional = false;
- this.defaultValue = "";
- this.desc = "";
-
- return this;
-}
-
-/**
- Populate the properties of this from the given tag src.
- @param {string} src
- */
-JSDOC.DocTag.prototype.parse = function(src) {
- if (typeof src != "string") throw "src must be a string not "+(typeof src);
-
- try {
- src = this.nibbleTitle(src);
- if (JSDOC.PluginManager) {
- JSDOC.PluginManager.run("onDocTagSynonym", this);
- }
-
- src = this.nibbleType(src);
-
- // only some tags are allowed to have names.
- if (this.title == "param" || this.title == "property" || this.title == "config") { // @config is deprecated
- src = this.nibbleName(src);
- }
- }
- catch(e) {
- if (LOG) LOG.warn(e);
- else throw e;
- }
- this.desc = src; // whatever is left
-
- // example tags need to have whitespace preserved
- if (this.title != "example") this.desc = this.desc.trim();
-
- if (JSDOC.PluginManager) {
- JSDOC.PluginManager.run("onDocTag", this);
- }
-}
-
-/**
- Automatically called when this is stringified.
- */
-JSDOC.DocTag.prototype.toString = function() {
- return this.desc;
-}
-
-/*t:
- plan(1, "testing JSDOC.DocTag#toString");
-
- var tag = new JSDOC.DocTag("param {object} date A valid date.");
- is(""+tag, "A valid date.", "stringifying a tag returns the desc.");
- */
-
-/**
- Find and shift off the title of a tag.
- @param {string} src
- @return src
- */
-JSDOC.DocTag.prototype.nibbleTitle = function(src) {
- if (typeof src != "string") throw "src must be a string not "+(typeof src);
-
- var parts = src.match(/^\s*(\S+)(?:\s([\s\S]*))?$/);
-
- if (parts && parts[1]) this.title = parts[1];
- if (parts && parts[2]) src = parts[2];
- else src = "";
-
- return src;
-}
-
-/*t:
- plan(8, "testing JSDOC.DocTag#nibbleTitle");
-
- var tag = new JSDOC.DocTag();
-
- tag.init().nibbleTitle("aTitleGoesHere");
- is(tag.title, "aTitleGoesHere", "a title can be found in a single-word string.");
-
- var src = tag.init().nibbleTitle("aTitleGoesHere and the rest");
- is(tag.title, "aTitleGoesHere", "a title can be found in a multi-word string.");
- is(src, "and the rest", "the rest is returned when the title is nibbled off.");
-
- src = tag.init().nibbleTitle("");
- is(tag.title, "", "given an empty string the title is empty.");
- is(src, "", "the rest is empty when the tag is empty.");
-
- var src = tag.init().nibbleTitle(" aTitleGoesHere\n a description");
- is(tag.title, "aTitleGoesHere", "leading and trailing spaces are not part of the title.");
- is(src, " a description", "leading spaces (less one) are part of the description.");
-
- tag.init().nibbleTitle("a.Title::Goes_Here foo");
- is(tag.title, "a.Title::Goes_Here", "titles with punctuation are allowed.");
- */
-
-/**
- Find and shift off the type of a tag.
- @requires frame/String.js
- @param {string} src
- @return src
- */
-JSDOC.DocTag.prototype.nibbleType = function(src) {
- if (typeof src != "string") throw "src must be a string not "+(typeof src);
-
- if (src.match(/^\s*\{/)) {
- var typeRange = src.balance("{", "}");
- if (typeRange[1] == -1) {
- throw "Malformed comment tag ignored. Tag type requires an opening { and a closing }: "+src;
- }
- this.type = src.substring(typeRange[0]+1, typeRange[1]).trim();
- this.type = this.type.replace(/\s*,\s*/g, "|"); // multiples can be separated by , or |
- src = src.substring(typeRange[1]+1);
- }
-
- return src;
-}
-
-/*t:
- plan(5, "testing JSDOC.DocTag.parser.nibbleType");
- requires("../frame/String.js");
-
- var tag = new JSDOC.DocTag();
-
- tag.init().nibbleType("{String[]} aliases");
- is(tag.type, "String[]", "type can have non-alpha characters.");
-
- tag.init().nibbleType("{ aTypeGoesHere } etc etc");
- is(tag.type, "aTypeGoesHere", "type is trimmed.");
-
- tag.init().nibbleType("{ oneType, twoType ,\n threeType } etc etc");
- is(tag.type, "oneType|twoType|threeType", "multiple types can be separated by commas.");
-
- var error;
- try { tag.init().nibbleType("{widget foo"); }
- catch(e) { error = e; }
- is(typeof error, "string", "malformed tag type throws error.");
- isnt(error.indexOf("Malformed"), -1, "error message tells tag is malformed.");
- */
-
-/**
- Find and shift off the name of a tag.
- @requires frame/String.js
- @param {string} src
- @return src
- */
-JSDOC.DocTag.prototype.nibbleName = function(src) {
- if (typeof src != "string") throw "src must be a string not "+(typeof src);
-
- src = src.trim();
-
- // is optional?
- if (src.charAt(0) == "[") {
- var nameRange = src.balance("[", "]");
- if (nameRange[1] == -1) {
- throw "Malformed comment tag ignored. Tag optional name requires an opening [ and a closing ]: "+src;
- }
- this.name = src.substring(nameRange[0]+1, nameRange[1]).trim();
- this.isOptional = true;
-
- src = src.substring(nameRange[1]+1);
-
- // has default value?
- var nameAndValue = this.name.split("=");
- if (nameAndValue.length) {
- this.name = nameAndValue.shift().trim();
- this.defaultValue = nameAndValue.join("=");
- }
- }
- else {
- var parts = src.match(/^(\S+)(?:\s([\s\S]*))?$/);
- if (parts) {
- if (parts[1]) this.name = parts[1];
- if (parts[2]) src = parts[2].trim();
- else src = "";
- }
- }
-
- return src;
-}
-
-/*t:
- requires("../frame/String.js");
- plan(9, "testing JSDOC.DocTag.parser.nibbleName");
-
- var tag = new JSDOC.DocTag();
-
- tag.init().nibbleName("[foo] This is a description.");
- is(tag.isOptional, true, "isOptional syntax is detected.");
- is(tag.name, "foo", "optional param name is found.");
-
- tag.init().nibbleName("[foo] This is a description.");
- is(tag.isOptional, true, "isOptional syntax is detected when no type.");
- is(tag.name, "foo", "optional param name is found when no type.");
-
- tag.init().nibbleName("[foo=7] This is a description.");
- is(tag.name, "foo", "optional param name is found when default value.");
- is(tag.defaultValue, 7, "optional param default value is found when default value.");
-
- //tag.init().nibbleName("[foo= a value] This is a description.");
- //is(tag.defaultValue, " a value", "optional param default value is found when default value has spaces (issue #112).");
-
- tag.init().nibbleName("[foo=[]] This is a description.");
- is(tag.defaultValue, "[]", "optional param default value is found when default value is [] (issue #95).");
-
- tag.init().nibbleName("[foo=a=b] This is a description.");
- is(tag.name, "foo", "optional param name is found when default value is a=b.");
- is(tag.defaultValue, "a=b", "optional param default value is found when default value is a=b.")
- */
-
-/*t:
- plan(32, "Testing JSDOC.DocTag.parser.");
- requires("../frame/String.js");
-
- var tag = new JSDOC.DocTag();
-
- is(typeof tag, "object", "JSDOC.DocTag.parser with an empty string returns an object.");
- is(typeof tag.title, "string", "returned object has a string property 'title'.");
- is(typeof tag.type, "string", "returned object has a string property 'type'.");
- is(typeof tag.name, "string", "returned object has a string property 'name'.");
- is(typeof tag.defaultValue, "string", "returned object has a string property 'defaultValue'.");
- is(typeof tag.isOptional, "boolean", "returned object has a boolean property 'isOptional'.");
- is(typeof tag.desc, "string", "returned object has a string property 'desc'.");
-
- tag = new JSDOC.DocTag("param {widget} foo");
- is(tag.title, "param", "param title is found.");
- is(tag.name, "foo", "param name is found when desc is missing.");
- is(tag.desc, "", "param desc is empty when missing.");
-
- tag = new JSDOC.DocTag("param {object} date A valid date.");
- is(tag.name, "date", "param name is found with a type.");
- is(tag.type, "object", "param type is found.");
- is(tag.desc, "A valid date.", "param desc is found with a type.");
-
- tag = new JSDOC.DocTag("param aName a description goes\n here.");
- is(tag.name, "aName", "param name is found without a type.");
- is(tag.desc, "a description goes\n here.", "param desc is found without a type.");
-
- tag = new JSDOC.DocTag("param {widget}");
- is(tag.name, "", "param name is empty when it is not given.");
-
- tag = new JSDOC.DocTag("param {widget} [foo] This is a description.");
- is(tag.name, "foo", "optional param name is found.");
-
- tag = new JSDOC.DocTag("return {aType} This is a description.");
- is(tag.type, "aType", "when return tag has no name, type is found.");
- is(tag.desc, "This is a description.", "when return tag has no name, desc is found.");
-
- tag = new JSDOC.DocTag("author Joe Coder <jcoder@example.com>");
- is(tag.title, "author", "author tag has a title.");
- is(tag.type, "", "the author tag has no type.");
- is(tag.name, "", "the author tag has no name.");
- is(tag.desc, "Joe Coder <jcoder@example.com>", "author tag has desc.");
-
- tag = new JSDOC.DocTag("private \t\n ");
- is(tag.title, "private", "private tag has a title.");
- is(tag.type, "", "the private tag has no type.");
- is(tag.name, "", "the private tag has no name.");
- is(tag.desc, "", "private tag has no desc.");
-
- tag = new JSDOC.DocTag("example\n example(code);\n more();");
- is(tag.desc, " example(code);\n more();", "leading whitespace (less one) in examples code is preserved.");
-
- tag = new JSDOC.DocTag("param theName \n");
- is(tag.name, "theName", "name only is found.");
-
- tag = new JSDOC.DocTag("type theDesc \n");
- is(tag.desc, "theDesc", "desc only is found.");
-
- tag = new JSDOC.DocTag("type {theType} \n");
- is(tag.type, "theType", "type only is found.");
-
- tag = new JSDOC.DocTag("");
- is(tag.title, "", "title is empty when tag is empty.");
- */
\ No newline at end of file
--- a/sbin/res/jsdoc/app/lib/JSDOC/JsDoc.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,140 +0,0 @@
-/**
- @constructor
- @param [opt] Used to override the commandline options. Useful for testing.
- @version $Id: JsDoc.js 831 2010-03-09 14:24:56Z micmath $
-*/
-JSDOC.JsDoc = function(/**object*/ opt) {
- if (opt) {
- JSDOC.opt = opt;
- }
-
- if (JSDOC.opt.h) {
- JSDOC.usage();
- quit();
- }
-
- // defend against options that are not sane
- if (JSDOC.opt._.length == 0) {
- LOG.warn("No source files to work on. Nothing to do.");
- quit();
- }
- if (JSDOC.opt.t === true || JSDOC.opt.d === true) {
- JSDOC.usage();
- }
-
- if (typeof JSDOC.opt.d == "string") {
- if (!JSDOC.opt.d.charAt(JSDOC.opt.d.length-1).match(/[\\\/]/)) {
- JSDOC.opt.d = JSDOC.opt.d+"/";
- }
- LOG.inform("Output directory set to '"+JSDOC.opt.d+"'.");
- IO.mkPath(JSDOC.opt.d);
- }
- if (JSDOC.opt.e) IO.setEncoding(JSDOC.opt.e);
-
- // the -r option: scan source directories recursively
- if (typeof JSDOC.opt.r == "boolean") JSDOC.opt.r = 10;
- else if (!isNaN(parseInt(JSDOC.opt.r))) JSDOC.opt.r = parseInt(JSDOC.opt.r);
- else JSDOC.opt.r = 1;
-
- // the -D option: define user variables
- var D = {};
- if (JSDOC.opt.D) {
- for (var i = 0; i < JSDOC.opt.D.length; i++) {
- var param = JSDOC.opt.D[i];
- // remove first and last character if both == "
- if (
- param.length > 1
- && param.charAt(0) == '"'
- && param.charAt(param.length-1) == '"'
- ) {
- param = param.substr(1, param.length-2);
- }
- var defineParts = param.split(":");
- if (defineParts && defineParts.length > 1) {
- for ( var dpIdx = 2; dpIdx < defineParts.length; dpIdx++ ) {
- defineParts[1] += ':' + defineParts[dpIdx];
- }
- D[defineParts[0]] = defineParts[1];
- }
- }
- }
- JSDOC.opt.D = D;
- // combine any conf file D options with the commandline D options
- if (defined(JSDOC.conf)) for (var c in JSDOC.conf.D) {
- if (!defined(JSDOC.opt.D[c])) {
- JSDOC.opt.D[c] = JSDOC.conf.D[c];
- }
- }
-
- // Give plugins a chance to initialize
- if (defined(JSDOC.PluginManager)) {
- JSDOC.PluginManager.run("onInit", JSDOC.opt);
- }
-
- JSDOC.opt.srcFiles = JSDOC.JsDoc._getSrcFiles();
- JSDOC.JsDoc._parseSrcFiles();
- JSDOC.JsDoc.symbolSet = JSDOC.Parser.symbols;
-}
-
-/**
- Retrieve source file list.
- @returns {String[]} The pathnames of the files to be parsed.
- */
-JSDOC.JsDoc._getSrcFiles = function() {
- JSDOC.JsDoc.srcFiles = [];
-
- var ext = ["js"];
- if (JSDOC.opt.x) {
- ext = JSDOC.opt.x.split(",").map(function($) {return $.toLowerCase()});
- }
-
- for (var i = 0; i < JSDOC.opt._.length; i++) {
- JSDOC.JsDoc.srcFiles = JSDOC.JsDoc.srcFiles.concat(
- IO.ls(JSDOC.opt._[i], JSDOC.opt.r).filter(
- function($) {
- var thisExt = $.split(".").pop().toLowerCase();
-
- if (JSDOC.opt.E) {
- for(var n = 0; n < JSDOC.opt.E.length; n++) {
- if ($.match(new RegExp(JSDOC.opt.E[n]))) {
- LOG.inform("Excluding " + $);
- return false; // if the file matches the regex then it's excluded.
- }
- }
- }
-
- return (ext.indexOf(thisExt) > -1); // we're only interested in files with certain extensions
- }
- )
- );
- }
-
- return JSDOC.JsDoc.srcFiles;
-}
-
-JSDOC.JsDoc._parseSrcFiles = function() {
- JSDOC.Parser.init();
- for (var i = 0, l = JSDOC.JsDoc.srcFiles.length; i < l; i++) {
- var srcFile = JSDOC.JsDoc.srcFiles[i];
-
- if (JSDOC.opt.v) LOG.inform("Parsing file: " + srcFile);
-
- try {
- var src = IO.readFile(srcFile);
- }
- catch(e) {
- LOG.warn("Can't read source file '"+srcFile+"': "+e.message);
- }
-
- var tr = new JSDOC.TokenReader();
- var ts = new JSDOC.TokenStream(tr.tokenize(new JSDOC.TextStream(src)));
-
- JSDOC.Parser.parse(ts, srcFile);
-
- }
- JSDOC.Parser.finish();
-
- if (JSDOC.PluginManager) {
- JSDOC.PluginManager.run("onFinishedParsing", JSDOC.Parser.symbols);
- }
-}
--- a/sbin/res/jsdoc/app/lib/JSDOC/JsPlate.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/**
- @constructor
-*/
-JSDOC.JsPlate = function(templateFile) {
- if (templateFile) this.template = IO.readFile(templateFile);
-
- this.templateFile = templateFile;
- this.code = "";
- this.parse();
-}
-
-JSDOC.JsPlate.prototype.parse = function() {
- this.template = this.template.replace(/\{#[\s\S]+?#\}/gi, "");
- this.code = "var output=\u001e"+this.template;
-
- this.code = this.code.replace(
- /<for +each="(.+?)" +in="(.+?)" *>/gi,
- function (match, eachName, inName) {
- return "\u001e;\rvar $"+eachName+"_keys = keys("+inName+");\rfor(var $"+eachName+"_i = 0; $"+eachName+"_i < $"+eachName+"_keys.length; $"+eachName+"_i++) {\rvar $"+eachName+"_last = ($"+eachName+"_i == $"+eachName+"_keys.length-1);\rvar $"+eachName+"_key = $"+eachName+"_keys[$"+eachName+"_i];\rvar "+eachName+" = "+inName+"[$"+eachName+"_key];\routput+=\u001e";
- }
- );
- this.code = this.code.replace(/<if test="(.+?)">/g, "\u001e;\rif ($1) { output+=\u001e");
- this.code = this.code.replace(/<elseif test="(.+?)"\s*\/>/g, "\u001e;}\relse if ($1) { output+=\u001e");
- this.code = this.code.replace(/<else\s*\/>/g, "\u001e;}\relse { output+=\u001e");
- this.code = this.code.replace(/<\/(if|for)>/g, "\u001e;\r};\routput+=\u001e");
- this.code = this.code.replace(
- /\{\+\s*([\s\S]+?)\s*\+\}/gi,
- function (match, code) {
- code = code.replace(/"/g, "\u001e"); // prevent qoute-escaping of inline code
- code = code.replace(/(\r?\n)/g, " ");
- return "\u001e+ ("+code+") +\u001e";
- }
- );
- this.code = this.code.replace(
- /\{!\s*([\s\S]+?)\s*!\}/gi,
- function (match, code) {
- code = code.replace(/"/g, "\u001e"); // prevent qoute-escaping of inline code
- code = code.replace(/(\n)/g, " ");
- return "\u001e; "+code+";\routput+=\u001e";
- }
- );
- this.code = this.code+"\u001e;";
-
- this.code = this.code.replace(/(\r?\n)/g, "\\n");
- this.code = this.code.replace(/"/g, "\\\"");
- this.code = this.code.replace(/\u001e/g, "\"");
-}
-
-JSDOC.JsPlate.prototype.toCode = function() {
- return this.code;
-}
-
-JSDOC.JsPlate.keys = function(obj) {
- var keys = [];
- if (obj.constructor.toString().indexOf("Array") > -1) {
- for (var i = 0; i < obj.length; i++) {
- keys.push(i);
- }
- }
- else {
- for (var i in obj) {
- keys.push(i);
- }
- }
- return keys;
-};
-
-JSDOC.JsPlate.values = function(obj) {
- var values = [];
- if (obj.constructor.toString().indexOf("Array") > -1) {
- for (var i = 0; i < obj.length; i++) {
- values.push(obj[i]);
- }
- }
- else {
- for (var i in obj) {
- values.push(obj[i]);
- }
- }
- return values;
-};
-
-JSDOC.JsPlate.prototype.process = function(data, compact) {
- var keys = JSDOC.JsPlate.keys;
- var values = JSDOC.JsPlate.values;
-
- try {
- eval(this.code);
- }
- catch (e) {
- print(">> There was an error evaluating the compiled code from template: "+this.templateFile);
- print(" The error was on line "+e.lineNumber+" "+e.name+": "+e.message);
- var lines = this.code.split("\r");
- if (e.lineNumber-2 >= 0) print("line "+(e.lineNumber-1)+": "+lines[e.lineNumber-2]);
- print("line "+e.lineNumber+": "+lines[e.lineNumber-1]);
- print("");
- }
-
- if (compact) { // patch by mcbain.asm
- // Remove lines that contain only space-characters, usually left by lines in the template
- // which originally only contained JSPlate tags or code. This makes it easier to write
- // non-tricky templates which still put out nice code (not bloated with extra lines).
- // Lines purposely left blank (just a line ending) are left alone.
- output = output.replace(/\s+?(\r?)\n/g, "$1\n");
- }
-
- /*debug*///print(this.code);
- return output;
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/lib/JSDOC/Lang.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/**
- @namespace
-*/
-JSDOC.Lang = {
-}
-
-JSDOC.Lang.isBuiltin = function(name) {
- return (JSDOC.Lang.isBuiltin.coreObjects.indexOf(name) > -1);
-}
-JSDOC.Lang.isBuiltin.coreObjects = ['_global_', 'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object', 'RegExp', 'String'];
-
-JSDOC.Lang.whitespace = function(ch) {
- return JSDOC.Lang.whitespace.names[ch];
-}
-JSDOC.Lang.whitespace.names = {
- " ": "SPACE",
- "\f": "FORMFEED",
- "\t": "TAB",
- "\u0009": "UNICODE_TAB",
- "\u000A": "UNICODE_NBR",
- "\u0008": "VERTICAL_TAB"
-};
-
-JSDOC.Lang.newline = function(ch) {
- return JSDOC.Lang.newline.names[ch];
-}
-JSDOC.Lang.newline.names = {
- "\n": "NEWLINE",
- "\r": "RETURN",
- "\u000A": "UNICODE_LF",
- "\u000D": "UNICODE_CR",
- "\u2029": "UNICODE_PS",
- "\u2028": "UNICODE_LS"
-};
-
-JSDOC.Lang.keyword = function(word) {
- return JSDOC.Lang.keyword.names["="+word];
-}
-JSDOC.Lang.keyword.names = {
- "=break": "BREAK",
- "=case": "CASE",
- "=catch": "CATCH",
- "=const": "VAR",
- "=continue": "CONTINUE",
- "=default": "DEFAULT",
- "=delete": "DELETE",
- "=do": "DO",
- "=else": "ELSE",
- "=false": "FALSE",
- "=finally": "FINALLY",
- "=for": "FOR",
- "=function": "FUNCTION",
- "=if": "IF",
- "=in": "IN",
- "=instanceof": "INSTANCEOF",
- "=new": "NEW",
- "=null": "NULL",
- "=return": "RETURN",
- "=switch": "SWITCH",
- "=this": "THIS",
- "=throw": "THROW",
- "=true": "TRUE",
- "=try": "TRY",
- "=typeof": "TYPEOF",
- "=void": "VOID",
- "=while": "WHILE",
- "=with": "WITH",
- "=var": "VAR"
-};
-
-JSDOC.Lang.punc = function(ch) {
- return JSDOC.Lang.punc.names[ch];
-}
-JSDOC.Lang.punc.names = {
- ";": "SEMICOLON",
- ",": "COMMA",
- "?": "HOOK",
- ":": "COLON",
- "||": "OR",
- "&&": "AND",
- "|": "BITWISE_OR",
- "^": "BITWISE_XOR",
- "&": "BITWISE_AND",
- "===": "STRICT_EQ",
- "==": "EQ",
- "=": "ASSIGN",
- "!==": "STRICT_NE",
- "!=": "NE",
- "<<": "LSH",
- "<=": "LE",
- "<": "LT",
- ">>>": "URSH",
- ">>": "RSH",
- ">=": "GE",
- ">": "GT",
- "++": "INCREMENT",
- "--": "DECREMENT",
- "+": "PLUS",
- "-": "MINUS",
- "*": "MUL",
- "/": "DIV",
- "%": "MOD",
- "!": "NOT",
- "~": "BITWISE_NOT",
- ".": "DOT",
- "[": "LEFT_BRACKET",
- "]": "RIGHT_BRACKET",
- "{": "LEFT_CURLY",
- "}": "RIGHT_CURLY",
- "(": "LEFT_PAREN",
- ")": "RIGHT_PAREN"
-};
-
-JSDOC.Lang.matching = function(name) {
- return JSDOC.Lang.matching.names[name];
-}
-JSDOC.Lang.matching.names = {
- "LEFT_PAREN": "RIGHT_PAREN",
- "RIGHT_PAREN": "LEFT_PAREN",
- "LEFT_CURLY": "RIGHT_CURLY",
- "RIGHT_CURLY": "LEFT_CURLY",
- "LEFT_BRACE": "RIGHT_BRACE",
- "RIGHT_BRACE": "LEFT_BRACE"
-}
-
-JSDOC.Lang.isNumber = function(str) {
- return /^(\.[0-9]|[0-9]+\.|[0-9])[0-9]*([eE][+-][0-9]+)?$/i.test(str);
-}
-
-JSDOC.Lang.isHexDec = function(str) {
- return /^0x[0-9A-F]+$/i.test(str);
-}
-
-JSDOC.Lang.isWordChar = function(str) {
- return /^[a-zA-Z0-9$_.]+$/.test(str);
-}
-
-JSDOC.Lang.isSpace = function(str) {
- return (typeof JSDOC.Lang.whitespace(str) != "undefined");
-}
-
-JSDOC.Lang.isNewline = function(str) {
- return (typeof JSDOC.Lang.newline(str) != "undefined");
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/lib/JSDOC/Parser.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-if (typeof JSDOC == "undefined") JSDOC = {};
-
-/**
- @namespace
- @requires JSDOC.Walker
- @requires JSDOC.Symbol
- @requires JSDOC.DocComment
-*/
-JSDOC.Parser = {
- conf: {
- ignoreCode: JSDOC.opt.n,
- ignoreAnonymous: true, // factory: true
- treatUnderscoredAsPrivate: true, // factory: true
- explain: false // factory: false
- },
-
- addSymbol: function(symbol) {
-
- if (JSDOC.Parser.rename) {
- for (var n in JSDOC.Parser.rename) {
- if (symbol.alias.indexOf(n) == 0) {
- if (symbol.name == symbol.alias) {
- symbol.name = symbol.name.replace(n, JSDOC.Parser.rename[n]);
- }
- symbol.alias = symbol.alias.replace(n, JSDOC.Parser.rename[n]);
- }
- }
- }
-
- if (JSDOC.opt.S) {
- if (typeof JSDOC.Parser.secureModules == "undefined") JSDOC.Parser.secureModules = {};
- if (/^exports\./.test(symbol.alias)) {
- symbol.srcFile.match(/(^|[\\\/])([^\\\/]+)\.js/i);
- var fileNS = RegExp.$2;
-
- // need to create the namespace associated with this file first
- if (!JSDOC.Parser.secureModules[fileNS]) {
- JSDOC.Parser.secureModules[fileNS] = 1;
- var nsSymbol = new JSDOC.Symbol(fileNS, [], "GLOBAL", new JSDOC.DocComment(""));
- nsSymbol.isNamespace = true;
- nsSymbol.srcFile = "";
- nsSymbol.isPrivate = false;
- nsSymbol.srcFile = symbol.srcFile;
- nsSymbol.desc = (JSDOC.Parser.symbols.getSymbol(symbol.srcFile) || {desc: ""}).desc;
- JSDOC.Parser.addSymbol(nsSymbol);
- }
-
- symbol.alias = symbol.alias.replace(/^exports\./, fileNS + '.');
- symbol.name = symbol.name.replace(/^exports\./, '');
- symbol.memberOf = fileNS;
- symbol.isStatic = true;
- }
- }
-
- // if a symbol alias is documented more than once the first one with the user docs wins
- if (JSDOC.Parser.symbols.hasSymbol(symbol.alias)) {
- var oldSymbol = JSDOC.Parser.symbols.getSymbol(symbol.alias);
- if (oldSymbol.comment.isUserComment) {
- if (JSDOC.opt.m) return;
- if (symbol.comment.isUserComment) { // old and new are both documented
- LOG.warn("The symbol '"+symbol.alias+"' is documented more than once.");
- return;
- }
- else { // old is documented but new isn't
- return;
- }
- }
- }
-
- // we don't document anonymous things
- if (JSDOC.Parser.conf.ignoreAnonymous && symbol.name.match(/\$anonymous\b/)) return;
-
- // uderscored things may be treated as if they were marked private, this cascades
- if (JSDOC.Parser.conf.treatUnderscoredAsPrivate && symbol.name.match(/[.#-]_[^.#-]+$/)) {
- if (!symbol.comment.getTag("public").length > 0) symbol.isPrivate = true;
- }
-
- // -p flag is required to document private things
- if (!JSDOC.opt.p && symbol.isPrivate) return; // issue #161 fixed by mcbain.asm
-
- // ignored things are not documented, this doesn't cascade
- if (symbol.isIgnored) return;
- JSDOC.Parser.symbols.addSymbol(symbol);
- },
-
- addBuiltin: function(name) {
- var builtin = new JSDOC.Symbol(name, [], "CONSTRUCTOR", new JSDOC.DocComment(""));
- builtin.isNamespace = true;
- builtin.srcFile = "";
- builtin.isPrivate = false;
- JSDOC.Parser.addSymbol(builtin);
- return builtin;
- },
-
- init: function() {
- JSDOC.Parser.symbols = new JSDOC.SymbolSet();
- JSDOC.Parser.walker = new JSDOC.Walker();
- },
-
- finish: function() {
- JSDOC.Parser.symbols.relate();
-
- // make a litle report about what was found
- if (JSDOC.Parser.conf.explain) {
- var symbols = JSDOC.Parser.symbols.toArray();
- var srcFile = "";
- for (var i = 0, l = symbols.length; i < l; i++) {
- var symbol = symbols[i];
- if (srcFile != symbol.srcFile) {
- srcFile = symbol.srcFile;
- print("\n"+srcFile+"\n-------------------");
- }
- print(i+":\n alias => "+symbol.alias + "\n name => "+symbol.name+ "\n isa => "+symbol.isa + "\n memberOf => " + symbol.memberOf + "\n isStatic => " + symbol.isStatic + ", isInner => " + symbol.isInner+ ", isPrivate => " + symbol.isPrivate);
- }
- print("-------------------\n");
- }
- }
-}
-
-JSDOC.Parser.parse = function(/**JSDOC.TokenStream*/ts, /**String*/srcFile) {
- JSDOC.Symbol.srcFile = (srcFile || "");
- JSDOC.DocComment.shared = ""; // shared comments don't cross file boundaries
-
- if (!JSDOC.Parser.walker) JSDOC.Parser.init();
- JSDOC.Parser.walker.walk(ts); // adds to our symbols
-
- // filter symbols by option
- for (var p = JSDOC.Parser.symbols._index.first(); p; p = JSDOC.Parser.symbols._index.next()) {
- var symbol = p.value;
-
- if (!symbol) continue;
-
- if (symbol.is("FILE") || symbol.is("GLOBAL")) {
- continue;
- }
- else if (!JSDOC.opt.a && !symbol.comment.isUserComment) {
- JSDOC.Parser.symbols.deleteSymbol(symbol.alias);
- }
-
- if (/#$/.test(symbol.alias)) { // we don't document prototypes
- JSDOC.Parser.symbols.deleteSymbol(symbol.alias);
- }
- }
-
- return JSDOC.Parser.symbols.toArray();
-}
--- a/sbin/res/jsdoc/app/lib/JSDOC/PluginManager.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/**
- @namespace Holds functionality related to running plugins.
-*/
-JSDOC.PluginManager = {
-}
-
-/**
- @param name A unique name that identifies that plugin.
- @param handlers A collection of named functions. The names correspond to hooks in the core code.
-*/
-JSDOC.PluginManager.registerPlugin = function(/**String*/name, /**Object*/handlers) {
- if (!defined(JSDOC.PluginManager.plugins))
- /** The collection of all plugins. Requires a unique name for each.
- */
- JSDOC.PluginManager.plugins = {};
-
-
- JSDOC.PluginManager.plugins[name] = handlers;
-}
-
-/**
- @param hook The name of the hook that is being caught.
- @param target Any object. This will be passed as the only argument to the handler whose
- name matches the hook name. Handlers cannot return a value, so must modify the target
- object to have an effect.
-*/
-JSDOC.PluginManager.run = function(/**String*/hook, /**Mixed*/target) {
- for (var name in JSDOC.PluginManager.plugins) {
- if (defined(JSDOC.PluginManager.plugins[name][hook])) {
- JSDOC.PluginManager.plugins[name][hook](target);
- }
- }
-}
--- a/sbin/res/jsdoc/app/lib/JSDOC/Symbol.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,644 +0,0 @@
-if (typeof JSDOC == "undefined") JSDOC = {};
-
-/**
- Create a new Symbol.
- @class Represents a symbol in the source code.
- */
-JSDOC.Symbol = function() {
- this.init();
- if (arguments.length) this.populate.apply(this, arguments);
-}
-
-JSDOC.Symbol.count = 0;
-
-JSDOC.Symbol.prototype.init = function() {
- this._name = "";
- this._params = [];
- this.$args = [];
- this.addOn = "";
- this.alias = "";
- this.augments = [];
- this.author = "";
- this.classDesc = "";
- this.comment = {};
- this.defaultValue = undefined;
- this.deprecated = "";
- this.desc = "";
- this.example = [];
- this.exceptions = [];
- this.fires = [];
- this.id = JSDOC.Symbol.count++;
- this.inherits = [];
- this.inheritsFrom = [];
- this.isa = "OBJECT";
- this.isConstant = false;
- this.isEvent = false;
- this.isIgnored = false;
- this.isInner = false;
- this.isNamespace = false;
- this.isPrivate = false;
- this.isStatic = false;
- this.memberOf = "";
- this.methods = [];
- this.properties = [];
- this.requires = [];
- this.returns = [];
- this.see = [];
- this.since = "";
- this.srcFile = {};
- this.type = "";
- this.version = "";
-}
-
-JSDOC.Symbol.prototype.serialize = function() {
- var keys = [];
- for (var p in this) {
- keys.push (p);
- }
- keys = keys.sort();
-
- var out = "";
- for (var i in keys) {
- if (typeof this[keys[i]] == "function") continue;
- out += keys[i]+" => "+Dumper.dump(this[keys[i]])+",\n";
- }
- return "\n{\n" + out + "}\n";
-}
-
-JSDOC.Symbol.prototype.clone = function() {
- var clone = new JSDOC.Symbol();
- clone.populate.apply(clone, this.$args); // repopulate using the original arguments
- clone.srcFile = this.srcFile; // not the current srcFile, the one when the original was made
- return clone;
-}
-
-JSDOC.Symbol.prototype.__defineSetter__("name",
- function(n) { n = n.replace(/^_global_[.#-]/, ""); n = n.replace(/\.prototype\.?/g, '#'); this._name = n; }
-);
-JSDOC.Symbol.prototype.__defineGetter__("name",
- function() { return this._name; }
-);
-JSDOC.Symbol.prototype.__defineSetter__("params",
- function(v) {
- for (var i = 0, l = v.length; i < l; i++) {
- if (v[i].constructor != JSDOC.DocTag) { // may be a generic object parsed from signature, like {type:..., name:...}
- this._params[i] = new JSDOC.DocTag("param"+((v[i].type)?" {"+v[i].type+"}":"")+" "+v[i].name);
- }
- else {
- this._params[i] = v[i];
- }
- }
- }
-);
-JSDOC.Symbol.prototype.__defineGetter__("params",
- function() { return this._params; }
-);
-
-JSDOC.Symbol.prototype.getEvents = function() {
- var events = [];
- for (var i = 0, l = this.methods.length; i < l; i++) {
- if (this.methods[i].isEvent) {
- this.methods[i].name = this.methods[i].name.replace("event:", "");
- events.push(this.methods[i]);
- }
- }
- return events;
-}
-
-JSDOC.Symbol.prototype.getMethods = function() {
- var nonEvents = [];
- for (var i = 0, l = this.methods.length; i < l; i++) {
- if (!this.methods[i].isEvent) {
- nonEvents.push(this.methods[i]);
- }
- }
- return nonEvents;
-}
-
-
-JSDOC.Symbol.prototype.populate = function(
- /** String */ name,
- /** Object[] */ params,
- /** String */ isa,
- /** JSDOC.DocComment */ comment
-) {
- this.$args = arguments;
-
- this.name = name;
- this.alias = this.name;
-
- this.params = params;
- this.isa = (isa == "VIRTUAL")? "OBJECT":isa;
- this.comment = comment || new JSDOC.DocComment("");
- this.srcFile = JSDOC.Symbol.srcFile;
-
- if (this.is("FILE") && !this.alias) this.alias = this.srcFile;
-
- this.setTags();
-
- if (typeof JSDOC.PluginManager != "undefined") {
- JSDOC.PluginManager.run("onSymbol", this);
- }
-}
-
-JSDOC.Symbol.prototype.setTags = function() {
- // @author
- var authors = this.comment.getTag("author");
- if (authors.length) {
- this.author = authors.map(function($){return $.desc;}).join(", ");
- }
-
- /*t:
- plan(34, "testing JSDOC.Symbol");
-
- requires("../lib/JSDOC/DocComment.js");
- requires("../frame/String.js");
- requires("../lib/JSDOC/DocTag.js");
-
- var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@author Joe Smith*"+"/"));
- is(sym.author, "Joe Smith", "@author tag, author is found.");
- */
-
- // @desc
- var descs = this.comment.getTag("desc");
- if (descs.length) {
- this.desc = descs.map(function($){return $.desc;}).join("\n"); // multiple descriptions are concatenated into one
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@desc This is a description.*"+"/"));
- is(sym.desc, "This is a description.", "@desc tag, description is found.");
- */
-
- // @overview
- if (this.is("FILE")) {
- if (!this.alias) this.alias = this.srcFile;
-
- var overviews = this.comment.getTag("overview");
- if (overviews.length) {
- this.desc = [this.desc].concat(overviews.map(function($){return $.desc;})).join("\n");
- }
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@overview This is an overview.*"+"/"));
- is(sym.desc, "\nThis is an overview.", "@overview tag, description is found.");
- */
-
- // @since
- var sinces = this.comment.getTag("since");
- if (sinces.length) {
- this.since = sinces.map(function($){return $.desc;}).join(", ");
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@since 1.01*"+"/"));
- is(sym.since, "1.01", "@since tag, description is found.");
- */
-
- // @constant
- if (this.comment.getTag("constant").length) {
- this.isConstant = true;
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@constant*"+"/"));
- is(sym.isConstant, true, "@constant tag, isConstant set.");
- */
-
- // @version
- var versions = this.comment.getTag("version");
- if (versions.length) {
- this.version = versions.map(function($){return $.desc;}).join(", ");
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@version 2.0x*"+"/"));
- is(sym.version, "2.0x", "@version tag, version is found.");
- */
-
- // @deprecated
- var deprecateds = this.comment.getTag("deprecated");
- if (deprecateds.length) {
- this.deprecated = deprecateds.map(function($){return $.desc;}).join("\n");
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@deprecated Use other method.*"+"/"));
- is(sym.deprecated, "Use other method.", "@deprecated tag, desc is found.");
- */
-
- // @example
- var examples = this.comment.getTag("example");
- if (examples.length) {
- this.example = examples.map(
- // trim trailing whitespace
- function($) {
- $.desc = $.desc.replace(/\s+$/, "");
- return $;
- }
- );
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@example This\n is an example. \n*"+"/"));
- isnt(typeof sym.example[0], "undefined", "@example tag, creates sym.example array.");
- is(sym.example[0], "This\n is an example.", "@example tag, desc is found.");
- */
-
- // @see
- var sees = this.comment.getTag("see");
- if (sees.length) {
- var thisSee = this.see;
- sees.map(function($){thisSee.push($.desc);});
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@see The other thing.*"+"/"));
- is(sym.see, "The other thing.", "@see tag, desc is found.");
- */
-
- // @class
- var classes = this.comment.getTag("class");
- if (classes.length) {
- this.isa = "CONSTRUCTOR";
- this.classDesc = classes[0].desc; // desc can't apply to the constructor as there is none.
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@class This describes the class.*"+"/"));
- is(sym.isa, "CONSTRUCTOR", "@class tag, makes symbol a constructor.");
- is(sym.classDesc, "This describes the class.", "@class tag, class description is found.");
- */
-
- // @namespace
- var namespaces = this.comment.getTag("namespace");
- if (namespaces.length) {
- this.classDesc = namespaces[0].desc;
- this.isNamespace = true;
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@namespace This describes the namespace.*"+"/"));
- is(sym.classDesc, "This describes the namespace.", "@namespace tag, class description is found.");
- */
-
- // @param
- var params = this.comment.getTag("param");
- if (params.length) {
- // user-defined params overwrite those with same name defined by the parser
- var thisParams = this.params;
-
- if (thisParams.length == 0) { // none exist yet, so just bung all these user-defined params straight in
- this.params = params;
- }
- else { // need to overlay these user-defined params on to existing parser-defined params
- for (var i = 0, l = params.length; i < l; i++) {
- if (thisParams[i]) {
- if (params[i].type) thisParams[i].type = params[i].type;
- thisParams[i].name = params[i].name;
- thisParams[i].desc = params[i].desc;
- thisParams[i].isOptional = params[i].isOptional;
- thisParams[i].defaultValue = params[i].defaultValue;
- }
- else thisParams[i] = params[i];
- }
- }
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.*"+"/"));
- is(sym.params.length, 1, "parser defined param is found.");
-
- sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages*"+"/"));
- is(sym.params.length, 1, "user defined param is found.");
- is(sym.params[0].type, "array", "user defined param type is found.");
- is(sym.params[0].name, "pages", "user defined param name is found.");
-
- sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/"));
- is(sym.params.length, 1, "user defined param overwrites parser defined param.");
- is(sym.params[0].type, "string", "user defined param type overwrites parser defined param type.");
- is(sym.params[0].name, "uid", "user defined param name overwrites parser defined param name.");
-
- sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}, {type: "number", name: "count"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/"));
- is(sym.params.length, 2, "user defined params overlay parser defined params.");
- is(sym.params[1].type, "number", "user defined param type overlays parser defined param type.");
- is(sym.params[1].name, "count", "user defined param name overlays parser defined param name.");
-
- sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages The pages description.*"+"/"));
- is(sym.params.length, 1, "user defined param with description is found.");
- is(sym.params[0].desc, "The pages description.", "user defined param description is found.");
- */
-
- // @constructor
- if (this.comment.getTag("constructor").length) {
- this.isa = "CONSTRUCTOR";
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@constructor*"+"/"));
- is(sym.isa, "CONSTRUCTOR", "@constructor tag, makes symbol a constructor.");
- */
-
- // @static
- if (this.comment.getTag("static").length) {
- this.isStatic = true;
- if (this.isa == "CONSTRUCTOR") {
- this.isNamespace = true;
- }
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@static\n@constructor*"+"/"));
- is(sym.isStatic, true, "@static tag, makes isStatic true.");
- is(sym.isNamespace, true, "@static and @constructor tag, makes isNamespace true.");
- */
-
- // @inner
- if (this.comment.getTag("inner").length) {
- this.isInner = true;
- this.isStatic = false;
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@inner*"+"/"));
- is(sym.isStatic, false, "@inner tag, makes isStatic false.");
- is(sym.isInner, true, "@inner makes isInner true.");
- */
-
- // @name
- var names = this.comment.getTag("name");
- if (names.length) {
- this.name = names[0].desc;
- }
-
- /*t:
- // todo
- */
-
- // @field
- if (this.comment.getTag("field").length) {
- this.isa = "OBJECT";
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**@field*"+"/"));
- is(sym.isa, "OBJECT", "@field tag, makes symbol an object.");
- */
-
- // @function
- if (this.comment.getTag("function").length) {
- this.isa = "FUNCTION";
- if (/event:/.test(this.alias)) this.isEvent = true;
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@function*"+"/"));
- is(sym.isa, "FUNCTION", "@function tag, makes symbol a function.");
- */
-
- // @event
- var events = this.comment.getTag("event");
- if (events.length) {
- this.isa = "FUNCTION";
- this.isEvent = true;
- if (!/event:/.test(this.alias))
- this.alias = this.alias.replace(/^(.*[.#-])([^.#-]+)$/, "$1event:$2");
- }
-
- /*t:
- var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@event*"+"/"));
- is(sym.isa, "FUNCTION", "@event tag, makes symbol a function.");
- is(sym.isEvent, true, "@event makes isEvent true.");
- */
-
- // @fires
- var fires = this.comment.getTag("fires");
- if (fires.length) {
- for (var i = 0; i < fires.length; i++) {
- this.fires.push(fires[i].desc);
- }
- }
-
- /*t:
- // todo
- */
-
- // @property
- var properties = this.comment.getTag("property");
- if (properties.length) {
- thisProperties = this.properties;
- for (var i = 0; i < properties.length; i++) {
- var property = new JSDOC.Symbol(this.alias+"#"+properties[i].name, [], "OBJECT", new JSDOC.DocComment("/**"+properties[i].desc+"*/"));
- // TODO: shouldn't the following happen in the addProperty method of Symbol?
- if (properties[i].type) property.type = properties[i].type;
- if (properties[i].defaultValue) property.defaultValue = properties[i].defaultValue;
- this.addProperty(property);
- if (!JSDOC.Parser.symbols.getSymbolByName(property.name))
- JSDOC.Parser.addSymbol(property);
- }
- }
-
- /*t:
- // todo
- */
-
- // @return
- var returns = this.comment.getTag("return");
- if (returns.length) { // there can be many return tags in a single doclet
- this.returns = returns;
- this.type = returns.map(function($){return $.type}).join(", ");
- }
-
- /*t:
- // todo
- */
-
- // @exception
- this.exceptions = this.comment.getTag("throws");
-
- /*t:
- // todo
- */
-
- // @requires
- var requires = this.comment.getTag("requires");
- if (requires.length) {
- this.requires = requires.map(function($){return $.desc});
- }
-
- /*t:
- // todo
- */
-
- // @type
- var types = this.comment.getTag("type");
- if (types.length) {
- this.type = types[0].desc; //multiple type tags are ignored
- }
-
- /*t:
- // todo
- */
-
- // @private
- if (this.comment.getTag("private").length || this.isInner) {
- this.isPrivate = true;
- }
-
- // @ignore
- if (this.comment.getTag("ignore").length) {
- this.isIgnored = true;
- }
-
- /*t:
- // todo
- */
-
- // @inherits ... as ...
- var inherits = this.comment.getTag("inherits");
- if (inherits.length) {
- for (var i = 0; i < inherits.length; i++) {
- if (/^\s*([a-z$0-9_.#:-]+)(?:\s+as\s+([a-z$0-9_.#:-]+))?/i.test(inherits[i].desc)) {
- var inAlias = RegExp.$1;
- var inAs = RegExp.$2 || inAlias;
-
- if (inAlias) inAlias = inAlias.replace(/\.prototype\.?/g, "#");
-
- if (inAs) {
- inAs = inAs.replace(/\.prototype\.?/g, "#");
- inAs = inAs.replace(/^this\.?/, "#");
- }
-
- if (inAs.indexOf(inAlias) != 0) { //not a full namepath
- var joiner = ".";
- if (this.alias.charAt(this.alias.length-1) == "#" || inAs.charAt(0) == "#") {
- joiner = "";
- }
- inAs = this.alias + joiner + inAs;
- }
- }
- this.inherits.push({alias: inAlias, as: inAs});
- }
- }
-
- /*t:
- // todo
- */
-
- // @augments
- this.augments = this.comment.getTag("augments");
-
- // @default
- var defaults = this.comment.getTag("default");
- if (defaults.length) {
- if (this.is("OBJECT")) {
- this.defaultValue = defaults[0].desc;
- }
- }
-
- /*t:
- // todo
- */
-
- // @memberOf
- var memberOfs = this.comment.getTag("memberOf");
- if (memberOfs.length) {
- this.memberOf = memberOfs[0].desc;
- this.memberOf = this.memberOf.replace(/\.prototype\.?/g, "#");
- }
-
- /*t:
- // todo
- */
-
- // @public
- if (this.comment.getTag("public").length) {
- this.isPrivate = false;
- }
-
- /*t:
- // todo
- */
-
- if (JSDOC.PluginManager) {
- JSDOC.PluginManager.run("onSetTags", this);
- }
-}
-
-JSDOC.Symbol.prototype.is = function(what) {
- return this.isa === what;
-}
-
-JSDOC.Symbol.prototype.isBuiltin = function() {
- return JSDOC.Lang.isBuiltin(this.alias);
-}
-
-JSDOC.Symbol.prototype.setType = function(/**String*/comment, /**Boolean*/overwrite) {
- if (!overwrite && this.type) return;
- var typeComment = JSDOC.DocComment.unwrapComment(comment);
- this.type = typeComment;
-}
-
-JSDOC.Symbol.prototype.inherit = function(symbol) {
- if (!this.hasMember(symbol.name) && !symbol.isInner) {
- if (symbol.is("FUNCTION"))
- this.methods.push(symbol);
- else if (symbol.is("OBJECT"))
- this.properties.push(symbol);
- }
-}
-
-JSDOC.Symbol.prototype.hasMember = function(name) {
- return (this.hasMethod(name) || this.hasProperty(name));
-}
-
-JSDOC.Symbol.prototype.addMember = function(symbol) {
- if (symbol.is("FUNCTION")) { this.addMethod(symbol); }
- else if (symbol.is("OBJECT")) { this.addProperty(symbol); }
-}
-
-JSDOC.Symbol.prototype.hasMethod = function(name) {
- var thisMethods = this.methods;
- for (var i = 0, l = thisMethods.length; i < l; i++) {
- if (thisMethods[i].name == name) return true;
- if (thisMethods[i].alias == name) return true;
- }
- return false;
-}
-
-JSDOC.Symbol.prototype.addMethod = function(symbol) {
- var methodAlias = symbol.alias;
- var thisMethods = this.methods;
- for (var i = 0, l = thisMethods.length; i < l; i++) {
- if (thisMethods[i].alias == methodAlias) {
- thisMethods[i] = symbol; // overwriting previous method
- return;
- }
- }
- thisMethods.push(symbol); // new method with this alias
-}
-
-JSDOC.Symbol.prototype.hasProperty = function(name) {
- var thisProperties = this.properties;
- for (var i = 0, l = thisProperties.length; i < l; i++) {
- if (thisProperties[i].name == name) return true;
- if (thisProperties[i].alias == name) return true;
- }
- return false;
-}
-
-JSDOC.Symbol.prototype.addProperty = function(symbol) {
- var propertyAlias = symbol.alias;
- var thisProperties = this.properties;
- for (var i = 0, l = thisProperties.length; i < l; i++) {
- if (thisProperties[i].alias == propertyAlias) {
- thisProperties[i] = symbol; // overwriting previous property
- return;
- }
- }
-
- thisProperties.push(symbol); // new property with this alias
-}
-
-JSDOC.Symbol.srcFile = ""; //running reference to the current file being parsed
--- a/sbin/res/jsdoc/app/lib/JSDOC/SymbolSet.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,243 +0,0 @@
-/** @constructor */
-JSDOC.SymbolSet = function() {
- this.init();
-}
-
-JSDOC.SymbolSet.prototype.init = function() {
- this._index = new Hash();
-}
-
-JSDOC.SymbolSet.prototype.keys = function() {
- return this._index.keys();
-}
-
-JSDOC.SymbolSet.prototype.hasSymbol = function(alias) {
- return this._index.hasKey(alias);
-}
-
-JSDOC.SymbolSet.prototype.addSymbol = function(symbol) {
- if (JSDOC.opt.a && this.hasSymbol(symbol.alias)) {
- LOG.warn("Overwriting symbol documentation for: " + symbol.alias + ".");
- this.deleteSymbol(symbol.alias);
- }
- this._index.set(symbol.alias, symbol);
-}
-
-JSDOC.SymbolSet.prototype.getSymbol = function(alias) {
- if (this.hasSymbol(alias)) return this._index.get(alias);
-}
-
-JSDOC.SymbolSet.prototype.getSymbolByName = function(name) {
- for (var p = this._index.first(); p; p = this._index.next()) {
- var symbol = p.value;
- if (symbol.name == name) return symbol;
- }
-}
-
-JSDOC.SymbolSet.prototype.toArray = function() {
- return this._index.values();
-}
-
-JSDOC.SymbolSet.prototype.deleteSymbol = function(alias) {
- if (!this.hasSymbol(alias)) return;
- this._index.drop(alias);
-}
-
-JSDOC.SymbolSet.prototype.renameSymbol = function(oldName, newName) {
- // todo: should check if oldname or newname already exist
- this._index.replace(oldName, newName);
- this._index.get(newName).alias = newName;
- return newName;
-}
-
-JSDOC.SymbolSet.prototype.relate = function() {
- this.resolveBorrows();
- this.resolveMemberOf();
- this.resolveAugments();
-}
-
-JSDOC.SymbolSet.prototype.resolveBorrows = function() {
- for (var p = this._index.first(); p; p = this._index.next()) {
- var symbol = p.value;
- if (symbol.is("FILE") || symbol.is("GLOBAL")) continue;
-
- var borrows = symbol.inherits;
- for (var i = 0; i < borrows.length; i++) {
-
-if (/#$/.test(borrows[i].alias)) {
- LOG.warn("Attempted to borrow entire instance of "+borrows[i].alias+" but that feature is not yet implemented.");
- return;
-}
- var borrowed = this.getSymbol(borrows[i].alias);
-
- if (!borrowed) {
- LOG.warn("Can't borrow undocumented "+borrows[i].alias+".");
- continue;
- }
-
- if (borrows[i].as == borrowed.alias) {
- var assumedName = borrowed.name.split(/([#.-])/).pop();
- borrows[i].as = symbol.name+RegExp.$1+assumedName;
- LOG.inform("Assuming borrowed as name is "+borrows[i].as+" but that feature is experimental.");
- }
-
- var borrowAsName = borrows[i].as;
- var borrowAsAlias = borrowAsName;
- if (!borrowAsName) {
- LOG.warn("Malformed @borrow, 'as' is required.");
- continue;
- }
-
- if (borrowAsName.length > symbol.alias.length && borrowAsName.indexOf(symbol.alias) == 0) {
- borrowAsName = borrowAsName.replace(borrowed.alias, "")
- }
- else {
- var joiner = "";
- if (borrowAsName.charAt(0) != "#") joiner = ".";
- borrowAsAlias = borrowed.alias + joiner + borrowAsName;
- }
-
- borrowAsName = borrowAsName.replace(/^[#.]/, "");
-
- if (this.hasSymbol(borrowAsAlias)) continue;
-
- var clone = borrowed.clone();
- clone.name = borrowAsName;
- clone.alias = borrowAsAlias;
- this.addSymbol(clone);
- }
- }
-}
-
-JSDOC.SymbolSet.prototype.resolveMemberOf = function() {
- for (var p = this._index.first(); p; p = this._index.next()) {
- var symbol = p.value;
-
- if (symbol.is("FILE") || symbol.is("GLOBAL")) continue;
-
- // the memberOf value was provided in the @memberOf tag
- else if (symbol.memberOf) {
- // like foo.bar is a memberOf foo
- if (symbol.alias.indexOf(symbol.memberOf) == 0) {
- var memberMatch = new RegExp("^("+symbol.memberOf+")[.#-]?(.+)$");
- var aliasParts = symbol.alias.match(memberMatch);
-
- if (aliasParts) {
- symbol.memberOf = aliasParts[1];
- symbol.name = aliasParts[2];
- }
-
- var nameParts = symbol.name.match(memberMatch);
-
- if (nameParts) {
- symbol.name = nameParts[2];
- }
- }
- // like bar is a memberOf foo
- else {
- var joiner = symbol.memberOf.charAt(symbol.memberOf.length-1);
- if (!/[.#-]/.test(joiner)) symbol.memberOf += ".";
- this.renameSymbol(symbol.alias, symbol.memberOf + symbol.name);
- }
- }
- // the memberOf must be calculated
- else {
- var parts = symbol.alias.match(/^(.*[.#-])([^.#-]+)$/);
-
- if (parts) {
- symbol.memberOf = parts[1];
- symbol.name = parts[2];
- }
- }
-
- // set isStatic, isInner
- if (symbol.memberOf) {
- switch (symbol.memberOf.charAt(symbol.memberOf.length-1)) {
- case '#' :
- symbol.isStatic = false;
- symbol.isInner = false;
- break;
- case '.' :
- symbol.isStatic = true;
- symbol.isInner = false;
- break;
- case '-' :
- symbol.isStatic = false;
- symbol.isInner = true;
- break;
- default: // memberOf ends in none of the above
- symbol.isStatic = true;
- break;
- }
- }
-
- // unowned methods and fields belong to the global object
- if (!symbol.is("CONSTRUCTOR") && !symbol.isNamespace && symbol.memberOf == "") {
- symbol.memberOf = "_global_";
- }
-
- // clean up
- if (symbol.memberOf.match(/[.#-]$/)) {
- symbol.memberOf = symbol.memberOf.substr(0, symbol.memberOf.length-1);
- }
- // add to parent's methods or properties list
- if (symbol.memberOf) {
-
- var container = this.getSymbol(symbol.memberOf);
- if (!container) {
- if (JSDOC.Lang.isBuiltin(symbol.memberOf)) container = JSDOC.Parser.addBuiltin(symbol.memberOf);
- else {
- LOG.warn("Trying to document "+symbol.name +" as a member of undocumented symbol "+symbol.memberOf+".");
- }
- }
-
- if (container) container.addMember(symbol);
- }
- }
-}
-
-JSDOC.SymbolSet.prototype.resolveAugments = function() {
- for (var p = this._index.first(); p; p = this._index.next()) {
- var symbol = p.value;
-
- if (symbol.alias == "_global_" || symbol.is("FILE")) continue;
- JSDOC.SymbolSet.prototype.walk.apply(this, [symbol]);
- }
-}
-
-JSDOC.SymbolSet.prototype.walk = function(symbol) {
- var augments = symbol.augments;
- for(var i = 0; i < augments.length; i++) {
- var contributer = this.getSymbol(augments[i]);
- if (!contributer && JSDOC.Lang.isBuiltin(''+augments[i])) {
- contributer = new JSDOC.Symbol("_global_."+augments[i], [], augments[i], new JSDOC.DocComment("Built in."));
- contributer.isNamespace = true;
- contributer.srcFile = "";
- contributer.isPrivate = false;
- JSDOC.Parser.addSymbol(contributer);
- }
-
- if (contributer) {
- if (contributer.augments.length) {
- JSDOC.SymbolSet.prototype.walk.apply(this, [contributer]);
- }
-
- symbol.inheritsFrom.push(contributer.alias);
- //if (!isUnique(symbol.inheritsFrom)) {
- // LOG.warn("Can't resolve augments: Circular reference: "+symbol.alias+" inherits from "+contributer.alias+" more than once.");
- //}
- //else {
- var cmethods = contributer.methods;
- var cproperties = contributer.properties;
-
- for (var ci = 0, cl = cmethods.length; ci < cl; ci++) {
- if (!cmethods[ci].isStatic) symbol.inherit(cmethods[ci]);
- }
- for (var ci = 0, cl = cproperties.length; ci < cl; ci++) {
- if (!cproperties[ci].isStatic) symbol.inherit(cproperties[ci]);
- }
- //}
- }
- else LOG.warn("Can't augment contributer: "+augments[i]+", not found.");
- }
-}
--- a/sbin/res/jsdoc/app/lib/JSDOC/TextStream.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-
-/**
- @constructor
-*/
-JSDOC.TextStream = function(text) {
- if (typeof(text) == "undefined") text = "";
- text = ""+text;
- this.text = text;
- this.cursor = 0;
-}
-
-JSDOC.TextStream.prototype.look = function(n) {
- if (typeof n == "undefined") n = 0;
-
- if (this.cursor+n < 0 || this.cursor+n >= this.text.length) {
- var result = new String("");
- result.eof = true;
- return result;
- }
- return this.text.charAt(this.cursor+n);
-}
-
-JSDOC.TextStream.prototype.next = function(n) {
- if (typeof n == "undefined") n = 1;
- if (n < 1) return null;
-
- var pulled = "";
- for (var i = 0; i < n; i++) {
- if (this.cursor+i < this.text.length) {
- pulled += this.text.charAt(this.cursor+i);
- }
- else {
- var result = new String("");
- result.eof = true;
- return result;
- }
- }
-
- this.cursor += n;
- return pulled;
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/lib/JSDOC/Token.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-if (typeof JSDOC == "undefined") JSDOC = {};
-
-/**
- @constructor
-*/
-JSDOC.Token = function(data, type, name) {
- this.data = data;
- this.type = type;
- this.name = name;
-}
-
-JSDOC.Token.prototype.toString = function() {
- return "<"+this.type+" name=\""+this.name+"\">"+this.data+"</"+this.type+">";
-}
-
-JSDOC.Token.prototype.is = function(what) {
- return this.name === what || this.type === what;
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/lib/JSDOC/TokenReader.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,332 +0,0 @@
-if (typeof JSDOC == "undefined") JSDOC = {};
-
-/**
- @class Search a {@link JSDOC.TextStream} for language tokens.
-*/
-JSDOC.TokenReader = function() {
- this.keepDocs = true;
- this.keepWhite = false;
- this.keepComments = false;
-}
-
-/**
- @type {JSDOC.Token[]}
- */
-JSDOC.TokenReader.prototype.tokenize = function(/**JSDOC.TextStream*/stream) {
- var tokens = [];
- /**@ignore*/ tokens.last = function() { return tokens[tokens.length-1]; }
- /**@ignore*/ tokens.lastSym = function() {
- for (var i = tokens.length-1; i >= 0; i--) {
- if (!(tokens[i].is("WHIT") || tokens[i].is("COMM"))) return tokens[i];
- }
- }
-
- while (!stream.look().eof) {
- if (this.read_mlcomment(stream, tokens)) continue;
- if (this.read_slcomment(stream, tokens)) continue;
- if (this.read_dbquote(stream, tokens)) continue;
- if (this.read_snquote(stream, tokens)) continue;
- if (this.read_regx(stream, tokens)) continue;
- if (this.read_numb(stream, tokens)) continue;
- if (this.read_punc(stream, tokens)) continue;
- if (this.read_newline(stream, tokens)) continue;
- if (this.read_space(stream, tokens)) continue;
- if (this.read_word(stream, tokens)) continue;
-
- // if execution reaches here then an error has happened
- tokens.push(new JSDOC.Token(stream.next(), "TOKN", "UNKNOWN_TOKEN"));
- }
- return tokens;
-}
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_word = function(/**JSDOC.TokenStream*/stream, tokens) {
- var found = "";
- while (!stream.look().eof && JSDOC.Lang.isWordChar(stream.look())) {
- found += stream.next();
- }
-
- if (found === "") {
- return false;
- }
- else {
- var name;
- if ((name = JSDOC.Lang.keyword(found))) tokens.push(new JSDOC.Token(found, "KEYW", name));
- else tokens.push(new JSDOC.Token(found, "NAME", "NAME"));
- return true;
- }
-}
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_punc = function(/**JSDOC.TokenStream*/stream, tokens) {
- var found = "";
- var name;
- while (!stream.look().eof && JSDOC.Lang.punc(found+stream.look())) {
- found += stream.next();
- }
-
- if (found === "") {
- return false;
- }
- else {
- tokens.push(new JSDOC.Token(found, "PUNC", JSDOC.Lang.punc(found)));
- return true;
- }
-}
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_space = function(/**JSDOC.TokenStream*/stream, tokens) {
- var found = "";
-
- while (!stream.look().eof && JSDOC.Lang.isSpace(stream.look())) {
- found += stream.next();
- }
-
- if (found === "") {
- return false;
- }
- else {
- if (this.collapseWhite) found = " ";
- if (this.keepWhite) tokens.push(new JSDOC.Token(found, "WHIT", "SPACE"));
- return true;
- }
-}
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_newline = function(/**JSDOC.TokenStream*/stream, tokens) {
- var found = "";
-
- while (!stream.look().eof && JSDOC.Lang.isNewline(stream.look())) {
- found += stream.next();
- }
-
- if (found === "") {
- return false;
- }
- else {
- if (this.collapseWhite) found = "\n";
- if (this.keepWhite) tokens.push(new JSDOC.Token(found, "WHIT", "NEWLINE"));
- return true;
- }
-}
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_mlcomment = function(/**JSDOC.TokenStream*/stream, tokens) {
- if (stream.look() == "/" && stream.look(1) == "*") {
- var found = stream.next(2);
-
- while (!stream.look().eof && !(stream.look(-1) == "/" && stream.look(-2) == "*")) {
- found += stream.next();
- }
-
- // to start doclet we allow /** or /*** but not /**/ or /****
- if (/^\/\*\*([^\/]|\*[^*])/.test(found) && this.keepDocs) tokens.push(new JSDOC.Token(found, "COMM", "JSDOC"));
- else if (this.keepComments) tokens.push(new JSDOC.Token(found, "COMM", "MULTI_LINE_COMM"));
- return true;
- }
- return false;
-}
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_slcomment = function(/**JSDOC.TokenStream*/stream, tokens) {
- var found;
- if (
- (stream.look() == "/" && stream.look(1) == "/" && (found=stream.next(2)))
- ||
- (stream.look() == "<" && stream.look(1) == "!" && stream.look(2) == "-" && stream.look(3) == "-" && (found=stream.next(4)))
- ) {
-
- while (!stream.look().eof && !JSDOC.Lang.isNewline(stream.look())) {
- found += stream.next();
- }
-
- if (this.keepComments) {
- tokens.push(new JSDOC.Token(found, "COMM", "SINGLE_LINE_COMM"));
- }
- return true;
- }
- return false;
-}
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_dbquote = function(/**JSDOC.TokenStream*/stream, tokens) {
- if (stream.look() == "\"") {
- // find terminator
- var string = stream.next();
-
- while (!stream.look().eof) {
- if (stream.look() == "\\") {
- if (JSDOC.Lang.isNewline(stream.look(1))) {
- do {
- stream.next();
- } while (!stream.look().eof && JSDOC.Lang.isNewline(stream.look()));
- string += "\\\n";
- }
- else {
- string += stream.next(2);
- }
- }
- else if (stream.look() == "\"") {
- string += stream.next();
- tokens.push(new JSDOC.Token(string, "STRN", "DOUBLE_QUOTE"));
- return true;
- }
- else {
- string += stream.next();
- }
- }
- }
- return false; // error! unterminated string
-}
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_snquote = function(/**JSDOC.TokenStream*/stream, tokens) {
- if (stream.look() == "'") {
- // find terminator
- var string = stream.next();
-
- while (!stream.look().eof) {
- if (stream.look() == "\\") { // escape sequence
- string += stream.next(2);
- }
- else if (stream.look() == "'") {
- string += stream.next();
- tokens.push(new JSDOC.Token(string, "STRN", "SINGLE_QUOTE"));
- return true;
- }
- else {
- string += stream.next();
- }
- }
- }
- return false; // error! unterminated string
-}
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_numb = function(/**JSDOC.TokenStream*/stream, tokens) {
- if (stream.look() === "0" && stream.look(1) == "x") {
- return this.read_hex(stream, tokens);
- }
-
- var found = "";
-
- while (!stream.look().eof && JSDOC.Lang.isNumber(found+stream.look())){
- found += stream.next();
- }
-
- if (found === "") {
- return false;
- }
- else {
- if (/^0[0-7]/.test(found)) tokens.push(new JSDOC.Token(found, "NUMB", "OCTAL"));
- else tokens.push(new JSDOC.Token(found, "NUMB", "DECIMAL"));
- return true;
- }
-}
-/*t:
- requires("../lib/JSDOC/TextStream.js");
- requires("../lib/JSDOC/Token.js");
- requires("../lib/JSDOC/Lang.js");
-
- plan(3, "testing JSDOC.TokenReader.prototype.read_numb");
-
- //// setup
- var src = "function foo(num){while (num+8.0 >= 0x20 && num < 0777){}}";
- var tr = new JSDOC.TokenReader();
- var tokens = tr.tokenize(new JSDOC.TextStream(src));
-
- var hexToken, octToken, decToken;
- for (var i = 0; i < tokens.length; i++) {
- if (tokens[i].name == "HEX_DEC") hexToken = tokens[i];
- if (tokens[i].name == "OCTAL") octToken = tokens[i];
- if (tokens[i].name == "DECIMAL") decToken = tokens[i];
- }
- ////
-
- is(decToken.data, "8.0", "decimal number is found in source.");
- is(hexToken.data, "0x20", "hexdec number is found in source (issue #99).");
- is(octToken.data, "0777", "octal number is found in source.");
-*/
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_hex = function(/**JSDOC.TokenStream*/stream, tokens) {
- var found = stream.next(2);
-
- while (!stream.look().eof) {
- if (JSDOC.Lang.isHexDec(found) && !JSDOC.Lang.isHexDec(found+stream.look())) { // done
- tokens.push(new JSDOC.Token(found, "NUMB", "HEX_DEC"));
- return true;
- }
- else {
- found += stream.next();
- }
- }
- return false;
-}
-
-/**
- @returns {Boolean} Was the token found?
- */
-JSDOC.TokenReader.prototype.read_regx = function(/**JSDOC.TokenStream*/stream, tokens) {
- var last;
- if (
- stream.look() == "/"
- &&
- (
-
- (
- !(last = tokens.lastSym()) // there is no last, the regex is the first symbol
- ||
- (
- !last.is("NUMB")
- && !last.is("NAME")
- && !last.is("RIGHT_PAREN")
- && !last.is("RIGHT_BRACKET")
- )
- )
- )
- ) {
- var regex = stream.next();
-
- while (!stream.look().eof) {
- if (stream.look() == "\\") { // escape sequence
- regex += stream.next(2);
- }
- else if (stream.look() == "/") {
- regex += stream.next();
-
- while (/[gmi]/.test(stream.look())) {
- regex += stream.next();
- }
-
- tokens.push(new JSDOC.Token(regex, "REGX", "REGX"));
- return true;
- }
- else {
- regex += stream.next();
- }
- }
- // error: unterminated regex
- }
- return false;
-}
--- a/sbin/res/jsdoc/app/lib/JSDOC/TokenStream.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-if (typeof JSDOC == "undefined") JSDOC = {};
-
-/**
- @constructor
-*/
-JSDOC.TokenStream = function(tokens) {
- this.tokens = (tokens || []);
- this.rewind();
-}
-
-/**
- @constructor
- @private
-*/
-function VoidToken(/**String*/type) {
- this.toString = function() {return "<VOID type=\""+type+"\">"};
- this.is = function(){return false;}
-}
-
-JSDOC.TokenStream.prototype.rewind = function() {
- this.cursor = -1;
-}
-
-/**
- @type JSDOC.Token
-*/
-JSDOC.TokenStream.prototype.look = function(/**Number*/n, /**Boolean*/considerWhitespace) {
- if (typeof n == "undefined") n = 0;
-
- if (considerWhitespace == true) {
- if (this.cursor+n < 0 || this.cursor+n > this.tokens.length) return {};
- return this.tokens[this.cursor+n];
- }
- else {
- var count = 0;
- var i = this.cursor;
-
- while (true) {
- if (i < 0) return new JSDOC.Token("", "VOID", "START_OF_STREAM");
- else if (i > this.tokens.length) return new JSDOC.Token("", "VOID", "END_OF_STREAM");
-
- if (i != this.cursor && (this.tokens[i] === undefined || this.tokens[i].is("WHIT"))) {
- if (n < 0) i--; else i++;
- continue;
- }
-
- if (count == Math.abs(n)) {
- return this.tokens[i];
- }
- count++;
- (n < 0)? i-- : i++;
- }
-
- return new JSDOC.Token("", "VOID", "STREAM_ERROR"); // because null isn't an object and caller always expects an object
- }
-}
-
-/**
- @type JSDOC.Token|JSDOC.Token[]
-*/
-JSDOC.TokenStream.prototype.next = function(/**Number*/howMany) {
- if (typeof howMany == "undefined") howMany = 1;
- if (howMany < 1) return null;
- var got = [];
-
- for (var i = 1; i <= howMany; i++) {
- if (this.cursor+i >= this.tokens.length) {
- return null;
- }
- got.push(this.tokens[this.cursor+i]);
- }
- this.cursor += howMany;
-
- if (howMany == 1) {
- return got[0];
- }
- else return got;
-}
-
-/**
- @type JSDOC.Token[]
-*/
-JSDOC.TokenStream.prototype.balance = function(/**String*/start, /**String*/stop) {
- if (!stop) stop = JSDOC.Lang.matching(start);
-
- var depth = 0;
- var got = [];
- var started = false;
-
- while ((token = this.look())) {
- if (token.is(start)) {
- depth++;
- started = true;
- }
-
- if (started) {
- got.push(token);
- }
-
- if (token.is(stop)) {
- depth--;
- if (depth == 0) return got;
- }
- if (!this.next()) break;
- }
-}
-
-JSDOC.TokenStream.prototype.getMatchingToken = function(/**String*/start, /**String*/stop) {
- var depth = 0;
- var cursor = this.cursor;
-
- if (!start) {
- start = JSDOC.Lang.matching(stop);
- depth = 1;
- }
- if (!stop) stop = JSDOC.Lang.matching(start);
-
- while ((token = this.tokens[cursor])) {
- if (token.is(start)) {
- depth++;
- }
-
- if (token.is(stop) && cursor) {
- depth--;
- if (depth == 0) return this.tokens[cursor];
- }
- cursor++;
- }
-}
-
-JSDOC.TokenStream.prototype.insertAhead = function(/**JSDOC.Token*/token) {
- this.tokens.splice(this.cursor+1, 0, token);
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/lib/JSDOC/Util.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/**
- * @namespace
- * @deprecated Use {@link FilePath} instead.
- */
-JSDOC.Util = {
-}
-
-/**
- * @deprecated Use {@link FilePath.fileName} instead.
- */
-JSDOC.Util.fileName = function(path) {
- LOG.warn("JSDOC.Util.fileName is deprecated. Use FilePath.fileName instead.");
- var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0);
- return path.substring(nameStart);
-}
-
-/**
- * @deprecated Use {@link FilePath.fileExtension} instead.
- */
-JSDOC.Util.fileExtension = function(filename) {
- LOG.warn("JSDOC.Util.fileExtension is deprecated. Use FilePath.fileExtension instead.");
- return filename.split(".").pop().toLowerCase();
-};
-
-/**
- * @deprecated Use {@link FilePath.dir} instead.
- */
-JSDOC.Util.dir = function(path) {
- LOG.warn("JSDOC.Util.dir is deprecated. Use FilePath.dir instead.");
- var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0);
- return path.substring(0, nameStart-1);
-}
--- a/sbin/res/jsdoc/app/lib/JSDOC/Walker.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,507 +0,0 @@
-if (typeof JSDOC == "undefined") JSDOC = {};
-
-/** @constructor */
-JSDOC.Walker = function(/**JSDOC.TokenStream*/ts) {
- this.init();
- if (typeof ts != "undefined") {
- this.walk(ts);
- }
-}
-
-JSDOC.Walker.prototype.init = function() {
- this.ts = null;
-
- var globalSymbol = new JSDOC.Symbol("_global_", [], "GLOBAL", new JSDOC.DocComment(""));
- globalSymbol.isNamespace = true;
- globalSymbol.srcFile = "";
- globalSymbol.isPrivate = false;
- JSDOC.Parser.addSymbol(globalSymbol);
- this.lastDoc = null;
- this.token = null;
-
- /**
- The chain of symbols under which we are currently nested.
- @type Array
- */
- this.namescope = [globalSymbol];
- this.namescope.last = function(n){ if (!n) n = 0; return this[this.length-(1+n)] || "" };
-}
-
-JSDOC.Walker.prototype.walk = function(/**JSDOC.TokenStream*/ts) {
- this.ts = ts;
- while (this.token = this.ts.look()) {
- if (this.token.popNamescope) {
-
- var symbol = this.namescope.pop();
- if (symbol.is("FUNCTION")) {
- if (this.ts.look(1).is("LEFT_PAREN") && symbol.comment.getTag("function").length == 0) {
- symbol.isa = "OBJECT";
- }
- }
- }
- this.step();
- if (!this.ts.next()) break;
- }
-}
-
-JSDOC.Walker.prototype.step = function() {
- if (this.token.is("JSDOC")) { // it's a doc comment
-
- var doc = new JSDOC.DocComment(this.token.data);
-
-
- if (doc.getTag("exports").length > 0) {
- var exports = doc.getTag("exports")[0];
-
- exports.desc.match(/(\S+) as (\S+)/i);
- var n1 = RegExp.$1;
- var n2 = RegExp.$2;
-
- if (!n1 && n2) throw "@exports tag requires a value like: 'name as ns.name'";
-
- JSDOC.Parser.rename = (JSDOC.Parser.rename || {});
- JSDOC.Parser.rename[n1] = n2
- }
-
- if (doc.getTag("lends").length > 0) {
- var lends = doc.getTag("lends")[0];
-
- var name = lends.desc
- if (!name) throw "@lends tag requires a value.";
-
- var symbol = new JSDOC.Symbol(name, [], "OBJECT", doc);
-
- this.namescope.push(symbol);
-
- var matching = this.ts.getMatchingToken("LEFT_CURLY");
- if (matching) matching.popNamescope = name;
- else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + ".");
-
- this.lastDoc = null;
- return true;
- }
- else if (doc.getTag("name").length > 0 && doc.getTag("overview").length == 0) { // it's a virtual symbol
- var virtualName = doc.getTag("name")[0].desc;
- if (!virtualName) throw "@name tag requires a value.";
-
- if (doc.getTag("memberOf").length > 0) {
- virtualName = (doc.getTag("memberOf")[0] + "." + virtualName)
- .replace(/([#.])\./, "$1");
- doc.deleteTag("memberOf");
- }
-
- var symbol = new JSDOC.Symbol(virtualName, [], "VIRTUAL", doc);
-
- JSDOC.Parser.addSymbol(symbol);
-
- this.lastDoc = null;
- return true;
- }
- else if (doc.meta) { // it's a meta doclet
- if (doc.meta == "@+") JSDOC.DocComment.shared = doc.src;
- else if (doc.meta == "@-") JSDOC.DocComment.shared = "";
- else if (doc.meta == "nocode+") JSDOC.Parser.conf.ignoreCode = true;
- else if (doc.meta == "nocode-") JSDOC.Parser.conf.ignoreCode = JSDOC.opt.n;
- else throw "Unrecognized meta comment: "+doc.meta;
-
- this.lastDoc = null;
- return true;
- }
- else if (doc.getTag("overview").length > 0) { // it's a file overview
- symbol = new JSDOC.Symbol("", [], "FILE", doc);
-
- JSDOC.Parser.addSymbol(symbol);
-
- this.lastDoc = null;
- return true;
- }
- else {
- this.lastDoc = doc;
- return false;
- }
- }
- else if (!JSDOC.Parser.conf.ignoreCode) { // it's code
- if (this.token.is("NAME")) { // it's the name of something
- var symbol;
- var name = this.token.data;
- var doc = null; if (this.lastDoc) doc = this.lastDoc;
- var params = [];
-
- // it's inside an anonymous object
- if (this.ts.look(1).is("COLON") && this.ts.look(-1).is("LEFT_CURLY") && !(this.ts.look(-2).is("JSDOC") || this.namescope.last().comment.getTag("lends").length || this.ts.look(-2).is("ASSIGN") || this.ts.look(-2).is("COLON"))) {
- name = "$anonymous";
- name = this.namescope.last().alias+"-"+name
-
- params = [];
-
- symbol = new JSDOC.Symbol(name, params, "OBJECT", doc);
-
- JSDOC.Parser.addSymbol(symbol);
-
- this.namescope.push(symbol);
-
- var matching = this.ts.getMatchingToken(null, "RIGHT_CURLY");
- if (matching) matching.popNamescope = name;
- else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + ".");
- }
- // function foo() {}
- else if (this.ts.look(-1).is("FUNCTION") && this.ts.look(1).is("LEFT_PAREN")) {
- var isInner;
-
- if (this.lastDoc) doc = this.lastDoc;
-
- if (doc && doc.getTag("memberOf").length > 0) {
- name = (doc.getTag("memberOf")[0]+"."+name).replace("#.", "#");
- doc.deleteTag("memberOf");
- }
- else {
- name = this.namescope.last().alias+"-"+name;
- if (!this.namescope.last().is("GLOBAL")) isInner = true;
- }
-
- if (!this.namescope.last().is("GLOBAL")) isInner = true;
-
- params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN"));
-
- symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc);
- if (isInner) symbol.isInner = true;
-
- if (this.ts.look(1).is("JSDOC")) {
- var inlineReturn = ""+this.ts.look(1).data;
- inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, "");
- symbol.type = inlineReturn;
- }
-
- JSDOC.Parser.addSymbol(symbol);
-
- this.namescope.push(symbol);
-
- var matching = this.ts.getMatchingToken("LEFT_CURLY");
- if (matching) matching.popNamescope = name;
- else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + ".");
- }
- // foo = function() {}
- else if (this.ts.look(1).is("ASSIGN") && this.ts.look(2).is("FUNCTION")) {
- var constructs;
- var isConstructor = false;
- if (doc && (constructs = doc.getTag("constructs")) && constructs.length) {
- if (constructs[0].desc) {
- name = constructs[0].desc;
- isConstructor = true;
- }
- }
-
- var isInner;
- if (this.ts.look(-1).is("VAR") || this.isInner) {
- if (doc && doc.getTag("memberOf").length > 0) {
- name = (doc.getTag("memberOf")[0]+"."+name).replace("#.", "#");
- doc.deleteTag("memberOf");
- }
- else {
- name = this.namescope.last().alias+"-"+name;
- if (!this.namescope.last().is("GLOBAL")) isInner = true;
- }
- if (!this.namescope.last().is("GLOBAL")) isInner = true;
- }
- else if (name.indexOf("this.") == 0) {
- name = this.resolveThis(name);
- }
-
- if (this.lastDoc) doc = this.lastDoc;
- params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN"));
-
- symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc);
-
- if (isInner) symbol.isInner = true;
- if (isConstructor) symbol.isa = "CONSTRUCTOR";
-
- if (this.ts.look(1).is("JSDOC")) {
- var inlineReturn = ""+this.ts.look(1).data;
- inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, "");
- symbol.type = inlineReturn;
- }
-
- JSDOC.Parser.addSymbol(symbol);
-
- this.namescope.push(symbol);
-
- var matching = this.ts.getMatchingToken("LEFT_CURLY");
- if (matching) matching.popNamescope = name;
- else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + ".");
- }
- // foo = new function() {} or foo = (function() {}
- else if (this.ts.look(1).is("ASSIGN") && (this.ts.look(2).is("NEW") || this.ts.look(2).is("LEFT_PAREN")) && this.ts.look(3).is("FUNCTION")) {
- var isInner;
- if (this.ts.look(-1).is("VAR") || this.isInner) {
- name = this.namescope.last().alias+"-"+name
- if (!this.namescope.last().is("GLOBAL")) isInner = true;
- }
- else if (name.indexOf("this.") == 0) {
- name = this.resolveThis(name);
- }
-
- this.ts.next(3); // advance past the "new" or "("
-
- if (this.lastDoc) doc = this.lastDoc;
- params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN"));
-
- symbol = new JSDOC.Symbol(name, params, "OBJECT", doc);
- if (isInner) symbol.isInner = true;
-
- if (this.ts.look(1).is("JSDOC")) {
- var inlineReturn = ""+this.ts.look(1).data;
- inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, "");
- symbol.type = inlineReturn;
- }
-
- JSDOC.Parser.addSymbol(symbol);
-
- symbol.scopeType = "INSTANCE";
- this.namescope.push(symbol);
-
- var matching = this.ts.getMatchingToken("LEFT_CURLY");
- if (matching) matching.popNamescope = name;
- else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + ".");
- }
- // foo: function() {}
- else if (this.ts.look(1).is("COLON") && this.ts.look(2).is("FUNCTION")) {
- name = (this.namescope.last().alias+"."+name).replace("#.", "#");
-
- if (this.lastDoc) doc = this.lastDoc;
- params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN"));
-
- if (doc && doc.getTag("constructs").length) {
- name = name.replace(/\.prototype(\.|$)/, "#");
-
- if (name.indexOf("#") > -1) name = name.match(/(^[^#]+)/)[0];
- else name = this.namescope.last().alias;
-
- symbol = new JSDOC.Symbol(name, params, "CONSTRUCTOR", doc);
- }
- else {
- symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc);
- }
-
- if (this.ts.look(1).is("JSDOC")) {
- var inlineReturn = ""+this.ts.look(1).data;
- inlineReturn = inlineReturn.replace(/(^\/\*\* *| *\*\/$)/g, "");
- symbol.type = inlineReturn;
- }
-
- JSDOC.Parser.addSymbol(symbol);
-
- this.namescope.push(symbol);
-
- var matching = this.ts.getMatchingToken("LEFT_CURLY");
- if (matching) matching.popNamescope = name;
- else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + ".");
- }
- // foo = {}
- else if (this.ts.look(1).is("ASSIGN") && this.ts.look(2).is("LEFT_CURLY")) {
- var isInner;
- if (this.ts.look(-1).is("VAR") || this.isInner) {
- name = this.namescope.last().alias+"-"+name
- if (!this.namescope.last().is("GLOBAL")) isInner = true;
- }
- else if (name.indexOf("this.") == 0) {
- name = this.resolveThis(name);
- }
-
- if (this.lastDoc) doc = this.lastDoc;
-
- symbol = new JSDOC.Symbol(name, params, "OBJECT", doc);
- if (isInner) symbol.isInner = true;
-
-
- if (doc) JSDOC.Parser.addSymbol(symbol);
-
- this.namescope.push(symbol);
-
- var matching = this.ts.getMatchingToken("LEFT_CURLY");
- if (matching) matching.popNamescope = name;
- else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + ".");
- }
- // var foo;
- else if (this.ts.look(1).is("SEMICOLON")) {
- var isInner;
-
- if (this.ts.look(-1).is("VAR") || this.isInner) {
- name = this.namescope.last().alias+"-"+name
- if (!this.namescope.last().is("GLOBAL")) isInner = true;
-
- if (this.lastDoc) doc = this.lastDoc;
-
- symbol = new JSDOC.Symbol(name, params, "OBJECT", doc);
- if (isInner) symbol.isInner = true;
-
-
- if (doc) JSDOC.Parser.addSymbol(symbol);
- }
- }
- // foo = x
- else if (this.ts.look(1).is("ASSIGN")) {
- var isInner;
- if (this.ts.look(-1).is("VAR") || this.isInner) {
- name = this.namescope.last().alias+"-"+name
- if (!this.namescope.last().is("GLOBAL")) isInner = true;
- }
- else if (name.indexOf("this.") == 0) {
- name = this.resolveThis(name);
- }
-
- if (this.lastDoc) doc = this.lastDoc;
-
- symbol = new JSDOC.Symbol(name, params, "OBJECT", doc);
- if (isInner) symbol.isInner = true;
-
-
- if (doc) JSDOC.Parser.addSymbol(symbol);
- }
- // foo: {}
- else if (this.ts.look(1).is("COLON") && this.ts.look(2).is("LEFT_CURLY")) {
- name = (this.namescope.last().alias+"."+name).replace("#.", "#");
-
- if (this.lastDoc) doc = this.lastDoc;
-
- symbol = new JSDOC.Symbol(name, params, "OBJECT", doc);
-
-
- if (doc) JSDOC.Parser.addSymbol(symbol);
-
- this.namescope.push(symbol);
-
- var matching = this.ts.getMatchingToken("LEFT_CURLY");
- if (matching) matching.popNamescope = name;
- else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + ".");
- }
- // foo: x
- else if (this.ts.look(1).is("COLON")) {
- name = (this.namescope.last().alias+"."+name).replace("#.", "#");;
-
- if (this.lastDoc) doc = this.lastDoc;
-
- symbol = new JSDOC.Symbol(name, params, "OBJECT", doc);
-
-
- if (doc) JSDOC.Parser.addSymbol(symbol);
- }
- // foo(...)
- else if (this.ts.look(1).is("LEFT_PAREN")) {
- if (typeof JSDOC.PluginManager != "undefined") {
- var functionCall = {name: name};
-
- var cursor = this.ts.cursor;
- params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN"));
- this.ts.cursor = cursor;
-
- for (var i = 0; i < params.length; i++)
- functionCall["arg" + (i + 1)] = params[i].name;
-
- JSDOC.PluginManager.run("onFunctionCall", functionCall);
- if (functionCall.doc) {
- this.ts.insertAhead(new JSDOC.Token(functionCall.doc, "COMM", "JSDOC"));
- }
- }
- }
- this.lastDoc = null;
- }
- else if (this.token.is("FUNCTION")) { // it's an anonymous function
- if (
- (!this.ts.look(-1).is("COLON") || !this.ts.look(-1).is("ASSIGN"))
- && !this.ts.look(1).is("NAME")
- ) {
- if (this.lastDoc) doc = this.lastDoc;
-
- name = "$anonymous";
- name = this.namescope.last().alias+"-"+name
-
- params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN"));
-
- symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc);
-
- JSDOC.Parser.addSymbol(symbol);
-
- this.namescope.push(symbol);
-
- var matching = this.ts.getMatchingToken("LEFT_CURLY");
- if (matching) matching.popNamescope = name;
- else LOG.warn("Mismatched } character. Can't parse code in file " + symbol.srcFile + ".");
- }
- }
- }
- return true;
-}
-
-/**
- Resolves what "this." means when it appears in a name.
- @param name The name that starts with "this.".
- @returns The name with "this." resolved.
- */
-JSDOC.Walker.prototype.resolveThis = function(name) {
- name.match(/^this\.(.+)$/)
- var nameFragment = RegExp.$1;
- if (!nameFragment) return name;
-
- var symbol = this.namescope.last();
- var scopeType = symbol.scopeType || symbol.isa;
-
- // if we are in a constructor function, `this` means the instance
- if (scopeType == "CONSTRUCTOR") {
- name = symbol.alias+"#"+nameFragment;
- }
-
- // if we are in an anonymous constructor function, `this` means the instance
- else if (scopeType == "INSTANCE") {
- name = symbol.alias+"."+nameFragment;
- }
-
- // if we are in a function, `this` means the container (possibly the global)
- else if (scopeType == "FUNCTION") {
- // in a method of a prototype, so `this` means the constructor
- if (symbol.alias.match(/(^.*)[#.-][^#.-]+/)) {
- var parentName = RegExp.$1;
- var parent = JSDOC.Parser.symbols.getSymbol(parentName);
-
- if (!parent) {
- if (JSDOC.Lang.isBuiltin(parentName)) parent = JSDOC.Parser.addBuiltin(parentName);
- else {
- if (symbol.alias.indexOf("$anonymous") < 0) // these will be ignored eventually
- LOG.warn("Trying to document "+symbol.alias+" without first documenting "+parentName+".");
- }
- }
- if (parent) name = parentName+(parent.is("CONSTRUCTOR")?"#":".")+nameFragment;
- }
- else {
- parent = this.namescope.last(1);
- name = parent.alias+(parent.is("CONSTRUCTOR")?"#":".")+nameFragment;
- }
- }
- // otherwise it means the global
- else {
- name = nameFragment;
- }
-
- return name;
-}
-
-JSDOC.Walker.onParamList = function(/**Array*/paramTokens) {
- if (!paramTokens) {
- LOG.warn("Malformed parameter list. Can't parse code.");
- return [];
- }
- var params = [];
- for (var i = 0, l = paramTokens.length; i < l; i++) {
- if (paramTokens[i].is("JSDOC")) {
- var paramType = paramTokens[i].data.replace(/(^\/\*\* *| *\*\/$)/g, "");
-
- if (paramTokens[i+1] && paramTokens[i+1].is("NAME")) {
- i++;
- params.push({type: paramType, name: paramTokens[i].data});
- }
- }
- else if (paramTokens[i].is("NAME")) {
- params.push({name: paramTokens[i].data});
- }
- }
- return params;
-}
--- a/sbin/res/jsdoc/app/main.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/**
- * @version $Id: main.js 818 2009-11-08 14:51:41Z micmath $
- */
-
-function main() {
- IO.include("lib/JSDOC.js");
- IO.includeDir("plugins/");
-
- // process the options
-
- // the -c option: options are defined in a configuration file
- if (JSDOC.opt.c) {
- eval("JSDOC.conf = " + IO.readFile(JSDOC.opt.c));
-
- LOG.inform("Using configuration file at '"+JSDOC.opt.c+"'.");
-
- for (var c in JSDOC.conf) {
- if (c !== "D" && !defined(JSDOC.opt[c])) { // commandline overrules config file
- JSDOC.opt[c] = JSDOC.conf[c];
- }
- }
-
- if (typeof JSDOC.conf["_"] != "undefined") {
- JSDOC.opt["_"] = JSDOC.opt["_"].concat(JSDOC.conf["_"]);
- }
-
- LOG.inform("With configuration: ");
- for (var o in JSDOC.opt) {
- LOG.inform(" "+o+": "+JSDOC.opt[o]);
- }
- }
-
- // be verbose
- if (JSDOC.opt.v) LOG.verbose = true;
-
- // send log messages to a file
- if (JSDOC.opt.o) LOG.out = IO.open(JSDOC.opt.o);
-
- // run the unit tests
- if (JSDOC.opt.T) {
- LOG.inform("JsDoc Toolkit running in test mode at "+new Date()+".");
- IO.include("frame/Testrun.js");
- IO.include("test.js");
- }
- else {
- // a template must be defined and must be a directory path
- if (!JSDOC.opt.t && System.getProperty("jsdoc.template.dir")) {
- JSDOC.opt.t = System.getProperty("jsdoc.template.dir");
- }
- if (JSDOC.opt.t && SYS.slash != JSDOC.opt.t.slice(-1)) {
- JSDOC.opt.t += SYS.slash;
- }
-
- // verbose messages about the options we were given
- LOG.inform("JsDoc Toolkit main() running at "+new Date()+".");
- LOG.inform("With options: ");
- for (var o in JSDOC.opt) {
- LOG.inform(" "+o+": "+JSDOC.opt[o]);
- }
-
- // initialize and build a symbolSet from your code
- JSDOC.JsDoc();
-
- // debugger's option: dump the entire symbolSet produced from your code
- if (JSDOC.opt.Z) {
- LOG.warn("So you want to see the data structure, eh? This might hang if you have circular refs...");
- IO.include("frame/Dumper.js");
- var symbols = JSDOC.JsDoc.symbolSet.toArray();
- for (var i = 0, l = symbols.length; i < l; i++) {
- var symbol = symbols[i];
- print("// symbol: " + symbol.alias);
- print(symbol.serialize());
- }
- }
- else {
- if (typeof JSDOC.opt.t != "undefined") {
- try {
- // a file named "publish.js" must exist in the template directory
- load(JSDOC.opt.t+"publish.js");
-
- // and must define a function named "publish"
- if (!publish) {
- LOG.warn("No publish() function is defined in that template so nothing to do.");
- }
- else {
- // which will be called with the symbolSet produced from your code
- publish(JSDOC.JsDoc.symbolSet);
- }
- }
- catch(e) {
- LOG.warn("Sorry, that doesn't seem to be a valid template: "+JSDOC.opt.t+"publish.js : "+e);
- }
- }
- else {
- LOG.warn("No template given. Might as well read the usage notes.");
- JSDOC.usage();
- }
- }
- }
-
- // notify of any warnings
- if (!JSDOC.opt.q && LOG.warnings.length) {
- print(LOG.warnings.length+" warning"+(LOG.warnings.length != 1? "s":"")+".");
- }
-
- // stop sending log messages to a file
- if (LOG.out) {
- LOG.out.flush();
- LOG.out.close();
- }
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/plugins/commentSrcJson.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-JSDOC.PluginManager.registerPlugin(
- "JSDOC.commentSrcJson",
- {
- onDocCommentSrc: function(comment) {
- var json;
- if (/^\s*@json\b/.test(comment)) {
- comment.src = new String(comment.src).replace("@json", "");
-
- eval("json = "+comment.src);
- var tagged = "";
- for (var i in json) {
- var tag = json[i];
- // todo handle cases where tag is an object
- tagged += "@"+i+" "+tag+"\n";
- }
- comment.src = tagged;
- }
- }
- }
-);
\ No newline at end of file
--- a/sbin/res/jsdoc/app/plugins/frameworkPrototype.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-JSDOC.PluginManager.registerPlugin(
- "JSDOC.frameworkPrototype",
- {
- onPrototypeClassCreate: function(classCreator) {
- var desc = "";
- if (classCreator.comment) {
- desc = classCreator.comment;
- }
- var insert = desc+"/** @name "+classCreator.name+"\n@constructor\n@scope "+classCreator.name+".prototype */"
-
- insert = insert.replace(/\*\/\/\*\*/g, "\n");
- /*DEBUG*///print("insert is "+insert);
- classCreator.addComment.data = insert;
- }
- }
-);
--- a/sbin/res/jsdoc/app/plugins/functionCall.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-JSDOC.PluginManager.registerPlugin(
- "JSDOC.functionCall",
- {
- onFunctionCall: function(functionCall) {
- if (functionCall.name == "dojo.define" && functionCall.arg1) {
- functionCall.doc = "/** @lends "+eval(functionCall.arg1)+".prototype */";
- }
- }
- }
-);
\ No newline at end of file
--- a/sbin/res/jsdoc/app/plugins/publishSrcHilite.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-JSDOC.PluginManager.registerPlugin(
- "JSDOC.publishSrcHilite",
- {
- onPublishSrc: function(src) {
- if (src.path in JsHilite.cache) {
- return; // already generated src code
- }
- else JsHilite.cache[src.path] = true;
-
- try {
- var sourceCode = IO.readFile(src.path);
- }
- catch(e) {
- print(e.message);
- quit();
- }
-
- var hiliter = new JsHilite(sourceCode, src.charset);
- src.hilited = hiliter.hilite();
- }
- }
-);
-
-function JsHilite(src, charset) {
-
- var tr = new JSDOC.TokenReader();
-
- tr.keepComments = true;
- tr.keepDocs = true;
- tr.keepWhite = true;
-
- this.tokens = tr.tokenize(new JSDOC.TextStream(src));
-
- // TODO is redefining toString() the best way?
- JSDOC.Token.prototype.toString = function() {
- return "<span class=\""+this.type+"\">"+this.data.replace(/</g, "<")+"</span>";
- }
-
- if (!charset) charset = "utf-8";
-
- this.header = '<html><head><meta http-equiv="content-type" content="text/html; charset='+charset+'"> '+
- "<style>\n\
- .KEYW {color: #933;}\n\
- .COMM {color: #bbb; font-style: italic;}\n\
- .NUMB {color: #393;}\n\
- .STRN {color: #393;}\n\
- .REGX {color: #339;}\n\
- .line {border-right: 1px dotted #666; color: #666; font-style: normal;}\n\
- </style></head><body><pre>";
- this.footer = "</pre></body></html>";
- this.showLinenumbers = true;
-}
-
-JsHilite.cache = {};
-
-JsHilite.prototype.hilite = function() {
- var hilited = this.tokens.join("");
- var line = 1;
- if (this.showLinenumbers) hilited = hilited.replace(/(^|\n)/g, function(m){return m+"<span class='line'>"+((line<10)? " ":"")+((line<100)? " ":"")+(line++)+"</span> "});
-
- return this.header+hilited+this.footer;
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/plugins/symbolLink.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-JSDOC.PluginManager.registerPlugin(
- "JSDOC.symbolLink",
- {
- onSymbolLink: function(link) {
- // modify link.linkPath (the href part of the link)
- // or link.linkText (the text displayed)
- // or link.linkInner (the #name part of the link)
- }
- }
-);
\ No newline at end of file
--- a/sbin/res/jsdoc/app/plugins/tagParamConfig.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-JSDOC.PluginManager.registerPlugin(
- "JSDOC.tagParamConfig",
- {
- onDocCommentTags: function(comment) {
- var currentParam = null;
- var tags = comment.tags;
- for (var i = 0, l = tags.length; i < l; i++) {
-
- if (tags[i].title == "param") {
- if (tags[i].name.indexOf(".") == -1) {
- currentParam = i;
- }
- }
- else if (tags[i].title == "config") {
- tags[i].title = "param";
- if (currentParam == null) {
- tags[i].name = "arguments"+"."+tags[i].name;
- }
- else if (tags[i].name.indexOf(tags[currentParam].name+".") != 0) {
- tags[i].name = tags[currentParam].name+"."+tags[i].name;
- }
- currentParam != null
- //tags[currentParam].properties.push(tags[i]);
- }
- else {
- currentParam = null;
- }
- }
- }
- }
-);
--- a/sbin/res/jsdoc/app/plugins/tagSynonyms.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-JSDOC.PluginManager.registerPlugin(
- "JSDOC.tagSynonyms",
- {
- onDocCommentSrc: function(comment) {
- comment.src = comment.src.replace(/@methodOf\b/i, "@function\n@memberOf");
- comment.src = comment.src.replace(/@fieldOf\b/i, "@field\n@memberOf");
- },
-
- onDocCommentTags: function(comment) {
- for (var i = 0, l = comment.tags.length; i < l; i++) {
- var title = comment.tags[i].title.toLowerCase();
- var syn;
- if ((syn = JSDOC.tagSynonyms.synonyms["="+title])) {
- comment.tags[i].title = syn;
- }
- }
- }
- }
-);
-
-new Namespace(
- "JSDOC.tagSynonyms",
- function() {
- JSDOC.tagSynonyms.synonyms = {
- "=member": "memberOf",
- "=memberof": "memberOf",
- "=description": "desc",
- "=exception": "throws",
- "=argument": "param",
- "=returns": "return",
- "=classdescription": "class",
- "=fileoverview": "overview",
- "=extends": "augments",
- "=base": "augments",
- "=projectdescription": "overview",
- "=classdescription": "class",
- "=link": "see",
- "=borrows": "inherits",
- "=scope": "lends",
- "=construct": "constructor"
- }
- }
-);
\ No newline at end of file
--- a/sbin/res/jsdoc/app/run.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,348 +0,0 @@
-/**
- * @fileOverview
- * A bootstrap script that creates some basic required objects
- * for loading other scripts.
- * @author Michael Mathews, micmath@gmail.com
- * @version $Id: run.js 756 2009-01-07 21:32:58Z micmath $
- */
-
-/**
- * @namespace Keep track of any messages from the running script.
- */
-LOG = {
- warn: function(msg, e) {
- if (JSDOC.opt.q) return;
- if (e) msg = e.fileName+", line "+e.lineNumber+": "+msg;
-
- msg = ">> WARNING: "+msg;
- LOG.warnings.push(msg);
- if (LOG.out) LOG.out.write(msg+"\n");
- else print(msg);
- },
-
- inform: function(msg) {
- if (JSDOC.opt.q) return;
- msg = " > "+msg;
- if (LOG.out) LOG.out.write(msg+"\n");
- else if (typeof LOG.verbose != "undefined" && LOG.verbose) print(msg);
- }
-};
-LOG.warnings = [];
-LOG.verbose = false
-LOG.out = undefined;
-
-/**
- * @class Manipulate a filepath.
- */
-function FilePath(absPath, separator) {
- this.slash = separator || "/";
- this.root = this.slash;
- this.path = [];
- this.file = "";
-
- var parts = absPath.split(/[\\\/]/);
- if (parts) {
- if (parts.length) this.root = parts.shift() + this.slash;
- if (parts.length) this.file = parts.pop()
- if (parts.length) this.path = parts;
- }
-
- this.path = this.resolvePath();
-}
-
-/** Collapse any dot-dot or dot items in a filepath. */
-FilePath.prototype.resolvePath = function() {
- var resolvedPath = [];
- for (var i = 0; i < this.path.length; i++) {
- if (this.path[i] == "..") resolvedPath.pop();
- else if (this.path[i] != ".") resolvedPath.push(this.path[i]);
- }
- return resolvedPath;
-}
-
-/** Trim off the filename. */
-FilePath.prototype.toDir = function() {
- if (this.file) this.file = "";
- return this;
-}
-
-/** Go up a directory. */
-FilePath.prototype.upDir = function() {
- this.toDir();
- if (this.path.length) this.path.pop();
- return this;
-}
-
-FilePath.prototype.toString = function() {
- return this.root
- + this.path.join(this.slash)
- + ((this.path.length > 0)? this.slash : "")
- + this.file;
-}
-
-/**
- * Turn a path into just the name of the file.
- */
-FilePath.fileName = function(path) {
- var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0);
- return path.substring(nameStart);
-}
-
-/**
- * Get the extension of a filename
- */
-FilePath.fileExtension = function(filename) {
- return filename.split(".").pop().toLowerCase();
-};
-
-/**
- * Turn a path into just the directory part.
- */
-FilePath.dir = function(path) {
- var nameStart = Math.max(path.lastIndexOf("/")+1, path.lastIndexOf("\\")+1, 0);
- return path.substring(0, nameStart-1);
-}
-
-
-importClass(java.lang.System);
-
-/**
- * @namespace A collection of information about your system.
- */
-SYS = {
- /**
- * Information about your operating system: arch, name, version.
- * @type string
- */
- os: [
- new String(System.getProperty("os.arch")),
- new String(System.getProperty("os.name")),
- new String(System.getProperty("os.version"))
- ].join(", "),
-
- /**
- * Which way does your slash lean.
- * @type string
- */
- slash: System.getProperty("file.separator")||"/",
-
- /**
- * The path to the working directory where you ran java.
- * @type string
- */
- userDir: new String(System.getProperty("user.dir")),
-
- /**
- * Where is Java's home folder.
- * @type string
- */
- javaHome: new String(System.getProperty("java.home")),
-
- /**
- * The absolute path to the directory containing this script.
- * @type string
- */
- pwd: undefined
-};
-
-// jsrun appends an argument, with the path to here.
-if (arguments[arguments.length-1].match(/^-j=(.+)/)) {
- if (RegExp.$1.charAt(0) == SYS.slash || RegExp.$1.charAt(1) == ":") { // absolute path to here
- SYS.pwd = new FilePath(RegExp.$1).toDir().toString();
- }
- else { // relative path to here
- SYS.pwd = new FilePath(SYS.userDir + SYS.slash + RegExp.$1).toDir().toString();
- }
- arguments.pop();
-}
-else {
- print("The run.js script requires you use jsrun.jar.");
- quit();
-}
-
-// shortcut
-var File = Packages.java.io.File;
-
-/**
- * @namespace A collection of functions that deal with reading a writing to disk.
- */
-IO = {
-
- /**
- * Create a new file in the given directory, with the given name and contents.
- */
- saveFile: function(/**string*/ outDir, /**string*/ fileName, /**string*/ content) {
- var out = new Packages.java.io.PrintWriter(
- new Packages.java.io.OutputStreamWriter(
- new Packages.java.io.FileOutputStream(outDir+SYS.slash+fileName),
- IO.encoding
- )
- );
- out.write(content);
- out.flush();
- out.close();
- },
-
- /**
- * @type string
- */
- readFile: function(/**string*/ path) {
- if (!IO.exists(path)) {
- throw "File doesn't exist there: "+path;
- }
- return readFile(path, IO.encoding);
- },
-
- /**
- * @param inFile
- * @param outDir
- * @param [fileName=The original filename]
- */
- copyFile: function(/**string*/ inFile, /**string*/ outDir, /**string*/ fileName) {
- if (fileName == null) fileName = FilePath.fileName(inFile);
-
- var inFile = new File(inFile);
- var outFile = new File(outDir+SYS.slash+fileName);
-
- var bis = new Packages.java.io.BufferedInputStream(new Packages.java.io.FileInputStream(inFile), 4096);
- var bos = new Packages.java.io.BufferedOutputStream(new Packages.java.io.FileOutputStream(outFile), 4096);
- var theChar;
- while ((theChar = bis.read()) != -1) {
- bos.write(theChar);
- }
- bos.close();
- bis.close();
- },
-
- /**
- * Creates a series of nested directories.
- */
- mkPath: function(/**Array*/ path) {
- if (path.constructor != Array) path = path.split(/[\\\/]/);
- var make = "";
- for (var i = 0, l = path.length; i < l; i++) {
- make += path[i] + SYS.slash;
- if (! IO.exists(make)) {
- IO.makeDir(make);
- }
- }
- },
-
- /**
- * Creates a directory at the given path.
- */
- makeDir: function(/**string*/ path) {
- (new File(path)).mkdir();
- },
-
- /**
- * @type string[]
- * @param dir The starting directory to look in.
- * @param [recurse=1] How many levels deep to scan.
- * @returns An array of all the paths to files in the given dir.
- */
- ls: function(/**string*/ dir, /**number*/ recurse, _allFiles, _path) {
- if (_path === undefined) { // initially
- var _allFiles = [];
- var _path = [dir];
- }
- if (_path.length == 0) return _allFiles;
- if (recurse === undefined) recurse = 1;
-
- dir = new File(dir);
- if (!dir.directory) return [String(dir)];
- var files = dir.list();
-
- for (var f = 0; f < files.length; f++) {
- var file = String(files[f]);
- if (file.match(/^\.[^\.\/\\]/)) continue; // skip dot files
-
- if ((new File(_path.join(SYS.slash)+SYS.slash+file)).list()) { // it's a directory
- _path.push(file);
- if (_path.length-1 < recurse) IO.ls(_path.join(SYS.slash), recurse, _allFiles, _path);
- _path.pop();
- }
- else {
- _allFiles.push((_path.join(SYS.slash)+SYS.slash+file).replace(SYS.slash+SYS.slash, SYS.slash));
- }
- }
-
- return _allFiles;
- },
-
- /**
- * @type boolean
- */
- exists: function(/**string*/ path) {
- file = new File(path);
-
- if (file.isDirectory()){
- return true;
- }
- if (!file.exists()){
- return false;
- }
- if (!file.canRead()){
- return false;
- }
- return true;
- },
-
- /**
- *
- */
- open: function(/**string*/ path, /**string*/ append) {
- var append = true;
- var outFile = new File(path);
- var out = new Packages.java.io.PrintWriter(
- new Packages.java.io.OutputStreamWriter(
- new Packages.java.io.FileOutputStream(outFile, append),
- IO.encoding
- )
- );
- return out;
- },
-
- /**
- * Sets {@link IO.encoding}.
- * Encoding is used when reading and writing text to files,
- * and in the meta tags of HTML output.
- */
- setEncoding: function(/**string*/ encoding) {
- if (/ISO-8859-([0-9]+)/i.test(encoding)) {
- IO.encoding = "ISO8859_"+RegExp.$1;
- }
- else {
- IO.encoding = encoding;
- }
- },
-
- /**
- * @default "utf-8"
- * @private
- */
- encoding: "utf-8",
-
- /**
- * Load the given script.
- */
- include: function(relativePath) {
- load(SYS.pwd+relativePath);
- },
-
- /**
- * Loads all scripts from the given directory path.
- */
- includeDir: function(path) {
- if (!path) return;
-
- for (var lib = IO.ls(SYS.pwd+path), i = 0; i < lib.length; i++)
- if (/\.js$/i.test(lib[i])) load(lib[i]);
- }
-}
-
-// now run the application
-IO.include("frame.js");
-IO.include("main.js");
-
-main();
--- a/sbin/res/jsdoc/app/t/TestDoc.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-var TestDoc = {
- fails: 0,
- plans: 0,
- passes: 0,
- results: []
-};
-
-TestDoc.record = function(result) {
- TestDoc.results.push(result);
- if (typeof result.verdict == "boolean") {
- if (result.verdict === false) TestDoc.fails++;
- if (result.verdict === true) TestDoc.passes++;
- }
-}
-
-TestDoc.prove = function(filePath) {
- if (typeof document != "undefined" && typeof document.write != "undefined") {
- if (TestDoc.console) print = function(s) { TestDoc.console.appendChild(document.createTextNode(s+"\n")); }
- else print = function(s) { document.write(s+"<br />"); }
- }
- TestDoc.run(TestDoc.readFile(filePath));
-}
-
-TestDoc.run = function(src) {
- try { eval(src); } catch(e) { print("# ERROR! "+e); }
-
- var chunks = src.split(/\/\*t:/);
-
- var run = function(chunk) {
- // local shortcuts
- var is = TestDoc.assertEquals;
- var isnt = TestDoc.assertNotEquals;
- var plan = TestDoc.plan;
- var requires = TestDoc.requires;
-
- try { eval(chunk); } catch(e) { print("# ERROR! "+e); }
- }
- for (var start = -1, end = 0; (start = src.indexOf("/*t:", end)) > end; start = end) {
- run(
- src.substring(
- start+4,
- (end = src.indexOf("*/", start))
- )
- );
- }
-}
-
-TestDoc.Result = function(verdict, message) {
- this.verdict = verdict;
- this.message = message;
-}
-
-TestDoc.Result.prototype.toString = function() {
- if (typeof this.verdict == "boolean") {
- return (this.verdict? "ok" : "not ok") + " " + (++TestDoc.report.counter) + " - " + this.message;
- }
-
- return "# " + this.message;
-}
-
-TestDoc.requires = function(file) {
- if (!TestDoc.requires.loaded[file]) {
- load(file);
- TestDoc.requires.loaded[file] = true;
- }
-}
-TestDoc.requires.loaded = {};
-
-TestDoc.report = function() {
- TestDoc.report.counter = 0;
- print("1.."+TestDoc.plans);
- for (var i = 0; i < TestDoc.results.length; i++) {
- print(TestDoc.results[i]);
- }
- print("----------------------------------------");
- if (TestDoc.fails == 0 && TestDoc.passes == TestDoc.plans) {
- print("All tests successful.");
- }
- else {
- print("Failed " + TestDoc.fails + "/" + TestDoc.plans + " tests, "+((TestDoc.plans == 0)? 0 : Math.round(TestDoc.passes/(TestDoc.passes+TestDoc.fails)*10000)/100)+"% okay. Planned to run "+TestDoc.plans+", did run "+(TestDoc.passes+TestDoc.fails)+".")
- }
-}
-
-TestDoc.plan = function(n, message) {
- TestDoc.plans += n;
- TestDoc.record(new TestDoc.Result(null, message+" ("+n+" tests)"));
-}
-
-TestDoc.assertEquals = function(a, b, message) {
- var result = (a == b);
- if (!result) message += "\n#\n# " + a + " does not equal " + b + "\n#";
- TestDoc.record(new TestDoc.Result(result, message));
-}
-
-TestDoc.assertNotEquals = function(a, b, message) {
- var result = (a != b);
- if (!result) message += "\n#\n# " + a + " equals " + b + "\n#";
- TestDoc.record(new TestDoc.Result(result, message));
-}
-
-TestDoc.readFile = (function(){
- // rhino
- if (typeof readFile == "function") {
- return function(url) {
- var text = readFile(url);
- return text || "";
- }
- }
-
- // a web browser
- else {
- return function(url) {
- var httpRequest;
-
- if (window.XMLHttpRequest) { // Mozilla, Safari, etc
- httpRequest = new XMLHttpRequest();
- }
- else if (window.ActiveXObject) { // IE
- try {
- httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
- }
- catch (e) {
- try {
- httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
- }
- catch (e) {
- }
- }
- }
-
- if (!httpRequest) { throw "Cannot create HTTP Request."; }
-
- httpRequest.open('GET', url, false);
- httpRequest.send('');
- if (httpRequest.readyState == 4) {
- if (httpRequest.status >= 400) {
- throw "The HTTP Request returned an error code: "+httpRequest.status;
- }
- }
-
- return httpRequest.responseText || "";
- }
- }
-})();
--- a/sbin/res/jsdoc/app/t/runner.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-// try: java -jar ../../jsrun.jar runner.js
-
-load("TestDoc.js");
-
-TestDoc.prove("../frame/Opt.js");
-TestDoc.prove("../lib/JSDOC.js");
-TestDoc.prove("../frame/String.js");
-TestDoc.prove("../lib/JSDOC/DocTag.js");
-TestDoc.prove("../lib/JSDOC/DocComment.js");
-TestDoc.prove("../lib/JSDOC/TokenReader.js");
-TestDoc.prove("../lib/JSDOC/Symbol.js");
-
-TestDoc.report();
--- a/sbin/res/jsdoc/app/test.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,342 +0,0 @@
-load("app/frame/Dumper.js");
-function symbolize(opt) {
- symbols = null;
- JSDOC.JsDoc(opt);
- symbols = JSDOC.JsDoc.symbolSet;
-}
-
-var testCases = [
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/overview.js"]});
- //print(Dumper.dump(symbols));
- is('symbols.getSymbolByName("My Cool Library").name', 'My Cool Library', 'File overview can be found by alias.');
- }
- ,
- function() {
- symbolize({_: [SYS.pwd+"test/name.js"]});
-
- is('symbols.getSymbol("Response").name', "Response", 'Virtual class name is found.');
- is('symbols.getSymbol("Response#text").alias', "Response#text", 'Virtual method name is found.');
- is('symbols.getSymbol("Response#text").memberOf', "Response", 'Virtual method parent name is found.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/prototype.js"]});
-
- is('symbols.getSymbol("Article").name', "Article", 'Function set to constructor prototype with inner constructor name is found.');
- is('symbols.getSymbol("Article").hasMethod("init")', true, 'The initializer method name of prototype function is correct.');
- is('symbols.getSymbol("Article").hasMember("counter")', true, 'A static property set in the prototype definition is found.');
- is('symbols.getSymbol("Article").hasMember("title")', true, 'An instance property set in the prototype is found.');
- is('symbols.getSymbol("Article#title").isStatic', false, 'An instance property has isStatic set to false.');
- is('symbols.getSymbol("Article.counter").name', "counter", 'A static property set in the initializer has the name set correctly.');
- is('symbols.getSymbol("Article.counter").memberOf', "Article", 'A static property set in the initializer has the memberOf set correctly.');
- is('symbols.getSymbol("Article.counter").isStatic', true, 'A static property set in the initializer has isStatic set to true.');
- }
- ,
- function() {
- symbolize({a:true, _: [SYS.pwd+"test/prototype_oblit.js"]});
-
- is('symbols.getSymbol("Article").name', "Article", 'Oblit set to constructor prototype name is found.');
- is('typeof symbols.getSymbol("Article.prototype")', "undefined", 'The prototype oblit is not a symbol.');
- is('symbols.getSymbol("Article#getTitle").name', "getTitle", 'The nonstatic method name of prototype oblit is correct.');
- is('symbols.getSymbol("Article#getTitle").alias', "Article#getTitle", 'The alias of non-static method of prototype oblit is correct.');
- is('symbols.getSymbol("Article#getTitle").isStatic', false, 'The isStatic of a nonstatic method of prototype oblit is correct.');
- is('symbols.getSymbol("Article.getTitle").name', "getTitle", 'The static method name of prototype oblit is correct.');
- is('symbols.getSymbol("Article.getTitle").isStatic', true, 'The isStatic of a static method of prototype oblit is correct.');
- is('symbols.getSymbol("Article#getTitle").isa', "FUNCTION", 'The isa of non-static method of prototype oblit is correct.');
- is('symbols.getSymbol("Article.getTitle").alias', "Article.getTitle", 'The alias of a static method of prototype oblit is correct.');
- is('symbols.getSymbol("Article.getTitle").isa', "FUNCTION", 'The isa of static method of prototype oblit is correct.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/prototype_oblit_constructor.js"]});
-
- is('symbols.getSymbol("Article").name', "Article", 'Oblit set to constructor prototype with inner constructor name is found.');
- is('symbols.getSymbol("Article#init").name', "init", 'The initializer method name of prototype oblit is correct.');
- is('symbols.getSymbol("Article").hasMember("pages")', true, 'Property set by initializer method "this" is on the outer constructor.');
- is('symbols.getSymbol("Article#Title").name', "Title", 'Name of the inner constructor name is found.');
- is('symbols.getSymbol("Article#Title").memberOf', "Article", 'The memberOf of the inner constructor name is found.');
- is('symbols.getSymbol("Article#Title").isa', "CONSTRUCTOR", 'The isa of the inner constructor name is constructor.');
- is('symbols.getSymbol("Article#Title").hasMember("title")', true, 'A property set on the inner constructor "this" is on the inner constructor.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/inner.js"]});
-
- is('symbols.getSymbol("Outer").name', "Outer", 'Outer constructor prototype name is found.');
- is('symbols.getSymbol("Outer").methods.length', 1, 'Inner function doesnt appear as a method of the outer.');
- is('symbols.getSymbol("Outer").hasMethod("open")', true, 'Outer constructors methods arent affected by inner function.');
- is('symbols.getSymbol("Outer-Inner").alias', "Outer-Inner", 'Alias of inner function is found.');
- is('symbols.getSymbol("Outer-Inner").isa', "CONSTRUCTOR", 'isa of inner function constructor is found.');
- is('symbols.getSymbol("Outer-Inner").memberOf', "Outer", 'The memberOf of inner function is found.');
- is('symbols.getSymbol("Outer-Inner").name', "Inner", 'The name of inner function is found.');
- is('symbols.getSymbol("Outer-Inner#name").name', "name", 'A member of the inner function constructor, attached to "this" is found on inner.');
- is('symbols.getSymbol("Outer-Inner#name").memberOf', "Outer-Inner", 'The memberOf of an inner function member is found.');
- }
- ,
- function() {
- symbolize({a:true, _: [SYS.pwd+"test/prototype_nested.js"]});
-
- is('symbols.getSymbol("Word").name', "Word", 'Base constructor name is found.');
- is('symbols.getSymbol("Word").hasMethod("reverse")', true, 'Base constructor method is found.');
- is('symbols.getSymbol("Word").methods.length', 1, 'Base constructor has only one method.');
- is('symbols.getSymbol("Word").memberOf', "", 'Base constructor memberOf is empty.');
- is('symbols.getSymbol("Word#reverse").name', "reverse", 'Member of constructor prototype name is found.');
- is('symbols.getSymbol("Word#reverse").memberOf', "Word", 'Member of constructor prototype memberOf is found.');
- is('symbols.getSymbol("Word#reverse.utf8").name', "utf8", 'Member of constructor prototype method name is found.');
- is('symbols.getSymbol("Word#reverse.utf8").memberOf', "Word#reverse", 'Static nested member memberOf is found.');
- }
- ,
- function() {
- symbolize({a:true, _: [SYS.pwd+"test/namespace_nested.js"]});
-
- is('symbols.getSymbol("ns1").name', "ns1", 'Base namespace name is found.');
- is('symbols.getSymbol("ns1").memberOf', "", 'Base namespace memberOf is empty (its a constructor).');
- is('symbols.getSymbol("ns1.ns2").name', "ns2", 'Nested namespace name is found.');
- is('symbols.getSymbol("ns1.ns2").alias', "ns1.ns2", 'Nested namespace alias is found.');
- is('symbols.getSymbol("ns1.ns2").memberOf', "ns1", 'Nested namespace memberOf is found.');
- is('symbols.getSymbol("ns1.ns2.Function1").name', "Function1", 'Method of nested namespace name is found.');
- is('symbols.getSymbol("ns1.ns2.Function1").memberOf', "ns1.ns2", 'Constructor of nested namespace memberOf is found.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/functions_nested.js"]});
-
- is('symbols.getSymbol("Zop").name', "Zop", 'Any constructor name is found.');
- is('symbols.getSymbol("Zop").isa', "CONSTRUCTOR", 'It isa constructor.');
- is('symbols.getSymbol("Zop").hasMethod("zap")', true, 'Its method name, set later, is in methods array.');
- is('symbols.getSymbol("Foo").name', "Foo", 'The containing constructor name is found.');
- is('symbols.getSymbol("Foo").hasMethod("methodOne")', true, 'Its method name is found.');
- is('symbols.getSymbol("Foo").hasMethod("methodTwo")', true, 'Its second method name is found.');
- is('symbols.getSymbol("Foo#methodOne").alias', "Foo#methodOne", 'A methods alias is found.');
- is('symbols.getSymbol("Foo#methodOne").isStatic', false, 'A methods is not static.');
- is('symbols.getSymbol("Bar").name', "Bar", 'A global function declared inside another function is found.');
- is('symbols.getSymbol("Bar").isa', "FUNCTION", 'It isa function.');
- is('symbols.getSymbol("Bar").memberOf', "_global_", 'It is global.');
- is('symbols.getSymbol("Foo-inner").name', "inner", 'An inner functions name is found.');
- is('symbols.getSymbol("Foo-inner").memberOf', "Foo", 'It is member of the outer function.');
- is('symbols.getSymbol("Foo-inner").isInner', true, 'It is an inner function.');
- }
- ,
- function() {
- symbolize({a:true, _: [SYS.pwd+"test/memberof_constructor.js"]});
-
- is('symbols.getSymbol("Circle#Tangent").name', "Tangent", 'Constructor set on prototype using @member has correct name.');
- is('symbols.getSymbol("Circle#Tangent").memberOf', "Circle", 'Constructor set on prototype using @member has correct memberOf.');
- is('symbols.getSymbol("Circle#Tangent").alias', "Circle#Tangent", 'Constructor set on prototype using @member has correct alias.');
- is('symbols.getSymbol("Circle#Tangent").isa', "CONSTRUCTOR", 'Constructor set on prototype using @member has correct isa.');
- is('symbols.getSymbol("Circle#Tangent").isStatic', false, 'Constructor set on prototype using @member is not static.');
- is('symbols.getSymbol("Circle#Tangent#getDiameter").name', "getDiameter", 'Method set on prototype using @member has correct name.');
- is('symbols.getSymbol("Circle#Tangent#getDiameter").memberOf', "Circle#Tangent", 'Method set on prototype using @member has correct memberOf.');
- is('symbols.getSymbol("Circle#Tangent#getDiameter").alias', "Circle#Tangent#getDiameter", 'Method set on prototype using @member has correct alias.');
- is('symbols.getSymbol("Circle#Tangent#getDiameter").isa', "FUNCTION", 'Method set on prototype using @member has correct isa.');
- is('symbols.getSymbol("Circle#Tangent#getDiameter").isStatic', false, 'Method set on prototype using @member is not static.');
- }
- ,
- function() {
- symbolize({a:true, p: true, _: [SYS.pwd+"test/memberof.js"]});
-
- is('symbols.getSymbol("pack.install").alias', "pack.install", 'Using @memberOf sets alias, when parent name is in memberOf tag.');
- is('symbols.getSymbol("pack.install.overwrite").name', "install.overwrite", 'Using @memberOf sets name, even if the name is dotted.');
- is('symbols.getSymbol("pack.install.overwrite").memberOf', "pack", 'Using @memberOf sets memberOf.');
- is('symbols.getSymbol("pack.install.overwrite").isStatic', true, 'Using @memberOf with value not ending in octothorp sets isStatic to true.');
- }
- ,
- function() {
- symbolize({a:true, p: true, _: [SYS.pwd+"test/memberof2.js"]});
-
- is('symbols.getSymbol("Foo#bar").alias', "Foo#bar", 'An inner function can be documented as an instance method.');
- is('symbols.getSymbol("Foo.zip").alias', "Foo.zip", 'An inner function can be documented as a static method.');
- is('symbols.getSymbol("Foo.Fiz").alias', "Foo.Fiz", 'An inner function can be documented as a static constructor.');
- is('symbols.getSymbol("Foo.Fiz#fipple").alias', "Foo.Fiz#fipple", 'An inner function can be documented as a static constructor with a method.');
- is('symbols.getSymbol("Foo#blat").alias', "Foo#blat", 'An global function can be documented as an instance method.');
- }
- ,
- function() {
- symbolize({a:true, p: true, _: [SYS.pwd+"test/memberof3.js"]});
-
- is('symbols.getSymbol("Foo#bar").alias', "Foo#bar", 'A virtual field can be documented as an instance method.');
- is('symbols.getSymbol("Foo2#bar").alias', "Foo2#bar", 'A virtual field with the same name can be documented as an instance method.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/borrows.js"]});
-
- is('symbols.getSymbol("Layout").name', "Layout", 'Constructor can be found.');
- is('symbols.getSymbol("Layout").hasMethod("init")', true, 'Constructor method name can be found.');
- is('symbols.getSymbol("Layout").hasMember("orientation")', true, 'Constructor property name can be found.');
-
- is('symbols.getSymbol("Page").hasMethod("reset")', true, 'Second constructor method name can be found.');
- is('symbols.getSymbol("Page").hasMember("orientation")', true, 'Second constructor borrowed property name can be found in properties.');
- is('symbols.getSymbol("Page#orientation").memberOf', "Page", 'Second constructor borrowed property memberOf can be found.');
- is('symbols.getSymbol("Page-getInnerElements").alias', "Page-getInnerElements", 'Can borrow an inner function and it is still inner.');
- is('symbols.getSymbol("Page.units").alias', "Page.units", 'Can borrow a static function and it is still static.');
-
- is('symbols.getSymbol("ThreeColumnPage#init").alias', "ThreeColumnPage#init", 'Third constructor method can be found even though method with same name is borrowed.');
- is('symbols.getSymbol("ThreeColumnPage#reset").alias', "ThreeColumnPage#reset", 'Borrowed method can be found.');
- is('symbols.getSymbol("ThreeColumnPage#orientation").alias', "ThreeColumnPage#orientation", 'Twice borrowed method can be found.');
-
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/borrows2.js"]});
-
- is('symbols.getSymbol("Foo").hasMethod("my_zop")', true, 'Borrowed method can be found.');
- is('symbols.getSymbol("Bar").hasMethod("my_zip")', true, 'Second borrowed method can be found.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/constructs.js"]});
-
- is('symbols.getSymbol("Person").hasMethod("say")', true, 'The constructs tag creates a class that lends can add a method to.');
- }
- ,
- function() {
- symbolize({a: true, _: [SYS.pwd+"test/augments.js", SYS.pwd+"test/augments2.js"]});
-
- is('symbols.getSymbol("Page").augments[0]', "Layout", 'An augmented class can be found.');
- is('symbols.getSymbol("Page#reset").alias', "Page#reset", 'Method of augmenter can be found.');
- is('symbols.getSymbol("Page").hasMethod("Layout#init")', true, 'Method from augmented can be found.');
- is('symbols.getSymbol("Page").hasMember("Layout#orientation")', true, 'Property from augmented can be found.');
- is('symbols.getSymbol("Page").methods.length', 3, 'Methods of augmented class are included in methods array.');
-
- is('symbols.getSymbol("ThreeColumnPage").augments[0]', "Page", 'The extends tag is a synonym for augments.');
- is('symbols.getSymbol("ThreeColumnPage").hasMethod("ThreeColumnPage#init")', true, 'Local method overrides augmented method of same name.');
- is('symbols.getSymbol("ThreeColumnPage").methods.length', 3, 'Local method count is right.');
-
- is('symbols.getSymbol("NewsletterPage").augments[0]', "ThreeColumnPage", 'Can augment across file boundaries.');
- is('symbols.getSymbol("NewsletterPage").augments.length', 2, 'Multiple augments are supported.');
- is('symbols.getSymbol("NewsletterPage").inherits[0].alias', "Junkmail#annoy", 'Inherited method with augments.');
- is('symbols.getSymbol("NewsletterPage").methods.length', 6, 'Methods of augmented class are included in methods array across files.');
- is('symbols.getSymbol("NewsletterPage").properties.length', 1, 'Properties of augmented class are included in properties array across files.');
- }
- ,
- function() {
- symbolize({a:true, _: [SYS.pwd+"test/static_this.js"]});
-
- is('symbols.getSymbol("box.holder").name', "holder", 'Static namespace name can be found.');
- is('symbols.getSymbol("box.holder.foo").name', "foo", 'Static namespace method name can be found.');
- is('symbols.getSymbol("box.holder").isStatic', true, 'Static namespace method is static.');
-
- is('symbols.getSymbol("box.holder.counter").name', "counter", 'Instance namespace property name set on "this" can be found.');
- is('symbols.getSymbol("box.holder.counter").alias', "box.holder.counter", 'Instance namespace property alias set on "this" can be found.');
- is('symbols.getSymbol("box.holder.counter").memberOf', "box.holder", 'Static namespace property memberOf set on "this" can be found.');
- }
- ,
- function() {
- symbolize({a:true, p: true, _: [SYS.pwd+"test/lend.js"]});
-
- is('symbols.getSymbol("Person").name', "Person", 'Class defined in lend comment is found.');
- is('symbols.getSymbol("Person").hasMethod("initialize")', true, 'Lent instance method name can be found.');
- is('symbols.getSymbol("Person").hasMethod("say")', true, 'Second instance method can be found.');
- is('symbols.getSymbol("Person#sing").isStatic', false, 'Instance method is known to be not static.');
-
- is('symbols.getSymbol("Person.getCount").name', "getCount", 'Static method name from second lend comment can be found.');
- is('symbols.getSymbol("Person.getCount").isStatic', true, 'Static method from second lend comment is known to be static.');
-
- is('LOG.warnings.filter(function($){if($.indexOf("notok") > -1) return $}).length', 1, 'A warning is emitted when lending to an undocumented parent.');
- }
- ,
- function() {
- symbolize({a:true, _: [SYS.pwd+"test/param_inline.js"]});
-
- is('symbols.getSymbol("Layout").params[0].type', "int", 'Inline param name is set.');
- is('symbols.getSymbol("Layout").params[0].desc', "The number of columns.", 'Inline param desc is set from comment.');
- is('symbols.getSymbol("Layout#getElement").params[0].name', "id", 'User defined param documentation takes precedence over parser defined.');
- is('symbols.getSymbol("Layout#getElement").params[0].isOptional', true, 'Default for param is to not be optional.');
- is('symbols.getSymbol("Layout#getElement").params[1].isOptional', false, 'Can mark a param as being optional.');
- is('symbols.getSymbol("Layout#getElement").params[1].type', "number|string", 'Type of inline param doc can have multiple values.');
- is('symbols.getSymbol("Layout#Canvas").params[0].type', "", 'Type can be not defined for some params.');
- is('symbols.getSymbol("Layout#Canvas").params[2].type', "int", 'Type can be defined inline for only some params.');
- is('symbols.getSymbol("Layout#rotate").params.length', 0, 'Docomments inside function sig is ignored without a param.');
- is('symbols.getSymbol("Layout#init").params[2].type', "zoppler", 'Doc comment type overrides inline type for param with same name.');
- }
- ,
- function() {
- symbolize({a: true, _: [SYS.pwd+"test/shared.js", SYS.pwd+"test/shared2.js"]});
-
- is('symbols.getSymbol("Array#some").name', 'some', 'The name of a symbol in a shared section is found.');
- is('symbols.getSymbol("Array#some").alias', 'Array#some', 'The alias of a symbol in a shared section is found.');
- is('symbols.getSymbol("Array#some").desc', "Extension to builtin array.", 'A description can be shared.');
- is('symbols.getSymbol("Array#filter").desc', "Extension to builtin array.\nChange every element of an array.", 'A shared description is appended.');
- is('symbols.getSymbol("Queue").desc', "A first in, first out data structure.", 'A description is not shared when outside a shared section.');
- is('symbols.getSymbol("Queue.rewind").alias', "Queue.rewind", 'Second shared tag can be started.');
- is('symbols.getSymbol("startOver").alias', "startOver", 'Shared tag doesnt cross over files.');
- }
- ,
- function() {
- symbolize({a: true, _: [SYS.pwd+"test/config.js"]});
- is('symbols.getSymbol("Contact").params[0].name', 'person', 'The name of a param is found.');
- is('symbols.getSymbol("Contact").params[1].name', 'person.name', 'The name of a param set with a dot name is found.');
- is('symbols.getSymbol("Contact").params[2].name', 'person.age', 'The name of a second param set with a dot name is found.');
- is('symbols.getSymbol("Contact").params[4].name', 'connection', 'The name of a param after config is found.');
-
- is('symbols.getSymbol("Family").params[0].name', 'persons', 'Another name of a param is found.');
- is('symbols.getSymbol("Family").params[1].name', 'persons.Father', 'The name of a param+config is found.');
- is('symbols.getSymbol("Family").params[2].name', 'persons.Mother', 'The name of a second param+config is found.');
- is('symbols.getSymbol("Family").params[3].name', 'persons.Children', 'The name of a third param+config is found.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/ignore.js"]});
- is('LOG.warnings.filter(function($){if($.indexOf("undocumented symbol Ignored") > -1) return $}).length', 1, 'A warning is emitted when documenting members of an ignored parent.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/functions_anon.js"]});
- is('symbols.getSymbol("a.b").alias', 'a.b', 'In anonymous constructor this is found to be the container object.');
- is('symbols.getSymbol("a.f").alias', 'a.f', 'In anonymous constructor this can have a method.');
- is('symbols.getSymbol("a.c").alias', 'a.c', 'In anonymous constructor method this is found to be the container object.');
- is('symbols.getSymbol("g").alias', 'g', 'In anonymous function executed inline this is the global.');
- is('symbols.getSymbol("bar2.p").alias', 'bar2.p', 'In named constructor executed inline this is the container object.');
- is('symbols.getSymbol("module.pub").alias', 'module.pub', 'In parenthesized anonymous function executed inline function scoped variables arent documented.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/oblit_anon.js"]});
- is('symbols.getSymbol("opt").name', 'opt', 'Anonymous object properties are created.');
- is('symbols.getSymbol("opt.conf.keep").alias', 'opt.conf.keep', 'Anonymous object first property is assigned to $anonymous.');
- is('symbols.getSymbol("opt.conf.base").alias', 'opt.conf.base', 'Anonymous object second property is assigned to $anonymous.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/params_optional.js"]});
- is('symbols.getSymbol("Document").params.length', 3, 'Correct number of params are found when optional param syntax is used.');
- is('symbols.getSymbol("Document").params[1].name', "id", 'Name of optional param is found.');
- is('symbols.getSymbol("Document").params[1].isOptional', true, 'Optional param is marked isOptional.');
- is('symbols.getSymbol("Document").params[2].name', "title", 'Name of optional param with default value is found.');
- is('symbols.getSymbol("Document").params[2].isOptional', true, 'Optional param with default value is marked isOptional.');
- is('symbols.getSymbol("Document").params[2].defaultValue', " This is untitled.", 'Optional param default value is found.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/synonyms.js"]});
- is('symbols.getSymbol("myObject.myFunc").type', 'function', 'Type can be set to function.');
- }
- ,
- function() {
- symbolize({a:true, p:true, _: [SYS.pwd+"test/event.js"]});
- is('symbols.getSymbol("Kitchen#event:cakeEaten").isEvent', true, 'Function with event prefix is an event.');
- is('symbols.getSymbol("Kitchen#cakeEaten").isa', "FUNCTION", 'Function with same name as event isa function.');
- }
- ,
- function() {
- symbolize({x:"js", a:true, _: [SYS.pwd+"test/scripts/"]});
- is('JSDOC.JsDoc.srcFiles.length', 1, 'Only js files are scanned when -x=js.');
- }
- ,
- function() {
- symbolize({x:"js", a:true, _: [SYS.pwd+"test/exports.js"]});
- is('symbols.getSymbol("mxn.Map#doThings").name', 'doThings', 'Exports creates a documentation alias that can have methods.');
- }
- ,
- function() {
- symbolize({p:true, a:true, _: [SYS.pwd+"test/module.js"]});
- is('symbols.getSymbol("myProject.myModule.myPublicMethod").name', 'myPublicMethod', 'A function wrapped in parens can be recognized.');
- is('symbols.getSymbol("myProject.myModule-myPrivateMethod").name', 'myPrivateMethod', 'A private method in the scope of a function wrapped in parens can be recognized.');
- is('symbols.getSymbol("myProject.myModule-myPrivateVar").name', 'myPrivateVar', 'A private member in the scope of a function wrapped in parens can be recognized.');
- }
-];
-
-//// run and print results
-print(testrun(testCases));
--- a/sbin/res/jsdoc/app/test/addon.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-String.prototype.reverse = function() {
-}
-
-String.prototype.reverse.utf8 = function() {
-}
-
-Function.count = function() {
-}
-
-/** @memberOf Function */
-Function.count.reset = function() {
-}
-
-/** @memberOf Function */
-count.getValue = function() {
-}
-
-/** @memberOf Function.prototype */
-getSig = function() {
-}
-
-/** @memberOf Function.prototype */
-Function.prototype.getProps = function() {
-}
--- a/sbin/res/jsdoc/app/test/anon_inner.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-/**
- * @name bar
- * @namespace
- */
-
-new function() {
- /**
- * @name bar-foo
- * @function
- * @param {number} x
- */
- function foo(x) {
- }
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/augments.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/**
-@constructor
-*/
-function Layout(p) {
- this.init = function(p) {
- }
-
- this.getId = function() {
- }
-
- /** @type Page */
- this.orientation = "landscape";
-}
-
-/**
-@constructor
-@augments Layout
-*/
-function Page() {
- this.reset = function(b) {
- }
-}
-
-/**
-@extends Page
-@constructor
-*/
-function ThreeColumnPage() {
- this.init = function(resetCode) {
- }
-}
--- a/sbin/res/jsdoc/app/test/augments2.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/**
-@constructor
-*/
-function LibraryItem() {
- this.reserve = function() {
- }
-}
-
-/**
-@constructor
-*/
-function Junkmail() {
- this.annoy = function() {
- }
-}
-
-/**
-@inherits Junkmail.prototype.annoy as pester
-@augments ThreeColumnPage
-@augments LibraryItem
-@constructor
-*/
-function NewsletterPage() {
- this.getHeadline = function() {
- }
-}
--- a/sbin/res/jsdoc/app/test/borrows.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/**
-@constructor
-*/
-function Layout(p) {
- /** initilize 1 */
- this.init = function(p) {
- }
-
- /** get the id */
- this.getId = function() {
- }
-
- /** @type string */
- this.orientation = "landscape";
-
- function getInnerElements(elementSecretId){
- }
-}
-
-/** A static method. */
-Layout.units = function() {
-}
-
-/**
-@constructor
-@borrows Layout#orientation
-@borrows Layout-getInnerElements
-@borrows Layout.units
-*/
-function Page() {
- /** reset the page */
- this.reset = function(b) {
- }
-}
-
-/**
-@constructor
-@borrows Layout.prototype.orientation as this.orientation
-@borrows Layout.prototype.init as #init
-@inherits Page.prototype.reset as #reset
-*/
-function ThreeColumnPage() {
- /** initilize 2 */
- this.init = function(p) {
- }
-}
--- a/sbin/res/jsdoc/app/test/borrows2.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-// testing circular borrows
-
-/**
- @class
- @borrows Bar#zop as this.my_zop
-*/
-function Foo() {
- /** this is a zip. */
- this.zip = function() {}
-
- this.my_zop = new Bar().zop;
-}
-
-/**
- @class
- @borrows Foo#zip as this.my_zip
-*/
-function Bar() {
- /** this is a zop. */
- this.zop = function() {}
-
- this.my_zip = new Foo().zip;
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/config.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/**
- * @constructor
- * @param person The person.
- * @param {string} person.name The person's name.
- * @config {integer} age The person's age.
- * @config [id=1] Optional id number to use.
- * @param connection
- */
-function Contact(person, connection) {
-
-}
-
-/**
- * @constructor
- * @param persons
- * @config {string} Father The paternal person.
- * @config {string} Mother The maternal person.
- * @config {string[]} Children And the rest.
- */
-function Family(/**Object*/persons) {
-
-}
--- a/sbin/res/jsdoc/app/test/constructs.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-var Person = makeClass(
- /**
- @scope Person
- */
- {
- /**
- This is just another way to define a constructor.
- @constructs
- @param {string} name The name of the person.
- */
- initialize: function(name) {
- this.name = name;
- },
- say: function(message) {
- return this.name + " says: " + message;
- }
- }
-);
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/encoding.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-
-/**
- * @Constructor
- * @desc 配置文件
- * @class 什么也不返回
- */
-function Test(conf) {
- // do something;
-}
-
--- a/sbin/res/jsdoc/app/test/encoding_other.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-
-/**
- * @Constructor
- * @desc
- * @class
- */
-function Test(conf) {
- // do something;
-}
-
-// run with commanline option -e=iso-8859-5
-
--- a/sbin/res/jsdoc/app/test/event.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/**
- * @name Kitchen
- * @constructor
- * @fires Bakery#event:donutOrdered
- */
-
-/**
- * Fired when some cake is eaten.
- * @name Kitchen#event:cakeEaten
- * @function
- * @param {Number} pieces The number of pieces eaten.
- */
-
-/**
- * Find out if cake was eaten.
- * @name Kitchen#cakeEaten
- * @function
- * @param {Boolean} wasEaten
- */
-
-/**
- * @name getDesert
- * @function
- * @fires Kitchen#event:cakeEaten
- */
-
-/**
- * @name Bakery
- * @constructor
- * @extends Kitchen
- */
-
-/**
- * Fired when a donut order is made.
- * @name Bakery#event:donutOrdered
- * @event
- * @param {Event} e The event object.
- * @param {String} [e.topping] Optional sprinkles.
- */
-
-/**
- * @constructor
- * @borrows Bakery#event:donutOrdered as this.event:cakeOrdered
- */
-function CakeShop() {
-}
-
-/** @event */
-CakeShop.prototype.icingReady = function(isPink) {
-}
-
-/** @event */
-function amHungry(/**Boolean*/enoughToEatAHorse) {
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/exports.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-/** @namespace */
-var mxn = {};
-
-(function(){
- /** @exports Map as mxn.Map */
- var Map =
- /** @constructor */
- mxn.Map = function() {
- };
-
- /** A method. */
- Map.prototype.doThings = function() {
- };
-})();
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/functions_anon.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/** an anonymous constructor executed inline */
-a = new function() {
- /** a.b*/
- this.b = 1;
- /** a.f */
- this.f = function() {
- /** a.c */
- this.c = 2;
- }
-}
-
-
-/**
- named function executed inline
-*/
-bar1 = function Zoola1() {
- /** property of global */
- this.g = 1;
-}();
-
-/**
- named constructor executed inline
-*/
-bar2 = new function Zoola2() {
- /** property of bar */
- this.p = 1;
-};
-
-/** module pattern */
-module = (function () {
- /** won't appear in documentation */
- var priv = 1;
-
- /** @scope module */
- return {
- /** will appear as a property of module */
- pub: 1
- }
-})();
--- a/sbin/res/jsdoc/app/test/functions_nested.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/** @constructor */
-function Zop() {
-}
-
-/**
- @class
-*/
-Foo = function(id) {
- // this is a bit twisted, but if you call Foo() you will then
- // modify Foo(). This is kinda, sorta non-insane, because you
- // would have to call Foo() 100% of the time to use Foo's methods
- Foo.prototype.methodOne = function(bar) {
- alert(bar);
- };
-
- // same again
- Foo.prototype.methodTwo = function(bar2) {
- alert(bar2);
- };
-
- // and these are only executed if the enclosing function is actually called
- // and who knows if that will ever happen?
- Bar = function(pez) {
- alert(pez);
- };
- Zop.prototype.zap = function(p){
- alert(p);
- };
-
- // but this is only visible inside Foo
- function inner() {
- }
-};
--- a/sbin/res/jsdoc/app/test/global.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-/** ecks */
-var x = [1, 2, 4];
-
-var y = {
- foo: function(){
- }
-}
-
-bar = function() {
-}
-
-function zop() {
-}
--- a/sbin/res/jsdoc/app/test/globals.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-function example(/**Circle*/a, b) {
- /** a global defined in function */
- var number = a;
-
- var hideNumber = function(){
- }
-
- setNumber = function(){
- }
- alert('You have chosen: ' + b);
-}
-
-function initPage() {
- var supported = document.createElement && document.getElementsByTagName;
- if (!supported) return;
- // start of DOM script
- var x = document.getElementById('writeroot');
- // etc.
-}
-
-/** an example var */
-var document = new Document(x, y);
-
-var getNumber = function(){
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/ignore.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-/**
- * A test constructor.
- * @constructor
- * @ignore
- */
-function Ignored() {
- /** a method */
- this.bar = function() {
- }
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/inner.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-/**
- * @constructor
- */
-function Outer() {
- /**
- * @constructor
- */
- function Inner(name) {
- /** The name of this. */
- this.name = name;
- }
-
- this.open = function(name) {
- return (new Inner(name));
- }
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/jsdoc_test.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,477 +0,0 @@
-/**
- * @fileoverview This file is to be used for testing the JSDoc parser
- * It is not intended to be an example of good JavaScript OO-programming,
- * nor is it intended to fulfill any specific purpose apart from
- * demonstrating the functionality of the
- * <a href='http://sourceforge.net/projects/jsdoc'>JSDoc</a> parser
- *
- * @author Gabriel Reid gab_reid@users.sourceforge.net
- * @version 0.1
- */
-
-
-/**
- * Construct a new Shape object.
- * @class This is the basic Shape class.
- * It can be considered an abstract class, even though no such thing
- * really existing in JavaScript
- * @constructor
- * @throws MemoryException if there is no more memory
- * @throws GeneralShapeException rarely (if ever)
- * @return {Shape|Coordinate} A new shape.
- */
-function Shape(){
-
- /**
- * This is an example of a function that is not given as a property
- * of a prototype, but instead it is assigned within a constructor.
- * For inner functions like this to be picked up by the parser, the
- * function that acts as a constructor <b>must</b> be denoted with
- * the <b>@constructor</b> tag in its comment.
- * @type String
- */
- this.getClassName = function(){
- return "Shape";
- }
-
- /**
- * This is an inner method, just used here as an example
- * @since version 0.5
- * @author Sue Smart
- */
- function addReference(){
- // Do nothing...
- }
-
-}
-
-/**
- * Create a new Hexagon instance.
- * @extends Shape
- * @class Hexagon is a class that is a <i>logical</i> sublcass of
- * {@link Shape} (thanks to the <code>@extends</code> tag), but in
- * reality it is completely unrelated to Shape.
- * @param {int} sideLength The length of one side for the new Hexagon
- * @example
- * var h = new Hexagon(2);
- * @example
- * if (hasHex) {
- * hex = new Hexagon(5);
- * color = hex.getColor();
- * }
- */
-function Hexagon(sideLength) {
-}
-
-
-/**
- * This is an unattached (static) function that adds two integers together.
- * @param {int} One The first number to add
- * @param {int} Two The second number to add
- * @author Gabriel Reid
- * @deprecated So you shouldn't use it anymore! Use {@link Shape#getClassName} instead.
- */
-function Add(One, Two){
- return One + Two;
-}
-
-
-/**
- * The color of this shape
- * @type Color
- */
-Shape.prototype.color = null;
-
-/**
- * The border of this shape.
- * @field
- * @type int
- */
-Shape.prototype.border = function(){return border;};
-
-/*
- * These are all the instance method implementations for Shape
- */
-
-/**
- * Get the coordinates of this shape. It is assumed that we're always talking
- * about shapes in a 2D location here.
- * @requires The {@link Shape} class
- * @returns A Coordinate object representing the location of this Shape
- * @type Coordinate[]
- */
-Shape.prototype.getCoords = function(){
- return this.coords;
-}
-
-/**
- * Get the color of this shape.
- * @see #setColor
- * @see The <a href="http://example.com">Color</a> library.
- * @link Shape
- * @type Color
- */
-Shape.prototype.getColor = function(){
- return this.color;
-}
-
-/**
- * Set the coordinates for this Shape
- * @param {Coordinate} coordinates The coordinates to set for this Shape
- */
-Shape.prototype.setCoords = function(coordinates){
- this.coords = coordinates;
-}
-
-/**
- * Set the color for this Shape
- * @param {Color} color The color to set for this Shape
- * @param other There is no other param, but it can still be documented if
- * optional parameters are used
- * @throws NonExistantColorException (no, not really!)
- * @see #getColor
- */
-Shape.prototype.setColor = function(color){
- this.color = color;
-}
-
-/**
- * Clone this shape
- * @returns A copy of this shape
- * @type Shape
- * @author Gabriel Reid
- */
-Shape.prototype.clone = function(){
- return new Shape();
-}
-
-/**
- * Create a new Rectangle instance.
- * @class A basic rectangle class, inherits from Shape.
- * This class could be considered a concrete implementation class
- * @constructor
- * @param {int} width The optional width for this Rectangle
- * @param {int} height Thie optional height for this Rectangle
- * @author Gabriel Reid
- * @see Shape is the base class for this
- * @augments Shape
- * @hilited
- */
-function Rectangle(width, // This is the width
- height // This is the height
- ){
- if (width){
- this.width = width;
- if (height){
- this.height = height;
- }
- }
-}
-
-
-/* Inherit from Shape */
-Rectangle.prototype = new Shape();
-
-/**
- * Value to represent the width of the Rectangle.
- * <br>Text in <b>bold</b> and <i>italic</i> and a
- * link to <a href="http://sf.net">SourceForge</a>
- * @private
- * @type int
- */
-Rectangle.prototype.width = 0;
-
-/**
- * Value to represent the height of the Rectangle
- * @private
- * @type int
- */
-Rectangle.prototype.height = 0;
-
-/**
- * Get the type of this object.
- * @type String
- */
-Rectangle.prototype.getClassName= function(){
- return "Rectangle";
-}
-
-/**
- * Get the value of the width for the Rectangle
- * @type int
- * @see Rectangle#setWidth
- */
-Rectangle.prototype.getWidth = function(){
- return this.width;
-}
-
-/**
- * Get the value of the height for the Rectangle.
- * Another getter is the {@link Shape#getColor} method in the
- * {@link Shape} base class.
- * @return The height of this Rectangle
- * @type int
- * @see Rectangle#setHeight
- */
-Rectangle.prototype.getHeight = function(){
- return this.height;
-}
-
-/**
- * Set the width value for this Rectangle.
- * @param {int} width The width value to be set
- * @see #setWidth
- */
-Rectangle.prototype.setWidth = function(width){
- this.width = width;
-}
-
-/**
- * Set the height value for this Rectangle.
- * @param {int} height The height value to be set
- * @see #getHeight
- */
-Rectangle.prototype.setHeight = function(height){
- this.height = height;
-}
-
-/**
- * Get the value for the total area of this Rectangle
- * @return total area of this Rectangle
- * @type int
- */
-Rectangle.prototype.getArea = function(){
- return width * height;
-}
-
-
-/**
- * Create a new Square instance.
- * @class A Square is a subclass of {@link Rectangle}
- * @param {int} width The optional width for this Rectangle
- * @param {int} height The optional height for this Rectangle
- * @augments Rectangle
- */
-function Square(width, height){
- if (width){
- this.width = width;
- if (height){
- this.height = height;
- }
- }
-
-}
-
-/* Square is a subclass of Rectangle */
-Square.prototype = new Rectangle();
-
-/**
- * Set the width value for this Shape.
- * @param {int} width The width value to be set
- * @see #getWidth
- */
-Square.prototype.setWidth = function(width){
- this.width = this.height = width;
-}
-
-/**
- * Set the height value for this Shape
- * Sets the {@link Rectangle#height} attribute in the Rectangle.
- * @param {int} height The height value to be set
- */
-Square.prototype.setHeight = function(height){
- this.height = this.width = height;
-}
-
-
-/**
- * Create a new Circle instance based on a radius.
- * @class Circle class is another subclass of Shape
- * @extends Shape
- * @param {int} radius The optional radius of this {@link Circle }
- * @mixin Square.prototype.setWidth as this.setDiameter
- */
-function Circle(radius){
- if (radius) {
- /** The radius of the this Circle. */
- this.radius = radius;
- }
-}
-
-/* Circle inherits from {@link Shape} */
-Circle.prototype = new Shape();
-
-/**
- * The radius value for this Circle
- * @private
- * @type int
- */
-Circle.prototype.radius = 0;
-
-/**
- * A very simple class (static) field that is also a constant
- * @final
- * @type float
- */
-Circle.PI = 3.14;
-
-/**
- * Get the radius value for this Circle
- * @type int
- * @see #setRadius
- */
-Circle.prototype.getRadius = function(){
- return this.radius;
-}
-
-/**
- * Set the radius value for this Circle
- * @param {int} radius The {@link Circle#radius} value to set
- * @see #getRadius
- */
-Circle.prototype.setRadius = function(radius){
- this.radius = radius;
-}
-
-/**
- * An example of a class (static) method that acts as a factory for Circle
- * objects. Given a radius value, this method creates a new Circle.
- * @param {int} radius The radius value to use for the new Circle.
- * @type Circle
- */
-Circle.createCircle = function(radius){
- return new Circle(radius);
-}
-
-
-/**
- * Create a new Coordinate instance based on x and y grid data.
- * @class Coordinate is a class that can encapsulate location information.
- * @param {int} [x=0] The optional x portion of the Coordinate
- * @param {int} [y=0] The optinal y portion of the Coordinate
- */
-function Coordinate(x, y){
- if (x){
- this.x = x;
- if (y){
- this.y = y;
- }
- }
-}
-
-/**
- * The x portion of the Coordinate
- * @type int
- * @see #getX
- * @see #setX
- */
-Coordinate.prototype.x = 0;
-
-/**
- * The y portion of the Coordinate
- * @type int
- * @see #getY
- * @see #setY
- */
-Coordinate.prototype.y = 0;
-
-/**
- * Gets the x portion of the Coordinate.
- * @type int
- * @see #setX
- */
-Coordinate.prototype.getX = function(){
- return this.x;
-}
-
-/**
- * Get the y portion of the Coordinate.
- * @type int
- * @see #setY
- */
-Coordinate.prototype.getY = function(){
- return this.y;
-}
-
-/**
- * Sets the x portion of the Coordinate.
- * @param {int} x The x value to set
- * @see #getX
- */
-Coordinate.prototype.setX = function(x){
- this.x = x;
-}
-
-/**
- * Sets the y portion of the Coordinate.
- * @param {int} y The y value to set
- * @see #getY
- */
-Coordinate.prototype.setY = function(y){
- this.y = y;
-}
-
-/**
- * @class This class exists to demonstrate the assignment of a class prototype
- * as an anonymous block.
- */
-function ShapeFactory(){
-}
-
-ShapeFactory.prototype = {
- /**
- * Creates a new {@link Shape} instance.
- * @return A new {@link Shape}
- * @type Shape
- */
- createShape: function(){
- return new Shape();
- }
-}
-
-/**
- * An example of a singleton class
- * @param ... Arguments represent {@link coordinate}s in the shape.
- * @constructor
- */
-MySingletonShapeFactory = function(){
-
- /**
- * Get the next {@link Shape}
- * @type Shape
- * @return A new {@link Shape}
- */
- this.getShape = function(){
- return null;
- }
-
-}
-
-
-/**
- * Create a new Foo instance.
- * @class This is the Foo class. It exists to demonstrate 'nested' classes.
- * @constructor
- * @see Foo.Bar
- */
-function Foo(){}
-
-/**
- * Creates a new instance of Bar.
- * @class This class exists to demonstrate 'nested' classes.
- * @constructor
- * @see Foo.Bar
- */
-function Bar(){}
-
-/**
- * Nested class
- * @constructor
- */
-Foo.Bar = function(){
- /** The x. */ this.x = 2;
-}
-
-Foo.Bar.prototype = new Bar();
-/** The y. */
-Foo.Bar.prototype.y = '3';
--- a/sbin/res/jsdoc/app/test/lend.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
- /** @class */
-var Person = Class.create(
- /**
- @lends Person.prototype
- */
- {
- initialize: function(name) {
- this.name = name;
- },
- say: function(message) {
- return this.name + ': ' + message;
- }
- }
- );
-
-/** @lends Person.prototype */
-{
- /** like say but more musical */
- sing: function(song) {
- }
-}
-
-/** @lends Person */
-{
- getCount: function() {
- }
-}
-
-/** @lends Unknown.prototype */
-{
- notok: function() {
- }
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/memberof.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/** @constructor */
-pack = function() {
- this.init = function(){}
- function config(){}
-}
-
- pack.build = function(task) {};
-
-/** @memberOf pack */
-pack.install = function() {}
-
-/** @memberOf pack */
-pack.install.overwrite = function() {}
-
-/** @memberOf pack */
-clean = function() {}
-
-/** @memberOf pack-config */
-install = function() {};
--- a/sbin/res/jsdoc/app/test/memberof2.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/**
- * @constructor
- */
-function Foo() {
- /**
- @memberOf Foo.prototype
- */
- function bar(a, b) {
- }
-
- /**
- @memberOf Foo
- */
- var zip = function(p, q) {
- }
-
- /**
- @memberOf Foo
- */
- function zop( x,y ) {
- }
-
- /**
- @memberOf Foo
- @constructor
- */
- function Fiz() {
- /** A method of Foo#Fiz. */
- this.fipple = function(fop){}
- }
-}
-
-/**
- @memberOf Foo#
- */
-var blat = function() {
-
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/memberof3.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/**
-* @name Foo
-* @class
-*/
-
-/**#@+
-* @memberOf Foo#
-* @field
-*/
-
-/**
-* @name bar
-* @type Object[]
-*/
-
-/**#@-*/
-
-/**
-* @name Foo2
-* @class
-*/
-
-/**#@+
-* @memberOf Foo2#
-* @field
-*/
-
-/**
-* @name bar
-* @type Object[]
-*/
-
-/**#@-*/
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/memberof_constructor.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-/** @constructor */
-function Circle(){}
-
-/**
- @constructor
- @memberOf Circle#
- */
-Circle.prototype.Tangent = function(){};
-
-// renaming Circle#Tangent to Circle#Circle#Tangent
-
-/**
- @memberOf Circle#Tangent#
- */
-Circle.prototype.Tangent.prototype.getDiameter = function(){};
-
-
--- a/sbin/res/jsdoc/app/test/module.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-/** @namespace */
-myProject = myProject || {};
-
-/** @namespace */
-myProject.myModule = (function () {
- /** describe myPrivateVar here */
- var myPrivateVar = "";
-
- var myPrivateMethod = function () {
- }
-
- /** @scope myProject.myModule */
- return {
- myPublicMethod: function () {
- }
- };
-})();
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/multi_methods.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-
-/**
- Get the entire flavor.
- @name flavor^3
- @function
- @returns {Object} The entire flavor hash.
-*/
-/**
- Get a named flavor.
- @name flavor^2
- @function
- @param {String} name The name of the flavor to get.
- @returns {String} The value of that flavor.
-*/
-/**
- Set the flavor.
- @param {String} name The name of the flavor to set.
- @param {String} value The value of the flavor.
- @returns {String} The value of that flavor.
-*/
-function flavor(name, value) {
- if (arguments.length > 1) flavor[name] = value;
- else if (arguments.length == 1) return flavor[name];
- else return flavor;
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/name.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/**
- @name Response
- @class
-*/
-
-Response.prototype = {
- /**
- @name Response#text
- @function
- @description
- Gets the body of the response as plain text
- @returns {String}
- Response as text
- */
-
- text: function() {
- return this.nativeResponse.responseText;
- }
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/namespace_nested.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-/**
- @namespace This is the first namespace.
-*/
-ns1 = {};
-
-/**
- This is the second namespace.
- @namespace
-*/
-ns1.ns2 = {};
-
-/**
- This part of ns1.ns2
- @constructor
-*/
-ns1.ns2.Function1 = function() {
-};
-
-ns1.staticFunction = function() {
-};
-
-/** A static field in a namespace. */
-ns1.ns2.staticField = 1;
--- a/sbin/res/jsdoc/app/test/nocode.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-/**#nocode+*/
- /**
- @name star
- @function
- */
- function blahblah() {
-
- }
-/**#nocode-*/
-
-function yaddayadda() {
-
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/oblit_anon.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-/** the options */
-opt = Opt.get(
- arguments,
- {
- d: "directory",
- c: "conf",
- "D[]": "define"
- }
-);
-
-/** configuration */
-opt.conf = {
- /** keep */
- keep: true,
- /** base */
- base: getBase(this, {p: properties})
-}
-
-
-
--- a/sbin/res/jsdoc/app/test/overview.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-/**
- * @overview This "library" contains a
- * lot of classes and functions.
- * @example
- <pre>
- var x (x < 1);
- alert("This 'is' \"code\"");
- </pre>
- * @name My Cool Library
- * @author Joe Smith jsmith@company.com
- * @version 0.1
- */
-
-/**
- * Gets the current foo
- * @param {String} fooId The unique identifier for the foo.
- * @return {Object} Returns the current foo.
- */
-function getFoo(fooID){
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/param_inline.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/**
- @constructor
- @param columns The number of columns.
-*/
-function Layout(/**int*/columns){
- /**
- @param [id] The id of the element.
- @param elName The name of the element.
- */
- this.getElement = function(
- /** string */ elName,
- /** number|string */ id
- ) {
- };
-
- /**
- @constructor
- */
- this.Canvas = function(top, left, /**int*/width, height) {
- /** Is it initiated yet? */
- this.initiated = true;
- }
-
- this.rotate = function(/**nothing*/) {
- }
-
- /**
- @param x
- @param y
- @param {zoppler} z*/
- this.init = function(x, y, /**abbler*/z) {
- /** The xyz. */
- this.xyz = x+y+z;
- this.getXyz = function() {
- }
- }
-}
--- a/sbin/res/jsdoc/app/test/params_optional.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-
-/**
- * @param {Page[]} pages
- * @param {number} [id] Specifies the id, if applicable.
- * @param {String} [title = This is untitled.] Specifies the title.
- */
-function Document(pages, id, title){
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/prototype.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-/** @constructor */
-function Article() {
-}
-
-Article.prototype.init = function(title) {
- /** the instance title */
- this.title = title;
-
- /** the static counter */
- Article.counter = 1;
-}
-
-a = new Article();
-a.Init("my title");
-
-print(a.title);
-print(Article.counter);
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/prototype_nested.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-/** @constructor */
-function Word() {
-}
-
-Word.prototype.reverse = function() {
-}
-
-Word.prototype.reverse.utf8 = function() {
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/prototype_oblit.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-/** @constructor */
-function Article() {
-}
-
-Article.prototype = {
- /** instance get title */
- getTitle: function(){
- }
-}
-
-/** static get title */
-Article.getTitle = function(){
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/prototype_oblit_constructor.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-/** @constructor */
-function Article() {
-}
-
-Article.prototype = {
- /** @constructor */
- Title: function(title) {
- /** the value of the Title instance */
- this.title = title;
- },
-
- init: function(pages) {
- /** the value of the pages of the Article instance */
- this.pages = pages;
- }
-}
-
-f = new Article();
-f.init("one two three");
-
-t = new f.Title("my title");
-
-print(f.pages);
-print(t.title);
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/public.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-/**@constructor*/
-function Foo() {
- /**
- @public
- @static
- @field
- */
- var bar = function(x) {
- }
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/scripts/code.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-/**
- @class
- */
-function thisiscode() {
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/scripts/notcode.txt Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-(This is not code)
-function foo(){{{{
-(
-!
-@
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/shared.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-
-/**
- * Builtin object.
- * @class
- * @name Array
- */
-
-/**#@+
- * Extension to builtin array.
- * @memberOf Array
- * @method
- */
-
-/**
- * @returns Boolen if some array members...
- */
-Array.prototype.some = function(){};
-
-/**
- * Change every element of an array.
- * @returns Filtered array copy.
- */
-Array.prototype.filter = function(){};
-
-/**#@-*/
-
-
-/**
- * A first in, first out data structure.
- * @constructor
- */
-Queue = function(){};
-
-/**#@+
- * Extension to Queue.
- * @memberOf Queue
- */
-
-rewind = function(){
-}
-
-// should close automatically here.
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/shared2.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-startOver = function(){
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/shortcuts.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-// /**#=+
-// * {
-// * 'D': 'Date.prototype',
-// * '$N': 'Number'
-// * }
-// */
-// var D = Date.prototype,
-// $N = Number;
-//
-// D.locale = function(){
-// };
-//
-// /**
-// @return {string} The cardinal number string.
-// */
-// $N.nth = function(n){
-// };
-//
-// LOAD.file = function(){
-// }
-//
-// /**#=-*/
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/static_this.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-/** the parent */
-var box = {};
-
-/** @namespace */
-box.holder = {}
-
-box.holder.foo = function() {
- /** the counter */
- this.counter = 1;
-}
-
-box.holder.foo();
-print(box.holder.counter);
--- a/sbin/res/jsdoc/app/test/synonyms.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/**
- @class
- @inherits Bar#zop as #my_zop
-*/
-function Foo() {
- /** this is a zip. */
- this.zip = function() {}
-
- /** from Bar */
- this.my_zop = new Bar().zop;
-}
-
-/**
- @class
- @borrows Foo#zip as this.my_zip
-*/
-function Bar() {
- /** this is a zop. */
- this.zop = function() {}
-
- /** from Foo */
- this.my_zip = new Foo().zip;
-}
-
-/** @namespace */
-var myObject = {
- /**
- @type function
- */
- myFunc: getFunction()
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/tosource.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-/**
- * @param {Object} object
- * @return {string}
- */
-function valueOf(object) {}
-
-/**
- * @param {Object} object
- * @return {string}
- */
-function toString(object) {}
-
-/**
- * @param {Object} object
- * @return {string}
- */
-function toSource(object) {}
-
-/**
- * @param {Object} object
- * @return {string}
- */
-function constructor(object) {}
\ No newline at end of file
--- a/sbin/res/jsdoc/app/test/variable_redefine.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-/** @constructor */
-function Foo() {
- var bar = 1;
- bar = 2; // redefining a private
-
- this.baz = 1;
- baz = 2; // global
-
- /** a private */
- var blap = {
- /** in here */
- tada: 1
- }
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/changes.txt Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-== 2.4.0 ==
-
- * Fixed bug that added mutiple symbols with the same name to docs.
- * Added support for the -m option to suppress warnings for multiple docs.
- * Added patch by brownsea42 to support quoted user variables on the command line. ( issue #281 )
- * Fixed bug that sometimes caused links to events to be incorrect. ( issue #292 )
-
-== 2.3.3 ==
-
- * Fixed bug that made all fields declared with the @property tag static. ( issue #262 )
- * Minor fix to better handle trailing slash on path to template (from jwmetrocat). ( issue #237 )
- * Fix for @memberOf when applied to inner members. ( issue #264 )
- * Fix for @memberOf when applied to symbols documented with @name. ( issue #260 )
- * Applied patch from kunhualqk, fix for bug where @link to borrowed member did not resolve to parent class. ( issue #218 )
- * Fix for @requires not linking back to the required class
- * Added experimental support for @constructs to have an argument, the class name, when applied to a function assignment.
-
-== 2.3.2 ==
-
- * Minor update to the usage notes and corrected the version number displayed in the output.
-
-== 2.3.1 ==
-
- * Fixed HTML typo in allfiles template. ( issue #228 )
- * Modified template to display version information for classes.
- * Modified template to better support multiple methods with the same name.
- * Fixed bug that caused template to error when backtick characters appeared around class names.
-
-== 2.3.0 ==
-
- * Added option -u, --unique to avoid bug that causes multiple symbols with names that differ only by case to overwrite each others output on case-insensitive filesystems. ( issue #162 )
- * Fixed bug where {@links} in @deprecated tags did not resolve. ( issue #220 )
- * Fixed bug that caused parens around a function to make it to be unrecognized. ( issue #213 )
- * Fixed bug prevented explicit links to named anchors from working (thanks katgao.pku). ( issue #215 )
- * Fixed bug that prevented full description from appearing in file overview. ( issue #224 )
-
-== 2.2.1 ==
-
- * Fixed bug with class template, where sorting of methods was accidentally removed (thanks dezfowler).
- * Added missing test files for the @exports unit tests.
-
-== 2.2.0 ==
-
- * Fixed bug that caused exception when given a folder containing non-js files, even with the x commandline option set to "js". ( issue #193 )
- * Fixed typo in index template [patch submitted by olle]. ( issue #198 )
- * Modified @borrows tag experimentally to allow for missing "as ..." clause.
- * Added support for the @exports tag, to allow one symbol to be documented as another.
- * Added support for the -S option to document code following the Secure Modules pattern.
-
-== 2.1.0 ==
-
- * Added support for the @event tag.
- * Fixed bug that prevented the : character from appearing in symbol names.
- * Fixed bug that prevented underscored symbols marked with @public being tagged as private. (issue #184 )
- * Fixed bug that randomly affected the @memberOf tag when the name of the symbol did not include the parent name.
- * Fixed bug that prevented templates that were not in the jsdoc-toolkit folder from being found. ( issue #176 )
- * Added ability to check for trailing slash on template path. ( issue #177 )
- * Modified classDesc so that it no longer is appended with the constructor desc.
- * Fixed call to plugin onDocCommentSrc.
- * Added missing support for inline doc comments for function return types. ( issue #189 )
- * Added command line option -q, --quiet.
- * Added command line option -E, --exclude. ( issue #143 )
- * Added 2 more hooks for plugins. ( issue #163 )
- * Added support for extending built-ins. ( issue #160 )
- * Added "compact" option to JSDOC.JsPlate.prototype.process. ( issue #159 )
- * @augments no longer documents static members as inherited. ( issue #138 )
- * @link to a class now goes to the page for that class, not the constructor. ( issue #178 )
- * Warnings of mismatched curly brace now include filename. ( issue #166 )
- * Fixed bug affecting template paths loaded via a configuration file when the trailing slash is missing. ( issue #191 )
- * Minor optimizations.
-
-== 2.0.2 ==
-
- * Fixed bug that sometimes caused an example of division in the source code to be interpretted as a regex by the JsDoc Toolkit analyzer. ( issue #158 )
- * Fixed a bug that prevented private variables marked as @public from appearing in the documentation. ( issue #161 )
- * Fixed bug that prevented variable names with underscored properties from appearing in summaries. ( issue #173 )
-
-== 2.0.1 ==
-
- * Fixed bug that prevented @fileOverview tag from being recognized.
- * Added support for @fieldOf as a synonym for @field plus @memberOf.
- * Added support for @name tag in a @fileOverview comment to control the displayed name of the file.
- * Added support for multiple @example tags. ( issue #152 )
- * Modified style sheet of jsdoc template to make more readable. ( issue #151 )
- * Fixed bug that prevented @since documentation from displaying correctly when it appeared in a class. ( issue #150 )
- * Fixed bug that caused inhertited properties to sometimes not resolve correctly. ( issue #144 )
- * Modified so that trailing whitespace in @example is always trimmed. ( issue #153 )
- * Added support for elseif to JsPlate. (hat tip to fredck)
- * Added support for @location urls in the @overview comment to the jsdoc template.
-
-== Changes From Versions 1.4.0 to 2.0.0 ==
-
- * Upgraded included version of Rhino from 1.6 to 1.7R1.
- * Removed circular references in parsed documentation objects.
- * Improved inheritance handling, now properties and events can be inherited same as methods.
- * Improved handling of cross-file relationships, now having two related objects in separate files is not a problem.
- * Improved ability to recognize membership of previously defined objects.
- * Added ability to redefine parsing behavior with plugins.
- * @methodOf is a synonym for @function and @memberOf.
- * Added @default to document default values of members that are objects.
- * Added ability to parse and refer to inner functions.
- * Fixed bug that appeared when calling a method to set properties of the instance referred to by "this".
- * Added ability to automatically create links to other symbols.
- * New "jsdoc" template now produces fully W3C valid XHTML.
- * Inline parameter type hint comments are now documented.
- * Fixed error: Locally scoped variables (declared with var) no longer appear as global.
- * It is now possible to run JsDoc Toolkit from any directory.
- * Added support for inline {@link ...} tags.
- * Added support for the -H command-line option to allow for custom content handlers.
- * Tag names @inherits and @scope changed to @borrows and @lends.
- ? Combining @constructor in a doclet with @lends now supported.
- * Multiple @lend tags now supported.
- * Added support for the @constructs tag, used inside a @lends block.
- * Added support for the @constant tag.
- * Fixed bug that prevented the use of [] as a default value.
- * Added support for the @field tag.
- * Added support for the @public tag (applied to inner functions).
- * @namespace tag can now be applied to functions, not just object literals.
- * Added support for the -s command line option to suppress source code output.
- * Added new unit test framework.
- * Underscored symbols are now treated as if they have a @private tag by default.
- * Improved support for anonymous constructors.
- * Added support for the nocode meta tag.
-
\ No newline at end of file
--- a/sbin/res/jsdoc/conf/sample.conf Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- This is an example of one way you could set up a configuration file to more
- conveniently define some commandline options. You might like to do this if
- you frequently reuse the same options. Note that you don't need to define
- every option in this file, you can combine a configuration file with
- additional options on the commandline if your wish.
-
- You would include this configuration file by running JsDoc Toolkit like so:
- java -jar jsrun.jar app/run.js -c=conf/sample.conf
-
-*/
-
-{
- // source files to use
- _: ['app/test/jsdoc_test.js'],
-
- // document all functions, even uncommented ones
- a: true,
-
- // including those marked @private
- p: true,
-
- // some extra variables I want to include
- D: {generatedBy: "Michael Mathews", copyright: "2008"},
-
- // use this directory as the output directory
- d: "docs",
-
- // use this template
- t: "templates/jsdoc"
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/java/build.xml Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-<project>
- <target name="clean">
- <delete dir="build"/>
- </target>
-
- <target name="compile">
- <mkdir dir="build/classes"/>
- <javac
- srcdir="src" destdir="build/classes"
- classpath="./classes/js.jar"
- />
- </target>
-
- <target name="jar">
- <mkdir dir="build/jar"/>
- <jar destfile="build/jar/jsrun.jar" basedir="build/classes">
- <manifest>
- <attribute name="Main-Class" value="JsRun"/>
- <attribute name="Class-Path" value="./java/classes/js.jar"/>
- </manifest>
- </jar>
- </target>
-
- <target name="debugjar">
- <mkdir dir="build/jar"/>
- <jar destfile="build/jar/jsdebug.jar" basedir="build/classes">
- <manifest>
- <attribute name="Main-Class" value="JsDebugRun"/>
- <attribute name="Class-Path" value="./java/classes/js.jar"/>
- </manifest>
- </jar>
- </target>
-
- <target name="clean-build" depends="clean,compile,jar"/>
- <target name="clean-debug" depends="clean,compile,debugjar"/>
-</project>
\ No newline at end of file
--- a/sbin/res/jsdoc/java/build_1.4.xml Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-<project default="clean-build"><!-- use this build script if you are stuck with ant version 1.4 -->
- <target name="clean">
- <delete dir="build"/>
- </target>
-
- <target name="compile">
- <mkdir dir="build/classes"/>
- <javac
- srcdir="src" destdir="build/classes"
- classpath="./classes/js.jar"
- />
- </target>
-
- <target name="jar">
- <mkdir dir="build/jar"/>
- <jar jarfile="build/jar/jsrun.jar" basedir="build/classes">
- <manifest>
- <attribute name="Main-Class" value="JsRun"/>
- <attribute name="Class-Path" value="./java/classes/js.jar"/>
- </manifest>
- </jar>
- </target>
-
- <target name="debugjar">
- <mkdir dir="build/jar"/>
- <jar jarfile="build/jar/jsdebug.jar" basedir="build/classes">
- <manifest>
- <attribute name="Main-Class" value="JsDebugRun"/>
- <attribute name="Class-Path" value="./java/classes/js.jar"/>
- </manifest>
- </jar>
- </target>
-
- <target name="clean-build" depends="clean,compile,jar"/>
- <target name="clean-debug" depends="clean,compile,debugjar"/>
-</project>
Binary file sbin/res/jsdoc/java/classes/js.jar has changed
--- a/sbin/res/jsdoc/java/src/JsDebugRun.java Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-/**
- * A trivial bootstrap class that simply adds the path to the
- * .js file as an argument to the Rhino call. This little hack
- * allows the code in the .js file to have access to it's own
- * path via the Rhino arguments object. This is necessary to
- * allow the .js code to find resource files in a location
- * relative to itself.
- *
- * USAGE: java -jar jsdebug.jar path/to/file.js
- */
-public class JsDebugRun {
- public static void main(String[] args) {
- String[] jsargs = {"-j="+args[0]};
-
- String[] allArgs = new String[jsargs.length + args.length];
- System.arraycopy(args, 0, allArgs, 0, args.length);
- System.arraycopy(jsargs, 0, allArgs, args.length ,jsargs.length);
-
- org.mozilla.javascript.tools.debugger.Main.main(allArgs);
- }
-}
--- a/sbin/res/jsdoc/java/src/JsRun.java Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-/**
- * A trivial bootstrap class that simply adds the path to the
- * .js file as an argument to the Rhino call. This little hack
- * allows the code in the .js file to have access to it's own
- * path via the Rhino arguments object. This is necessary to
- * allow the .js code to find resource files in a location
- * relative to itself.
- *
- * USAGE: java -jar jsrun.jar path/to/file.js
- */
-public class JsRun {
- public static void main(String[] args) {
- String[] jsargs = {"-j="+args[0]};
-
- String[] allArgs = new String[jsargs.length + args.length];
- System.arraycopy(args, 0, allArgs, 0, args.length);
- System.arraycopy(jsargs, 0, allArgs, args.length ,jsargs.length);
-
- org.mozilla.javascript.tools.shell.Main.main(allArgs);
- }
-}
Binary file sbin/res/jsdoc/jsdebug.jar has changed
Binary file sbin/res/jsdoc/jsrun.jar has changed
--- a/sbin/res/jsdoc/jsrun.sh Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-#!/bin/ksh
-
-# launcher script for jsdoc
-# Author: Avi Deitcher
-#
-# This program is released under the MIT License as follows:
-
-# Copyright (c) 2008-2009 Atomic Inc <avi@jsorm.com>
-#
-#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.
-#
-
-
-if [[ -n "$JSDOCDIR" ]]; then
- _DOCDIR="-Djsdoc.dir=$JSDOCDIR"
- _APPDIR="$JSDOCDIR/app"
- _BASEDIR="$JSDOCDIR"
-else
- _DOCDIR=""
- _APPDIR="./app"
- _BASEDIR="."
-fi
-
-if [[ -n "$JSDOCTEMPLATEDIR" ]]; then
- _TDIR="-Djsdoc.template.dir=$JSDOCTEMPLATEDIR"
-else
- _TDIR=""
-fi
-
-CMD="java $_DOCDIR $_TDIR -jar $_BASEDIR/jsrun.jar $_APPDIR/run.js $@"
-echo $CMD
-$CMD
-
--- a/sbin/res/jsdoc/out/jsdoc/files.html Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,216 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-
- <title>JsDoc Reference - File Index</title>
- <meta name="generator" content="JsDoc Toolkit" />
-
- <style type="text/css">
- /* default.css */
-body
-{
- font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
- width: 800px;
-}
-
-.header
-{
- clear: both;
- background-color: #ccc;
- padding: 8px;
-}
-
-h1
-{
- font-size: 150%;
- font-weight: bold;
- padding: 0;
- margin: 1em 0 0 .3em;
-}
-
-hr
-{
- border: none 0;
- border-top: 1px solid #7F8FB1;
- height: 1px;
-}
-
-pre.code
-{
- display: block;
- padding: 8px;
- border: 1px dashed #ccc;
-}
-
-#index
-{
- margin-top: 24px;
- float: left;
- width: 160px;
- position: absolute;
- left: 8px;
- background-color: #F3F3F3;
- padding: 8px;
-}
-
-#content
-{
- margin-left: 190px;
- width: 600px;
-}
-
-.classList
-{
- list-style-type: none;
- padding: 0;
- margin: 0 0 0 8px;
- font-family: arial, sans-serif;
- font-size: 1em;
- overflow: auto;
-}
-
-.classList li
-{
- padding: 0;
- margin: 0 0 8px 0;
-}
-
-.summaryTable { width: 100%; }
-
-h1.classTitle
-{
- font-size:170%;
- line-height:130%;
-}
-
-h2 { font-size: 110%; }
-caption, div.sectionTitle
-{
- background-color: #7F8FB1;
- color: #fff;
- font-size:130%;
- text-align: left;
- padding: 2px 6px 2px 6px;
- border: 1px #7F8FB1 solid;
-}
-
-div.sectionTitle { margin-bottom: 8px; }
-.summaryTable thead { display: none; }
-
-.summaryTable td
-{
- vertical-align: top;
- padding: 4px;
- border-bottom: 1px #7F8FB1 solid;
- border-right: 1px #7F8FB1 solid;
-}
-
-/*col#summaryAttributes {}*/
-.summaryTable td.attributes
-{
- border-left: 1px #7F8FB1 solid;
- width: 140px;
- text-align: right;
-}
-
-td.attributes, .fixedFont
-{
- line-height: 15px;
- color: #002EBE;
- font-family: "Courier New",Courier,monospace;
- font-size: 13px;
-}
-
-.summaryTable td.nameDescription
-{
- text-align: left;
- font-size: 13px;
- line-height: 15px;
-}
-
-.summaryTable td.nameDescription, .description
-{
- line-height: 15px;
- padding: 4px;
- padding-left: 4px;
-}
-
-.summaryTable { margin-bottom: 8px; }
-
-ul.inheritsList
-{
- list-style: square;
- margin-left: 20px;
- padding-left: 0;
-}
-
-.detailList {
- margin-left: 20px;
- line-height: 15px;
-}
-.detailList dt { margin-left: 20px; }
-
-.detailList .heading
-{
- font-weight: bold;
- padding-bottom: 6px;
- margin-left: 0;
-}
-
-.light, td.attributes, .light a:link, .light a:visited
-{
- color: #777;
- font-style: italic;
-}
-
-.fineprint
-{
- text-align: right;
- font-size: 10px;
-}
- </style>
- </head>
-
- <body>
- <div id="header">
-</div>
-
- <div id="index">
- <div align="center"><a href="index.html">Class Index</a>
-| <a href="files.html">File Index</a></div>
-<hr />
-<h2>Classes</h2>
-<ul class="classList">
-
- <li><i><a href="symbols/_global_.html">_global_</a></i></li>
-
-</ul>
-<hr />
- </div>
-
- <div id="content">
- <h1 class="classTitle">File Index</h1>
-
-
- <div>
- <h2><a href="symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a></h2>
-
- <dl>
-
-
-
-
- </dl>
- </div>
- <hr />
-
-
- </div>
- <div class="fineprint" style="clear:both">
-
- Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.4.0 on Fri Dec 23 2011 10:50:32 GMT+0100 (CET)
- </div>
- </body>
-</html>
\ No newline at end of file
--- a/sbin/res/jsdoc/out/jsdoc/index.html Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,210 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-
- <title>JsDoc Reference - Index</title>
- <meta name="generator" content="JsDoc Toolkit" />
-
- <style type="text/css">
- /* default.css */
-body
-{
- font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
- width: 800px;
-}
-
-.header
-{
- clear: both;
- background-color: #ccc;
- padding: 8px;
-}
-
-h1
-{
- font-size: 150%;
- font-weight: bold;
- padding: 0;
- margin: 1em 0 0 .3em;
-}
-
-hr
-{
- border: none 0;
- border-top: 1px solid #7F8FB1;
- height: 1px;
-}
-
-pre.code
-{
- display: block;
- padding: 8px;
- border: 1px dashed #ccc;
-}
-
-#index
-{
- margin-top: 24px;
- float: left;
- width: 160px;
- position: absolute;
- left: 8px;
- background-color: #F3F3F3;
- padding: 8px;
-}
-
-#content
-{
- margin-left: 190px;
- width: 600px;
-}
-
-.classList
-{
- list-style-type: none;
- padding: 0;
- margin: 0 0 0 8px;
- font-family: arial, sans-serif;
- font-size: 1em;
- overflow: auto;
-}
-
-.classList li
-{
- padding: 0;
- margin: 0 0 8px 0;
-}
-
-.summaryTable { width: 100%; }
-
-h1.classTitle
-{
- font-size:170%;
- line-height:130%;
-}
-
-h2 { font-size: 110%; }
-caption, div.sectionTitle
-{
- background-color: #7F8FB1;
- color: #fff;
- font-size:130%;
- text-align: left;
- padding: 2px 6px 2px 6px;
- border: 1px #7F8FB1 solid;
-}
-
-div.sectionTitle { margin-bottom: 8px; }
-.summaryTable thead { display: none; }
-
-.summaryTable td
-{
- vertical-align: top;
- padding: 4px;
- border-bottom: 1px #7F8FB1 solid;
- border-right: 1px #7F8FB1 solid;
-}
-
-/*col#summaryAttributes {}*/
-.summaryTable td.attributes
-{
- border-left: 1px #7F8FB1 solid;
- width: 140px;
- text-align: right;
-}
-
-td.attributes, .fixedFont
-{
- line-height: 15px;
- color: #002EBE;
- font-family: "Courier New",Courier,monospace;
- font-size: 13px;
-}
-
-.summaryTable td.nameDescription
-{
- text-align: left;
- font-size: 13px;
- line-height: 15px;
-}
-
-.summaryTable td.nameDescription, .description
-{
- line-height: 15px;
- padding: 4px;
- padding-left: 4px;
-}
-
-.summaryTable { margin-bottom: 8px; }
-
-ul.inheritsList
-{
- list-style: square;
- margin-left: 20px;
- padding-left: 0;
-}
-
-.detailList {
- margin-left: 20px;
- line-height: 15px;
-}
-.detailList dt { margin-left: 20px; }
-
-.detailList .heading
-{
- font-weight: bold;
- padding-bottom: 6px;
- margin-left: 0;
-}
-
-.light, td.attributes, .light a:link, .light a:visited
-{
- color: #777;
- font-style: italic;
-}
-
-.fineprint
-{
- text-align: right;
- font-size: 10px;
-}
- </style>
- </head>
-
- <body>
- <div id="header">
-</div>
-
- <div id="index">
- <div align="center"><a href="index.html">Class Index</a>
-| <a href="files.html">File Index</a></div>
-<hr />
-<h2>Classes</h2>
-<ul class="classList">
-
- <li><i><a href="symbols/_global_.html">_global_</a></i></li>
-
-</ul>
-<hr />
- </div>
-
- <div id="content">
- <h1 class="classTitle">Class Index</h1>
-
-
- <div>
- <h2><a href="symbols/_global_.html">_global_</a></h2>
-
- </div>
- <hr />
-
-
- </div>
- <div class="fineprint" style="clear:both">
-
- Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.4.0 on Fri Dec 23 2011 10:50:32 GMT+0100 (CET)
- </div>
- </body>
-</html>
\ No newline at end of file
--- a/sbin/res/jsdoc/out/jsdoc/symbols/_global_.html Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,778 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <meta name="generator" content="JsDoc Toolkit" />
-
- <title>JsDoc Reference - _global_</title>
-
- <style type="text/css">
- /* default.css */
-body
-{
- font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
- width: 800px;
-}
-
-.header
-{
- clear: both;
- background-color: #ccc;
- padding: 8px;
-}
-
-h1
-{
- font-size: 150%;
- font-weight: bold;
- padding: 0;
- margin: 1em 0 0 .3em;
-}
-
-hr
-{
- border: none 0;
- border-top: 1px solid #7F8FB1;
- height: 1px;
-}
-
-pre.code
-{
- display: block;
- padding: 8px;
- border: 1px dashed #ccc;
-}
-
-#index
-{
- margin-top: 24px;
- float: left;
- width: 160px;
- position: absolute;
- left: 8px;
- background-color: #F3F3F3;
- padding: 8px;
-}
-
-#content
-{
- margin-left: 190px;
- width: 600px;
-}
-
-.classList
-{
- list-style-type: none;
- padding: 0;
- margin: 0 0 0 8px;
- font-family: arial, sans-serif;
- font-size: 1em;
- overflow: auto;
-}
-
-.classList li
-{
- padding: 0;
- margin: 0 0 8px 0;
-}
-
-.summaryTable { width: 100%; }
-
-h1.classTitle
-{
- font-size:170%;
- line-height:130%;
-}
-
-h2 { font-size: 110%; }
-caption, div.sectionTitle
-{
- background-color: #7F8FB1;
- color: #fff;
- font-size:130%;
- text-align: left;
- padding: 2px 6px 2px 6px;
- border: 1px #7F8FB1 solid;
-}
-
-div.sectionTitle { margin-bottom: 8px; }
-.summaryTable thead { display: none; }
-
-.summaryTable td
-{
- vertical-align: top;
- padding: 4px;
- border-bottom: 1px #7F8FB1 solid;
- border-right: 1px #7F8FB1 solid;
-}
-
-/*col#summaryAttributes {}*/
-.summaryTable td.attributes
-{
- border-left: 1px #7F8FB1 solid;
- width: 140px;
- text-align: right;
-}
-
-td.attributes, .fixedFont
-{
- line-height: 15px;
- color: #002EBE;
- font-family: "Courier New",Courier,monospace;
- font-size: 13px;
-}
-
-.summaryTable td.nameDescription
-{
- text-align: left;
- font-size: 13px;
- line-height: 15px;
-}
-
-.summaryTable td.nameDescription, .description
-{
- line-height: 15px;
- padding: 4px;
- padding-left: 4px;
-}
-
-.summaryTable { margin-bottom: 8px; }
-
-ul.inheritsList
-{
- list-style: square;
- margin-left: 20px;
- padding-left: 0;
-}
-
-.detailList {
- margin-left: 20px;
- line-height: 15px;
-}
-.detailList dt { margin-left: 20px; }
-
-.detailList .heading
-{
- font-weight: bold;
- padding-bottom: 6px;
- margin-left: 0;
-}
-
-.light, td.attributes, .light a:link, .light a:visited
-{
- color: #777;
- font-style: italic;
-}
-
-.fineprint
-{
- text-align: right;
- font-size: 10px;
-}
- </style>
- </head>
-
- <body>
-<!-- ============================== header ================================= -->
- <!-- begin static/header.html -->
- <div id="header">
-</div>
- <!-- end static/header.html -->
-
-<!-- ============================== classes index ============================ -->
- <div id="index">
- <!-- begin publish.classesIndex -->
- <div align="center"><a href="../index.html">Class Index</a>
-| <a href="../files.html">File Index</a></div>
-<hr />
-<h2>Classes</h2>
-<ul class="classList">
-
- <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
-
-</ul>
-<hr />
- <!-- end publish.classesIndex -->
- </div>
-
- <div id="content">
-<!-- ============================== class title ============================ -->
- <h1 class="classTitle">
-
- Built-In Namespace _global_
- </h1>
-
-<!-- ============================== class summary ========================== -->
- <p class="description">
-
-
-
-
-
-
- </p>
-
-<!-- ============================== constructor summary ==================== -->
-
-
-<!-- ============================== properties summary ===================== -->
-
-
-
- <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class _global_.">
- <caption>Field Summary</caption>
- <thead>
- <tr>
- <th scope="col">Field Attributes</th>
- <th scope="col">Field Name and Description</th>
- </tr>
- </thead>
- <tbody>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont">
- <b><a href="../symbols/_global_.html#Mustache">Mustache</a></b>
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- </tbody>
- </table>
-
-
-
-
-
-<!-- ============================== methods summary ======================== -->
-
-
-
- <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class _global_.">
- <caption>Method Summary</caption>
- <thead>
- <tr>
- <th scope="col">Method Attributes</th>
- <th scope="col">Method Name and Description</th>
- </tr>
- </thead>
- <tbody>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont"><b><a href="../symbols/_global_.html#b">b</a></b>(a)
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont"><b><a href="../symbols/_global_.html#Clusters">Clusters</a></b>(json)
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont"><b><a href="../symbols/_global_.html#d">d</a></b>()
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont"><b><a href="../symbols/_global_.html#finished_cb">finished_cb</a></b>()
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont"><b><a href="../symbols/_global_.html#Frames">Frames</a></b>(json)
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont"><b><a href="../symbols/_global_.html#handler">handler</a></b>()
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont"><b><a href="../symbols/_global_.html#J">J</a></b>(a, c)
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont"><b><a href="../symbols/_global_.html#log_error">log_error</a></b>(msg, err)
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont"><b><a href="../symbols/_global_.html#log_msg">log_msg</a></b>(msg)
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- <tr>
- <td class="attributes"> </td>
- <td class="nameDescription">
- <div class="fixedFont"><b><a href="../symbols/_global_.html#ready_cb">ready_cb</a></b>()
- </div>
- <div class="description"></div>
- </td>
- </tr>
-
- </tbody>
- </table>
-
-
-
-
-<!-- ============================== events summary ======================== -->
-
-
-<!-- ============================== constructor details ==================== -->
-
-
-<!-- ============================== field details ========================== -->
-
- <div class="sectionTitle">
- Field Detail
- </div>
-
- <a name="Mustache"> </a>
- <div class="fixedFont">
-
-
- <b>Mustache</b>
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
-
-
-
-
-
-
-
-
-<!-- ============================== method details ========================= -->
-
- <div class="sectionTitle">
- Method Detail
- </div>
-
- <a name="b"> </a>
- <div class="fixedFont">
-
-
- <b>b</b>(a)
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
- <dl class="detailList">
- <dt class="heading">Parameters:</dt>
-
- <dt>
- <b>a</b>
-
- </dt>
- <dd></dd>
-
- </dl>
-
-
-
-
-
-
-
-
- <hr />
-
- <a name="Clusters"> </a>
- <div class="fixedFont">
-
-
- <b>Clusters</b>(json)
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
- <dl class="detailList">
- <dt class="heading">Parameters:</dt>
-
- <dt>
- <b>json</b>
-
- </dt>
- <dd></dd>
-
- </dl>
-
-
-
-
-
-
-
-
- <hr />
-
- <a name="d"> </a>
- <div class="fixedFont">
-
-
- <b>d</b>()
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
-
-
-
-
-
-
-
- <hr />
-
- <a name="finished_cb"> </a>
- <div class="fixedFont">
-
-
- <b>finished_cb</b>()
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
-
-
-
-
-
-
-
- <hr />
-
- <a name="Frames"> </a>
- <div class="fixedFont">
-
-
- <b>Frames</b>(json)
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
- <dl class="detailList">
- <dt class="heading">Parameters:</dt>
-
- <dt>
- <b>json</b>
-
- </dt>
- <dd></dd>
-
- </dl>
-
-
-
-
-
-
-
-
- <hr />
-
- <a name="handler"> </a>
- <div class="fixedFont">
-
-
- <b>handler</b>()
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
-
-
-
-
-
-
-
- <hr />
-
- <a name="J"> </a>
- <div class="fixedFont">
-
-
- <b>J</b>(a, c)
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
- <dl class="detailList">
- <dt class="heading">Parameters:</dt>
-
- <dt>
- <b>a</b>
-
- </dt>
- <dd></dd>
-
- <dt>
- <b>c</b>
-
- </dt>
- <dd></dd>
-
- </dl>
-
-
-
-
-
-
-
-
- <hr />
-
- <a name="log_error"> </a>
- <div class="fixedFont">
-
-
- <b>log_error</b>(msg, err)
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
- <dl class="detailList">
- <dt class="heading">Parameters:</dt>
-
- <dt>
- <b>msg</b>
-
- </dt>
- <dd></dd>
-
- <dt>
- <b>err</b>
-
- </dt>
- <dd></dd>
-
- </dl>
-
-
-
-
-
-
-
-
- <hr />
-
- <a name="log_msg"> </a>
- <div class="fixedFont">
-
-
- <b>log_msg</b>(msg)
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
- <dl class="detailList">
- <dt class="heading">Parameters:</dt>
-
- <dt>
- <b>msg</b>
-
- </dt>
- <dd></dd>
-
- </dl>
-
-
-
-
-
-
-
-
- <hr />
-
- <a name="ready_cb"> </a>
- <div class="fixedFont">
-
-
- <b>ready_cb</b>()
-
- </div>
- <div class="description">
-
-
- <br />
- <i>Defined in: </i> <a href="../symbols/src/LdtPlayer-release.js.html">LdtPlayer-release.js</a>.
-
-
- </div>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<!-- ============================== event details ========================= -->
-
-
- <hr />
- </div>
-
-
-<!-- ============================== footer ================================= -->
- <div class="fineprint" style="clear:both">
-
- Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Fri Dec 23 2011 10:50:32 GMT+0100 (CET)
- </div>
- </body>
-</html>
--- a/sbin/res/jsdoc/out/jsdoc/symbols/src/LdtPlayer-release.js.html Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3549 +0,0 @@
-<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
- .KEYW {color: #933;}
- .COMM {color: #bbb; font-style: italic;}
- .NUMB {color: #393;}
- .STRN {color: #393;}
- .REGX {color: #339;}
- .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
- </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
-<span class='line'> 2</span> *
-<span class='line'> 3</span> * Copyright 2010 Institut de recherche et d'innovation
-<span class='line'> 4</span> * contributor(s) : Samuel Huron
-<span class='line'> 5</span> *
-<span class='line'> 6</span> * contact@iri.centrepompidou.fr
-<span class='line'> 7</span> * http://www.iri.centrepompidou.fr
-<span class='line'> 8</span> *
-<span class='line'> 9</span> * This software is a computer program whose purpose is to show and add annotations on a video .
-<span class='line'> 10</span> * This software is governed by the CeCILL-C license under French law and
-<span class='line'> 11</span> * abiding by the rules of distribution of free software. You can use,
-<span class='line'> 12</span> * modify and/ or redistribute the software under the terms of the CeCILL-C
-<span class='line'> 13</span> * license as circulated by CEA, CNRS and INRIA at the following URL
-<span class='line'> 14</span> * "http://www.cecill.info".
-<span class='line'> 15</span> *
-<span class='line'> 16</span> * The fact that you are presently reading this means that you have had
-<span class='line'> 17</span> * knowledge of the CeCILL-C license and that you accept its terms.
-<span class='line'> 18</span> */</span><span class="WHIT">
-<span class='line'> 19</span> </span><span class="COMM">/*! LAB.js (LABjs :: Loading And Blocking JavaScript)
-<span class='line'> 20</span> v2.0.3 (c) Kyle Simpson
-<span class='line'> 21</span> MIT License
-<span class='line'> 22</span> */</span><span class="WHIT">
-<span class='line'> 23</span>
-<span class='line'> 24</span> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">global</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_$LAB</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">global.$LAB</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 26</span> </span><span class="WHIT">
-<span class='line'> 27</span> </span><span class="COMM">// constants for the valid keys of the options object</span><span class="WHIT">
-<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">_UseLocalXHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"UseLocalXHR"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">_AlwaysPreserveOrder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"AlwaysPreserveOrder"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">_AllowDuplicates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"AllowDuplicates"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">_CacheBust</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CacheBust"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="NAME">_Debug</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Debug"</span><span class="PUNC">,</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">_BasePath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"BasePath"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 34</span> </span><span class="WHIT">
-<span class='line'> 35</span> </span><span class="COMM">// stateless variables used across all $LAB instances</span><span class="WHIT">
-<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">root_page</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="REGX">/^[^?#]*\//</span><span class="PUNC">.</span><span class="NAME">exec</span><span class="PUNC">(</span><span class="NAME">location.href</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">root_domain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="REGX">/^\w+\:\/\/\/?[^\/]+/</span><span class="PUNC">.</span><span class="NAME">exec</span><span class="PUNC">(</span><span class="NAME">root_page</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">append_to</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.head</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">document.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">"head"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 39</span> </span><span class="WHIT">
-<span class='line'> 40</span> </span><span class="COMM">// inferences... ick, but still necessary</span><span class="WHIT">
-<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">opera_or_gecko</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">global.opera</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">Object.prototype.toString.call</span><span class="PUNC">(</span><span class="NAME">global.opera</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"[object Opera]"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"MozAppearance"</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">document.documentElement.style</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 42</span>
-<span class='line'> 43</span> </span><span class="COMM">/*!START_DEBUG*/</span><span class="WHIT">
-<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="COMM">// console.log() and console.error() wrappers</span><span class="WHIT">
-<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 46</span> </span><span class="NAME">log_error</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 47</span> </span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'> 48</span> </span><span class="WHIT">
-<span class='line'> 49</span> </span><span class="COMM">// feature sniffs (yay!)</span><span class="WHIT">
-<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">test_script_elem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"script"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">explicit_preloading</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">test_script_elem.preload</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"boolean"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// http://wiki.whatwg.org/wiki/Script_Execution_Control#Proposal_1_.28Nicholas_Zakas.29</span><span class="WHIT">
-<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">real_preloading</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">explicit_preloading</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">test_script_elem.readyState</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">test_script_elem.readyState</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"uninitialized"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// will a script preload with `src` set before DOM append?</span><span class="WHIT">
-<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">script_ordered_async</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">real_preloading</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">test_script_elem.async</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order</span><span class="WHIT">
-<span class='line'> 54</span> </span><span class="WHIT">
-<span class='line'> 55</span> </span><span class="COMM">// XHR preloading (same-domain) and cache-preloading (remote-domain) are the fallbacks (for some browsers)</span><span class="WHIT">
-<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">xhr_or_cache_preloading</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">real_preloading</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">script_ordered_async</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">opera_or_gecko</span><span class="WHIT">
-<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'> 58</span>
-<span class='line'> 59</span> </span><span class="COMM">/*!START_DEBUG*/</span><span class="WHIT">
-<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="COMM">// define console wrapper functions if applicable</span><span class="WHIT">
-<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">global.console</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">global.console.log</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">global.console.error</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">global.console.error</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">global.console.log</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">msg</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">global.console.log</span><span class="PUNC">(</span><span class="NAME">msg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">log_error</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">msg</span><span class="PUNC">,</span><span class="NAME">err</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">global.console.error</span><span class="PUNC">(</span><span class="NAME">msg</span><span class="PUNC">,</span><span class="NAME">err</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'> 66</span> </span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'> 67</span>
-<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="COMM">// test for function</span><span class="WHIT">
-<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">is_func</span><span class="PUNC">(</span><span class="NAME">func</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Object.prototype.toString.call</span><span class="PUNC">(</span><span class="NAME">func</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"[object Function]"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'> 70</span>
-<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="COMM">// test for array</span><span class="WHIT">
-<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">is_array</span><span class="PUNC">(</span><span class="NAME">arr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Object.prototype.toString.call</span><span class="PUNC">(</span><span class="NAME">arr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"[object Array]"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'> 73</span>
-<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="COMM">// make script URL absolute/canonical</span><span class="WHIT">
-<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">canonical_uri</span><span class="PUNC">(</span><span class="NAME">src</span><span class="PUNC">,</span><span class="NAME">base_path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">absolute_regex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="REGX">/^\w+\:\/\//</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'> 77</span> </span><span class="WHIT">
-<span class='line'> 78</span> </span><span class="COMM">// is `src` is protocol-relative (begins with // or ///), prepend protocol</span><span class="WHIT">
-<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="REGX">/^\/\/\/?/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">src</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="NAME">src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">location.protocol</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">src</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="COMM">// is `src` page-relative? (not an absolute URL, and not a domain-relative path, beginning with /)</span><span class="WHIT">
-<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">absolute_regex.test</span><span class="PUNC">(</span><span class="NAME">src</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">src.charAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="COMM">// prepend `base_path`, if any</span><span class="WHIT">
-<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="NAME">src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">base_path</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">src</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="COMM">// make sure to return `src` as absolute</span><span class="WHIT">
-<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">absolute_regex.test</span><span class="PUNC">(</span><span class="NAME">src</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">src</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">src.charAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">root_domain</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">root_page</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'> 90</span>
-<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="COMM">// merge `source` into `target`</span><span class="WHIT">
-<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">merge_objs</span><span class="PUNC">(</span><span class="NAME">source</span><span class="PUNC">,</span><span class="NAME">target</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">source</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">source.hasOwnProperty</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">source</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// TODO: does this need to be recursive for our purposes?</span><span class="WHIT">
-<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'> 98</span>
-<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="COMM">// does the chain group have any ready-to-execute scripts?</span><span class="WHIT">
-<span class='line'>100</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">check_chain_group_scripts_ready</span><span class="PUNC">(</span><span class="NAME">chain_group</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>101</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">any_scripts_ready</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>102</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="NAME">chain_group.scripts.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>103</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_group.scripts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">ready</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">chain_group.scripts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">exec_trigger</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>104</span> </span><span class="WHIT"> </span><span class="NAME">any_scripts_ready</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>105</span> </span><span class="WHIT"> </span><span class="NAME">chain_group.scripts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">exec_trigger</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>106</span> </span><span class="WHIT"> </span><span class="NAME">chain_group.scripts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">exec_trigger</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>107</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>108</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">any_scripts_ready</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>110</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>111</span>
-<span class='line'>112</span> </span><span class="WHIT"> </span><span class="COMM">// creates a script load listener</span><span class="WHIT">
-<span class='line'>113</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">create_script_load_listener</span><span class="PUNC">(</span><span class="NAME">elem</span><span class="PUNC">,</span><span class="NAME">registry_item</span><span class="PUNC">,</span><span class="NAME">flag</span><span class="PUNC">,</span><span class="NAME">onload</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>114</span> </span><span class="WHIT"> </span><span class="NAME">elem.onload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">elem.onreadystatechange</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>115</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">elem.readyState</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">elem.readyState</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"complete"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">elem.readyState</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">registry_item</span><span class="PUNC">[</span><span class="NAME">flag</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>116</span> </span><span class="WHIT"> </span><span class="NAME">elem.onload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">elem.onreadystatechange</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">onload</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>118</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>119</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>120</span>
-<span class='line'>121</span> </span><span class="WHIT"> </span><span class="COMM">// script executed handler</span><span class="WHIT">
-<span class='line'>122</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">script_executed</span><span class="PUNC">(</span><span class="NAME">registry_item</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>123</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.ready</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_item.finished</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>124</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="NAME">registry_item.finished_listeners.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>125</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.finished_listeners</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>126</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>127</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.ready_listeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>128</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.finished_listeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>129</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>130</span>
-<span class='line'>131</span> </span><span class="WHIT"> </span><span class="COMM">// make the request for a scriptha</span><span class="WHIT">
-<span class='line'>132</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">request_script</span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">,</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="NAME">registry_item</span><span class="PUNC">,</span><span class="NAME">onload</span><span class="PUNC">,</span><span class="NAME">preload_this_script</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>133</span> </span><span class="WHIT"> </span><span class="COMM">// setTimeout() "yielding" prevents some weird race/crash conditions in older browsers</span><span class="WHIT">
-<span class='line'>134</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>135</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">script</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script_obj.real_src</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">xhr</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>136</span> </span><span class="WHIT">
-<span class='line'>137</span> </span><span class="COMM">// don't proceed until `append_to` is ready to append to</span><span class="WHIT">
-<span class='line'>138</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"item"</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">append_to</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// check if `append_to` ref is still a live node list</span><span class="WHIT">
-<span class='line'>139</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">append_to</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// `append_to` node not yet ready</span><span class="WHIT">
-<span class='line'>140</span> </span><span class="WHIT"> </span><span class="COMM">// try again in a little bit -- note: will re-call the anonymous function in the outer setTimeout, not the parent `request_script()`</span><span class="WHIT">
-<span class='line'>141</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="PUNC">(</span><span class="NAME">arguments.callee</span><span class="PUNC">,</span><span class="NUMB">25</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>142</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>143</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>144</span> </span><span class="WHIT"> </span><span class="COMM">// reassign from live node list ref to pure node ref -- avoids nasty IE bug where changes to DOM invalidate live node lists</span><span class="WHIT">
-<span class='line'>145</span> </span><span class="WHIT"> </span><span class="NAME">append_to</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">append_to</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>146</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>147</span> </span><span class="WHIT"> </span><span class="NAME">script</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"script"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>148</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">script_obj.type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">script.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script_obj.type</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">script_obj.charset</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">script.charset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script_obj.charset</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>150</span> </span><span class="WHIT">
-<span class='line'>151</span> </span><span class="COMM">// should preloading be used for this script?</span><span class="WHIT">
-<span class='line'>152</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">preload_this_script</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>153</span> </span><span class="WHIT"> </span><span class="COMM">// real script preloading?</span><span class="WHIT">
-<span class='line'>154</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">real_preloading</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>155</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_Debug</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="PUNC">(</span><span class="STRN">"start script preload: "</span><span class="PUNC">+</span><span class="NAME">src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'>156</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.elem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>157</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">explicit_preloading</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// explicit preloading (aka, Zakas' proposal)</span><span class="WHIT">
-<span class='line'>158</span> </span><span class="WHIT"> </span><span class="NAME">script.preload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">script.onpreload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">onload</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>160</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>161</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">script.onreadystatechange</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>163</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">script.readyState</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"loaded"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">onload</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>164</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>165</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>166</span> </span><span class="WHIT"> </span><span class="NAME">script.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">src</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>167</span> </span><span class="WHIT"> </span><span class="COMM">// NOTE: no append to DOM yet, appending will happen when ready to execute</span><span class="WHIT">
-<span class='line'>168</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>169</span> </span><span class="WHIT"> </span><span class="COMM">// same-domain and XHR allowed? use XHR preloading</span><span class="WHIT">
-<span class='line'>170</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">preload_this_script</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">src.indexOf</span><span class="PUNC">(</span><span class="NAME">root_domain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_UseLocalXHR</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>171</span> </span><span class="WHIT"> </span><span class="NAME">xhr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">XMLHttpRequest</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// note: IE never uses XHR (it supports true preloading), so no more need for ActiveXObject fallback for IE <= 7</span><span class="WHIT">
-<span class='line'>172</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_Debug</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="PUNC">(</span><span class="STRN">"start script preload (xhr): "</span><span class="PUNC">+</span><span class="NAME">src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'>173</span> </span><span class="WHIT"> </span><span class="NAME">xhr.onreadystatechange</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>174</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">xhr.readyState</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>175</span> </span><span class="WHIT"> </span><span class="NAME">xhr.onreadystatechange</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// fix a memory leak in IE</span><span class="WHIT">
-<span class='line'>176</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.text</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xhr.responseText</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n//@ sourceURL="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">src</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// http://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/</span><span class="WHIT">
-<span class='line'>177</span> </span><span class="WHIT"> </span><span class="NAME">onload</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>178</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>179</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>180</span> </span><span class="WHIT"> </span><span class="NAME">xhr.open</span><span class="PUNC">(</span><span class="STRN">"GET"</span><span class="PUNC">,</span><span class="NAME">src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>181</span> </span><span class="WHIT"> </span><span class="NAME">xhr.send</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>182</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>183</span> </span><span class="WHIT"> </span><span class="COMM">// as a last resort, use cache-preloading</span><span class="WHIT">
-<span class='line'>184</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>185</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_Debug</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="PUNC">(</span><span class="STRN">"start script preload (cache): "</span><span class="PUNC">+</span><span class="NAME">src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'>186</span> </span><span class="WHIT"> </span><span class="NAME">script.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"text/cache-script"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>187</span> </span><span class="WHIT"> </span><span class="NAME">create_script_load_listener</span><span class="PUNC">(</span><span class="NAME">script</span><span class="PUNC">,</span><span class="NAME">registry_item</span><span class="PUNC">,</span><span class="STRN">"ready"</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>188</span> </span><span class="WHIT"> </span><span class="NAME">append_to.removeChild</span><span class="PUNC">(</span><span class="NAME">script</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>189</span> </span><span class="WHIT"> </span><span class="NAME">onload</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>190</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>191</span> </span><span class="WHIT"> </span><span class="NAME">script.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">src</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>192</span> </span><span class="WHIT"> </span><span class="NAME">append_to.insertBefore</span><span class="PUNC">(</span><span class="NAME">script</span><span class="PUNC">,</span><span class="NAME">append_to.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>193</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>194</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>195</span> </span><span class="WHIT"> </span><span class="COMM">// use async=false for ordered async? parallel-load-serial-execute http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order</span><span class="WHIT">
-<span class='line'>196</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">script_ordered_async</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>197</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_Debug</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="PUNC">(</span><span class="STRN">"start script load (ordered async): "</span><span class="PUNC">+</span><span class="NAME">src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'>198</span> </span><span class="WHIT"> </span><span class="NAME">script.async</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>199</span> </span><span class="WHIT"> </span><span class="NAME">create_script_load_listener</span><span class="PUNC">(</span><span class="NAME">script</span><span class="PUNC">,</span><span class="NAME">registry_item</span><span class="PUNC">,</span><span class="STRN">"finished"</span><span class="PUNC">,</span><span class="NAME">onload</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>200</span> </span><span class="WHIT"> </span><span class="NAME">script.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">src</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>201</span> </span><span class="WHIT"> </span><span class="NAME">append_to.insertBefore</span><span class="PUNC">(</span><span class="NAME">script</span><span class="PUNC">,</span><span class="NAME">append_to.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>202</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>203</span> </span><span class="WHIT"> </span><span class="COMM">// otherwise, just a normal script element</span><span class="WHIT">
-<span class='line'>204</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>205</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_Debug</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="PUNC">(</span><span class="STRN">"start script load: "</span><span class="PUNC">+</span><span class="NAME">src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'>206</span> </span><span class="WHIT"> </span><span class="NAME">create_script_load_listener</span><span class="PUNC">(</span><span class="NAME">script</span><span class="PUNC">,</span><span class="NAME">registry_item</span><span class="PUNC">,</span><span class="STRN">"finished"</span><span class="PUNC">,</span><span class="NAME">onload</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>207</span> </span><span class="WHIT"> </span><span class="NAME">script.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">src</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>208</span> </span><span class="WHIT"> </span><span class="NAME">append_to.insertBefore</span><span class="PUNC">(</span><span class="NAME">script</span><span class="PUNC">,</span><span class="NAME">append_to.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>209</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>210</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>211</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>212</span> </span><span class="WHIT">
-<span class='line'>213</span> </span><span class="COMM">// create a clean instance of $LAB</span><span class="WHIT">
-<span class='line'>214</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">create_sandbox</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>215</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">global_defaults</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>216</span> </span><span class="WHIT"> </span><span class="NAME">can_use_preloading</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">real_preloading</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">xhr_or_cache_preloading</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>217</span> </span><span class="WHIT"> </span><span class="NAME">queue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>218</span> </span><span class="WHIT"> </span><span class="NAME">registry</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>219</span> </span><span class="WHIT"> </span><span class="NAME">instanceAPI</span><span class="WHIT">
-<span class='line'>220</span> </span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>221</span> </span><span class="WHIT">
-<span class='line'>222</span> </span><span class="COMM">// global defaults</span><span class="WHIT">
-<span class='line'>223</span> </span><span class="WHIT"> </span><span class="NAME">global_defaults</span><span class="PUNC">[</span><span class="NAME">_UseLocalXHR</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>224</span> </span><span class="WHIT"> </span><span class="NAME">global_defaults</span><span class="PUNC">[</span><span class="NAME">_AlwaysPreserveOrder</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>225</span> </span><span class="WHIT"> </span><span class="NAME">global_defaults</span><span class="PUNC">[</span><span class="NAME">_AllowDuplicates</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>226</span> </span><span class="WHIT"> </span><span class="NAME">global_defaults</span><span class="PUNC">[</span><span class="NAME">_CacheBust</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>227</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="NAME">global_defaults</span><span class="PUNC">[</span><span class="NAME">_Debug</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'>228</span> </span><span class="WHIT"> </span><span class="NAME">global_defaults</span><span class="PUNC">[</span><span class="NAME">_BasePath</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>229</span>
-<span class='line'>230</span> </span><span class="WHIT"> </span><span class="COMM">// execute a script that has been preloaded already</span><span class="WHIT">
-<span class='line'>231</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">execute_preloaded_script</span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">,</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="NAME">registry_item</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>232</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">script</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>233</span> </span><span class="WHIT">
-<span class='line'>234</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">preload_execute_finished</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>235</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">script</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// make sure this only ever fires once</span><span class="WHIT">
-<span class='line'>236</span> </span><span class="WHIT"> </span><span class="NAME">script</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>237</span> </span><span class="WHIT"> </span><span class="NAME">script_executed</span><span class="PUNC">(</span><span class="NAME">registry_item</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>238</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>239</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>240</span> </span><span class="WHIT">
-<span class='line'>241</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">registry</span><span class="PUNC">[</span><span class="NAME">script_obj.src</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">finished</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>242</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_AllowDuplicates</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">registry</span><span class="PUNC">[</span><span class="NAME">script_obj.src</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">finished</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>243</span> </span><span class="WHIT">
-<span class='line'>244</span> </span><span class="NAME">script</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_item.elem</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">"script"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>245</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">script_obj.type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">script.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script_obj.type</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>246</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">script_obj.charset</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">script.charset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script_obj.charset</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">create_script_load_listener</span><span class="PUNC">(</span><span class="NAME">script</span><span class="PUNC">,</span><span class="NAME">registry_item</span><span class="PUNC">,</span><span class="STRN">"finished"</span><span class="PUNC">,</span><span class="NAME">preload_execute_finished</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>248</span> </span><span class="WHIT">
-<span class='line'>249</span> </span><span class="COMM">// script elem was real-preloaded</span><span class="WHIT">
-<span class='line'>250</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">registry_item.elem</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>251</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.elem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>252</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>253</span> </span><span class="WHIT"> </span><span class="COMM">// script was XHR preloaded</span><span class="WHIT">
-<span class='line'>254</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">registry_item.text</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>255</span> </span><span class="WHIT"> </span><span class="NAME">script.onload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script.onreadystatechange</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// script injection doesn't fire these events</span><span class="WHIT">
-<span class='line'>256</span> </span><span class="WHIT"> </span><span class="NAME">script.text</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_item.text</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>257</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>258</span> </span><span class="WHIT"> </span><span class="COMM">// script was cache-preloaded</span><span class="WHIT">
-<span class='line'>259</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>260</span> </span><span class="WHIT"> </span><span class="NAME">script.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script_obj.real_src</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>261</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>262</span> </span><span class="WHIT"> </span><span class="NAME">append_to.insertBefore</span><span class="PUNC">(</span><span class="NAME">script</span><span class="PUNC">,</span><span class="NAME">append_to.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>263</span>
-<span class='line'>264</span> </span><span class="WHIT"> </span><span class="COMM">// manually fire execution callback for injected scripts, since events don't fire</span><span class="WHIT">
-<span class='line'>265</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">registry_item.text</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>266</span> </span><span class="WHIT"> </span><span class="NAME">preload_execute_finished</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>267</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>268</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>269</span> </span><span class="WHIT">
-<span class='line'>270</span> </span><span class="COMM">// process the script request setup</span><span class="WHIT">
-<span class='line'>271</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">do_script</span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">,</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="NAME">chain_group</span><span class="PUNC">,</span><span class="NAME">preload_this_script</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>272</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">registry_item</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>273</span> </span><span class="WHIT"> </span><span class="NAME">registry_items</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>274</span> </span><span class="WHIT"> </span><span class="NAME">ready_cb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">script_obj.ready_cb</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">execute_preloaded_script</span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">,</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="NAME">registry_item</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>275</span> </span><span class="WHIT"> </span><span class="NAME">finished_cb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">script_obj.finished_cb</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="NAME">chain_group</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>276</span> </span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>277</span> </span><span class="WHIT">
-<span class='line'>278</span> </span><span class="NAME">script_obj.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">canonical_uri</span><span class="PUNC">(</span><span class="NAME">script_obj.src</span><span class="PUNC">,</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_BasePath</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>279</span> </span><span class="WHIT"> </span><span class="NAME">script_obj.real_src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script_obj.src</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='line'>280</span> </span><span class="COMM">// append cache-bust param to URL?</span><span class="WHIT">
-<span class='line'>281</span> </span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_CacheBust</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="REGX">/\?.*$/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">script_obj.src</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"&_"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"?_"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">~</span><span class="PUNC">~</span><span class="PUNC">(</span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">*</span><span class="NUMB">1</span><span class="NAME">E9</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"="</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>282</span> </span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>283</span> </span><span class="WHIT">
-<span class='line'>284</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">registry</span><span class="PUNC">[</span><span class="NAME">script_obj.src</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">registry</span><span class="PUNC">[</span><span class="NAME">script_obj.src</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">items</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">finished</span><span class="PUNC">:</span><span class="KEYW">false</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>285</span> </span><span class="WHIT"> </span><span class="NAME">registry_items</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry</span><span class="PUNC">[</span><span class="NAME">script_obj.src</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">items</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>286</span>
-<span class='line'>287</span> </span><span class="WHIT"> </span><span class="COMM">// allowing duplicates, or is this the first recorded load of this script?</span><span class="WHIT">
-<span class='line'>288</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_AllowDuplicates</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">registry_items.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>289</span> </span><span class="WHIT"> </span><span class="NAME">registry_item</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_items</span><span class="PUNC">[</span><span class="NAME">registry_items.length</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>290</span> </span><span class="WHIT"> </span><span class="NAME">ready</span><span class="PUNC">:</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>291</span> </span><span class="WHIT"> </span><span class="NAME">finished</span><span class="PUNC">:</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>292</span> </span><span class="WHIT"> </span><span class="NAME">ready_listeners</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="NAME">ready_cb</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>293</span> </span><span class="WHIT"> </span><span class="NAME">finished_listeners</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="NAME">finished_cb</span><span class="PUNC">]</span><span class="WHIT">
-<span class='line'>294</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>295</span>
-<span class='line'>296</span> </span><span class="WHIT"> </span><span class="NAME">request_script</span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">,</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="NAME">registry_item</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>297</span> </span><span class="WHIT"> </span><span class="COMM">// which callback type to pass?</span><span class="WHIT">
-<span class='line'>298</span> </span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
-<span class='line'>299</span> </span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">preload_this_script</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="COMM">// depends on script-preloading</span><span class="WHIT">
-<span class='line'>300</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>301</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.ready</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>302</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="NAME">registry_item.ready_listeners.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>303</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.ready_listeners</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>304</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>305</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.ready_listeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>306</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>307</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">script_executed</span><span class="PUNC">(</span><span class="NAME">registry_item</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>308</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>309</span> </span><span class="WHIT"> </span><span class="COMM">// signal if script-preloading should be used or not</span><span class="WHIT">
-<span class='line'>310</span> </span><span class="WHIT"> </span><span class="NAME">preload_this_script</span><span class="WHIT">
-<span class='line'>311</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>312</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>313</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>314</span> </span><span class="WHIT"> </span><span class="NAME">registry_item</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_items</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>315</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">registry_item.finished</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>316</span> </span><span class="WHIT"> </span><span class="NAME">finished_cb</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>317</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>318</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>319</span> </span><span class="WHIT"> </span><span class="NAME">registry_item.finished_listeners.push</span><span class="PUNC">(</span><span class="NAME">finished_cb</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>320</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>321</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>322</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>323</span>
-<span class='line'>324</span> </span><span class="WHIT"> </span><span class="COMM">// creates a closure for each separate chain spawned from this $LAB instance, to keep state cleanly separated between chains</span><span class="WHIT">
-<span class='line'>325</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">create_chain</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>326</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chainedAPI</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>327</span> </span><span class="WHIT"> </span><span class="NAME">chain_opts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">merge_objs</span><span class="PUNC">(</span><span class="NAME">global_defaults</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>328</span> </span><span class="WHIT"> </span><span class="NAME">chain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>329</span> </span><span class="WHIT"> </span><span class="NAME">exec_cursor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>330</span> </span><span class="WHIT"> </span><span class="NAME">scripts_currently_loading</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>331</span> </span><span class="WHIT"> </span><span class="NAME">group</span><span class="WHIT">
-<span class='line'>332</span> </span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>333</span> </span><span class="WHIT">
-<span class='line'>334</span> </span><span class="COMM">// called when a script has finished preloading</span><span class="WHIT">
-<span class='line'>335</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">chain_script_ready</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="NAME">exec_trigger</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>336</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_Debug</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="PUNC">(</span><span class="STRN">"script preload finished: "</span><span class="PUNC">+</span><span class="NAME">script_obj.real_src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'>337</span> </span><span class="WHIT"> </span><span class="NAME">script_obj.ready</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>338</span> </span><span class="WHIT"> </span><span class="NAME">script_obj.exec_trigger</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">exec_trigger</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>339</span> </span><span class="WHIT"> </span><span class="NAME">advance_exec_cursor</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// will only check for 'ready' scripts to be executed</span><span class="WHIT">
-<span class='line'>340</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>341</span>
-<span class='line'>342</span> </span><span class="WHIT"> </span><span class="COMM">// called when a script has finished executing</span><span class="WHIT">
-<span class='line'>343</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">chain_script_executed</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="NAME">chain_group</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>344</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_Debug</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="PUNC">(</span><span class="STRN">"script execution finished: "</span><span class="PUNC">+</span><span class="NAME">script_obj.real_src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'>345</span> </span><span class="WHIT"> </span><span class="NAME">script_obj.ready</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script_obj.finished</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>346</span> </span><span class="WHIT"> </span><span class="NAME">script_obj.exec_trigger</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>347</span> </span><span class="WHIT"> </span><span class="COMM">// check if chain group is all finished</span><span class="WHIT">
-<span class='line'>348</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="NAME">chain_group.scripts.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>349</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">chain_group.scripts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">finished</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>350</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>351</span> </span><span class="WHIT"> </span><span class="COMM">// chain_group is all finished if we get this far</span><span class="WHIT">
-<span class='line'>352</span> </span><span class="WHIT"> </span><span class="NAME">chain_group.finished</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>353</span> </span><span class="WHIT"> </span><span class="NAME">advance_exec_cursor</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>354</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>355</span>
-<span class='line'>356</span> </span><span class="WHIT"> </span><span class="COMM">// main driver for executing each part of the chain</span><span class="WHIT">
-<span class='line'>357</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">advance_exec_cursor</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>358</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">exec_cursor</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">chain.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>359</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">is_func</span><span class="PUNC">(</span><span class="NAME">chain</span><span class="PUNC">[</span><span class="NAME">exec_cursor</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>360</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_Debug</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">log_msg</span><span class="PUNC">(</span><span class="STRN">"$LAB.wait() executing: "</span><span class="PUNC">+</span><span class="NAME">chain</span><span class="PUNC">[</span><span class="NAME">exec_cursor</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'>361</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">chain</span><span class="PUNC">[</span><span class="NAME">exec_cursor</span><span class="PUNC">++</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">err</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>362</span> </span><span class="WHIT"> </span><span class="COMM">/*!START_DEBUG*/</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_Debug</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">log_error</span><span class="PUNC">(</span><span class="STRN">"$LAB.wait() error caught: "</span><span class="PUNC">,</span><span class="NAME">err</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">/*!END_DEBUG*/</span><span class="WHIT">
-<span class='line'>363</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>364</span> </span><span class="WHIT"> </span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>365</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>366</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">chain</span><span class="PUNC">[</span><span class="NAME">exec_cursor</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">finished</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>367</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">check_chain_group_scripts_ready</span><span class="PUNC">(</span><span class="NAME">chain</span><span class="PUNC">[</span><span class="NAME">exec_cursor</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>368</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>369</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>370</span> </span><span class="WHIT"> </span><span class="NAME">exec_cursor</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>371</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>372</span> </span><span class="WHIT"> </span><span class="COMM">// we've reached the end of the chain (so far)</span><span class="WHIT">
-<span class='line'>373</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">exec_cursor</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">chain.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>374</span> </span><span class="WHIT"> </span><span class="NAME">scripts_currently_loading</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>375</span> </span><span class="WHIT"> </span><span class="NAME">group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>376</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>377</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>378</span> </span><span class="WHIT">
-<span class='line'>379</span> </span><span class="COMM">// setup next chain script group</span><span class="WHIT">
-<span class='line'>380</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">init_script_chain_group</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>381</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">group</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">group.scripts</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>382</span> </span><span class="WHIT"> </span><span class="NAME">chain.push</span><span class="PUNC">(</span><span class="NAME">group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">scripts</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">finished</span><span class="PUNC">:</span><span class="KEYW">true</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>383</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>384</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>385</span>
-<span class='line'>386</span> </span><span class="WHIT"> </span><span class="COMM">// API for $LAB chains</span><span class="WHIT">
-<span class='line'>387</span> </span><span class="WHIT"> </span><span class="NAME">chainedAPI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>388</span> </span><span class="WHIT"> </span><span class="COMM">// start loading one or more scripts</span><span class="WHIT">
-<span class='line'>389</span> </span><span class="WHIT"> </span><span class="NAME">script</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>390</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>391</span> </span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="NAME">script_list</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>392</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">splice_args</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>393</span> </span><span class="WHIT">
-<span class='line'>394</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">is_array</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>395</span> </span><span class="WHIT"> </span><span class="NAME">script_list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">script_obj</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>396</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>397</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC"><</span><span class="NAME">script_list.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>398</span> </span><span class="WHIT"> </span><span class="NAME">init_script_chain_group</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>399</span> </span><span class="WHIT"> </span><span class="NAME">script_obj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script_list</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>400</span> </span><span class="WHIT">
-<span class='line'>401</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">is_func</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">script_obj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script_obj</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>402</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">script_obj</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>403</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">is_array</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>404</span> </span><span class="WHIT"> </span><span class="COMM">// set up an array of arguments to pass to splice()</span><span class="WHIT">
-<span class='line'>405</span> </span><span class="WHIT"> </span><span class="NAME">splice_args</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">slice.call</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// first include the actual array elements we want to splice in</span><span class="WHIT">
-<span class='line'>406</span> </span><span class="WHIT"> </span><span class="NAME">splice_args.unshift</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// next, put the `index` and `howMany` parameters onto the beginning of the splice-arguments array</span><span class="WHIT">
-<span class='line'>407</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">splice.apply</span><span class="PUNC">(</span><span class="NAME">script_list</span><span class="PUNC">,</span><span class="NAME">splice_args</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// use the splice-arguments array as arguments for splice()</span><span class="WHIT">
-<span class='line'>408</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// adjust `j` to account for the loop's subsequent `j++`, so that the next loop iteration uses the same `j` index value</span><span class="WHIT">
-<span class='line'>409</span> </span><span class="WHIT"> </span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>410</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>411</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">script_obj</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">script_obj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">src</span><span class="PUNC">:</span><span class="NAME">script_obj</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>412</span> </span><span class="WHIT"> </span><span class="NAME">script_obj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">merge_objs</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>413</span> </span><span class="WHIT"> </span><span class="NAME">ready</span><span class="PUNC">:</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>414</span> </span><span class="WHIT"> </span><span class="NAME">ready_cb</span><span class="PUNC">:</span><span class="NAME">chain_script_ready</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>415</span> </span><span class="WHIT"> </span><span class="NAME">finished</span><span class="PUNC">:</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>416</span> </span><span class="WHIT"> </span><span class="NAME">finished_cb</span><span class="PUNC">:</span><span class="NAME">chain_script_executed</span><span class="WHIT">
-<span class='line'>417</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>418</span> </span><span class="WHIT"> </span><span class="NAME">group.finished</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>419</span> </span><span class="WHIT"> </span><span class="NAME">group.scripts.push</span><span class="PUNC">(</span><span class="NAME">script_obj</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>420</span> </span><span class="WHIT">
-<span class='line'>421</span> </span><span class="NAME">do_script</span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">,</span><span class="NAME">script_obj</span><span class="PUNC">,</span><span class="NAME">group</span><span class="PUNC">,</span><span class="PUNC">(</span><span class="NAME">can_use_preloading</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">scripts_currently_loading</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>422</span> </span><span class="WHIT"> </span><span class="NAME">scripts_currently_loading</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>423</span> </span><span class="WHIT">
-<span class='line'>424</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain_opts</span><span class="PUNC">[</span><span class="NAME">_AlwaysPreserveOrder</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">chainedAPI.wait</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>425</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>426</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>427</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>428</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">chainedAPI</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>429</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>430</span> </span><span class="WHIT"> </span><span class="COMM">// force LABjs to pause in execution at this point in the chain, until the execution thus far finishes, before proceeding</span><span class="WHIT">
-<span class='line'>431</span> </span><span class="WHIT"> </span><span class="NAME">wait</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>432</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>433</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>434</span> </span><span class="WHIT"> </span><span class="NAME">chain.push</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>435</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>436</span> </span><span class="WHIT"> </span><span class="NAME">group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chain</span><span class="PUNC">[</span><span class="NAME">chain.length</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>437</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>438</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="NAME">group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>439</span> </span><span class="WHIT">
-<span class='line'>440</span> </span><span class="NAME">advance_exec_cursor</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>441</span> </span><span class="WHIT">
-<span class='line'>442</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">chainedAPI</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>443</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>444</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>445</span>
-<span class='line'>446</span> </span><span class="WHIT"> </span><span class="COMM">// the first chain link API (includes `setOptions` only this first time)</span><span class="WHIT">
-<span class='line'>447</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>448</span> </span><span class="WHIT"> </span><span class="NAME">script</span><span class="PUNC">:</span><span class="NAME">chainedAPI.script</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>449</span> </span><span class="NAME">wait</span><span class="PUNC">:</span><span class="NAME">chainedAPI.wait</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>450</span> </span><span class="NAME">setOptions</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">opts</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>451</span> </span><span class="WHIT"> </span><span class="NAME">merge_objs</span><span class="PUNC">(</span><span class="NAME">opts</span><span class="PUNC">,</span><span class="NAME">chain_opts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>452</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">chainedAPI</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>453</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>454</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>455</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>456</span>
-<span class='line'>457</span> </span><span class="WHIT"> </span><span class="COMM">// API for each initial $LAB instance (before chaining starts)</span><span class="WHIT">
-<span class='line'>458</span> </span><span class="WHIT"> </span><span class="NAME">instanceAPI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>459</span> </span><span class="WHIT"> </span><span class="COMM">// main API functions</span><span class="WHIT">
-<span class='line'>460</span> </span><span class="WHIT"> </span><span class="NAME">setGlobalDefaults</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">opts</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>461</span> </span><span class="WHIT"> </span><span class="NAME">merge_objs</span><span class="PUNC">(</span><span class="NAME">opts</span><span class="PUNC">,</span><span class="NAME">global_defaults</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>462</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">instanceAPI</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>463</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>464</span> </span><span class="WHIT"> </span><span class="NAME">setOptions</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>465</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">create_chain</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">setOptions.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>466</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>467</span> </span><span class="WHIT"> </span><span class="NAME">script</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>468</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">create_chain</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">script.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>469</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>470</span> </span><span class="WHIT"> </span><span class="NAME">wait</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>471</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">create_chain</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">wait.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>472</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>473</span>
-<span class='line'>474</span> </span><span class="WHIT"> </span><span class="COMM">// built-in queuing for $LAB `script()` and `wait()` calls</span><span class="WHIT">
-<span class='line'>475</span> </span><span class="WHIT"> </span><span class="COMM">// useful for building up a chain programmatically across various script locations, and simulating</span><span class="WHIT">
-<span class='line'>476</span> </span><span class="WHIT"> </span><span class="COMM">// execution of the chain</span><span class="WHIT">
-<span class='line'>477</span> </span><span class="WHIT"> </span><span class="NAME">queueScript</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>478</span> </span><span class="WHIT"> </span><span class="NAME">queue</span><span class="PUNC">[</span><span class="NAME">queue.length</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">type</span><span class="PUNC">:</span><span class="STRN">"script"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">args</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">slice.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>479</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">instanceAPI</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>480</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>481</span> </span><span class="WHIT"> </span><span class="NAME">queueWait</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>482</span> </span><span class="WHIT"> </span><span class="NAME">queue</span><span class="PUNC">[</span><span class="NAME">queue.length</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">type</span><span class="PUNC">:</span><span class="STRN">"wait"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">args</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">slice.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>483</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">instanceAPI</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>484</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>485</span> </span><span class="WHIT"> </span><span class="NAME">runQueue</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>486</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">$L</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">instanceAPI</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">=</span><span class="NAME">queue.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NAME">len</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">val</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>487</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="PUNC">--</span><span class="NAME">i</span><span class="PUNC">>=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>488</span> </span><span class="WHIT"> </span><span class="NAME">val</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">queue.shift</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>489</span> </span><span class="WHIT"> </span><span class="NAME">$L</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$L</span><span class="PUNC">[</span><span class="NAME">val.type</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="NAME">val.args</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>490</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>491</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">$L</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>492</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>493</span>
-<span class='line'>494</span> </span><span class="WHIT"> </span><span class="COMM">// rollback `[global].$LAB` to what it was before this file was loaded, the return this current instance of $LAB</span><span class="WHIT">
-<span class='line'>495</span> </span><span class="WHIT"> </span><span class="NAME">noConflict</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>496</span> </span><span class="WHIT"> </span><span class="NAME">global.$LAB</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_$LAB</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>497</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">instanceAPI</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>498</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>499</span>
-<span class='line'>500</span> </span><span class="WHIT"> </span><span class="COMM">// create another clean instance of $LAB</span><span class="WHIT">
-<span class='line'>501</span> </span><span class="WHIT"> </span><span class="NAME">sandbox</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>502</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">create_sandbox</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>503</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>504</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>505</span>
-<span class='line'>506</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">instanceAPI</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>507</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>508</span>
-<span class='line'>509</span> </span><span class="WHIT"> </span><span class="COMM">// create the main instance of $LAB</span><span class="WHIT">
-<span class='line'>510</span> </span><span class="WHIT"> </span><span class="NAME">global.$LAB</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">create_sandbox</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>511</span>
-<span class='line'>512</span>
-<span class='line'>513</span> </span><span class="WHIT"> </span><span class="COMM">/* The following "hack" was suggested by Andrea Giammarchi and adapted from: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html
-<span class='line'>514</span> NOTE: this hack only operates in FF and then only in versions where document.readyState is not present (FF < 3.6?).
-<span class='line'>515</span>
-<span class='line'>516</span> The hack essentially "patches" the **page** that LABjs is loaded onto so that it has a proper conforming document.readyState, so that if a script which does
-<span class='line'>517</span> proper and safe dom-ready detection is loaded onto a page, after dom-ready has passed, it will still be able to detect this state, by inspecting the now hacked
-<span class='line'>518</span> document.readyState property. The loaded script in question can then immediately trigger any queued code executions that were waiting for the DOM to be ready.
-<span class='line'>519</span> For instance, jQuery 1.4+ has been patched to take advantage of document.readyState, which is enabled by this hack. But 1.3.2 and before are **not** safe or
-<span class='line'>520</span> fixed by this hack, and should therefore **not** be lazy-loaded by script loader tools such as LABjs.
-<span class='line'>521</span> */</span><span class="WHIT">
-<span class='line'>522</span> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">addEvent</span><span class="PUNC">,</span><span class="NAME">domLoaded</span><span class="PUNC">,</span><span class="NAME">handler</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>523</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">document.readyState</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">document</span><span class="PUNC">[</span><span class="NAME">addEvent</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>524</span> </span><span class="WHIT"> </span><span class="NAME">document.readyState</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"loading"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>525</span> </span><span class="WHIT"> </span><span class="NAME">document</span><span class="PUNC">[</span><span class="NAME">addEvent</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">domLoaded</span><span class="PUNC">,</span><span class="NAME">handler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>526</span> </span><span class="WHIT"> </span><span class="NAME">document.removeEventListener</span><span class="PUNC">(</span><span class="NAME">domLoaded</span><span class="PUNC">,</span><span class="NAME">handler</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>527</span> </span><span class="WHIT"> </span><span class="NAME">document.readyState</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"complete"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>528</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>529</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>530</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="STRN">"addEventListener"</span><span class="PUNC">,</span><span class="STRN">"DOMContentLoaded"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>531</span>
-<span class='line'>532</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">/*
-<span class='line'>533</span> mustache.js — Logic-less templates in JavaScript
-<span class='line'>534</span>
-<span class='line'>535</span> See http://mustache.github.com/ for more info.
-<span class='line'>536</span> */</span><span class="WHIT">
-<span class='line'>537</span>
-<span class='line'>538</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Mustache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>539</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Renderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>540</span>
-<span class='line'>541</span> </span><span class="WHIT"> </span><span class="NAME">Renderer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>542</span> </span><span class="WHIT"> </span><span class="NAME">otag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"{{"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>543</span> </span><span class="WHIT"> </span><span class="NAME">ctag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"}}"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>544</span> </span><span class="WHIT"> </span><span class="NAME">pragmas</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>545</span> </span><span class="WHIT"> </span><span class="NAME">buffer</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>546</span> </span><span class="WHIT"> </span><span class="NAME">pragmas_implemented</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>547</span> </span><span class="WHIT"> </span><span class="STRN">"IMPLICIT-ITERATOR"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT">
-<span class='line'>548</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>549</span> </span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>550</span>
-<span class='line'>551</span> </span><span class="WHIT"> </span><span class="NAME">render</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">in_recursion</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>552</span> </span><span class="WHIT"> </span><span class="COMM">// reset buffer & set context</span><span class="WHIT">
-<span class='line'>553</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">in_recursion</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>554</span> </span><span class="WHIT"> </span><span class="NAME">this.context</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>555</span> </span><span class="WHIT"> </span><span class="NAME">this.buffer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// TODO: make this non-lazy</span><span class="WHIT">
-<span class='line'>556</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>557</span>
-<span class='line'>558</span> </span><span class="WHIT"> </span><span class="COMM">// fail fast</span><span class="WHIT">
-<span class='line'>559</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.includes</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>560</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">in_recursion</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>561</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>562</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>563</span> </span><span class="WHIT"> </span><span class="NAME">this.send</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>564</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>565</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>566</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>567</span>
-<span class='line'>568</span> </span><span class="WHIT"> </span><span class="NAME">template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.render_pragmas</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>569</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">html</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.render_section</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>570</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">in_recursion</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>571</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.render_tags</span><span class="PUNC">(</span><span class="NAME">html</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">in_recursion</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>572</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>573</span>
-<span class='line'>574</span> </span><span class="WHIT"> </span><span class="NAME">this.render_tags</span><span class="PUNC">(</span><span class="NAME">html</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">in_recursion</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>575</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>576</span>
-<span class='line'>577</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>578</span> Sends parsed lines
-<span class='line'>579</span> */</span><span class="WHIT">
-<span class='line'>580</span> </span><span class="WHIT"> </span><span class="NAME">send</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">line</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>581</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">line</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>582</span> </span><span class="WHIT"> </span><span class="NAME">this.buffer.push</span><span class="PUNC">(</span><span class="NAME">line</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>583</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>584</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>585</span>
-<span class='line'>586</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>587</span> Looks for %PRAGMAS
-<span class='line'>588</span> */</span><span class="WHIT">
-<span class='line'>589</span> </span><span class="WHIT"> </span><span class="NAME">render_pragmas</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>590</span> </span><span class="WHIT"> </span><span class="COMM">// no pragmas</span><span class="WHIT">
-<span class='line'>591</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.includes</span><span class="PUNC">(</span><span class="STRN">"%"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>592</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>593</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>594</span>
-<span class='line'>595</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>596</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">regex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="NAME">this.otag</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"%([\\w-]+) ?([\\w]+=[\\w]+)?"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='line'>597</span> </span><span class="WHIT"> </span><span class="NAME">this.ctag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"g"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>598</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">template.replace</span><span class="PUNC">(</span><span class="NAME">regex</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">match</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pragma</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>599</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">that.pragmas_implemented</span><span class="PUNC">[</span><span class="NAME">pragma</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>600</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">message</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>601</span> </span><span class="STRN">"This implementation of mustache doesn't understand the '"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='line'>602</span> </span><span class="WHIT"> </span><span class="NAME">pragma</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"' pragma"</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>603</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>604</span> </span><span class="WHIT"> </span><span class="NAME">that.pragmas</span><span class="PUNC">[</span><span class="NAME">pragma</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>605</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>606</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">opts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.split</span><span class="PUNC">(</span><span class="STRN">"="</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>607</span> </span><span class="WHIT"> </span><span class="NAME">that.pragmas</span><span class="PUNC">[</span><span class="NAME">pragma</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">opts</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">opts</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>608</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>609</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>610</span> </span><span class="WHIT"> </span><span class="COMM">// ignore unknown pragmas silently</span><span class="WHIT">
-<span class='line'>611</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>612</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>613</span>
-<span class='line'>614</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>615</span> Tries to find a partial in the curent scope and render it
-<span class='line'>616</span> */</span><span class="WHIT">
-<span class='line'>617</span> </span><span class="WHIT"> </span><span class="NAME">render_partial</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>618</span> </span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.trim</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>619</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">partials</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>620</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">message</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"unknown_partial '"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"'"</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>621</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>622</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>623</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.render</span><span class="PUNC">(</span><span class="NAME">partials</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>624</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>625</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.render</span><span class="PUNC">(</span><span class="NAME">partials</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>626</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>627</span>
-<span class='line'>628</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>629</span> Renders inverted (^) and normal (#) sections
-<span class='line'>630</span> */</span><span class="WHIT">
-<span class='line'>631</span> </span><span class="WHIT"> </span><span class="NAME">render_section</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>632</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.includes</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.includes</span><span class="PUNC">(</span><span class="STRN">"^"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>633</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>634</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>635</span>
-<span class='line'>636</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>637</span> </span><span class="WHIT"> </span><span class="COMM">// CSW - Added "+?" so it finds the tighest bound, not the widest</span><span class="WHIT">
-<span class='line'>638</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">regex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="NAME">this.otag</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"(\\^|\\#)\\s*(.+)\\s*"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.ctag</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='line'>639</span> </span><span class="WHIT"> </span><span class="STRN">"\n*([\\s\\S]+?)"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.otag</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\\/\\s*\\2\\s*"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.ctag</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='line'>640</span> </span><span class="WHIT"> </span><span class="STRN">"\\s*"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"mg"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>641</span>
-<span class='line'>642</span> </span><span class="WHIT"> </span><span class="COMM">// for each {{#foo}}{{/foo}} section do...</span><span class="WHIT">
-<span class='line'>643</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">template.replace</span><span class="PUNC">(</span><span class="NAME">regex</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">match</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>644</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.find</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>645</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"^"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// inverted section</span><span class="WHIT">
-<span class='line'>646</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">that.is_array</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>647</span> </span><span class="WHIT"> </span><span class="COMM">// false or empty list, render it</span><span class="WHIT">
-<span class='line'>648</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.render</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>649</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>650</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>651</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>652</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"#"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// normal section</span><span class="WHIT">
-<span class='line'>653</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">that.is_array</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// Enumerable, Let's loop!</span><span class="WHIT">
-<span class='line'>654</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.map</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">row</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>655</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.render</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.create_context</span><span class="PUNC">(</span><span class="NAME">row</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>656</span> </span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>657</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">join</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>658</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">that.is_object</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// Object, Use it as subcontext!</span><span class="WHIT">
-<span class='line'>659</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.render</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.create_context</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>660</span> </span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>661</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>662</span> </span><span class="WHIT"> </span><span class="COMM">// higher order section</span><span class="WHIT">
-<span class='line'>663</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value.call</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>664</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.render</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>665</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>666</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// boolean section</span><span class="WHIT">
-<span class='line'>667</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.render</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>668</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>669</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>670</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>671</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>672</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>673</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>674</span>
-<span class='line'>675</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>676</span> Replace {{foo}} and friends with values from our view
-<span class='line'>677</span> */</span><span class="WHIT">
-<span class='line'>678</span> </span><span class="WHIT"> </span><span class="NAME">render_tags</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">in_recursion</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>679</span> </span><span class="WHIT"> </span><span class="COMM">// tit for tat</span><span class="WHIT">
-<span class='line'>680</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>681</span>
-<span class='line'>682</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">new_regex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>683</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="NAME">that.otag</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='line'>684</span> </span><span class="WHIT"> </span><span class="NAME">that.ctag</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"+"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"g"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>685</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>686</span>
-<span class='line'>687</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">regex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">new_regex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>688</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tag_replace_callback</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">match</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">operator</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>689</span> </span><span class="WHIT"> </span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">operator</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>690</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"!"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="COMM">// ignore comments</span><span class="WHIT">
-<span class='line'>691</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>692</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"="</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="COMM">// set new delimiters, rebuild the replace regexp</span><span class="WHIT">
-<span class='line'>693</span> </span><span class="WHIT"> </span><span class="NAME">that.set_delimiters</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>694</span> </span><span class="WHIT"> </span><span class="NAME">regex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">new_regex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>695</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>696</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">">"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="COMM">// render partial</span><span class="WHIT">
-<span class='line'>697</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.render_partial</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>698</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"{"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="COMM">// the triple mustache is unescaped</span><span class="WHIT">
-<span class='line'>699</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.find</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>700</span> </span><span class="WHIT"> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="COMM">// escape the value</span><span class="WHIT">
-<span class='line'>701</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.escape</span><span class="PUNC">(</span><span class="NAME">that.find</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>702</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>703</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>704</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lines</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">template.split</span><span class="PUNC">(</span><span class="STRN">"\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>705</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">lines.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>706</span> </span><span class="WHIT"> </span><span class="NAME">lines</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lines</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="NAME">regex</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tag_replace_callback</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>707</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">in_recursion</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>708</span> </span><span class="WHIT"> </span><span class="NAME">this.send</span><span class="PUNC">(</span><span class="NAME">lines</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>709</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>710</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>711</span>
-<span class='line'>712</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">in_recursion</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>713</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">lines.join</span><span class="PUNC">(</span><span class="STRN">"\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>714</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>715</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>716</span>
-<span class='line'>717</span> </span><span class="WHIT"> </span><span class="NAME">set_delimiters</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">delimiters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>718</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dels</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delimiters.split</span><span class="PUNC">(</span><span class="STRN">" "</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>719</span> </span><span class="WHIT"> </span><span class="NAME">this.otag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.escape_regex</span><span class="PUNC">(</span><span class="NAME">dels</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>720</span> </span><span class="WHIT"> </span><span class="NAME">this.ctag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.escape_regex</span><span class="PUNC">(</span><span class="NAME">dels</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>721</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>722</span>
-<span class='line'>723</span> </span><span class="WHIT"> </span><span class="NAME">escape_regex</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>724</span> </span><span class="WHIT"> </span><span class="COMM">// thank you Simon Willison</span><span class="WHIT">
-<span class='line'>725</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">arguments.callee.sRE</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>726</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">specials</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
-<span class='line'>727</span> </span><span class="WHIT"> </span><span class="STRN">'/'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'.'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'*'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'+'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'?'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'|'</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>728</span> </span><span class="WHIT"> </span><span class="STRN">'('</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">')'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'['</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">']'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'{'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'}'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'\\'</span><span class="WHIT">
-<span class='line'>729</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>730</span> </span><span class="WHIT"> </span><span class="NAME">arguments.callee.sRE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="WHIT">
-<span class='line'>731</span> </span><span class="WHIT"> </span><span class="STRN">'(\\'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">specials.join</span><span class="PUNC">(</span><span class="STRN">'|\\'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">')'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'g'</span><span class="WHIT">
-<span class='line'>732</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>733</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>734</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">text.replace</span><span class="PUNC">(</span><span class="NAME">arguments.callee.sRE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'\\$1'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>735</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>736</span>
-<span class='line'>737</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>738</span> find `name` in current `context`. That is find me a value
-<span class='line'>739</span> from the view object
-<span class='line'>740</span> */</span><span class="WHIT">
-<span class='line'>741</span> </span><span class="WHIT"> </span><span class="NAME">find</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>742</span> </span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.trim</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>743</span>
-<span class='line'>744</span> </span><span class="WHIT"> </span><span class="COMM">// Checks whether a value is thruthy or false or 0</span><span class="WHIT">
-<span class='line'>745</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">is_kinda_truthy</span><span class="PUNC">(</span><span class="NAME">bool</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>746</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bool</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">bool</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">bool</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>747</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>748</span>
-<span class='line'>749</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>750</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">is_kinda_truthy</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>751</span> </span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>752</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">is_kinda_truthy</span><span class="PUNC">(</span><span class="NAME">this.context</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>753</span> </span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.context</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>754</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>755</span>
-<span class='line'>756</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>757</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value.apply</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>758</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>759</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>760</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>761</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>762</span> </span><span class="WHIT"> </span><span class="COMM">// silently ignore unkown variables</span><span class="WHIT">
-<span class='line'>763</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>764</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>765</span>
-<span class='line'>766</span> </span><span class="WHIT"> </span><span class="COMM">// Utility methods</span><span class="WHIT">
-<span class='line'>767</span>
-<span class='line'>768</span> </span><span class="WHIT"> </span><span class="COMM">/* includes tag */</span><span class="WHIT">
-<span class='line'>769</span> </span><span class="WHIT"> </span><span class="NAME">includes</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">needle</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">haystack</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>770</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">haystack.indexOf</span><span class="PUNC">(</span><span class="NAME">this.otag</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">needle</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>771</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>772</span>
-<span class='line'>773</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>774</span> Does away with nasty characters
-<span class='line'>775</span> */</span><span class="WHIT">
-<span class='line'>776</span> </span><span class="WHIT"> </span><span class="NAME">escape</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>777</span> </span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">String</span><span class="PUNC">(</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>778</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">s.replace</span><span class="PUNC">(</span><span class="REGX">/&(?!\w+;)|["'<>\\]/g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>779</span> </span><span class="WHIT"> </span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>780</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"&"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"&"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>781</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"\\"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"\\\\"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>782</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'"'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">'"'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>783</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"'"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">'''</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>784</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"<"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"<"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>785</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">">"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">">"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>786</span> </span><span class="WHIT"> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>787</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>788</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>789</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>790</span>
-<span class='line'>791</span> </span><span class="WHIT"> </span><span class="COMM">// by @langalex, support for arrays of strings</span><span class="WHIT">
-<span class='line'>792</span> </span><span class="WHIT"> </span><span class="NAME">create_context</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">_context</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>793</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.is_object</span><span class="PUNC">(</span><span class="NAME">_context</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>794</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">_context</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>795</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>796</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iterator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>797</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.pragmas</span><span class="PUNC">[</span><span class="STRN">"IMPLICIT-ITERATOR"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>798</span> </span><span class="WHIT"> </span><span class="NAME">iterator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pragmas</span><span class="PUNC">[</span><span class="STRN">"IMPLICIT-ITERATOR"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">iterator</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>799</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>800</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>801</span> </span><span class="WHIT"> </span><span class="NAME">ctx</span><span class="PUNC">[</span><span class="NAME">iterator</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_context</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>802</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ctx</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>803</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>804</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>805</span>
-<span class='line'>806</span> </span><span class="WHIT"> </span><span class="NAME">is_object</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>807</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>808</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>809</span>
-<span class='line'>810</span> </span><span class="WHIT"> </span><span class="NAME">is_array</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>811</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Object.prototype.toString.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'[object Array]'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>812</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>813</span>
-<span class='line'>814</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>815</span> Gets rid of leading and trailing whitespace
-<span class='line'>816</span> */</span><span class="WHIT">
-<span class='line'>817</span> </span><span class="WHIT"> </span><span class="NAME">trim</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>818</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">s.replace</span><span class="PUNC">(</span><span class="REGX">/^\s*|\s*$/g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>819</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>820</span>
-<span class='line'>821</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>822</span> Why, why, why? Because IE. Cry, cry cry.
-<span class='line'>823</span> */</span><span class="WHIT">
-<span class='line'>824</span> </span><span class="WHIT"> </span><span class="NAME">map</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">array</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>825</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">array.map</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>826</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">array.map</span><span class="PUNC">(</span><span class="NAME">fn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>827</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>828</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>829</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">array.length</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>830</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>831</span> </span><span class="WHIT"> </span><span class="NAME">r.push</span><span class="PUNC">(</span><span class="NAME">fn</span><span class="PUNC">(</span><span class="NAME">array</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>832</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>833</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>834</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>835</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>836</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>837</span>
-<span class='line'>838</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>839</span> </span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"mustache.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>840</span> </span><span class="WHIT"> </span><span class="NAME">version</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"0.3.1-dev"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>841</span>
-<span class='line'>842</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>843</span> Turns a template and view into HTML
-<span class='line'>844</span> */</span><span class="WHIT">
-<span class='line'>845</span> </span><span class="WHIT"> </span><span class="NAME">to_html</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">view</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">send_fun</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>846</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">renderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Renderer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>847</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">send_fun</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>848</span> </span><span class="WHIT"> </span><span class="NAME">renderer.send</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">send_fun</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>849</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>850</span> </span><span class="WHIT"> </span><span class="NAME">renderer.render</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">view</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partials</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>851</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">send_fun</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>852</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">renderer.buffer.join</span><span class="PUNC">(</span><span class="STRN">"\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>853</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>854</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>855</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>856</span> </span><span class="PUNC">}</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>857</span> </span><span class="COMM">// Underscore.js 1.2.3</span><span class="WHIT">
-<span class='line'>858</span> </span><span class="COMM">// (c) 2009-2011 Jeremy Ashkenas, DocumentCloud Inc.</span><span class="WHIT">
-<span class='line'>859</span> </span><span class="COMM">// Underscore is freely distributable under the MIT license.</span><span class="WHIT">
-<span class='line'>860</span> </span><span class="COMM">// Portions of Underscore are inspired or borrowed from Prototype,</span><span class="WHIT">
-<span class='line'>861</span> </span><span class="COMM">// Oliver Steele's Functional, and John Resig's Micro-Templating.</span><span class="WHIT">
-<span class='line'>862</span> </span><span class="COMM">// For all details and documentation:</span><span class="WHIT">
-<span class='line'>863</span> </span><span class="COMM">// http://documentcloud.github.com/underscore</span><span class="WHIT">
-<span class='line'>864</span> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">===</span><span class="NAME">c</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">!==</span><span class="NUMB">0</span><span class="PUNC">||</span><span class="NUMB">1</span><span class="PUNC">/</span><span class="NAME">a</span><span class="PUNC">==</span><span class="NUMB">1</span><span class="PUNC">/</span><span class="NAME">c</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">||</span><span class="NAME">c</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">===</span><span class="NAME">c</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a._chain</span><span class="PUNC">)</span><span class="NAME">a</span><span class="PUNC">=</span><span class="NAME">a._wrapped</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">c._chain</span><span class="PUNC">)</span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">c._wrapped</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a.isEqual</span><span class="PUNC">&&</span><span class="NAME">b.isFunction</span><span class="PUNC">(</span><span class="NAME">a.isEqual</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.isEqual</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">c.isEqual</span><span class="PUNC">&&</span><span class="NAME">b.isFunction</span><span class="PUNC">(</span><span class="NAME">c.isEqual</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">c.isEqual</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="NAME">l.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">!=</span><span class="NAME">l.call</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"[object String]"</span><span class="PUNC">:</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">==</span><span class="NAME">String</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"[object Number]"</span><span class="PUNC">:</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">!=</span><span class="PUNC">+</span><span class="NAME">a</span><span class="PUNC">?</span><span class="NAME">c</span><span class="PUNC">!=</span><span class="PUNC">+</span><span class="NAME">c</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">==</span><span class="NUMB">0</span><span class="PUNC">?</span><span class="NUMB">1</span><span class="PUNC">/</span><span class="NAME">a</span><span class="PUNC">==</span><span class="NUMB">1</span><span class="PUNC">/</span><span class="NAME">c</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">==</span><span class="PUNC">+</span><span class="NAME">c</span><span class="PUNC">;</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"[object Date]"</span><span class="PUNC">:</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"[object Boolean]"</span><span class="PUNC">:</span><span class="KEYW">return</span><span class="PUNC">+</span><span class="NAME">a</span><span class="PUNC">==</span><span class="PUNC">+</span><span class="NAME">c</span><span class="PUNC">;</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"[object RegExp]"</span><span class="PUNC">:</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.source</span><span class="PUNC">==</span><span class="WHIT">
-<span class='line'>865</span> </span><span class="NAME">c.source</span><span class="PUNC">&&</span><span class="NAME">a.global</span><span class="PUNC">==</span><span class="NAME">c.global</span><span class="PUNC">&&</span><span class="NAME">a.multiline</span><span class="PUNC">==</span><span class="NAME">c.multiline</span><span class="PUNC">&&</span><span class="NAME">a.ignoreCase</span><span class="PUNC">==</span><span class="NAME">c.ignoreCase</span><span class="PUNC">}</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">!=</span><span class="STRN">"object"</span><span class="PUNC">||</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">!=</span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">=</span><span class="NAME">d.length</span><span class="PUNC">;</span><span class="NAME">f</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="PUNC">)</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">f</span><span class="PUNC">]</span><span class="PUNC">==</span><span class="NAME">a</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="NAME">d.push</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">=</span><span class="KEYW">true</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">==</span><span class="STRN">"[object Array]"</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">=</span><span class="NAME">a.length</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">=</span><span class="NAME">f</span><span class="PUNC">==</span><span class="NAME">c.length</span><span class="PUNC">)</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="PUNC">;</span><span class="NAME">f</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="PUNC">)</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">=</span><span class="NAME">f</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">==</span><span class="NAME">f</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">&&</span><span class="NAME">r</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">f</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NAME">f</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">break</span><span class="PUNC">}</span><span class="KEYW">else</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="STRN">"constructor"</span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">!=</span><span class="STRN">"constructor"</span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">||</span><span class="NAME">a.constructor</span><span class="PUNC">!=</span><span class="NAME">c.constructor</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">m.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">++</span><span class="PUNC">,</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">=</span><span class="NAME">m.call</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="NAME">r</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">h</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NAME">h</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">h</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">)</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">m.call</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>866</span> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="PUNC">!</span><span class="NAME">f</span><span class="PUNC">--</span><span class="PUNC">)</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="NAME">g</span><span class="PUNC">=</span><span class="PUNC">!</span><span class="NAME">f</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="NAME">d.pop</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">}</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">F</span><span class="PUNC">=</span><span class="NAME">s._</span><span class="PUNC">,</span><span class="NAME">o</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">k</span><span class="PUNC">=</span><span class="NAME">Array.prototype</span><span class="PUNC">,</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">Object.prototype</span><span class="PUNC">,</span><span class="NAME">i</span><span class="PUNC">=</span><span class="NAME">k.slice</span><span class="PUNC">,</span><span class="NAME">G</span><span class="PUNC">=</span><span class="NAME">k.concat</span><span class="PUNC">,</span><span class="NAME">H</span><span class="PUNC">=</span><span class="NAME">k.unshift</span><span class="PUNC">,</span><span class="NAME">l</span><span class="PUNC">=</span><span class="NAME">p.toString</span><span class="PUNC">,</span><span class="NAME">m</span><span class="PUNC">=</span><span class="NAME">p.hasOwnProperty</span><span class="PUNC">,</span><span class="NAME">v</span><span class="PUNC">=</span><span class="NAME">k.forEach</span><span class="PUNC">,</span><span class="NAME">w</span><span class="PUNC">=</span><span class="NAME">k.map</span><span class="PUNC">,</span><span class="NAME">x</span><span class="PUNC">=</span><span class="NAME">k.reduce</span><span class="PUNC">,</span><span class="NAME">y</span><span class="PUNC">=</span><span class="NAME">k.reduceRight</span><span class="PUNC">,</span><span class="NAME">z</span><span class="PUNC">=</span><span class="NAME">k.filter</span><span class="PUNC">,</span><span class="NAME">A</span><span class="PUNC">=</span><span class="NAME">k.every</span><span class="PUNC">,</span><span class="NAME">B</span><span class="PUNC">=</span><span class="NAME">k.some</span><span class="PUNC">,</span><span class="NAME">q</span><span class="PUNC">=</span><span class="NAME">k.indexOf</span><span class="PUNC">,</span><span class="NAME">C</span><span class="PUNC">=</span><span class="NAME">k.lastIndexOf</span><span class="PUNC">,</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">Array.isArray</span><span class="PUNC">,</span><span class="NAME">I</span><span class="PUNC">=</span><span class="NAME">Object.keys</span><span class="PUNC">,</span><span class="NAME">t</span><span class="PUNC">=</span><span class="NAME">Function.prototype.bind</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">exports</span><span class="PUNC">!==</span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">module</span><span class="PUNC">!==</span><span class="STRN">"undefined"</span><span class="PUNC">&&</span><span class="NAME">module.exports</span><span class="PUNC">)</span><span class="NAME">exports</span><span class="PUNC">=</span><span class="NAME">module.exports</span><span class="PUNC">=</span><span class="NAME">b</span><span class="PUNC">;</span><span class="NAME">exports._</span><span class="PUNC">=</span><span class="NAME">b</span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">define</span><span class="PUNC">===</span><span class="STRN">"function"</span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>867</span> </span><span class="NAME">define.amd</span><span class="PUNC">?</span><span class="NAME">define</span><span class="PUNC">(</span><span class="STRN">"underscore"</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">s._</span><span class="PUNC">=</span><span class="NAME">b</span><span class="PUNC">;</span><span class="NAME">b.VERSION</span><span class="PUNC">=</span><span class="STRN">"1.2.3"</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">=</span><span class="NAME">b.each</span><span class="PUNC">=</span><span class="NAME">b.forEach</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">!=</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">&&</span><span class="NAME">a.forEach</span><span class="PUNC">===</span><span class="NAME">v</span><span class="PUNC">)</span><span class="NAME">a.forEach</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a.length</span><span class="PUNC">===</span><span class="PUNC">+</span><span class="NAME">a.length</span><span class="PUNC">)</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">f</span><span class="PUNC">=</span><span class="NAME">a.length</span><span class="PUNC">;</span><span class="NAME">e</span><span class="PUNC"><</span><span class="NAME">f</span><span class="PUNC">;</span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">&&</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">===</span><span class="NAME">o</span><span class="PUNC">)</span><span class="KEYW">break</span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">m.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">===</span><span class="NAME">o</span><span class="PUNC">)</span><span class="KEYW">break</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.map</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">&&</span><span class="NAME">a.map</span><span class="PUNC">===</span><span class="NAME">w</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.map</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">e</span><span class="PUNC">[</span><span class="NAME">e.length</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.reduce</span><span class="PUNC">=</span><span class="NAME">b.foldl</span><span class="PUNC">=</span><span class="NAME">b.inject</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>868</span> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">=</span><span class="NAME">arguments.length</span><span class="PUNC">></span><span class="NUMB">2</span><span class="PUNC">;</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">&&</span><span class="NAME">a.reduce</span><span class="PUNC">===</span><span class="NAME">x</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">b.bind</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">f</span><span class="PUNC">?</span><span class="NAME">a.reduce</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">a.reduce</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">f</span><span class="PUNC">?</span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">f</span><span class="PUNC">=</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">f</span><span class="PUNC">)</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TypeError</span><span class="PUNC">(</span><span class="STRN">"Reduce of empty array with no initial value"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.reduceRight</span><span class="PUNC">=</span><span class="NAME">b.foldr</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">=</span><span class="NAME">arguments.length</span><span class="PUNC">></span><span class="NUMB">2</span><span class="PUNC">;</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">&&</span><span class="NAME">a.reduceRight</span><span class="PUNC">===</span><span class="NAME">y</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">b.bind</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">f</span><span class="PUNC">?</span><span class="NAME">a.reduceRight</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">a.reduceRight</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">=</span><span class="NAME">b.toArray</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">reverse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">e</span><span class="PUNC">&&</span><span class="PUNC">!</span><span class="NAME">f</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">b.bind</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">?</span><span class="NAME">b.reduce</span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>869</span> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">b.reduce</span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.find</span><span class="PUNC">=</span><span class="NAME">b.detect</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="NAME">D</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">true</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.filter</span><span class="PUNC">=</span><span class="NAME">b.select</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">z</span><span class="PUNC">&&</span><span class="NAME">a.filter</span><span class="PUNC">===</span><span class="NAME">z</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.filter</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">[</span><span class="NAME">e.length</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.reject</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">||</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">[</span><span class="NAME">e.length</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.every</span><span class="PUNC">=</span><span class="NAME">b.all</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="KEYW">true</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">A</span><span class="PUNC">&&</span><span class="NAME">a.every</span><span class="PUNC">===</span><span class="NAME">A</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.every</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>870</span> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">=</span><span class="NAME">e</span><span class="PUNC">&&</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">D</span><span class="PUNC">=</span><span class="NAME">b.some</span><span class="PUNC">=</span><span class="NAME">b.any</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">c</span><span class="PUNC">||</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">b.identity</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="KEYW">false</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">B</span><span class="PUNC">&&</span><span class="NAME">a.some</span><span class="PUNC">===</span><span class="NAME">B</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.some</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">||</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">=</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="PUNC">!</span><span class="PUNC">!</span><span class="NAME">e</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.include</span><span class="PUNC">=</span><span class="NAME">b.contains</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="KEYW">false</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">&&</span><span class="NAME">a.indexOf</span><span class="PUNC">===</span><span class="NAME">q</span><span class="PUNC">?</span><span class="NAME">a.indexOf</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">:</span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">D</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">===</span><span class="NAME">c</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.invoke</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.map</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="PUNC">(</span><span class="NAME">c.call</span><span class="PUNC">?</span><span class="NAME">c</span><span class="PUNC">||</span><span class="NAME">a</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">apply</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>871</span> </span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.pluck</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.map</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.max</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">c</span><span class="PUNC">&&</span><span class="NAME">b.isArray</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.max.apply</span><span class="PUNC">(</span><span class="NAME">Math</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">c</span><span class="PUNC">&&</span><span class="NAME">b.isEmpty</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">computed</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">c</span><span class="PUNC">?</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">;</span><span class="NAME">b</span><span class="PUNC">>=</span><span class="NAME">e.computed</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">value</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">computed</span><span class="PUNC">:</span><span class="NAME">b</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e.value</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.min</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">c</span><span class="PUNC">&&</span><span class="NAME">b.isArray</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.min.apply</span><span class="PUNC">(</span><span class="NAME">Math</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">c</span><span class="PUNC">&&</span><span class="NAME">b.isEmpty</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">computed</span><span class="PUNC">:</span><span class="NAME">Infinity</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">c</span><span class="PUNC">?</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">;</span><span class="NAME">b</span><span class="PUNC"><</span><span class="NAME">e.computed</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">value</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>872</span> </span><span class="NAME">computed</span><span class="PUNC">:</span><span class="NAME">b</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e.value</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.shuffle</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">f</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">f</span><span class="PUNC">==</span><span class="NUMB">0</span><span class="PUNC">?</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">:</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">*</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NAME">f</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NAME">b</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NAME">b</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.sortBy</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.pluck</span><span class="PUNC">(</span><span class="NAME">b.map</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="PUNC">{</span><span class="NAME">value</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">criteria</span><span class="PUNC">:</span><span class="NAME">c.call</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">sort</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">a.criteria</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">c.criteria</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC"><</span><span class="NAME">d</span><span class="PUNC">?</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">:</span><span class="NAME">b</span><span class="PUNC">></span><span class="NAME">d</span><span class="PUNC">?</span><span class="NUMB">1</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="STRN">"value"</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.groupBy</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">=</span><span class="NAME">b.isFunction</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="NAME">c</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">e</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">||</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">push</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.sortedIndex</span><span class="PUNC">=</span><span class="WHIT">
-<span class='line'>873</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">d</span><span class="PUNC">||</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">b.identity</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">f</span><span class="PUNC">=</span><span class="NAME">a.length</span><span class="PUNC">;</span><span class="NAME">e</span><span class="PUNC"><</span><span class="NAME">f</span><span class="PUNC">;</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">=</span><span class="NAME">e</span><span class="PUNC">+</span><span class="NAME">f</span><span class="PUNC">>></span><span class="NUMB">1</span><span class="PUNC">;</span><span class="NAME">d</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">g</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC"><</span><span class="NAME">d</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="NAME">e</span><span class="PUNC">=</span><span class="NAME">g</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">:</span><span class="NAME">f</span><span class="PUNC">=</span><span class="NAME">g</span><span class="PUNC">}</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.toArray</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="PUNC">!</span><span class="NAME">a</span><span class="PUNC">?</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">:</span><span class="NAME">a.toArray</span><span class="PUNC">?</span><span class="NAME">a.toArray</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">b.isArray</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">b.isArguments</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">b.values</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.size</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.toArray</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.first</span><span class="PUNC">=</span><span class="NAME">b.head</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">!=</span><span class="KEYW">null</span><span class="PUNC">&&</span><span class="PUNC">!</span><span class="NAME">d</span><span class="PUNC">?</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.initial</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">a.length</span><span class="PUNC">-</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">||</span><span class="NAME">d</span><span class="PUNC">?</span><span class="NUMB">1</span><span class="PUNC">:</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.last</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">!=</span><span class="KEYW">null</span><span class="PUNC">&&</span><span class="PUNC">!</span><span class="NAME">d</span><span class="PUNC">?</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">Math.max</span><span class="PUNC">(</span><span class="NAME">a.length</span><span class="PUNC">-</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">a.length</span><span class="PUNC">-</span><span class="WHIT">
-<span class='line'>874</span> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.rest</span><span class="PUNC">=</span><span class="NAME">b.tail</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">||</span><span class="NAME">d</span><span class="PUNC">?</span><span class="NUMB">1</span><span class="PUNC">:</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.compact</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.filter</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="PUNC">!</span><span class="PUNC">!</span><span class="NAME">a</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.flatten</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.reduce</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">b.isArray</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.concat</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">?</span><span class="NAME">e</span><span class="PUNC">:</span><span class="NAME">b.flatten</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">a.length</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">e</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.without</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.difference</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.uniq</span><span class="PUNC">=</span><span class="NAME">b.unique</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">d</span><span class="PUNC">?</span><span class="NAME">b.map</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="NAME">b.reduce</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">==</span><span class="NAME">h</span><span class="PUNC">||</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">===</span><span class="KEYW">true</span><span class="PUNC">?</span><span class="NAME">b.last</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="NAME">g</span><span class="PUNC">:</span><span class="PUNC">!</span><span class="NAME">b.include</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">d.length</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">[</span><span class="NAME">e.length</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">h</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>875</span> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.union</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.uniq</span><span class="PUNC">(</span><span class="NAME">b.flatten</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.intersection</span><span class="PUNC">=</span><span class="NAME">b.intersect</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.filter</span><span class="PUNC">(</span><span class="NAME">b.uniq</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.every</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.indexOf</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">>=</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.difference</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">b.flatten</span><span class="PUNC">(</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.filter</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="PUNC">!</span><span class="NAME">b.include</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.zip</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">=</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">b.max</span><span class="PUNC">(</span><span class="NAME">b.pluck</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="STRN">"length"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">Array</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="NAME">e</span><span class="PUNC"><</span><span class="NAME">c</span><span class="PUNC">;</span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">b.pluck</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="STRN">""</span><span class="PUNC">+</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.indexOf</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>876</span> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">b.sortedIndex</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">===</span><span class="NAME">c</span><span class="PUNC">?</span><span class="NAME">d</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">q</span><span class="PUNC">&&</span><span class="NAME">a.indexOf</span><span class="PUNC">===</span><span class="NAME">q</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.indexOf</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">=</span><span class="NAME">a.length</span><span class="PUNC">;</span><span class="NAME">d</span><span class="PUNC"><</span><span class="NAME">e</span><span class="PUNC">;</span><span class="NAME">d</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">&&</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">===</span><span class="NAME">c</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.lastIndexOf</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">C</span><span class="PUNC">&&</span><span class="NAME">a.lastIndexOf</span><span class="PUNC">===</span><span class="NAME">C</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.lastIndexOf</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">a.length</span><span class="PUNC">;</span><span class="NAME">d</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="PUNC">)</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">&&</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">===</span><span class="NAME">b</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.range</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">arguments.length</span><span class="PUNC"><=</span><span class="NUMB">1</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">||</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">||</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">=</span><span class="NAME">Math.max</span><span class="PUNC">(</span><span class="NAME">Math.ceil</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">-</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">/</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">f</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">=</span><span class="NAME">Array</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">f</span><span class="PUNC"><</span><span class="NAME">e</span><span class="PUNC">;</span><span class="PUNC">)</span><span class="NAME">g</span><span class="PUNC">[</span><span class="NAME">f</span><span class="PUNC">++</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">d</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>877</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">E</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.bind</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a.bind</span><span class="PUNC">===</span><span class="NAME">t</span><span class="PUNC">&&</span><span class="NAME">t</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t.apply</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">b.isFunction</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TypeError</span><span class="PUNC">;</span><span class="NAME">e</span><span class="PUNC">=</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.apply</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">e.concat</span><span class="PUNC">(</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">E.prototype</span><span class="PUNC">=</span><span class="NAME">a.prototype</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">E</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">=</span><span class="NAME">a.apply</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">e.concat</span><span class="PUNC">(</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Object</span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">)</span><span class="PUNC">===</span><span class="NAME">g</span><span class="PUNC">?</span><span class="NAME">g</span><span class="PUNC">:</span><span class="NAME">b</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.bindAll</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">c.length</span><span class="PUNC">==</span><span class="NUMB">0</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">b.functions</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">b.bind</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.memoize</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>878</span> </span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">c</span><span class="PUNC">||</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">b.identity</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">c.apply</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">m.call</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">b</span><span class="PUNC">]</span><span class="PUNC">:</span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">b</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">a.apply</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.delay</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.apply</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.defer</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.delay.apply</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">,</span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.throttle</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">,</span><span class="NAME">f</span><span class="PUNC">,</span><span class="NAME">g</span><span class="PUNC">,</span><span class="NAME">h</span><span class="PUNC">,</span><span class="NAME">i</span><span class="PUNC">=</span><span class="NAME">b.debounce</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">h</span><span class="PUNC">=</span><span class="NAME">g</span><span class="PUNC">=</span><span class="KEYW">false</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">d</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">;</span><span class="NAME">e</span><span class="PUNC">=</span><span class="NAME">arguments</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="NAME">f</span><span class="PUNC">||</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">=</span><span class="NAME">setTimeout</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">f</span><span class="PUNC">=</span><span class="KEYW">null</span><span class="PUNC">;</span><span class="NAME">h</span><span class="PUNC">&&</span><span class="NAME">a.apply</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">g</span><span class="PUNC">?</span><span class="NAME">h</span><span class="PUNC">=</span><span class="KEYW">true</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>879</span> </span><span class="NAME">a.apply</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">g</span><span class="PUNC">=</span><span class="KEYW">true</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.debounce</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">f</span><span class="PUNC">=</span><span class="NAME">arguments</span><span class="PUNC">;</span><span class="NAME">clearTimeout</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">setTimeout</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">d</span><span class="PUNC">=</span><span class="KEYW">null</span><span class="PUNC">;</span><span class="NAME">a.apply</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">,</span><span class="NAME">f</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.once</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">;</span><span class="NAME">b</span><span class="PUNC">=</span><span class="KEYW">true</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">a.apply</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.wrap</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">G.apply</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.apply</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.compose</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">=</span><span class="NAME">arguments</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">a.length</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="NAME">d</span><span class="PUNC">>=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="NAME">d</span><span class="PUNC">--</span><span class="PUNC">)</span><span class="NAME">b</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">apply</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.after</span><span class="PUNC">=</span><span class="WHIT">
-<span class='line'>880</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC"><=</span><span class="NUMB">0</span><span class="PUNC">?</span><span class="NAME">b</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">--</span><span class="NAME">a</span><span class="PUNC"><</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.apply</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.keys</span><span class="PUNC">=</span><span class="NAME">I</span><span class="PUNC">||</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">!==</span><span class="NAME">Object</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TypeError</span><span class="PUNC">(</span><span class="STRN">"Invalid object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">;</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="NAME">m.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">[</span><span class="NAME">b.length</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.values</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.map</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b.identity</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.functions</span><span class="PUNC">=</span><span class="NAME">b.methods</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">;</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="NAME">b.isFunction</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="NAME">c.push</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">c.sort</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.extend</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="NAME">b</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">!==</span><span class="KEYW">void</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">b</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.defaults</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>881</span> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">b</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.clone</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="PUNC">!</span><span class="NAME">b.isObject</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="NAME">a</span><span class="PUNC">:</span><span class="NAME">b.isArray</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="NAME">a.slice</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">b.extend</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.tap</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">b</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isEqual</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isEmpty</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">b.isArray</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">||</span><span class="NAME">b.isString</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.length</span><span class="PUNC">===</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">m.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isElement</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="PUNC">!</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">&&</span><span class="NAME">a.nodeType</span><span class="PUNC">==</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isArray</span><span class="PUNC">=</span><span class="NAME">p</span><span class="PUNC">||</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">l.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="STRN">"[object Array]"</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isObject</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">===</span><span class="WHIT">
-<span class='line'>882</span> </span><span class="NAME">Object</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isArguments</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">l.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="STRN">"[object Arguments]"</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">b.isArguments</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">b.isArguments</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">a</span><span class="PUNC">||</span><span class="PUNC">!</span><span class="NAME">m.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="STRN">"callee"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isFunction</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">l.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="STRN">"[object Function]"</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isString</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">l.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="STRN">"[object String]"</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isNumber</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">l.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="STRN">"[object Number]"</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isNaN</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">!==</span><span class="NAME">a</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isBoolean</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">===</span><span class="KEYW">true</span><span class="PUNC">||</span><span class="NAME">a</span><span class="PUNC">===</span><span class="KEYW">false</span><span class="PUNC">||</span><span class="NAME">l.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="STRN">"[object Boolean]"</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isDate</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">l.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="WHIT">
-<span class='line'>883</span> </span><span class="STRN">"[object Date]"</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isRegExp</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">l.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="STRN">"[object RegExp]"</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isNull</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">===</span><span class="KEYW">null</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.isUndefined</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">===</span><span class="KEYW">void</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.noConflict</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">s._</span><span class="PUNC">=</span><span class="NAME">F</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.identity</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.times</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="NAME">e</span><span class="PUNC"><</span><span class="NAME">a</span><span class="PUNC">;</span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="NAME">b.call</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.escape</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">+</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/&/g</span><span class="PUNC">,</span><span class="STRN">"&"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/</g</span><span class="PUNC">,</span><span class="STRN">"<"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/>/g</span><span class="PUNC">,</span><span class="STRN">">"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/"/g</span><span class="PUNC">,</span><span class="STRN">"""</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/'/g</span><span class="PUNC">,</span><span class="STRN">"'"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\//g</span><span class="PUNC">,</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.mixin</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">j</span><span class="PUNC">(</span><span class="NAME">b.functions</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">J</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>884</span> </span><span class="NAME">b</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">K</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="NAME">b.uniqueId</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">K</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">?</span><span class="NAME">a</span><span class="PUNC">+</span><span class="NAME">b</span><span class="PUNC">:</span><span class="NAME">b</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.templateSettings</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">evaluate</span><span class="PUNC">:</span><span class="REGX">/<%([\s\S]+?)%>/g</span><span class="PUNC">,</span><span class="NAME">interpolate</span><span class="PUNC">:</span><span class="REGX">/<%=([\s\S]+?)%>/g</span><span class="PUNC">,</span><span class="NAME">escape</span><span class="PUNC">:</span><span class="REGX">/<%-([\s\S]+?)%>/g</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.template</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">b.templateSettings</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">=</span><span class="STRN">"var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"</span><span class="PUNC">+</span><span class="NAME">a.replace</span><span class="PUNC">(</span><span class="REGX">/\\/g</span><span class="PUNC">,</span><span class="STRN">"\\\\"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/'/g</span><span class="PUNC">,</span><span class="STRN">"\\'"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="NAME">d.escape</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="STRN">"',_.escape("</span><span class="PUNC">+</span><span class="NAME">b.replace</span><span class="PUNC">(</span><span class="REGX">/\\'/g</span><span class="PUNC">,</span><span class="STRN">"'"</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">"),'"</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="NAME">d.interpolate</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="STRN">"',"</span><span class="PUNC">+</span><span class="NAME">b.replace</span><span class="PUNC">(</span><span class="REGX">/\\'/g</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>885</span> </span><span class="STRN">"'"</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">",'"</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="NAME">d.evaluate</span><span class="PUNC">||</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="STRN">"');"</span><span class="PUNC">+</span><span class="NAME">b.replace</span><span class="PUNC">(</span><span class="REGX">/\\'/g</span><span class="PUNC">,</span><span class="STRN">"'"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/[\r\n\t]/g</span><span class="PUNC">,</span><span class="STRN">" "</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">";__p.push('"</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\r/g</span><span class="PUNC">,</span><span class="STRN">"\\r"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\n/g</span><span class="PUNC">,</span><span class="STRN">"\\n"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\t/g</span><span class="PUNC">,</span><span class="STRN">"\\t"</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">"');}return __p.join('');"</span><span class="PUNC">,</span><span class="NAME">e</span><span class="PUNC">=</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Function</span><span class="PUNC">(</span><span class="STRN">"obj"</span><span class="PUNC">,</span><span class="STRN">"_"</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">?</span><span class="NAME">e</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">this._wrapped</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.prototype</span><span class="PUNC">=</span><span class="NAME">n.prototype</span><span class="PUNC">;</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">?</span><span class="NAME">b</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">chain</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">a</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">J</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">n.prototype</span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">=</span><span class="NAME">i.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">H.call</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">this._wrapped</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">(</span><span class="NAME">c.apply</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>886</span> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">this._chain</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">b.mixin</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="STRN">"pop,push,reverse,shift,sort,splice,unshift"</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">","</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">k</span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="NAME">n.prototype</span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">b.apply</span><span class="PUNC">(</span><span class="NAME">this._wrapped</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">(</span><span class="NAME">this._wrapped</span><span class="PUNC">,</span><span class="NAME">this._chain</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"concat"</span><span class="PUNC">,</span><span class="STRN">"join"</span><span class="PUNC">,</span><span class="STRN">"slice"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">k</span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="NAME">n.prototype</span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">(</span><span class="NAME">b.apply</span><span class="PUNC">(</span><span class="NAME">this._wrapped</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">this._chain</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">n.prototype.chain</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">this._chain</span><span class="PUNC">=</span><span class="KEYW">true</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="NAME">n.prototype.value</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._wrapped</span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>887</span> </span><span class="COMM">/* main file */</span><span class="WHIT">
-<span class='line'>888</span>
-<span class='line'>889</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">window.IriSP</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">window.__IriSP</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>890</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">IriSP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>891</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">__IriSP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* for backward compatibility */</span><span class="WHIT">
-<span class='line'>892</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>893</span>
-<span class='line'>894</span> </span><span class="NAME">IriSP.loadLibs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">libs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">metadata_url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">callback</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>895</span> </span><span class="WHIT"> </span><span class="COMM">// Localize jQuery variable</span><span class="WHIT">
-<span class='line'>896</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>897</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">$L</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$LAB.script</span><span class="PUNC">(</span><span class="NAME">libs.jQuery</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">script</span><span class="PUNC">(</span><span class="NAME">libs.swfObject</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>898</span> </span><span class="WHIT"> </span><span class="PUNC">.</span><span class="NAME">script</span><span class="PUNC">(</span><span class="NAME">libs.jQueryUI</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>899</span> </span><span class="WHIT">
-<span class='line'>900</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config.player.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"jwplayer"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>901</span> </span><span class="WHIT"> </span><span class="COMM">// load our popcorn.js lookalike</span><span class="WHIT">
-<span class='line'>902</span> </span><span class="WHIT"> </span><span class="NAME">$L</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$L.script</span><span class="PUNC">(</span><span class="NAME">libs.jwplayer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>903</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>904</span> </span><span class="WHIT"> </span><span class="COMM">// load the real popcorn</span><span class="WHIT">
-<span class='line'>905</span> </span><span class="WHIT"> </span><span class="NAME">$L</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$L.script</span><span class="PUNC">(</span><span class="NAME">libs.popcorn</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">script</span><span class="PUNC">(</span><span class="NAME">libs</span><span class="PUNC">[</span><span class="STRN">"popcorn.code"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>906</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config.player.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"youtube"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>907</span> </span><span class="WHIT"> </span><span class="NAME">$L</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$L.script</span><span class="PUNC">(</span><span class="NAME">libs</span><span class="PUNC">[</span><span class="STRN">"popcorn.youtube"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>908</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>909</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config.player.type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"vimeo"</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>910</span> </span><span class="WHIT"> </span><span class="NAME">$L</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$L.script</span><span class="PUNC">(</span><span class="NAME">libs</span><span class="PUNC">[</span><span class="STRN">"popcorn.vimeo"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>911</span> </span><span class="WHIT">
-<span class='line'>912</span> </span><span class="COMM">/* do nothing for html5 */</span><span class="WHIT">
-<span class='line'>913</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>914</span>
-<span class='line'>915</span> </span><span class="COMM">/* widget specific requirements */</span><span class="WHIT">
-<span class='line'>916</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">idx</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">config.gui.widgets</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>917</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config.gui.widgets</span><span class="PUNC">[</span><span class="NAME">idx</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"PolemicWidget"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>918</span> </span><span class="NAME">$L.script</span><span class="PUNC">(</span><span class="NAME">libs.raphael</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>919</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>920</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>921</span> </span><span class="WHIT">
-<span class='line'>922</span> </span><span class="COMM">// same for modules</span><span class="WHIT">
-<span class='line'>923</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>924</span> for (var idx in config.modules) {
-<span class='line'>925</span> if (config.modules[idx].type === "PolemicWidget")
-<span class='line'>926</span> $L.script(libs.raphaelJs);
-<span class='line'>927</span> }
-<span class='line'>928</span> */</span><span class="WHIT">
-<span class='line'>929</span>
-<span class='line'>930</span> </span><span class="WHIT"> </span><span class="NAME">$L.wait</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>931</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.jQuery.noConflict</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>932</span> </span><span class="WHIT"> </span><span class="NAME">IriSP._</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window._.noConflict</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>933</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.underscore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP._</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>934</span> </span><span class="WHIT">
-<span class='line'>935</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">css_link_jquery</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"<link>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>936</span> </span><span class="NAME">rel</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"stylesheet"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>937</span> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"text/css"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>938</span> </span><span class="NAME">href</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">libs.cssjQueryUI</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>939</span> </span><span class="WHIT"> </span><span class="STRN">'class'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"dynamic_css"</span><span class="WHIT">
-<span class='line'>940</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>941</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">css_link_custom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"<link>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>942</span> </span><span class="NAME">rel</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"stylesheet"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>943</span> </span><span class="NAME">type</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"text/css"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>944</span> </span><span class="NAME">href</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">config.gui.css</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>945</span> </span><span class="WHIT"> </span><span class="STRN">'class'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"dynamic_css"</span><span class="WHIT">
-<span class='line'>946</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>947</span> </span><span class="WHIT">
-<span class='line'>948</span> </span><span class="NAME">css_link_jquery.appendTo</span><span class="PUNC">(</span><span class="STRN">'head'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>949</span> </span><span class="WHIT"> </span><span class="NAME">css_link_custom.appendTo</span><span class="PUNC">(</span><span class="STRN">'head'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>950</span> </span><span class="WHIT">
-<span class='line'>951</span> </span><span class="NAME">IriSP.setupDataLoader</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>952</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.__dataloader.get</span><span class="PUNC">(</span><span class="NAME">metadata_url</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>953</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>954</span> </span><span class="WHIT"> </span><span class="COMM">/* save the data so that we could re-use it to
-<span class='line'>955</span> configure the video
-<span class='line'>956</span> */</span><span class="WHIT">
-<span class='line'>957</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.__jsonMetadata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>958</span> </span><span class="WHIT"> </span><span class="NAME">callback.call</span><span class="PUNC">(</span><span class="NAME">window</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>959</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>960</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>961</span> </span><span class="NAME">IriSP.annotation_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! template for an annotation displayed in a segmentWidget }}<div title='{{divTitle}}' id='{{id}}' class='Ldt-iri-chapter' style='left: {{startPixel}}px; width: {{pxWidth}}px; background-color:#{{hexa_color}};' ></div>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>962</span> </span><span class="NAME">IriSP.annotationWidget_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! template for the annotation widget }}<div class='Ldt-AnnotationsWidget'> <!-- ugly div because we want to have a double border --> <div class='Ldt-Annotation-DoubleBorder'> <div class='Ldt-AnnotationContent'> <div class='Ldt-AnnotationShareIcons'> <a class='Ldt-fbShare' href=''><img src='{{img_dir}}/facebook.png' alt='share on facebook'></img></a> <a class='Ldt-TwShare' href=''><img src='{{img_dir}}/twitter.png' alt='share on twitter'></img></a> <a class='Ldt-GplusShare' href=''><img src='{{img_dir}}/google.png' alt='share on google+'></img></a> </div> <div class='Ldt-SaTitle'></div> <div class='Ldt-SaDescription'></div> </div> </div></div>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>963</span> </span><span class="NAME">IriSP.annotation_loading_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! template shown while the annotation widget is loading }}<div id='Ldt-load-container'><div id='Ldt-loader'> </div> Chargement... </div>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>964</span> </span><span class="NAME">IriSP.arrowWidget_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"<div class='Ldt-arrowWidget'></div>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>965</span> </span><span class="NAME">IriSP.overlay_marker_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! the template for the small bars which is z-indexed over our segment widget }}<div class='Ldt-SegmentPositionMarker' style='background-color: #F7268E;'></div>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>966</span> </span><span class="NAME">IriSP.player_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! template for the radio player }}<div class='Ldt-controler demo'> <div class='Ldt-LeftPlayerControls'> <div class='Ldt-button Ldt-CtrlPlay'></div> <div class='Ldt-button Ldt-CtrlAnnotate'></div> <div class='Ldt-button Ldt-CtrlSearch'></div> </div> <div class='Ldt-RightPlayerControls'> <div class='Ldt-Time'> <div class='Ldt-ElapsedTime'></div> <div class='Ldt-TimeSeparator'>/</div> <div class='Ldt-TotalTime'></div> </div> <div class='Ldt-button Ldt-CtrlSound'></div> </div></div>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>967</span> </span><span class="NAME">IriSP.search_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! template for the search container }}<div class='LdtSearchContainer' style='margin-left: {{margin_left}}; position: absolute; margin-top: -60px;'> <div class='LdtSearch' style='display: none; background-color: #EEE; width: 165px; boder: 1px; border-color: #CFCFCF; position: absolute; text-align: center;'> <input class='LdtSearchInput' style='margin-top: 2px; margin-bottom: 2px;' /> </div></div><div class='cleaner'></div>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>968</span> </span><span class="NAME">IriSP.share_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! social network sharing template }}<a onclick='__IriSP.MyApiPlayer.share(\'delicious\');' title='partager avec delicious'><span class='share shareDelicious'> </span></a> <a onclick='__IriSP.MyApiPlayer.share(\'facebook\');' title='partager avec facebook'> <span class='share shareFacebook'> </span></a><a onclick='__IriSP.MyApiPlayer.share(\'twitter\');' title='partager avec twitter'> <span class='share shareTwitter'> </span></a><a onclick='__IriSP.MyApiPlayer.share(\'myspace\');' title='partager avec Myspace'> <span class='share shareMySpace'> </span></a>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>969</span> </span><span class="NAME">IriSP.sliderWidget_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! template for the slider widget - it's composed of two divs we one overlayed on top of the other }}<div class='Ldt-sliderBackground'></div><div class='Ldt-sliderForeground'></div><div class='Ldt-sliderPositionMarker'></div>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>970</span> </span><span class="NAME">IriSP.tooltip_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! template used by the jquery ui tooltip }}<div class='Ldt-tooltip'> <div class='title'>{{title}}</div> <div class='time'>{{begin}} : {{end}} </div> <div class='description'>{{description}}</div></div>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>971</span> </span><span class="NAME">IriSP.tooltipWidget_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! template for the tooltip widget }}<div class='tip'> <div class='tipcolor' style='height:10px;width:10px'></div> <div class='tiptext'></div>"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>972</span> </span><span class="NAME">IriSP.tweetWidget_template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{! template for the tweet widget }}<div class='Ldt-tweetWidget'> <div class='Ldt-tweet-DoubleBorder'> <img src='{{img_dir}}/minimize.png' class='Ldt-tweetWidgetKeepOpen' alt='dont minimize automatically'></img> <img src='{{img_dir}}/minimize.png' class='Ldt-tweetWidgetMinimize' alt='minimize window'></img> <div class='Ldt-tweetAvatar'></div> <img src='{{img_dir}}/profile_arrow.png' class='Ldt-tweetAvatar-profileArrow'></img> <div class='Ldt-tweetContents'></div> <a href='' target='_blank' class='Ldt-Retweet'><div class='Ldt-RetweetIcon'></div> - Retweet </a> <a href='' target='_blank' class='Ldt-TweetReply'><div class='Ldt-TweetReplyIcon'></div> - Reply</a> </div></div>"</span><span class="PUNC">;</span><span class="COMM">/* wrapper that simulates popcorn.js because
-<span class='line'>973</span> popcorn is a bit unstable at the time */</span><span class="WHIT">
-<span class='line'>974</span>
-<span class='line'>975</span> </span><span class="NAME">IriSP.PopcornReplacement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>976</span> </span><span class="WHIT"> </span><span class="NAME">msgPump</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">/* used by jquery to receive and send messages */</span><span class="WHIT">
-<span class='line'>977</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>978</span>
-<span class='line'>979</span> </span><span class="NAME">IriSP.PopcornReplacement.media</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>980</span> </span><span class="STRN">"paused"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>981</span> </span><span class="WHIT"> </span><span class="STRN">"muted"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT">
-<span class='line'>982</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>983</span>
-<span class='line'>984</span> </span><span class="NAME">IriSP.PopcornReplacement.listen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">msg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">callback</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>985</span> </span><span class="COMM">// IriSP.jQuery(IriSP.PopcornReplacement.msgPump).bind(msg, function(event, rest) { callback(rest); });</span><span class="WHIT">
-<span class='line'>986</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">IriSP.PopcornReplacement.msgPump.hasOwnProperty</span><span class="PUNC">(</span><span class="NAME">msg</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>987</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.msgPump</span><span class="PUNC">[</span><span class="NAME">msg</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>988</span>
-<span class='line'>989</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.msgPump</span><span class="PUNC">[</span><span class="NAME">msg</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">push</span><span class="PUNC">(</span><span class="NAME">callback</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>990</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>991</span>
-<span class='line'>992</span> </span><span class="NAME">IriSP.PopcornReplacement.trigger</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">msg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>993</span> </span><span class="COMM">// IriSP.jQuery(IriSP.PopcornReplacement.msgPump).trigger(msg, params);</span><span class="WHIT">
-<span class='line'>994</span> </span><span class="WHIT">
-<span class='line'>995</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">IriSP.PopcornReplacement.msgPump.hasOwnProperty</span><span class="PUNC">(</span><span class="NAME">msg</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>996</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>997</span>
-<span class='line'>998</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.msgPump</span><span class="PUNC">[</span><span class="NAME">msg</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>999</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">entry</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1000</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">entry</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">call</span><span class="PUNC">(</span><span class="NAME">window</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1001</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1002</span>
-<span class='line'>1003</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1004</span>
-<span class='line'>1005</span> </span><span class="NAME">IriSP.PopcornReplacement.guid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1006</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/[xy]/g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1007</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">*</span><span class="NUMB">16</span><span class="PUNC">|</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'x'</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r</span><span class="PUNC">&</span><span class="NUMB">0x3</span><span class="PUNC">|</span><span class="NUMB">0x8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1008</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">v.toString</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1009</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1010</span>
-<span class='line'>1011</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1012</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1013</span>
-<span class='line'>1014</span> </span><span class="NAME">IriSP.PopcornReplacement.__initApi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1015</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.trigger</span><span class="PUNC">(</span><span class="STRN">"loadedmetadata"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// we've done more than loading metadata of course,</span><span class="WHIT">
-<span class='line'>1016</span> </span><span class="WHIT"> </span><span class="COMM">// but popcorn doesn't need to know more.</span><span class="WHIT">
-<span class='line'>1017</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.media.muted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getMute</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1018</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1019</span>
-<span class='line'>1020</span> </span><span class="NAME">IriSP.PopcornReplacement.jwplayer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1021</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.slice</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">//eschew the '#'</span><span class="WHIT">
-<span class='line'>1022</span> </span><span class="WHIT"> </span><span class="NAME">options.events</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1023</span> </span><span class="WHIT"> </span><span class="NAME">onReady</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__initApi</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1024</span> </span><span class="WHIT"> </span><span class="NAME">onTime</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__timeHandler</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1025</span> </span><span class="WHIT"> </span><span class="NAME">onPlay</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__playHandler</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1026</span> </span><span class="WHIT"> </span><span class="NAME">onPause</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__pauseHandler</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1027</span> </span><span class="WHIT"> </span><span class="NAME">onSeek</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__seekHandler</span><span class="WHIT">
-<span class='line'>1028</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1029</span> </span><span class="WHIT">
-<span class='line'>1030</span> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">setup</span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1031</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.media.duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.duration</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1032</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1033</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1034</span>
-<span class='line'>1035</span> </span><span class="NAME">IriSP.PopcornReplacement.currentTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">time</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1036</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">time</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1037</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getPosition</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1038</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1039</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">time</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1040</span> </span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">seek</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">currentTime</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1041</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.trigger</span><span class="PUNC">(</span><span class="STRN">"seeked"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1042</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getPosition</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1043</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1044</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1045</span>
-<span class='line'>1046</span> </span><span class="NAME">IriSP.PopcornReplacement.play</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1047</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.media.paused</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1048</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.trigger</span><span class="PUNC">(</span><span class="STRN">"play"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1049</span> </span><span class="COMM">// IriSP.PopcornReplacement.trigger("playing");</span><span class="WHIT">
-<span class='line'>1050</span> </span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">play</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1051</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1052</span> </span><span class="WHIT">
-<span class='line'>1053</span> </span><span class="NAME">IriSP.PopcornReplacement.pause</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1054</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">IriSP.PopcornReplacement.media.paused</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1055</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.media.paused</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1056</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.trigger</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"pause"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1057</span> </span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">pause</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1058</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1059</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1060</span>
-<span class='line'>1061</span> </span><span class="NAME">IriSP.PopcornReplacement.muted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">val</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1062</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">val</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1063</span>
-<span class='line'>1064</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getMute</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">val</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1065</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">val</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1066</span> </span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">setMute</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1067</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.media.muted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1068</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1069</span> </span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">setMute</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1070</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.media.muted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1071</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1072</span>
-<span class='line'>1073</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.trigger</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"volumechange"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1074</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1075</span> </span><span class="WHIT">
-<span class='line'>1076</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getMute</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1077</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1078</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getMute</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1079</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1080</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1081</span>
-<span class='line'>1082</span> </span><span class="NAME">IriSP.PopcornReplacement.mute</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.muted</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1083</span>
-<span class='line'>1084</span> </span><span class="NAME">IriSP.PopcornReplacement.__codes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1085</span> </span><span class="NAME">IriSP.PopcornReplacement.code</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1086</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__codes.push</span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1087</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1088</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1089</span>
-<span class='line'>1090</span> </span><span class="NAME">IriSP.PopcornReplacement.__runCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1091</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="PUNC">(</span><span class="NAME">IriSP.PopcornReplacement._container</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getPosition</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1092</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1093</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__codes.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1094</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__codes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1095</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">currentTime</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">c.start</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1096</span> </span><span class="WHIT"> </span><span class="NAME">c.onStart</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1097</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1098</span> </span><span class="WHIT">
-<span class='line'>1099</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">currentTime</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">c.end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1100</span> </span><span class="WHIT"> </span><span class="NAME">c.onEnd</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1101</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1102</span>
-<span class='line'>1103</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1104</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1105</span>
-<span class='line'>1106</span> </span><span class="COMM">/* called everytime the player updates itself
-<span class='line'>1107</span> (onTime event)
-<span class='line'>1108</span> */</span><span class="WHIT">
-<span class='line'>1109</span>
-<span class='line'>1110</span> </span><span class="NAME">IriSP.PopcornReplacement.__timeHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1111</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">event.position</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1112</span>
-<span class='line'>1113</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1114</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__codes.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1115</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__codes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1116</span> </span><span class="WHIT">
-<span class='line'>1117</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pos</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">c.start</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">pos</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">c.end</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>1118</span> </span><span class="NAME">pos</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">c.start</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1119</span> </span><span class="NAME">c.onStart</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1120</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1121</span> </span><span class="WHIT">
-<span class='line'>1122</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pos</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">c.start</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">pos</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">c.end</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>1123</span> </span><span class="NAME">pos</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">c.end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1124</span> </span><span class="WHIT"> </span><span class="NAME">console.log</span><span class="PUNC">(</span><span class="STRN">"eonedn"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1125</span> </span><span class="WHIT"> </span><span class="NAME">c.onEnd</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1126</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1127</span> </span><span class="WHIT">
-<span class='line'>1128</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1129</span> </span><span class="WHIT">
-<span class='line'>1130</span> </span><span class="NAME">IriSP.PopcornReplacement.trigger</span><span class="PUNC">(</span><span class="STRN">"timeupdate"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1131</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1132</span>
-<span class='line'>1133</span> </span><span class="NAME">IriSP.PopcornReplacement.__seekHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1134</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1135</span> </span><span class="WHIT">
-<span class='line'>1136</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__codes.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1137</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__codes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1138</span> </span><span class="WHIT">
-<span class='line'>1139</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.position</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">c.start</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">event.position</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">c.end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1140</span> </span><span class="NAME">c.onEnd</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1141</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1142</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1143</span>
-<span class='line'>1144</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__codes.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1145</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.__codes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1146</span>
-<span class='line'>1147</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">event.offset</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1148</span> </span><span class="WHIT"> </span><span class="NAME">event.offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1149</span> </span><span class="WHIT">
-<span class='line'>1150</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.offset</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">c.start</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">event.offset</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">c.end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1151</span> </span><span class="NAME">c.onStart</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1152</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1153</span> </span><span class="WHIT">
-<span class='line'>1154</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1155</span>
-<span class='line'>1156</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.trigger</span><span class="PUNC">(</span><span class="STRN">"timeupdate"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1157</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1158</span>
-<span class='line'>1159</span>
-<span class='line'>1160</span> </span><span class="NAME">IriSP.PopcornReplacement.__playHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1161</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.media.paused</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1162</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.trigger</span><span class="PUNC">(</span><span class="STRN">"play"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1163</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1164</span>
-<span class='line'>1165</span> </span><span class="NAME">IriSP.PopcornReplacement.__pauseHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1166</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.media.paused</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1167</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.trigger</span><span class="PUNC">(</span><span class="STRN">"pause"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1168</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1169</span>
-<span class='line'>1170</span> </span><span class="NAME">IriSP.PopcornReplacement.roundTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1171</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.currentTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1172</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="PUNC">(</span><span class="NAME">currentTime</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1173</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1174</span> </span><span class="COMM">/* utils.js - various utils that don't belong anywhere else */</span><span class="WHIT">
-<span class='line'>1175</span>
-<span class='line'>1176</span> </span><span class="COMM">/* trace function, for debugging */</span><span class="WHIT">
-<span class='line'>1177</span>
-<span class='line'>1178</span> </span><span class="NAME">IriSP.traceNum</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1179</span> </span><span class="NAME">IriSP.trace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1180</span> </span><span class="COMM">/*
-<span class='line'>1181</span> if( IriSP.config.gui.debug === true ) {
-<span class='line'>1182</span> IriSP.traceNum += 1;
-<span class='line'>1183</span> IriSP.jQuery( "<div>"+IriSP.traceNum+" - "+msg+" : "+value+"</div>" ).appendTo( "#Ldt-output" );
-<span class='line'>1184</span> }
-<span class='line'>1185</span> */</span><span class="WHIT">
-<span class='line'>1186</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1187</span>
-<span class='line'>1188</span> </span><span class="COMM">/* used in callbacks - because in callbacks we lose "this",
-<span class='line'>1189</span> we need to have a special function which wraps "this" in
-<span class='line'>1190</span> a closure. This way, the
-<span class='line'>1191</span> */</span><span class="WHIT">
-<span class='line'>1192</span> </span><span class="NAME">IriSP.wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1193</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1194</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">args</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Array.prototype.slice.call</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1195</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">fn.apply</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">args</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1196</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1197</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1198</span>
-<span class='line'>1199</span> </span><span class="COMM">/* convert a time to a percentage in the media */</span><span class="WHIT">
-<span class='line'>1200</span> </span><span class="NAME">IriSP.timeToPourcent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">time</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">timetotal</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1201</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">time</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1202</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">timetotal</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">timetotal</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1203</span> </span><span class="WHIT">
-<span class='line'>1204</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">time</span><span class="PUNC">/</span><span class="NAME">timetotal</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1205</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1206</span>
-<span class='line'>1207</span> </span><span class="NAME">IriSP.padWithZeros</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">num</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1208</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">num</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1209</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"0"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">num.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1210</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1211</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">num.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1212</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1213</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1214</span> </span><span class="COMM">/* convert a number of seconds to a tuple of the form
-<span class='line'>1215</span> [hours, minutes, seconds]
-<span class='line'>1216</span> */</span><span class="WHIT">
-<span class='line'>1217</span> </span><span class="NAME">IriSP.secondsToTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">secs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1218</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hours</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">parseInt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">secs</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">3600</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1219</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">minutes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">parseInt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">secs</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">60</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">60</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1220</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">seconds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseFloat</span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">secs</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">60</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toFixed</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1221</span> </span><span class="WHIT">
-<span class='line'>1222</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">toString_fn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1223</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1224</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hours</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1225</span> </span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.padWithZeros</span><span class="PUNC">(</span><span class="NAME">this.hours</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">":"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1226</span> </span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.padWithZeros</span><span class="PUNC">(</span><span class="NAME">this.minutes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">":"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">IriSP.padWithZeros</span><span class="PUNC">(</span><span class="NAME">this.seconds</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1227</span>
-<span class='line'>1228</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1229</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1230</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="STRN">"hours"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">hours</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"minutes"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">minutes</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"seconds"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">seconds</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">toString</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">toString_fn</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1231</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1232</span>
-<span class='line'>1233</span> </span><span class="NAME">IriSP.secondsToString</span><span class="WHIT">
-<span class='line'>1234</span>
-<span class='line'>1235</span> </span><span class="COMM">/* format a tweet - replaces @name by a link to the profile, #hashtag, etc. */</span><span class="WHIT">
-<span class='line'>1236</span> </span><span class="NAME">IriSP.formatTweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tweet</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1237</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>1238</span> an array of arrays which hold a regexp and its replacement.
-<span class='line'>1239</span> */</span><span class="WHIT">
-<span class='line'>1240</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">regExps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
-<span class='line'>1241</span> </span><span class="WHIT"> </span><span class="COMM">/* copied from http://codegolf.stackexchange.com/questions/464/shortest-url-regex-match-in-javascript/480#480 */</span><span class="WHIT">
-<span class='line'>1242</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="REGX">/((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"<a href='$1'>$1</a>"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1243</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="REGX">/@(\w+)/gi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"<a href='http://twitter.com/$1'>@$1</a>"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// matches a @handle</span><span class="WHIT">
-<span class='line'>1244</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="REGX">/#(\w+)/gi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"<a href='http://twitter.com/search?q=%23$1'>#$1</a>"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="COMM">// matches a hashtag</span><span class="WHIT">
-<span class='line'>1245</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="REGX">/(\+\+)/gi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"<span class='Ldt-PolemicPlusPlus'>$1</span>"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1246</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="REGX">/(--)/gi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"<span class='Ldt-PolemicMinusMinus'>$1</span>"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1247</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="REGX">/(==)/gi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"<span class='Ldt-PolemicEqualEqual'>$1</span>"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1248</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="REGX">/(\?\?)/gi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"<span class='Ldt-PolemicQuestion'>$1</span>"</span><span class="PUNC">]</span><span class="WHIT">
-<span class='line'>1249</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1250</span>
-<span class='line'>1251</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1252</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">regExps.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1253</span> </span><span class="WHIT"> </span><span class="NAME">tweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tweet.replace</span><span class="PUNC">(</span><span class="NAME">regExps</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">regExps</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1254</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1255</span> </span><span class="WHIT">
-<span class='line'>1256</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tweet</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1257</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1258</span>
-<span class='line'>1259</span> </span><span class="NAME">IriSP.countProperties</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1260</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">count</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1261</span>
-<span class='line'>1262</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prop</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">obj</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1263</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">obj.hasOwnProperty</span><span class="PUNC">(</span><span class="NAME">prop</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1264</span> </span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">count</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1265</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1266</span>
-<span class='line'>1267</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">count</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1268</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1269</span>
-<span class='line'>1270</span> </span><span class="COMM">// conversion de couleur Decimal vers HexaDecimal || 000 si fff</span><span class="WHIT">
-<span class='line'>1271</span> </span><span class="NAME">IriSP.DEC_HEXA_COLOR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dec</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1272</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hexa</span><span class="PUNC">=</span><span class="STRN">'0123456789ABCDEF'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1273</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hex</span><span class="PUNC">=</span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1274</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tmp</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1275</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dec</span><span class="PUNC">></span><span class="NUMB">15</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1276</span> </span><span class="WHIT"> </span><span class="NAME">tmp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dec</span><span class="PUNC">-</span><span class="PUNC">(</span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">dec</span><span class="PUNC">/</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">*</span><span class="NUMB">16</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1277</span> </span><span class="WHIT"> </span><span class="NAME">hex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hexa.charAt</span><span class="PUNC">(</span><span class="NAME">tmp</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="NAME">hex</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1278</span> </span><span class="WHIT"> </span><span class="NAME">dec</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">dec</span><span class="PUNC">/</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1279</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1280</span> </span><span class="WHIT"> </span><span class="NAME">hex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hexa.charAt</span><span class="PUNC">(</span><span class="NAME">dec</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="NAME">hex</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1281</span> </span><span class="KEYW">return</span><span class="PUNC">(</span><span class="NAME">hex</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1282</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1283</span>
-<span class='line'>1284</span> </span><span class="COMM">/* shortcut to have global variables in templates */</span><span class="WHIT">
-<span class='line'>1285</span> </span><span class="NAME">IriSP.templToHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1286</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">params</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery.extend</span><span class="PUNC">(</span><span class="NAME">IriSP.default_templates_vars</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1287</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1288</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1289</span>
-<span class='line'>1290</span> </span><span class="COMM">/* we need to be stricter than encodeURIComponent,
-<span class='line'>1291</span> because of twitter
-<span class='line'>1292</span> */</span><span class="WHIT">
-<span class='line'>1293</span> </span><span class="NAME">IriSP.encodeURI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1294</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">encodeURIComponent</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/!/g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'%21'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/'/g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'%27'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\(/g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'%28'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="WHIT">
-<span class='line'>1295</span> </span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\)/g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'%29'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\*/g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'%2A'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1296</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1297</span>
-<span class='line'>1298</span> </span><span class="NAME">IriSP.__guidCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1299</span> </span><span class="NAME">IriSP.guid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1300</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.__guidCounter</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1301</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">IriSP.__guidCounter</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1302</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1303</span> </span><span class="COMM">/* for ie compatibility
-<span class='line'>1304</span> if (Object.prototype.__defineGetter__&&!Object.defineProperty) {
-<span class='line'>1305</span> Object.defineProperty=function(obj,prop,desc) {
-<span class='line'>1306</span> if ("get" in desc) obj.__defineGetter__(prop,desc.get);
-<span class='line'>1307</span> if ("set" in desc) obj.__defineSetter__(prop,desc.set);
-<span class='line'>1308</span> }
-<span class='line'>1309</span> }
-<span class='line'>1310</span> */</span><span class="WHIT">
-<span class='line'>1311</span> </span><span class="COMM">/* data.js - this file deals with how the players gets and sends data */</span><span class="WHIT">
-<span class='line'>1312</span>
-<span class='line'>1313</span> </span><span class="NAME">IriSP.DataLoader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1314</span> </span><span class="WHIT"> </span><span class="NAME">this._cache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1315</span> </span><span class="WHIT">
-<span class='line'>1316</span> </span><span class="COMM">/*
-<span class='line'>1317</span> A structure to hold callbacks for specific urls. We need it because
-<span class='line'>1318</span> ajax calls are asynchronous, so it means that sometimes we ask
-<span class='line'>1319</span> multiple times for a ressource because the first call hasn't been
-<span class='line'>1320</span> received yet.
-<span class='line'>1321</span> */</span><span class="WHIT">
-<span class='line'>1322</span> </span><span class="WHIT"> </span><span class="NAME">this._callbacks</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1323</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1324</span>
-<span class='line'>1325</span> </span><span class="NAME">IriSP.DataLoader.prototype.get</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">callback</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1326</span>
-<span class='line'>1327</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">base_url</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url.split</span><span class="PUNC">(</span><span class="STRN">"&"</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT">
-<span class='line'>1328</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._cache.hasOwnProperty</span><span class="PUNC">(</span><span class="NAME">base_url</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1329</span> </span><span class="WHIT"> </span><span class="NAME">callback</span><span class="PUNC">(</span><span class="NAME">this._cache</span><span class="PUNC">[</span><span class="NAME">base_url</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1330</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1331</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this._callbacks.hasOwnProperty</span><span class="PUNC">(</span><span class="NAME">base_url</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1332</span> </span><span class="WHIT"> </span><span class="NAME">this._callbacks</span><span class="PUNC">[</span><span class="NAME">base_url</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1333</span> </span><span class="WHIT"> </span><span class="NAME">this._callbacks</span><span class="PUNC">[</span><span class="NAME">base_url</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">push</span><span class="PUNC">(</span><span class="NAME">callback</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1334</span> </span><span class="COMM">/* we need a closure because this gets lost when it's called back */</span><span class="WHIT">
-<span class='line'>1335</span> </span><span class="WHIT">
-<span class='line'>1336</span> </span><span class="COMM">// uncomment you don't want to use caching.</span><span class="WHIT">
-<span class='line'>1337</span> </span><span class="WHIT"> </span><span class="COMM">// IriSP.jQuery.get(url, callback);</span><span class="WHIT">
-<span class='line'>1338</span> </span><span class="WHIT">
-<span class='line'>1339</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">func</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1340</span> </span><span class="WHIT"> </span><span class="NAME">this._cache</span><span class="PUNC">[</span><span class="NAME">base_url</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1341</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1342</span> </span><span class="WHIT">
-<span class='line'>1343</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">this._callbacks</span><span class="PUNC">[</span><span class="NAME">base_url</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1344</span> </span><span class="WHIT"> </span><span class="NAME">this._callbacks</span><span class="PUNC">[</span><span class="NAME">base_url</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">this._cache</span><span class="PUNC">[</span><span class="NAME">base_url</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1345</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1346</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1347</span> </span><span class="WHIT">
-<span class='line'>1348</span> </span><span class="COMM">/* automagically choose between json and jsonp */</span><span class="WHIT">
-<span class='line'>1349</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">url.indexOf</span><span class="PUNC">(</span><span class="NAME">document.location.hostname</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>1350</span> </span><span class="WHIT"> </span><span class="NAME">url.indexOf</span><span class="PUNC">(</span><span class="STRN">"http://"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="COMM">/* not a relative url */</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1351</span> </span><span class="WHIT"> </span><span class="COMM">// we contacting a foreign domain, use JSONP</span><span class="WHIT">
-<span class='line'>1352</span>
-<span class='line'>1353</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery.get</span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">func</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"jsonp"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1354</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1355</span>
-<span class='line'>1356</span> </span><span class="WHIT"> </span><span class="COMM">// otherwise, hey, whatever rows your boat</span><span class="WHIT">
-<span class='line'>1357</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery.get</span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">func</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1358</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1359</span> </span><span class="WHIT">
-<span class='line'>1360</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1361</span> </span><span class="WHIT"> </span><span class="COMM">/* simply push the callback - it'll get called when the ressource
-<span class='line'>1362</span> has been received */</span><span class="WHIT">
-<span class='line'>1363</span> </span><span class="WHIT">
-<span class='line'>1364</span> </span><span class="NAME">this._callbacks</span><span class="PUNC">[</span><span class="NAME">base_url</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">push</span><span class="PUNC">(</span><span class="NAME">callback</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1365</span>
-<span class='line'>1366</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1367</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1368</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1369</span>
-<span class='line'>1370</span> </span><span class="COMM">/* the base abstract "class" */</span><span class="WHIT">
-<span class='line'>1371</span> </span><span class="NAME">IriSP.Serializer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">DataLoader</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1372</span> </span><span class="WHIT"> </span><span class="NAME">this._DataLoader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DataLoader</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1373</span> </span><span class="WHIT"> </span><span class="NAME">this._url</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1374</span> </span><span class="WHIT"> </span><span class="NAME">this._data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1375</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1376</span>
-<span class='line'>1377</span> </span><span class="NAME">IriSP.Serializer.prototype.serialize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1378</span> </span><span class="NAME">IriSP.Serializer.prototype.deserialize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1379</span>
-<span class='line'>1380</span> </span><span class="NAME">IriSP.Serializer.prototype.currentMedia</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1381</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1382</span>
-<span class='line'>1383</span> </span><span class="NAME">IriSP.Serializer.prototype.sync</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">callback</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1384</span> </span><span class="NAME">callback.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this._data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1385</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1386</span>
-<span class='line'>1387</span> </span><span class="NAME">IriSP.SerializerFactory</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">DataLoader</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1388</span> </span><span class="WHIT"> </span><span class="NAME">this._dataloader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DataLoader</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1389</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1390</span>
-<span class='line'>1391</span> </span><span class="NAME">IriSP.SerializerFactory.prototype.getSerializer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">metadataOptions</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1392</span> </span><span class="WHIT"> </span><span class="COMM">/* This function returns serializer set-up with the correct
-<span class='line'>1393</span> configuration - takes a metadata struct describing the metadata source
-<span class='line'>1394</span> */</span><span class="WHIT">
-<span class='line'>1395</span> </span><span class="WHIT">
-<span class='line'>1396</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">metadataOptions</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1397</span> </span><span class="WHIT"> </span><span class="COMM">/* return an empty serializer */</span><span class="WHIT">
-<span class='line'>1398</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">IriSP.Serializer</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1399</span> </span><span class="WHIT">
-<span class='line'>1400</span> </span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">metadataOptions.type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1401</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"json"</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>1402</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.JSONSerializer</span><span class="PUNC">(</span><span class="NAME">this._dataloader</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">metadataOptions.src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1403</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1404</span> </span><span class="WHIT">
-<span class='line'>1405</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"dummy"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="COMM">/* only used for unit testing - not defined in production */</span><span class="WHIT">
-<span class='line'>1406</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.MockSerializer</span><span class="PUNC">(</span><span class="NAME">this._dataloader</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">metadataOptions.src</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1407</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1408</span> </span><span class="WHIT">
-<span class='line'>1409</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"empty"</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>1410</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.Serializer</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"empty"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1411</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1412</span> </span><span class="WHIT">
-<span class='line'>1413</span> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>1414</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1415</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1416</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1417</span> </span><span class="COMM">/* site.js - all our site-dependent config : player chrome, cdn locations, etc...*/</span><span class="WHIT">
-<span class='line'>1418</span>
-<span class='line'>1419</span> </span><span class="NAME">IriSP.lib</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1420</span> </span><span class="NAME">jQuery</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1421</span> </span><span class="WHIT"> </span><span class="NAME">jQueryUI</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1422</span> </span><span class="WHIT"> </span><span class="NAME">jQueryToolTip</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"http://cdn.jquerytools.org/1.2.4/all/jquery.tools.min.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1423</span> </span><span class="WHIT"> </span><span class="NAME">swfObject</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1424</span> </span><span class="WHIT"> </span><span class="NAME">cssjQueryUI</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1425</span> </span><span class="WHIT"> </span><span class="NAME">popcorn</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"/mdp/src/js/libs/popcorn.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1426</span> </span><span class="WHIT"> </span><span class="NAME">jwplayer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"/mdp/src/js/libs/jwplayer.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1427</span> </span><span class="WHIT"> </span><span class="NAME">popcornReplacement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"/mdp/src/js/libs/pop.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1428</span> </span><span class="WHIT"> </span><span class="NAME">raphael</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"/mdp/src/js/libs/raphael.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1429</span> </span><span class="WHIT"> </span><span class="STRN">"popcorn.mediafragment"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"/mdp/src/js/libs/popcorn.mediafragment.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1430</span> </span><span class="WHIT"> </span><span class="STRN">"popcorn.code"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"/mdp/src/js/libs/popcorn.code.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1431</span> </span><span class="WHIT"> </span><span class="STRN">"popcorn.jwplayer"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"/mdp/src/js/libs/popcorn.jwplayer.js"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1432</span> </span><span class="WHIT"> </span><span class="STRN">"popcorn.youtube"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"/mdp/src/js/libs/popcorn.youtube.js"</span><span class="WHIT">
-<span class='line'>1433</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1434</span>
-<span class='line'>1435</span> </span><span class="COMM">//Player Configuration </span><span class="WHIT">
-<span class='line'>1436</span> </span><span class="NAME">IriSP.config</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1437</span>
-<span class='line'>1438</span> </span><span class="NAME">IriSP.widgetsDefaults</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1439</span> </span><span class="WHIT"> </span><span class="STRN">"LayoutManager"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">spacer_div_height</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"0px"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1440</span> </span><span class="WHIT"> </span><span class="STRN">"PlayerWidget"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1441</span> </span><span class="WHIT"> </span><span class="STRN">"AnnotationsWidget"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1442</span> </span><span class="WHIT"> </span><span class="STRN">"share_text"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"I'm watching "</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1443</span> </span><span class="STRN">"fb_link"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"http://www.facebook.com/share.php?u="</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1444</span> </span><span class="WHIT"> </span><span class="STRN">"tw_link"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"http://twitter.com/home?status="</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1445</span> </span><span class="WHIT"> </span><span class="STRN">"gplus_link"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT">
-<span class='line'>1446</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1447</span> </span><span class="WHIT"> </span><span class="STRN">"TweetsWidget"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1448</span> </span><span class="WHIT"> </span><span class="NAME">default_profile_picture</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1449</span> </span><span class="WHIT"> </span><span class="NAME">tweet_display_period</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">10000</span><span class="WHIT"> </span><span class="COMM">// how long do we show a tweet ?</span><span class="WHIT">
-<span class='line'>1450</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1451</span> </span><span class="WHIT"> </span><span class="STRN">"SliderWidget"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1452</span> </span><span class="WHIT"> </span><span class="NAME">minimize_period</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">850</span><span class="WHIT"> </span><span class="COMM">// how long does the slider stays maximized after the user leaves the zone ?</span><span class="WHIT">
-<span class='line'>1453</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1454</span> </span><span class="WHIT"> </span><span class="STRN">"Main"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1455</span> </span><span class="WHIT"> </span><span class="NAME">autoplay</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT">
-<span class='line'>1456</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1457</span> </span><span class="WHIT">
-<span class='line'>1458</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1459</span>
-<span class='line'>1460</span> </span><span class="NAME">IriSP.paths</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1461</span> </span><span class="COMM">// "imgs": "/tweetlive/res/metadataplayer/src/css/imgs"</span><span class="WHIT">
-<span class='line'>1462</span> </span><span class="WHIT"> </span><span class="STRN">"imgs"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"/mdp/src/css/imgs"</span><span class="WHIT">
-<span class='line'>1463</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1464</span> </span><span class="NAME">IriSP.default_templates_vars</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1465</span> </span><span class="WHIT"> </span><span class="STRN">"img_dir"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.paths.imgs</span><span class="WHIT">
-<span class='line'>1466</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1467</span>
-<span class='line'>1468</span> </span><span class="COMM">/* ui.js - ui related functions */</span><span class="WHIT">
-<span class='line'>1469</span>
-<span class='line'>1470</span> </span><span class="COMM">/* FIXME: use an sharing library */</span><span class="WHIT">
-<span class='line'>1471</span> </span><span class="NAME">IriSP.LdtShareTool</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.share_template</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* the contents come from share.html */</span><span class="WHIT">
-<span class='line'>1472</span>
-<span class='line'>1473</span> </span><span class="NAME">IriSP.createPlayerChrome</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1474</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.config.gui.width</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1475</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.config.gui.height</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1476</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">heightS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.config.gui.height</span><span class="PUNC">-</span><span class="NUMB">20</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1477</span> </span><span class="WHIT">
-<span class='line'>1478</span> </span><span class="COMM">// AUDIO */</span><span class="WHIT">
-<span class='line'>1479</span> </span><span class="WHIT"> </span><span class="COMM">// PB dans le html : ; </span><span class="WHIT">
-<span class='line'>1480</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.trace</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"__IriSP.createMyHtml"</span><span class="PUNC">,</span><span class="NAME">IriSP.config.gui.container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1481</span>
-<span class='line'>1482</span> </span><span class="WHIT">
-<span class='line'>1483</span> </span><span class="COMM">/* FIXME : factor this in another file */</span><span class="WHIT">
-<span class='line'>1484</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">IriSP.config.gui.mode</span><span class="PUNC">==</span><span class="STRN">"radio"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1485</span>
-<span class='line'>1486</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#"</span><span class="PUNC">+</span><span class="NAME">IriSP.config.gui.container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">before</span><span class="PUNC">(</span><span class="NAME">IriSP.search_template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1487</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">radioPlayer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">IriSP.radio_template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="STRN">"share_template"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.share_template</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1488</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="NAME">radioPlayer</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">appendTo</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="PUNC">+</span><span class="NAME">IriSP.config.gui.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1489</span>
-<span class='line'>1490</span> </span><span class="WHIT"> </span><span class="COMM">// special tricks for IE 7</span><span class="WHIT">
-<span class='line'>1491</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">IriSP.jQuery.browser.msie</span><span class="PUNC">==</span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery.browser.version</span><span class="PUNC">==</span><span class="STRN">"7.0"</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1492</span> </span><span class="WHIT"> </span><span class="COMM">//LdtSearchContainer</span><span class="WHIT">
-<span class='line'>1493</span> </span><span class="WHIT"> </span><span class="COMM">//__IriSP.jQuery("#LdtPlayer").attr("margin-top","50px");</span><span class="WHIT">
-<span class='line'>1494</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-Root"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"padding-top"</span><span class="PUNC">,</span><span class="STRN">"25px"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1495</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.trace</span><span class="PUNC">(</span><span class="STRN">"__IriSP.createHtml"</span><span class="PUNC">,</span><span class="STRN">"IE7 SPECIAL "</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1496</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1497</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">IriSP.config.gui.mode</span><span class="PUNC">==</span><span class="STRN">"video"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1498</span> </span><span class="WHIT">
-<span class='line'>1499</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">videoPlayer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">IriSP.video_template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="STRN">"share_template"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.share_template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"heightS"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">heightS</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1500</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="NAME">videoPlayer</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">appendTo</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="PUNC">+</span><span class="NAME">IriSP.config.gui.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1501</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1502</span> </span><span class="WHIT">
-<span class='line'>1503</span> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-Annotations"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">width</span><span class="PUNC">(</span><span class="NAME">width</span><span class="PUNC">-</span><span class="PUNC">(</span><span class="NUMB">75</span><span class="PUNC">*</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1504</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-Show-Arrow-container"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">width</span><span class="PUNC">(</span><span class="NAME">width</span><span class="PUNC">-</span><span class="PUNC">(</span><span class="NUMB">75</span><span class="PUNC">*</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1505</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-ShowAnnotation-audio"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">width</span><span class="PUNC">(</span><span class="NAME">width</span><span class="PUNC">-</span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1506</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-ShowAnnotation-video"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">width</span><span class="PUNC">(</span><span class="NAME">width</span><span class="PUNC">-</span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1507</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-SaKeyword"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">width</span><span class="PUNC">(</span><span class="NAME">width</span><span class="PUNC">-</span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1508</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-controler"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">width</span><span class="PUNC">(</span><span class="NAME">width</span><span class="PUNC">-</span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1509</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-Control"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"z-index"</span><span class="PUNC">,</span><span class="STRN">"100"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1510</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-controler"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">hide</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1511</span> </span><span class="WHIT">
-<span class='line'>1512</span> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="NAME">IriSP.annotation_loading_template</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">appendTo</span><span class="PUNC">(</span><span class="STRN">"#Ldt-ShowAnnotation-audio"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1513</span>
-<span class='line'>1514</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">IriSP.config.gui.mode</span><span class="PUNC">==</span><span class="STRN">'radio'</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1515</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-load-container"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"width"</span><span class="PUNC">,</span><span class="NAME">IriSP.config.gui.width</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1516</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1517</span> </span><span class="WHIT"> </span><span class="COMM">// Show or not the output</span><span class="WHIT">
-<span class='line'>1518</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">IriSP.config.gui.debug</span><span class="PUNC">===</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1519</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-output"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">show</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1520</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1521</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-output"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">hide</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1522</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1523</span> </span><span class="WHIT">
-<span class='line'>1524</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1525</span>
-<span class='line'>1526</span>
-<span class='line'>1527</span> </span><span class="COMM">/* create the buttons and the slider */</span><span class="WHIT">
-<span class='line'>1528</span> </span><span class="NAME">IriSP.createInterface</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1529</span> </span><span class="WHIT">
-<span class='line'>1530</span> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#Ldt-controler"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">show</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1531</span> </span><span class="WHIT"> </span><span class="COMM">//__IriSP.jQuery("#Ldt-Root").css('display','visible');</span><span class="WHIT">
-<span class='line'>1532</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.trace</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"__IriSP.createInterface"</span><span class="WHIT"> </span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">+</span><span class="STRN">","</span><span class="PUNC">+</span><span class="NAME">height</span><span class="PUNC">+</span><span class="STRN">","</span><span class="PUNC">+</span><span class="NAME">duration</span><span class="PUNC">+</span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1533</span> </span><span class="WHIT">
-<span class='line'>1534</span> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#Ldt-ShowAnnotation"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">click</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1535</span> </span><span class="COMM">//__IriSP.jQuery(this).slideUp(); </span><span class="WHIT">
-<span class='line'>1536</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1537</span>
-<span class='line'>1538</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">LdtpPlayerY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-PlaceHolder"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"top"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1539</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">LdtpPlayerX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#Ldt-PlaceHolder"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"left"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1540</span> </span><span class="WHIT">
-<span class='line'>1541</span> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#slider-range-min"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">slider</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">//range: "min",</span><span class="WHIT">
-<span class='line'>1542</span> </span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1543</span> </span><span class="WHIT"> </span><span class="NAME">min</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1544</span> </span><span class="WHIT"> </span><span class="NAME">max</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">/</span><span class="NUMB">1000</span><span class="PUNC">,</span><span class="COMM">//1:54:52.66 = 3600+3240+</span><span class="WHIT">
-<span class='line'>1545</span> </span><span class="WHIT"> </span><span class="NAME">step</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1546</span> </span><span class="WHIT"> </span><span class="NAME">slide</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ui</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1547</span> </span><span class="WHIT">
-<span class='line'>1548</span> </span><span class="COMM">//__IriSP.jQuery("#amount").val(ui.value+" s");</span><span class="WHIT">
-<span class='line'>1549</span> </span><span class="WHIT"> </span><span class="COMM">//player.sendEvent('SEEK', ui.value)</span><span class="WHIT">
-<span class='line'>1550</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.MyApiPlayer.seek</span><span class="PUNC">(</span><span class="NAME">ui.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1551</span> </span><span class="WHIT"> </span><span class="COMM">//changePageUrlOffset(ui.value);</span><span class="WHIT">
-<span class='line'>1552</span> </span><span class="WHIT"> </span><span class="COMM">//player.sendEvent('PAUSE')</span><span class="WHIT">
-<span class='line'>1553</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1554</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1555</span> </span><span class="WHIT">
-<span class='line'>1556</span> </span><span class="NAME">IriSP.trace</span><span class="PUNC">(</span><span class="STRN">"__IriSP.createInterface"</span><span class="PUNC">,</span><span class="STRN">"ICI"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1557</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#amount"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">val</span><span class="PUNC">(</span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#slider-range-min"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">slider</span><span class="PUNC">(</span><span class="STRN">"value"</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">" s"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1558</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">".Ldt-Control1 button:first"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">button</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1559</span> </span><span class="WHIT"> </span><span class="NAME">icons</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1560</span> </span><span class="WHIT"> </span><span class="NAME">primary</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'ui-icon-play'</span><span class="WHIT">
-<span class='line'>1561</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1562</span> </span><span class="WHIT"> </span><span class="NAME">text</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT">
-<span class='line'>1563</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">next</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">button</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1564</span> </span><span class="WHIT"> </span><span class="NAME">icons</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1565</span> </span><span class="WHIT"> </span><span class="NAME">primary</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'ui-icon-seek-next'</span><span class="WHIT">
-<span class='line'>1566</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1567</span> </span><span class="WHIT"> </span><span class="NAME">text</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT">
-<span class='line'>1568</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1569</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">".Ldt-Control2 button:first"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">button</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1570</span> </span><span class="WHIT"> </span><span class="NAME">icons</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1571</span> </span><span class="WHIT"> </span><span class="NAME">primary</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'ui-icon-search'</span><span class="COMM">//,</span><span class="WHIT">
-<span class='line'>1572</span> </span><span class="WHIT"> </span><span class="COMM">//secondary: 'ui-icon-volume-off'</span><span class="WHIT">
-<span class='line'>1573</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1574</span> </span><span class="WHIT"> </span><span class="NAME">text</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT">
-<span class='line'>1575</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">next</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">button</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1576</span> </span><span class="WHIT"> </span><span class="NAME">icons</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1577</span> </span><span class="WHIT"> </span><span class="NAME">primary</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'ui-icon-volume-on'</span><span class="WHIT">
-<span class='line'>1578</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1579</span> </span><span class="WHIT"> </span><span class="NAME">text</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT">
-<span class='line'>1580</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1581</span>
-<span class='line'>1582</span> </span><span class="WHIT"> </span><span class="COMM">// /!\ PB A MODIFIER </span><span class="WHIT">
-<span class='line'>1583</span> </span><span class="WHIT"> </span><span class="COMM">//__IriSP.MyTags.draw();</span><span class="WHIT">
-<span class='line'>1584</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.trace</span><span class="PUNC">(</span><span class="STRN">"__IriSP.createInterface"</span><span class="PUNC">,</span><span class="STRN">"ICI2"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1585</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#ldt-CtrlPlay"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"style"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"background-color:#CD21C24;"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1586</span> </span><span class="WHIT">
-<span class='line'>1587</span> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#Ldt-load-container"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">hide</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1588</span> </span><span class="WHIT">
-<span class='line'>1589</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">IriSP.config.gui.mode</span><span class="PUNC">==</span><span class="STRN">"radio"</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery.browser.msie</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1590</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#Ldtplayer1"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"height"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"0"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1591</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1592</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.trace</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"__IriSP.createInterface"</span><span class="WHIT"> </span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"3"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1593</span>
-<span class='line'>1594</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.trace</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"__IriSP.createInterface"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"END"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1595</span> </span><span class="WHIT">
-<span class='line'>1596</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1597</span> </span><span class="COMM">/* the widget classes and definitions */</span><span class="WHIT">
-<span class='line'>1598</span>
-<span class='line'>1599</span> </span><span class="NAME">IriSP.Widget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1600</span>
-<span class='line'>1601</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1602</span> </span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1603</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1604</span> </span><span class="WHIT">
-<span class='line'>1605</span> </span><span class="NAME">this._Popcorn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1606</span> </span><span class="WHIT"> </span><span class="NAME">this._config</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1607</span> </span><span class="NAME">this._serializer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1608</span> </span><span class="WHIT">
-<span class='line'>1609</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">"container"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1610</span> </span><span class="WHIT"> </span><span class="NAME">this._id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.container</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1611</span> </span><span class="WHIT"> </span><span class="NAME">this.selector</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this._id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1612</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1613</span>
-<span class='line'>1614</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">"spacer"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1615</span> </span><span class="WHIT"> </span><span class="NAME">this._spacerId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.spacer</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1616</span> </span><span class="WHIT"> </span><span class="NAME">this.spacer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this._spacerId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1617</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1618</span>
-<span class='line'>1619</span>
-<span class='line'>1620</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">"width"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1621</span> </span><span class="WHIT"> </span><span class="COMM">// this.width and not this._width because we consider it public.</span><span class="WHIT">
-<span class='line'>1622</span> </span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.width</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1623</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1624</span> </span><span class="WHIT">
-<span class='line'>1625</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">"height"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1626</span> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.height</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1627</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1628</span> </span><span class="WHIT">
-<span class='line'>1629</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">"heightmax"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1630</span> </span><span class="WHIT"> </span><span class="NAME">this.heightmax</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.heightmax</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1631</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1632</span>
-<span class='line'>1633</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">"widthmax"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1634</span> </span><span class="WHIT"> </span><span class="NAME">this.widthmax</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config.widthmax</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1635</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1636</span> </span><span class="WHIT">
-<span class='line'>1637</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1638</span>
-<span class='line'>1639</span> </span><span class="NAME">IriSP.Widget.prototype.draw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1640</span> </span><span class="WHIT"> </span><span class="COMM">/* implemented by "sub-classes" */</span><span class="WHIT">
-<span class='line'>1641</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1642</span>
-<span class='line'>1643</span> </span><span class="NAME">IriSP.Widget.prototype.redraw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1644</span> </span><span class="WHIT"> </span><span class="COMM">/* implemented by "sub-classes" */</span><span class="WHIT">
-<span class='line'>1645</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1646</span> </span><span class="COMM">/* modules are non-graphical entities, similar to widgets */</span><span class="WHIT">
-<span class='line'>1647</span>
-<span class='line'>1648</span> </span><span class="NAME">IriSP.Module</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1649</span>
-<span class='line'>1650</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1651</span> </span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1652</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1653</span> </span><span class="WHIT">
-<span class='line'>1654</span> </span><span class="NAME">this._Popcorn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1655</span> </span><span class="WHIT"> </span><span class="NAME">this._config</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1656</span> </span><span class="NAME">this._serializer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1657</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1658</span> </span><span class="COMM">/* layout.js - very basic layout management */</span><span class="WHIT">
-<span class='line'>1659</span>
-<span class='line'>1660</span> </span><span class="COMM">/*
-<span class='line'>1661</span> a layout manager manages a div and the layout of objects
-<span class='line'>1662</span> inside it.
-<span class='line'>1663</span> */</span><span class="WHIT">
-<span class='line'>1664</span>
-<span class='line'>1665</span> </span><span class="NAME">IriSP.LayoutManager</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1666</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1667</span> </span><span class="WHIT"> </span><span class="NAME">this._widgets</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1668</span> </span><span class="WHIT">
-<span class='line'>1669</span> </span><span class="NAME">this._div</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"LdtPlayer"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1670</span> </span><span class="WHIT"> </span><span class="NAME">this._width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">640</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1671</span> </span><span class="WHIT">
-<span class='line'>1672</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1673</span> </span><span class="WHIT"> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1674</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1675</span> </span><span class="WHIT">
-<span class='line'>1676</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">'container'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1677</span> </span><span class="WHIT"> </span><span class="NAME">this._div</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.container</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1678</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1679</span>
-<span class='line'>1680</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">'width'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1681</span> </span><span class="WHIT"> </span><span class="NAME">this._width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.width</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1682</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1683</span>
-<span class='line'>1684</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">'height'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1685</span> </span><span class="WHIT"> </span><span class="NAME">this._height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.height</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1686</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1687</span>
-<span class='line'>1688</span> </span><span class="COMM">/* this is a shortcut */</span><span class="WHIT">
-<span class='line'>1689</span> </span><span class="WHIT"> </span><span class="NAME">this.selector</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this._div</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1690</span> </span><span class="WHIT">
-<span class='line'>1691</span> </span><span class="NAME">this.selector.css</span><span class="PUNC">(</span><span class="STRN">"width"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this._width</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1692</span> </span><span class="WHIT">
-<span class='line'>1693</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._height</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1694</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.css</span><span class="PUNC">(</span><span class="STRN">"height"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this._height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1695</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1696</span>
-<span class='line'>1697</span> </span><span class="COMM">/* we need this special setter because of a chicken and egg problem :
-<span class='line'>1698</span> we want the manager to use popcorn but the popcorn div will be managed
-<span class='line'>1699</span> by the manager. So we need a way to set the instance the manager uses
-<span class='line'>1700</span> */</span><span class="WHIT">
-<span class='line'>1701</span> </span><span class="WHIT">
-<span class='line'>1702</span> </span><span class="NAME">IriSP.LayoutManager.prototype.setPopcornInstance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">popcorn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1703</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">popcorn</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1704</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1705</span>
-<span class='line'>1706</span> </span><span class="COMM">/* stem is a string to append to the id of the widget */</span><span class="WHIT">
-<span class='line'>1707</span> </span><span class="NAME">IriSP.LayoutManager.prototype.createDiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">stem</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1708</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">stem</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1709</span> </span><span class="WHIT"> </span><span class="NAME">stem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1710</span>
-<span class='line'>1711</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newDiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.guid</span><span class="PUNC">(</span><span class="NAME">this._div</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_widget_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">stem</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1712</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spacerDiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.guid</span><span class="PUNC">(</span><span class="STRN">"LdtPlayer_spacer_"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1713</span> </span><span class="WHIT"> </span><span class="NAME">this._widgets.push</span><span class="PUNC">(</span><span class="NAME">newDiv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1714</span>
-<span class='line'>1715</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">divTempl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"<div id='{{id}}' style='width: {{width}}px; position: relative;'></div"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1716</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spacerTempl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"<div id='{{spacer_id}}' style='width: {{width}}px; position: relative; height: {{spacer_div_height}};'></div"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1717</span> </span><span class="WHIT">
-<span class='line'>1718</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">divCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">divTempl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">id</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">newDiv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this._width</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1719</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spacerCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">spacerTempl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">spacer_id</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">spacerDiv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this._width</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>1720</span> </span><span class="WHIT"> </span><span class="NAME">spacer_div_height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.widgetsDefaults.LayoutManager.spacer_div_height</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1721</span>
-<span class='line'>1722</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">divCode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1723</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">spacerCode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1724</span>
-<span class='line'>1725</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">newDiv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spacerDiv</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1726</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1727</span> </span><span class="COMM">/* init.js - initialization and configuration of Popcorn and the widgets
-<span class='line'>1728</span> exemple json configuration:
-<span class='line'>1729</span>
-<span class='line'>1730</span> */</span><span class="WHIT">
-<span class='line'>1731</span>
-<span class='line'>1732</span> </span><span class="NAME">IriSP.setupDataLoader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1733</span> </span><span class="WHIT"> </span><span class="COMM">/* we set it up separately because we need to
-<span class='line'>1734</span> get data at the very beginning, for instance when
-<span class='line'>1735</span> setting up the video */</span><span class="WHIT">
-<span class='line'>1736</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.__dataloader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.DataLoader</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1737</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1738</span>
-<span class='line'>1739</span> </span><span class="NAME">IriSP.configurePopcorn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">layoutManager</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1740</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pop</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1741</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">layoutManager.createDiv</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1742</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">containerDiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1743</span> </span><span class="WHIT">
-<span class='line'>1744</span> </span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">options.type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1745</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>1746</span> todo : dynamically create the div/video tag which
-<span class='line'>1747</span> will contain the video.
-<span class='line'>1748</span> */</span><span class="WHIT">
-<span class='line'>1749</span> </span><span class="WHIT"> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"html5"</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>1750</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tmpId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Popcorn.guid</span><span class="PUNC">(</span><span class="STRN">"video"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1751</span> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">containerDiv</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">append</span><span class="PUNC">(</span><span class="STRN">"<video src='"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">options.file</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"' id='"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tmpId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"'></video>"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1752</span>
-<span class='line'>1753</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">"width"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1754</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">containerDiv</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"width"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.width</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1755</span> </span><span class="WHIT">
-<span class='line'>1756</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">"height"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1757</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">containerDiv</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"height"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1758</span>
-<span class='line'>1759</span> </span><span class="WHIT"> </span><span class="NAME">pop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tmpId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1760</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1761</span> </span><span class="WHIT">
-<span class='line'>1762</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"jwplayer"</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>1763</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">opts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery.extend</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1764</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">opts.container</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1765</span>
-<span class='line'>1766</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options.provider</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"rtmp"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1767</span> </span><span class="WHIT"> </span><span class="COMM">/* exit if we can't access the metadata */</span><span class="WHIT">
-<span class='line'>1768</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">IriSP.__jsonMetadata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1769</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1770</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1771</span>
-<span class='line'>1772</span>
-<span class='line'>1773</span> </span><span class="WHIT"> </span><span class="COMM">// the json format is totally illogical</span><span class="WHIT">
-<span class='line'>1774</span> </span><span class="WHIT"> </span><span class="NAME">opts.streamer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.__jsonMetadata</span><span class="PUNC">[</span><span class="STRN">"medias"</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="STRN">"meta"</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="STRN">"item"</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="STRN">"value"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1775</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">source</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.__jsonMetadata</span><span class="PUNC">[</span><span class="STRN">"medias"</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="STRN">"href"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1776</span>
-<span class='line'>1777</span> </span><span class="WHIT"> </span><span class="COMM">// the source if a full url but jwplayer wants an url relative to the</span><span class="WHIT">
-<span class='line'>1778</span> </span><span class="WHIT"> </span><span class="COMM">// streamer url, so we've got to remove the common part.</span><span class="WHIT">
-<span class='line'>1779</span> </span><span class="WHIT"> </span><span class="NAME">opts.file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">source.slice</span><span class="PUNC">(</span><span class="NAME">opts.streamer.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1780</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1781</span> </span><span class="WHIT"> </span><span class="COMM">/* other providers type, video for instance -
-<span class='line'>1782</span> pass everything as is */</span><span class="WHIT">
-<span class='line'>1783</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1784</span>
-<span class='line'>1785</span> </span><span class="WHIT"> </span><span class="NAME">pop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.PopcornReplacement.jwplayer</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">containerDiv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1786</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1787</span> </span><span class="WHIT">
-<span class='line'>1788</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"youtube"</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>1789</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">opts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery.extend</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1790</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">opts.container</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1791</span> </span><span class="WHIT"> </span><span class="NAME">opts.controls</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1792</span> </span><span class="WHIT"> </span><span class="NAME">opts.autostart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1793</span> </span><span class="WHIT"> </span><span class="NAME">templ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"width: {{width}}px; height: {{height}}px;"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1794</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">templ</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">opts.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">opts.height</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1795</span> </span><span class="COMM">// Popcorn.youtube wants us to specify the size of the player in the style attribute of its container div.</span><span class="WHIT">
-<span class='line'>1796</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">containerDiv</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"style"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1797</span> </span><span class="WHIT">
-<span class='line'>1798</span> </span><span class="NAME">pop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Popcorn.youtube</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">containerDiv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opts.video</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1799</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1800</span> </span><span class="WHIT">
-<span class='line'>1801</span> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>1802</span> </span><span class="WHIT"> </span><span class="NAME">pop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1803</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1804</span> </span><span class="WHIT">
-<span class='line'>1805</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">pop</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1806</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1807</span>
-<span class='line'>1808</span> </span><span class="NAME">IriSP.configureWidgets</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">popcornInstance</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">layoutManager</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">guiOptions</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1809</span> </span><span class="WHIT">
-<span class='line'>1810</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">serialFactory</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.SerializerFactory</span><span class="PUNC">(</span><span class="NAME">IriSP.__dataloader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1811</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">params</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">width</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">guiOptions.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">guiOptions.height</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1812</span>
-<span class='line'>1813</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ret_widgets</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1814</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">index</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1815</span> </span><span class="WHIT">
-<span class='line'>1816</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">guiOptions.widgets.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">index</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1817</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">widgetConfig</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">guiOptions.widgets</span><span class="PUNC">[</span><span class="NAME">index</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1818</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">widget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.instantiateWidget</span><span class="PUNC">(</span><span class="NAME">popcornInstance</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">serialFactory</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">layoutManager</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">widgetConfig</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1819</span> </span><span class="WHIT"> </span><span class="NAME">ret_widgets.push</span><span class="PUNC">(</span><span class="NAME">widget</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1820</span> </span><span class="WHIT">
-<span class='line'>1821</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1822</span>
-<span class='line'>1823</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ret_widgets</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1824</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1825</span>
-<span class='line'>1826</span> </span><span class="NAME">IriSP.configureModules</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">popcornInstance</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">modulesList</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1827</span> </span><span class="WHIT">
-<span class='line'>1828</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">serialFactory</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.SerializerFactory</span><span class="PUNC">(</span><span class="NAME">IriSP.__dataloader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1829</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ret_modules</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1830</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">index</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1831</span> </span><span class="WHIT">
-<span class='line'>1832</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">modulesList.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">index</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1833</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">moduleConfig</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">modulesList</span><span class="PUNC">[</span><span class="NAME">index</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1834</span> </span><span class="WHIT">
-<span class='line'>1835</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">serializer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">serialFactory.getSerializer</span><span class="PUNC">(</span><span class="NAME">moduleConfig.metadata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1836</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">module</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP</span><span class="PUNC">[</span><span class="NAME">moduleConfig.type</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">popcornInstance</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">moduleConfig</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1837</span> </span><span class="NAME">ret_modules.push</span><span class="PUNC">(</span><span class="NAME">module</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1838</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1839</span>
-<span class='line'>1840</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ret_modules</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1841</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1842</span>
-<span class='line'>1843</span> </span><span class="NAME">IriSP.instantiateWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">popcornInstance</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">serialFactory</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">layoutManager</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">widgetConfig</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1844</span> </span><span class="WHIT"> </span><span class="COMM">/* create div returns us a container for the widget and a spacer */</span><span class="WHIT">
-<span class='line'>1845</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">layoutManager.createDiv</span><span class="PUNC">(</span><span class="NAME">widgetConfig.type</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1846</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1847</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spacer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1848</span>
-<span class='line'>1849</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">arr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery.extend</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">widgetConfig</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1850</span> </span><span class="WHIT"> </span><span class="NAME">arr.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1851</span> </span><span class="WHIT"> </span><span class="NAME">arr.spacer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spacer</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1852</span> </span><span class="WHIT">
-<span class='line'>1853</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">serializer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">serialFactory.getSerializer</span><span class="PUNC">(</span><span class="NAME">widgetConfig.metadata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1854</span>
-<span class='line'>1855</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">serializer</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1856</span> </span><span class="NAME">debugger</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1857</span> </span><span class="WHIT">
-<span class='line'>1858</span> </span><span class="COMM">// instantiate the object passed as a string</span><span class="WHIT">
-<span class='line'>1859</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">widget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP</span><span class="PUNC">[</span><span class="NAME">widgetConfig.type</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">popcornInstance</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">arr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1860</span>
-<span class='line'>1861</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">widgetConfig.hasOwnProperty</span><span class="PUNC">(</span><span class="STRN">"requires"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1862</span> </span><span class="WHIT"> </span><span class="COMM">// also create the widgets this one depends on.</span><span class="WHIT">
-<span class='line'>1863</span> </span><span class="WHIT"> </span><span class="COMM">// the dependency widget is available in the parent widget context as</span><span class="WHIT">
-<span class='line'>1864</span> </span><span class="WHIT"> </span><span class="COMM">// this.WidgetName (for instance, this.TipWidget);</span><span class="WHIT">
-<span class='line'>1865</span> </span><span class="WHIT">
-<span class='line'>1866</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1867</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">widgetConfig.requires.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1868</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">widgetName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">widgetConfig.requires</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="STRN">"type"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1869</span> </span><span class="WHIT"> </span><span class="NAME">widget</span><span class="PUNC">[</span><span class="NAME">widgetName</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.instantiateWidget</span><span class="PUNC">(</span><span class="NAME">popcornInstance</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">serialFactory</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">layoutManager</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">widgetConfig.requires</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1870</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1871</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1872</span>
-<span class='line'>1873</span> </span><span class="NAME">serializer.sync</span><span class="PUNC">(</span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="NAME">widget</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">this.draw</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1874</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">widget</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1875</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1876</span> </span><span class="COMM">/* mediafragment module */</span><span class="WHIT">
-<span class='line'>1877</span>
-<span class='line'>1878</span> </span><span class="NAME">IriSP.MediaFragment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1879</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.Module.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1880</span>
-<span class='line'>1881</span> </span><span class="WHIT"> </span><span class="NAME">this.mutex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* a mutex because we access the url from two different functions */</span><span class="WHIT">
-<span class='line'>1882</span>
-<span class='line'>1883</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"loadedmetadata"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.MediaFragment.advanceTime</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1884</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"pause"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.MediaFragment.updateTime</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1885</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"seeked"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.MediaFragment.updateTime</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1886</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"IriSP.PolemicTweet.click"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.MediaFragment.updateAnnotation</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1887</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"IriSP.SegmentsWidget.click"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.MediaFragment.updateAnnotation</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1888</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1889</span>
-<span class='line'>1890</span> </span><span class="NAME">IriSP.MediaFragment.advanceTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1891</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">url</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.location.href</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1892</span>
-<span class='line'>1893</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">url.split</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1894</span> </span><span class="WHIT"> </span><span class="NAME">pageoffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url.split</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1895</span>
-<span class='line'>1896</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">pageoffset.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"t="</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1897</span> </span><span class="WHIT"> </span><span class="COMM">// timecode </span><span class="WHIT">
-<span class='line'>1898</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">pageoffset.substring</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1899</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offsettime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pageoffset.substring</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1900</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">parseFloat</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">offsettime</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1901</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1902</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">pageoffset.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"a="</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1903</span> </span><span class="WHIT"> </span><span class="COMM">// annotation</span><span class="WHIT">
-<span class='line'>1904</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotationId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pageoffset.substring</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1905</span>
-<span class='line'>1906</span> </span><span class="WHIT"> </span><span class="COMM">// there's no better way than that because</span><span class="WHIT">
-<span class='line'>1907</span> </span><span class="WHIT"> </span><span class="COMM">// of possible race conditions</span><span class="WHIT">
-<span class='line'>1908</span> </span><span class="WHIT"> </span><span class="NAME">this._serializer.sync</span><span class="PUNC">(</span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1909</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.MediaFragment.lookupAnnotation.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">annotationId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1910</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1911</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1912</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1913</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1914</span>
-<span class='line'>1915</span> </span><span class="NAME">IriSP.MediaFragment.updateTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1916</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mutex</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1917</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1918</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1919</span>
-<span class='line'>1920</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">history</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.history</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1921</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">history.pushState</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1922</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1923</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1924</span> </span><span class="WHIT">
-<span class='line'>1925</span> </span><span class="NAME">splitArr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.location.href.split</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1926</span> </span><span class="WHIT"> </span><span class="NAME">history.replaceState</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">splitArr</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"#t="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toFixed</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1927</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1928</span>
-<span class='line'>1929</span>
-<span class='line'>1930</span> </span><span class="NAME">IriSP.MediaFragment.updateAnnotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotationId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1931</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_this</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1932</span> </span><span class="WHIT"> </span><span class="NAME">this.mutex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1933</span>
-<span class='line'>1934</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">history</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.history</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1935</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">history.pushState</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1936</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1937</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1938</span> </span><span class="WHIT">
-<span class='line'>1939</span> </span><span class="NAME">splitArr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.location.href.split</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>1940</span> </span><span class="WHIT"> </span><span class="NAME">history.replaceState</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">splitArr</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"#a="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">annotationId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1941</span> </span><span class="WHIT">
-<span class='line'>1942</span> </span><span class="NAME">window.setTimeout</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">_this.mutex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1943</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1944</span>
-<span class='line'>1945</span> </span><span class="COMM">// lookup and seek to the beginning of an annotation</span><span class="WHIT">
-<span class='line'>1946</span> </span><span class="NAME">IriSP.MediaFragment.lookupAnnotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotationId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1947</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1948</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer._data.annotations</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1949</span>
-<span class='line'>1950</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1951</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">annotations.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1952</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">annotations</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">annotationId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1953</span> </span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">annotations</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1954</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1955</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1956</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1957</span>
-<span class='line'>1958</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1959</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="NAME">annotation.begin</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1960</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>1961</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1962</span> </span><span class="NAME">IriSP.AnnotationsWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1963</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.Widget.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1964</span> </span><span class="WHIT">
-<span class='line'>1965</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1966</span>
-<span class='line'>1967</span>
-<span class='line'>1968</span> </span><span class="NAME">IriSP.AnnotationsWidget.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.Widget</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1969</span>
-<span class='line'>1970</span> </span><span class="NAME">IriSP.AnnotationsWidget.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1971</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-SaTitle"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">text</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1972</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-SaDescription"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">text</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1973</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-SaKeywordText"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">text</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1974</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1975</span>
-<span class='line'>1976</span> </span><span class="NAME">IriSP.AnnotationsWidget.prototype.displayAnnotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>1977</span>
-<span class='line'>1978</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">title</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">annotation.content.title</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1979</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">description</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">annotation.content.description</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1980</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keywords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="COMM">// FIXME;</span><span class="WHIT">
-<span class='line'>1981</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">begin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">annotation.begin</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1982</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">annotation.end</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1983</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1984</span> </span><span class="WHIT">
-<span class='line'>1985</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">title_templ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"{{title}} - ( {{begin}} - {{end}} )"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1986</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endstr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">title_templ</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">title</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">title</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">begin</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.secondsToTime</span><span class="PUNC">(</span><span class="NAME">begin</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.secondsToTime</span><span class="PUNC">(</span><span class="NAME">end</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1987</span>
-<span class='line'>1988</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-SaTitle"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">text</span><span class="PUNC">(</span><span class="NAME">endstr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1989</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-SaDescription"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">text</span><span class="PUNC">(</span><span class="NAME">description</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1990</span> </span><span class="WHIT">
-<span class='line'>1991</span> </span><span class="COMM">// update sharing buttons</span><span class="WHIT">
-<span class='line'>1992</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">defaults</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.widgetsDefaults.AnnotationsWidget</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1993</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">text</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaults.share_text</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1994</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fb_link</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaults.fb_link</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1995</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tw_link</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaults.tw_link</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1996</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gplus_link</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">defaults.gplus_link</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1997</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">url</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.location.href</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"#a="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">annotation.id</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1998</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-fbShare"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"href"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fb_link</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">IriSP.encodeURI</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">IriSP.encodeURI</span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>1999</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-TwShare"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"href"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tw_link</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">IriSP.encodeURI</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">IriSP.encodeURI</span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2000</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-GplusShare"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"href"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fb_link</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">IriSP.encodeURI</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">IriSP.encodeURI</span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2001</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2002</span>
-<span class='line'>2003</span> </span><span class="NAME">IriSP.AnnotationsWidget.prototype.clearWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2004</span>
-<span class='line'>2005</span> </span><span class="WHIT">
-<span class='line'>2006</span> </span><span class="COMM">/* retract the pane between two annotations */</span><span class="WHIT">
-<span class='line'>2007</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-SaTitle"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">text</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2008</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-SaDescription"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">text</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2009</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-SaKeywordText"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">html</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2010</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-ShowAnnotation"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">slideUp</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2011</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2012</span>
-<span class='line'>2013</span> </span><span class="NAME">IriSP.AnnotationsWidget.prototype.draw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2014</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_this</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2015</span>
-<span class='line'>2016</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotationMarkup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.templToHTML</span><span class="PUNC">(</span><span class="NAME">IriSP.annotationWidget_template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2017</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">annotationMarkup</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2018</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">view</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2019</span>
-<span class='line'>2020</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this._serializer._data.views</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this._serializer._data.views</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2021</span> </span><span class="WHIT"> </span><span class="NAME">view</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer._data.views</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2022</span>
-<span class='line'>2023</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">view_type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2024</span>
-<span class='line'>2025</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">view</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">view.annotation_types</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">view.annotation_types.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2026</span> </span><span class="WHIT"> </span><span class="NAME">view_type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">view.annotation_types</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2027</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2028</span> </span><span class="WHIT">
-<span class='line'>2029</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer._data.annotations</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2030</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2031</span> </span><span class="WHIT">
-<span class='line'>2032</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">annotations</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2033</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">annotations</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2034</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">begin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">annotation.begin</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2035</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">annotation.end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2036</span>
-<span class='line'>2037</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">view_type</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT">
-<span class='line'>2038</span> </span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">view_type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2039</span> </span><span class="WHIT"> </span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2040</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2041</span>
-<span class='line'>2042</span>
-<span class='line'>2043</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">conf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">start</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">begin</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2044</span> </span><span class="NAME">onStart</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>2045</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2046</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2047</span> </span><span class="NAME">_this.displayAnnotation</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2048</span>
-<span class='line'>2049</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2050</span> </span><span class="WHIT"> </span><span class="NAME">onEnd</span><span class="PUNC">:</span><span class="WHIT">
-<span class='line'>2051</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">_this.clearWidget.call</span><span class="PUNC">(</span><span class="NAME">_this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2052</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2053</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.code</span><span class="PUNC">(</span><span class="NAME">conf</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2054</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2055</span>
-<span class='line'>2056</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2057</span> </span><span class="NAME">IriSP.ArrowWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2058</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.Widget.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2059</span>
-<span class='line'>2060</span> </span><span class="WHIT"> </span><span class="NAME">this._oldAnnotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2061</span> </span><span class="WHIT">
-<span class='line'>2062</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2063</span>
-<span class='line'>2064</span>
-<span class='line'>2065</span> </span><span class="NAME">IriSP.ArrowWidget.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.Widget</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2066</span>
-<span class='line'>2067</span> </span><span class="NAME">IriSP.ArrowWidget.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2068</span>
-<span class='line'>2069</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2070</span>
-<span class='line'>2071</span> </span><span class="NAME">IriSP.ArrowWidget.prototype.clearWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2072</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2073</span>
-<span class='line'>2074</span> </span><span class="NAME">IriSP.ArrowWidget.prototype.draw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2075</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">templ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">IriSP.arrowWidget_template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2076</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">templ</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2077</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"timeupdate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.timeUpdateHandler</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2078</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2079</span>
-<span class='line'>2080</span> </span><span class="NAME">IriSP.ArrowWidget.prototype.timeUpdateHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">percents</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2081</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2082</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentAnnotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.currentAnnotations</span><span class="PUNC">(</span><span class="NAME">currentTime</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// FIXME : use the others ?</span><span class="WHIT">
-<span class='line'>2083</span>
-<span class='line'>2084</span> </span><span class="WHIT"> </span><span class="COMM">/* move the arrow only if the current annotation changes */</span><span class="WHIT">
-<span class='line'>2085</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">currentAnnotation</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this._oldAnnotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2086</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">begin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">currentAnnotation.begin</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2087</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">currentAnnotation.end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2088</span>
-<span class='line'>2089</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2090</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">middle_time</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">begin</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2091</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">percents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">middle_time</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2092</span>
-<span class='line'>2093</span> </span><span class="WHIT"> </span><span class="COMM">// we need to apply a fix because the arrow has a certain length</span><span class="WHIT">
-<span class='line'>2094</span> </span><span class="WHIT"> </span><span class="COMM">// it's half the length of the arrow (27 / 2). We need to convert</span><span class="WHIT">
-<span class='line'>2095</span> </span><span class="WHIT"> </span><span class="COMM">// it in percents though.</span><span class="WHIT">
-<span class='line'>2096</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">totalWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selector.width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2097</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">correction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NUMB">27</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">totalWidth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2098</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">corrected_percents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">percents</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">correction</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2099</span>
-<span class='line'>2100</span> </span><span class="WHIT"> </span><span class="COMM">/* don't move out of the screen */</span><span class="WHIT">
-<span class='line'>2101</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">corrected_percents</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2102</span> </span><span class="WHIT"> </span><span class="NAME">corrected_percents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2103</span>
-<span class='line'>2104</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.children</span><span class="PUNC">(</span><span class="STRN">".Ldt-arrowWidget"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">"left"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">corrected_percents</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"%"</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2105</span>
-<span class='line'>2106</span> </span><span class="WHIT"> </span><span class="NAME">this._oldAnnotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">currentAnnotation</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2107</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2108</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2109</span> </span><span class="NAME">IriSP.PlayerWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2110</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.Widget.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2111</span> </span><span class="WHIT">
-<span class='line'>2112</span> </span><span class="NAME">this._searchBlockOpen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2113</span> </span><span class="WHIT"> </span><span class="NAME">this._searchLastValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2114</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2115</span>
-<span class='line'>2116</span> </span><span class="NAME">IriSP.PlayerWidget.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.Widget</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2117</span>
-<span class='line'>2118</span> </span><span class="NAME">IriSP.PlayerWidget.prototype.draw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2119</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">self</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2120</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2121</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2122</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">heightS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">-</span><span class="NUMB">20</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2123</span> </span><span class="WHIT">
-<span class='line'>2124</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Player_templ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">IriSP.player_template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="STRN">"share_template"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.share_template</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2125</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">Player_templ</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2126</span>
-<span class='line'>2127</span> </span><span class="NAME">this.selector.children</span><span class="PUNC">(</span><span class="STRN">".Ldt-controler"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">show</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2128</span> </span><span class="WHIT">
-<span class='line'>2129</span> </span><span class="COMM">// handle clicks by the user on the video.</span><span class="WHIT">
-<span class='line'>2130</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"play"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.playButtonUpdater</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2131</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"pause"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.playButtonUpdater</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2132</span> </span><span class="WHIT">
-<span class='line'>2133</span> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"volumechange"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.muteButtonUpdater</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2134</span>
-<span class='line'>2135</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"timeupdate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.timeDisplayUpdater</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2136</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.matchFound"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.searchMatch</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2137</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.noMatchFound"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.searchNoMatch</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2138</span> </span><span class="WHIT">
-<span class='line'>2139</span>
-<span class='line'>2140</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlPlay"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">click</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self.playHandler.call</span><span class="PUNC">(</span><span class="NAME">self</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2141</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlNext"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">click</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2142</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlSearch"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">click</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self.searchButtonHandler.call</span><span class="PUNC">(</span><span class="NAME">self</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2143</span> </span><span class="WHIT">
-<span class='line'>2144</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">'.Ldt-CtrlSound'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">click</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self.muteHandler.call</span><span class="PUNC">(</span><span class="NAME">self</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2145</span>
-<span class='line'>2146</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlPlay"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">"style"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"background-color:#CD21C24;"</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2147</span> </span><span class="WHIT">
-<span class='line'>2148</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">searchButtonPos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlSearch"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">position</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2149</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">searchBox</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">IriSP.search_template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">margin_left</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">searchButtonPos.left</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2150</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">searchBox</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2151</span> </span><span class="WHIT">
-<span class='line'>2152</span> </span><span class="COMM">// trigger an IriSP.PlayerWidget.MouseOver to the widgets that are interested (i.e : sliderWidget)</span><span class="WHIT">
-<span class='line'>2153</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.hover</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.PlayerWidget.MouseOver"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2154</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.PlayerWidget.MouseOut"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2155</span> </span><span class="WHIT">
-<span class='line'>2156</span> </span><span class="NAME">this.muteButtonUpdater</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* some player - jwplayer notable - save the state of the mute button between sessions */</span><span class="WHIT">
-<span class='line'>2157</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2158</span>
-<span class='line'>2159</span> </span><span class="COMM">/* Update the elasped time div */</span><span class="WHIT">
-<span class='line'>2160</span> </span><span class="NAME">IriSP.PlayerWidget.prototype.timeDisplayUpdater</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2161</span> </span><span class="WHIT">
-<span class='line'>2162</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._previousSecond</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2163</span> </span><span class="WHIT"> </span><span class="NAME">this._previousSecond</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.roundTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2164</span> </span><span class="WHIT">
-<span class='line'>2165</span> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2166</span> </span><span class="WHIT"> </span><span class="COMM">/* we're still in the same second, so it's not necessary to update time */</span><span class="WHIT">
-<span class='line'>2167</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._Popcorn.roundTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">this._previousSecond</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2168</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2169</span> </span><span class="WHIT">
-<span class='line'>2170</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2171</span> </span><span class="WHIT">
-<span class='line'>2172</span> </span><span class="COMM">// we get it at each call because it may change.</span><span class="WHIT">
-<span class='line'>2173</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2174</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">totalTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.secondsToTime</span><span class="PUNC">(</span><span class="NAME">duration</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2175</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">elapsedTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.secondsToTime</span><span class="PUNC">(</span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2176</span> </span><span class="WHIT">
-<span class='line'>2177</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-ElapsedTime"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">html</span><span class="PUNC">(</span><span class="NAME">elapsedTime.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2178</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-TotalTime"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">html</span><span class="PUNC">(</span><span class="NAME">totalTime.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2179</span> </span><span class="WHIT"> </span><span class="NAME">this._previousSecond</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.roundTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2180</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2181</span>
-<span class='line'>2182</span> </span><span class="COMM">/* update the icon of the button - separate function from playHandler
-<span class='line'>2183</span> because in some cases (for instance, when the user directly clicks on
-<span class='line'>2184</span> the jwplayer window) we have to change the icon without playing/pausing
-<span class='line'>2185</span> */</span><span class="WHIT">
-<span class='line'>2186</span> </span><span class="NAME">IriSP.PlayerWidget.prototype.playButtonUpdater</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2187</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.media.paused</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2188</span> </span><span class="WHIT">
-<span class='line'>2189</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2190</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlPlay"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"title"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Play"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2191</span> </span><span class="WHIT">
-<span class='line'>2192</span> </span><span class="COMM">// we use templToHTML because it has some predefined</span><span class="WHIT">
-<span class='line'>2193</span> </span><span class="WHIT"> </span><span class="COMM">// vars like where to get the images</span><span class="WHIT">
-<span class='line'>2194</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">templ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.templToHTML</span><span class="PUNC">(</span><span class="STRN">"url({{img_dir}}/play_sprite.png)"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2195</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlPlay"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"background-image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">templ</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2196</span>
-<span class='line'>2197</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2198</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlPlay"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"title"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Pause"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2199</span>
-<span class='line'>2200</span> </span><span class="WHIT"> </span><span class="COMM">// we use templToHTML because it has some predefined</span><span class="WHIT">
-<span class='line'>2201</span> </span><span class="WHIT"> </span><span class="COMM">// vars like where to get the images</span><span class="WHIT">
-<span class='line'>2202</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">templ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.templToHTML</span><span class="PUNC">(</span><span class="STRN">"url({{img_dir}}/pause_sprite.png)"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2203</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlPlay"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"background-image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">templ</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2204</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2205</span>
-<span class='line'>2206</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2207</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2208</span>
-<span class='line'>2209</span>
-<span class='line'>2210</span> </span><span class="NAME">IriSP.PlayerWidget.prototype.playHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2211</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.media.paused</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2212</span> </span><span class="WHIT">
-<span class='line'>2213</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2214</span> </span><span class="NAME">this._Popcorn.play</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2215</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2216</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.pause</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2217</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2218</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2219</span>
-<span class='line'>2220</span> </span><span class="NAME">IriSP.PlayerWidget.prototype.muteHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2221</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this._Popcorn.muted</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2222</span> </span><span class="NAME">this._Popcorn.mute</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2223</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2224</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.mute</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2225</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2226</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2227</span>
-<span class='line'>2228</span> </span><span class="NAME">IriSP.PlayerWidget.prototype.muteButtonUpdater</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2229</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.media.muted</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2230</span> </span><span class="WHIT">
-<span class='line'>2231</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2232</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlSound"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"title"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unmute"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2233</span> </span><span class="WHIT">
-<span class='line'>2234</span> </span><span class="COMM">// we use templToHTML because it has some predefined</span><span class="WHIT">
-<span class='line'>2235</span> </span><span class="WHIT"> </span><span class="COMM">// vars like where to get the images</span><span class="WHIT">
-<span class='line'>2236</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">templ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.templToHTML</span><span class="PUNC">(</span><span class="STRN">"url({{img_dir}}/sound_sprite.png)"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2237</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlSound"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"background-image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">templ</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2238</span>
-<span class='line'>2239</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2240</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlSound"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"title"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Mute"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2241</span>
-<span class='line'>2242</span> </span><span class="WHIT"> </span><span class="COMM">// we use templToHTML because it has some predefined</span><span class="WHIT">
-<span class='line'>2243</span> </span><span class="WHIT"> </span><span class="COMM">// vars like where to get the images</span><span class="WHIT">
-<span class='line'>2244</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">templ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.templToHTML</span><span class="PUNC">(</span><span class="STRN">"url({{img_dir}}/mute_sprite.png)"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2245</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-CtrlSound"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"background-image"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">templ</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2246</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2247</span>
-<span class='line'>2248</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2249</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2250</span>
-<span class='line'>2251</span>
-<span class='line'>2252</span> </span><span class="NAME">IriSP.PlayerWidget.prototype.searchButtonHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2253</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">self</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2254</span>
-<span class='line'>2255</span> </span><span class="WHIT"> </span><span class="COMM">/* show the search field if it is not shown */</span><span class="WHIT">
-<span class='line'>2256</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this._searchBlockOpen</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2257</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearch"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">show</span><span class="PUNC">(</span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2258</span> </span><span class="WHIT">
-<span class='line'>2259</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">'background-color'</span><span class="PUNC">,</span><span class="STRN">'#fff'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2260</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">focus</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2261</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">'value'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this._searchLastValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2262</span> </span><span class="NAME">this._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.search"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this._searchLastValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// trigger the search to make it more natural.</span><span class="WHIT">
-<span class='line'>2263</span> </span><span class="WHIT">
-<span class='line'>2264</span> </span><span class="NAME">this._searchBlockOpen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2265</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="STRN">'keyup'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self.searchHandler.call</span><span class="PUNC">(</span><span class="NAME">self</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2266</span> </span><span class="WHIT">
-<span class='line'>2267</span> </span><span class="COMM">// we need this variable because some widget can find a match in</span><span class="WHIT">
-<span class='line'>2268</span> </span><span class="WHIT"> </span><span class="COMM">// their data while at the same time other's don't. As we want the</span><span class="WHIT">
-<span class='line'>2269</span> </span><span class="WHIT"> </span><span class="COMM">// search field to become green when there's a match, we need a </span><span class="WHIT">
-<span class='line'>2270</span> </span><span class="WHIT"> </span><span class="COMM">// variable to remember that we had one.</span><span class="WHIT">
-<span class='line'>2271</span> </span><span class="WHIT"> </span><span class="NAME">this._positiveMatch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2272</span>
-<span class='line'>2273</span> </span><span class="WHIT"> </span><span class="COMM">// tell the world the field is open</span><span class="WHIT">
-<span class='line'>2274</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.open"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2275</span> </span><span class="WHIT">
-<span class='line'>2276</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2277</span> </span><span class="WHIT"> </span><span class="NAME">this._searchLastValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">'value'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2278</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">'value'</span><span class="PUNC">,</span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2279</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearch"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">hide</span><span class="PUNC">(</span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2280</span> </span><span class="WHIT">
-<span class='line'>2281</span> </span><span class="COMM">// unbind the watcher event.</span><span class="WHIT">
-<span class='line'>2282</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">unbind</span><span class="PUNC">(</span><span class="STRN">'keypress set'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2283</span> </span><span class="WHIT"> </span><span class="NAME">this._searchBlockOpen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2284</span>
-<span class='line'>2285</span> </span><span class="WHIT"> </span><span class="NAME">this._positiveMatch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2286</span> </span><span class="WHIT">
-<span class='line'>2287</span> </span><span class="NAME">this._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.closed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2288</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2289</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2290</span>
-<span class='line'>2291</span> </span><span class="COMM">/* this handler is called whenever the content of the search
-<span class='line'>2292</span> field changes */</span><span class="WHIT">
-<span class='line'>2293</span> </span><span class="NAME">IriSP.PlayerWidget.prototype.searchHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2294</span> </span><span class="WHIT"> </span><span class="NAME">this._searchLastValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">'value'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2295</span> </span><span class="WHIT"> </span><span class="NAME">this._positiveMatch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2296</span> </span><span class="WHIT">
-<span class='line'>2297</span> </span><span class="COMM">// do nothing if the search field is empty, instead of highlighting everything.</span><span class="WHIT">
-<span class='line'>2298</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._searchLastValue</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2299</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.cleared"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2300</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">'background-color'</span><span class="PUNC">,</span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2301</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2302</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.search"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this._searchLastValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2303</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2304</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2305</span>
-<span class='line'>2306</span> </span><span class="COMM">/*
-<span class='line'>2307</span> handler for the IriSP.search.found message, which is sent by some views when they
-<span class='line'>2308</span> highlight a match.
-<span class='line'>2309</span> */</span><span class="WHIT">
-<span class='line'>2310</span> </span><span class="NAME">IriSP.PlayerWidget.prototype.searchMatch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2311</span> </span><span class="WHIT"> </span><span class="NAME">this._positiveMatch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2312</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">'background-color'</span><span class="PUNC">,</span><span class="STRN">'#e1ffe1'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2313</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2314</span>
-<span class='line'>2315</span> </span><span class="COMM">/* the same, except that no value could be found */</span><span class="WHIT">
-<span class='line'>2316</span> </span><span class="NAME">IriSP.PlayerWidget.prototype.searchNoMatch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2317</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._positiveMatch</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2318</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".LdtSearchInput"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">'background-color'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"#d62e3a"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2319</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2320</span>
-<span class='line'>2321</span> </span><span class="COMM">/*
-<span class='line'>2322</span> *
-<span class='line'>2323</span> * Copyright 2010 Institut de recherche et d'innovation
-<span class='line'>2324</span> * contributor(s) : Samuel Huron
-<span class='line'>2325</span> *
-<span class='line'>2326</span> * contact@iri.centrepompidou.fr
-<span class='line'>2327</span> * http://www.iri.centrepompidou.fr
-<span class='line'>2328</span> *
-<span class='line'>2329</span> * This software is a computer program whose purpose is to show and add annotations on a video .
-<span class='line'>2330</span> * This software is governed by the CeCILL-C license under French law and
-<span class='line'>2331</span> * abiding by the rules of distribution of free software. You can use,
-<span class='line'>2332</span> * modify and/ or redistribute the software under the terms of the CeCILL-C
-<span class='line'>2333</span> * license as circulated by CEA, CNRS and INRIA at the following URL
-<span class='line'>2334</span> * "http://www.cecill.info".
-<span class='line'>2335</span> *
-<span class='line'>2336</span> * The fact that you are presently reading this means that you have had
-<span class='line'>2337</span> * knowledge of the CeCILL-C license and that you accept its terms.
-<span class='line'>2338</span> */</span><span class="WHIT">
-<span class='line'>2339</span> </span><span class="COMM">// CHART TIMELINE / VERSION PROTOTYPE ::</span><span class="WHIT">
-<span class='line'>2340</span>
-<span class='line'>2341</span> </span><span class="NAME">IriSP.PolemicWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2342</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.Widget.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2343</span> </span><span class="WHIT">
-<span class='line'>2344</span> </span><span class="NAME">this.userPol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2345</span> </span><span class="WHIT"> </span><span class="NAME">this.userNoPol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2346</span> </span><span class="WHIT"> </span><span class="NAME">this.userst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2347</span> </span><span class="WHIT"> </span><span class="NAME">this.numberOfTweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2348</span> </span><span class="WHIT"> </span><span class="NAME">this.Users</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2349</span> </span><span class="WHIT"> </span><span class="NAME">this.TweetPolemic</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2350</span> </span><span class="WHIT"> </span><span class="NAME">this.yMax</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2351</span> </span><span class="NAME">this.PaperSlider</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2352</span> </span><span class="WHIT"> </span><span class="NAME">this.heightOfChart</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2353</span> </span><span class="WHIT"> </span><span class="NAME">this.tweets</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2354</span> </span><span class="WHIT"> </span><span class="NAME">this.svgElements</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2355</span> </span><span class="WHIT">
-<span class='line'>2356</span> </span><span class="COMM">// Make and define the Raphael area</span><span class="WHIT">
-<span class='line'>2357</span> </span><span class="WHIT"> </span><span class="NAME">this.paper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Raphael</span><span class="PUNC">(</span><span class="NAME">document.getElementById</span><span class="PUNC">(</span><span class="NAME">this._id</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2358</span> </span><span class="WHIT">
-<span class='line'>2359</span> </span><span class="NAME">this.oldSearchMatches</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2360</span>
-<span class='line'>2361</span> </span><span class="WHIT"> </span><span class="COMM">// event handlers</span><span class="WHIT">
-<span class='line'>2362</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.search"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">this.searchHandler</span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2363</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.closed"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.searchFieldClosedHandler</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2364</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.cleared"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.searchFieldClearedHandler</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2365</span>
-<span class='line'>2366</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2367</span>
-<span class='line'>2368</span> </span><span class="NAME">IriSP.PolemicWidget.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.Widget</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2369</span> </span><span class="WHIT">
-<span class='line'>2370</span> </span><span class="NAME">IriSP.PolemicWidget.prototype.draw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2371</span> </span><span class="WHIT">
-<span class='line'>2372</span> </span><span class="COMM">// variable </span><span class="WHIT">
-<span class='line'>2373</span> </span><span class="WHIT"> </span><span class="COMM">// yMax</span><span class="WHIT">
-<span class='line'>2374</span> </span><span class="WHIT">
-<span class='line'>2375</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">self</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2376</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">yCoef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// coef for height of 1 tweet </span><span class="WHIT">
-<span class='line'>2377</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">frameSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// frame size </span><span class="WHIT">
-<span class='line'>2378</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">margin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// marge between frame</span><span class="WHIT">
-<span class='line'>2379</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lineSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// timeline pixel width </span><span class="WHIT">
-<span class='line'>2380</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nbrframes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lineSize</span><span class="PUNC">/</span><span class="NAME">frameSize</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// frame numbers</span><span class="WHIT">
-<span class='line'>2381</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">numberOfTweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// number of tweet overide later </span><span class="WHIT">
-<span class='line'>2382</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// timescale width </span><span class="WHIT">
-<span class='line'>2383</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">frameLength</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lineSize</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">frameSize</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// frame timescale </span><span class="WHIT">
-<span class='line'>2384</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">timeline</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2385</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">colors</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="STRN">"#1D973D"</span><span class="PUNC">,</span><span class="STRN">"#C5A62D"</span><span class="PUNC">,</span><span class="STRN">"#CE0A15"</span><span class="PUNC">,</span><span class="STRN">"#036AAE"</span><span class="PUNC">,</span><span class="STRN">"#585858"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2386</span> </span><span class="WHIT">
-<span class='line'>2387</span> </span><span class="COMM">// array </span><span class="WHIT">
-<span class='line'>2388</span> </span><span class="WHIT"> </span><span class="COMM">//var tweets = new Array();</span><span class="WHIT">
-<span class='line'>2389</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2390</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cluster</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2391</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">frames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="NAME">frameLength</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2392</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">slices</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2393</span> </span><span class="WHIT">
-<span class='line'>2394</span>
-<span class='line'>2395</span> </span><span class="COMM">// Classes =======================================================================</span><span class="WHIT">
-<span class='line'>2396</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Frames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2397</span> </span><span class="WHIT">
-<span class='line'>2398</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Myclusters</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2399</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2400</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2401</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2402</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2403</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2404</span> </span><span class="WHIT"> </span><span class="NAME">Frames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">json</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2405</span> </span><span class="WHIT"> </span><span class="COMM">// make my clusters</span><span class="WHIT">
-<span class='line'>2406</span> </span><span class="WHIT"> </span><span class="COMM">// ou Frame vide </span><span class="WHIT">
-<span class='line'>2407</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2408</span> </span><span class="WHIT"> </span><span class="NAME">Frames.prototype.draw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2409</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2410</span> </span><span class="WHIT"> </span><span class="NAME">Frames.prototype.zoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2411</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2412</span> </span><span class="WHIT"> </span><span class="NAME">Frames.prototype.inside</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2413</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2414</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Clusters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2415</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Object</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2416</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">yDist</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2417</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2418</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2419</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2420</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2421</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2422</span> </span><span class="WHIT"> </span><span class="NAME">Clusters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">json</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2423</span> </span><span class="WHIT"> </span><span class="COMM">// make my object</span><span class="WHIT">
-<span class='line'>2424</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2425</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Tweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2426</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2427</span> </span><span class="WHIT"> </span><span class="COMM">// Classes =======================================================================</span><span class="WHIT">
-<span class='line'>2428</span>
-<span class='line'>2429</span> </span><span class="WHIT"> </span><span class="COMM">// Refactoring (parametere) ************************************************************</span><span class="WHIT">
-<span class='line'>2430</span> </span><span class="WHIT"> </span><span class="COMM">// color translastion</span><span class="WHIT">
-<span class='line'>2431</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">qTweet_0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2432</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">qTweet_Q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2433</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">qTweet_REF</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2434</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">qTweet_OK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2435</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">qTweet_KO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2436</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">colorTranslation</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2437</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"Q"</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2438</span> </span><span class="WHIT"> </span><span class="NAME">qTweet_Q</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2439</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2440</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="STRN">"REF"</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2441</span> </span><span class="WHIT"> </span><span class="NAME">qTweet_REF</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2442</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2443</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="STRN">"OK"</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2444</span> </span><span class="WHIT"> </span><span class="NAME">qTweet_OK</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2445</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2446</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="STRN">"KO"</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2447</span> </span><span class="WHIT"> </span><span class="NAME">qTweet_KO</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2448</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2449</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2450</span> </span><span class="WHIT"> </span><span class="NAME">qTweet_0</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2451</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2452</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2453</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2454</span> </span><span class="WHIT">
-<span class='line'>2455</span>
-<span class='line'>2456</span> </span><span class="NAME">this._serializer.sync</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">loaded_callback.call</span><span class="PUNC">(</span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2457</span> </span><span class="WHIT">
-<span class='line'>2458</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">loaded_callback</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">json</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2459</span>
-<span class='line'>2460</span> </span><span class="WHIT"> </span><span class="COMM">// get current view (the first ???)</span><span class="WHIT">
-<span class='line'>2461</span> </span><span class="WHIT"> </span><span class="NAME">view</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">json.views</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2462</span> </span><span class="WHIT">
-<span class='line'>2463</span> </span><span class="COMM">// the tweets are by definition of the second annotation type FIXME ?</span><span class="WHIT">
-<span class='line'>2464</span> </span><span class="WHIT"> </span><span class="NAME">tweet_annot_type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2465</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">view.annotation_types</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">view.annotation_types.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2466</span> </span><span class="WHIT"> </span><span class="NAME">tweet_annot_type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">view.annotation_types</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2467</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2468</span> </span><span class="WHIT">
-<span class='line'>2469</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">json.annotations.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2470</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">item</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">json.annotations</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2471</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">MyTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">item.begin</span><span class="PUNC">/</span><span class="NAME">duration</span><span class="PUNC">*</span><span class="NAME">lineSize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2472</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Myframe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">MyTime</span><span class="PUNC">/</span><span class="NAME">lineSize</span><span class="PUNC">*</span><span class="NAME">frameLength</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2473</span>
-<span class='line'>2474</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">item.meta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT">
-<span class='line'>2475</span> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">item.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT">
-<span class='line'>2476</span> </span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">item.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">tweet_annot_type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2477</span> </span><span class="WHIT">
-<span class='line'>2478</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">MyTJson</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JSON.parse</span><span class="PUNC">(</span><span class="NAME">item.meta</span><span class="PUNC">[</span><span class="STRN">'dc:source'</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="STRN">'content'</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2479</span> </span><span class="WHIT">
-<span class='line'>2480</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">item.content</span><span class="PUNC">[</span><span class="STRN">'polemics'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="WHIT">
-<span class='line'>2481</span> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">item.content</span><span class="PUNC">[</span><span class="STRN">'polemics'</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2482</span> </span><span class="WHIT">
-<span class='line'>2483</span> </span><span class="COMM">// a tweet can have many polemics at the same time.</span><span class="WHIT">
-<span class='line'>2484</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC"><</span><span class="NAME">item.content</span><span class="PUNC">[</span><span class="STRN">'polemics'</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2485</span> </span><span class="WHIT">
-<span class='line'>2486</span> </span><span class="NAME">this.tweets</span><span class="PUNC">[</span><span class="NAME">numberOfTweet</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2487</span> </span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">:</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2488</span> </span><span class="WHIT"> </span><span class="NAME">qualification</span><span class="PUNC">:</span><span class="NAME">colorTranslation</span><span class="PUNC">(</span><span class="NAME">item.content</span><span class="PUNC">[</span><span class="STRN">'polemics'</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2489</span> </span><span class="WHIT"> </span><span class="NAME">yIndicator</span><span class="PUNC">:</span><span class="NAME">MyTime</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2490</span> </span><span class="WHIT"> </span><span class="NAME">yframe</span><span class="PUNC">:</span><span class="NAME">Myframe</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2491</span> </span><span class="WHIT"> </span><span class="NAME">title</span><span class="PUNC">:</span><span class="NAME">item.content</span><span class="PUNC">[</span><span class="STRN">'title'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2492</span> </span><span class="WHIT"> </span><span class="NAME">timeframe</span><span class="PUNC">:</span><span class="NAME">item.begin</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2493</span> </span><span class="WHIT"> </span><span class="NAME">userId</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">MyTJson.id</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2494</span> </span><span class="WHIT"> </span><span class="NAME">userScreenName</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">MyTJson.screen_name</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2495</span> </span><span class="WHIT"> </span><span class="NAME">tsource</span><span class="PUNC">:</span><span class="NAME">MyTJson</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2496</span> </span><span class="WHIT"> </span><span class="NAME">cinecast_id</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">item.id</span><span class="WHIT">
-<span class='line'>2497</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2498</span> </span><span class="WHIT"> </span><span class="NAME">numberOfTweet</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2499</span> </span><span class="WHIT">
-<span class='line'>2500</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2501</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2502</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2503</span> </span><span class="WHIT"> </span><span class="NAME">this.tweets</span><span class="PUNC">[</span><span class="NAME">numberOfTweet</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2504</span> </span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">:</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2505</span> </span><span class="WHIT"> </span><span class="NAME">qualification</span><span class="PUNC">:</span><span class="NAME">colorTranslation</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2506</span> </span><span class="WHIT"> </span><span class="NAME">yIndicator</span><span class="PUNC">:</span><span class="NAME">MyTime</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2507</span> </span><span class="WHIT"> </span><span class="NAME">yframe</span><span class="PUNC">:</span><span class="NAME">Myframe</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2508</span> </span><span class="WHIT"> </span><span class="NAME">title</span><span class="PUNC">:</span><span class="NAME">item.content</span><span class="PUNC">[</span><span class="STRN">'title'</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2509</span> </span><span class="WHIT"> </span><span class="NAME">timeframe</span><span class="PUNC">:</span><span class="NAME">item.begin</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2510</span> </span><span class="WHIT"> </span><span class="NAME">userId</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">MyTJson.id</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2511</span> </span><span class="WHIT"> </span><span class="NAME">userScreenName</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">MyTJson.screen_name</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2512</span> </span><span class="WHIT"> </span><span class="NAME">tsource</span><span class="PUNC">:</span><span class="NAME">MyTJson</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2513</span> </span><span class="WHIT"> </span><span class="NAME">cinecast_id</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">item.id</span><span class="WHIT">
-<span class='line'>2514</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2515</span> </span><span class="WHIT"> </span><span class="NAME">numberOfTweet</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2516</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2517</span> </span><span class="WHIT">
-<span class='line'>2518</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2519</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2520</span>
-<span class='line'>2521</span> </span><span class="NAME">DrawTweets.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// FIXME: ugly.</span><span class="WHIT">
-<span class='line'>2522</span> </span><span class="WHIT">
-<span class='line'>2523</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2524</span>
-<span class='line'>2525</span> </span><span class="COMM">// tweet Drawing (in raphael) </span><span class="WHIT">
-<span class='line'>2526</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">DrawTweets</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2527</span> </span><span class="WHIT"> </span><span class="COMM">// GROUPES TWEET ============================================</span><span class="WHIT">
-<span class='line'>2528</span> </span><span class="WHIT"> </span><span class="COMM">// Count nbr of cluster and tweet in a frame an save int in "frames"</span><span class="WHIT">
-<span class='line'>2529</span> </span><span class="WHIT"> </span><span class="NAME">numberOfTweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tweets.length</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2530</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC"><</span><span class="NAME">nbrframes</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2531</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC"><</span><span class="NAME">numberOfTweet</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2532</span>
-<span class='line'>2533</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">==</span><span class="NAME">this.tweets</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">yframe</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2534</span> </span><span class="WHIT">
-<span class='line'>2535</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tweets</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">qualification</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2536</span> </span><span class="WHIT">
-<span class='line'>2537</span> </span><span class="COMM">// make array for frame cluster</span><span class="WHIT">
-<span class='line'>2538</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">==</span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2539</span> </span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">id</span><span class="PUNC">:</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2540</span> </span><span class="WHIT"> </span><span class="NAME">qualifVol</span><span class="PUNC">:</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2541</span> </span><span class="WHIT"> </span><span class="NAME">mytweetsID</span><span class="PUNC">:</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2542</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2543</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2544</span> </span><span class="WHIT"> </span><span class="COMM">// add my tweet to frame</span><span class="WHIT">
-<span class='line'>2545</span> </span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">mytweetsID.push</span><span class="PUNC">(</span><span class="NAME">this.tweets</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2546</span> </span><span class="WHIT">
-<span class='line'>2547</span> </span><span class="COMM">// count opinion by frame</span><span class="WHIT">
-<span class='line'>2548</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">qualifVol</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2549</span> </span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">qualifVol</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2550</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2551</span> </span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">qualifVol</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2552</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2553</span> </span><span class="WHIT">
-<span class='line'>2554</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2555</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2556</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2557</span> </span><span class="WHIT">
-<span class='line'>2558</span> </span><span class="COMM">// GROUPES TWEET ============================================ </span><span class="WHIT">
-<span class='line'>2559</span> </span><span class="WHIT"> </span><span class="COMM">// max of tweet by Frame </span><span class="WHIT">
-<span class='line'>2560</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">max</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2561</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">nbrframes</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2562</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">moy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2563</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2564</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2565</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">qualifVol</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2566</span> </span><span class="WHIT"> </span><span class="NAME">moy</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">qualifVol</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2567</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2568</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2569</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2570</span> </span><span class="WHIT">
-<span class='line'>2571</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">moy</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">max</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2572</span> </span><span class="WHIT"> </span><span class="NAME">max</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">moy</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2573</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2574</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2575</span> </span><span class="WHIT">
-<span class='line'>2576</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tweetDrawed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2577</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">TweetHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2578</span> </span><span class="WHIT">
-<span class='line'>2579</span> </span><span class="COMM">// DRAW TWEETS ============================================</span><span class="WHIT">
-<span class='line'>2580</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">nbrframes</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2581</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">addEheight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2582</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2583</span> </span><span class="COMM">// by type </span><span class="WHIT">
-<span class='line'>2584</span> </span><span class="WHIT">
-<span class='line'>2585</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">--</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2586</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">qualifVol</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2587</span> </span><span class="WHIT"> </span><span class="COMM">// show tweet by type </span><span class="WHIT">
-<span class='line'>2588</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">mytweetsID.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2589</span> </span><span class="WHIT">
-<span class='line'>2590</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">mytweetsID</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">qualification</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2591</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">frameSize</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2592</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.heightmax</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">addEheight</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2593</span> </span><span class="WHIT">
-<span class='line'>2594</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.yMax</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2595</span> </span><span class="WHIT"> </span><span class="NAME">this.yMax</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2596</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2597</span> </span><span class="WHIT">
-<span class='line'>2598</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.paper.rect</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">frameSize</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">margin</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">TweetHeight</span><span class="WHIT"> </span><span class="COMM">/* height */</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2599</span> </span><span class="WHIT"> </span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="STRN">"#00"</span><span class="PUNC">,</span><span class="STRN">"stroke-width"</span><span class="PUNC">:</span><span class="NUMB">0.1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">colors</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2600</span>
-<span class='line'>2601</span> </span><span class="NAME">addEheight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">TweetHeight</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2602</span> </span><span class="WHIT">
-<span class='line'>2603</span> </span><span class="NAME">e.color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">colors</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2604</span> </span><span class="WHIT"> </span><span class="NAME">e.time</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">mytweetsID</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">timeframe</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2605</span> </span><span class="WHIT"> </span><span class="NAME">e.title</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">mytweetsID</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">title</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2606</span> </span><span class="WHIT"> </span><span class="NAME">e.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">mytweetsID</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">cinecast_id</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2607</span>
-<span class='line'>2608</span> </span><span class="WHIT"> </span><span class="NAME">this.svgElements</span><span class="PUNC">[</span><span class="NAME">e.id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2609</span>
-<span class='line'>2610</span> </span><span class="WHIT"> </span><span class="COMM">/*
-<span class='line'>2611</span> e.mouseover(function(element) { return function (event) {
-<span class='line'>2612</span> // event.clientX and event.clientY are to raphael what event.pageX and pageY are to jquery.
-<span class='line'>2613</span> self.TooltipWidget.show.call(self.TooltipWidget, element.title, element.attr("fill"), event.clientX - 106, event.clientY - 160);
-<span class='line'>2614</span> element.displayed = true;
-<span class='line'>2615</span> }}(e)).mouseout(function(element) { return function () {
-<span class='line'>2616</span> self.TooltipWidget.hide.call(self.TooltipWidget);
-<span class='line'>2617</span> }}(e)).mousedown(function () {
-<span class='line'>2618</span> self._Popcorn.currentTime(this.time/1000);
-<span class='line'>2619</span> self._Popcorn.trigger("IriSP.PolemicTweet.click", this.id);
-<span class='line'>2620</span> });
-<span class='line'>2621</span> */</span><span class="WHIT">
-<span class='line'>2622</span> </span><span class="WHIT">
-<span class='line'>2623</span> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="NAME">e.node</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">mouseenter</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2624</span> </span><span class="COMM">// event.clientX and event.clientY are to raphael what event.pageX and pageY are to jquery. </span><span class="WHIT">
-<span class='line'>2625</span> </span><span class="WHIT"> </span><span class="NAME">self.TooltipWidget.show.call</span><span class="PUNC">(</span><span class="NAME">self.TooltipWidget</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element.title</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element.attr</span><span class="PUNC">(</span><span class="STRN">"fill"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">event.pageX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">106</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">event.pageY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">160</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2626</span> </span><span class="WHIT"> </span><span class="NAME">element.displayed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2627</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">}</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">mousedown</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2628</span> </span><span class="NAME">self._Popcorn.currentTime</span><span class="PUNC">(</span><span class="NAME">element.time</span><span class="PUNC">/</span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2629</span> </span><span class="WHIT"> </span><span class="NAME">self._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.PolemicTweet.click"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element.id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2630</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2631</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2632</span>
-<span class='line'>2633</span> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="NAME">e.node</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">'id'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'t'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2634</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="NAME">e.node</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">'title'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">mytweetsID</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">title</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2635</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="NAME">e.node</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">'begin'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">frames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">mytweetsID</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">timeframe</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2636</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2637</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2638</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2639</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2640</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2641</span>
-<span class='line'>2642</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2643</span> </span><span class="COMM">// DRAW UI :: resize border and bgd </span><span class="WHIT">
-<span class='line'>2644</span> </span><span class="WHIT"> </span><span class="NAME">this.paperBackground</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.paper.rect</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.heightmax</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="STRN">"#F8F8F8"</span><span class="PUNC">,</span><span class="STRN">"stroke-width"</span><span class="PUNC">:</span><span class="NUMB">0.1</span><span class="PUNC">,</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2645</span>
-<span class='line'>2646</span> </span><span class="COMM">// outer borders</span><span class="WHIT">
-<span class='line'>2647</span> </span><span class="WHIT"> </span><span class="NAME">this.outerBorders</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2648</span> </span><span class="WHIT"> </span><span class="NAME">this.outerBorders.push</span><span class="PUNC">(</span><span class="NAME">this.paper.rect</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="STRN">"#ababab"</span><span class="PUNC">,</span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"none"</span><span class="PUNC">,</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2649</span> </span><span class="NAME">this.outerBorders.push</span><span class="PUNC">(</span><span class="NAME">this.paper.rect</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="STRN">"#ababab"</span><span class="PUNC">,</span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"none"</span><span class="PUNC">,</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2650</span>
-<span class='line'>2651</span> </span><span class="COMM">// inner borders</span><span class="WHIT">
-<span class='line'>2652</span> </span><span class="WHIT"> </span><span class="NAME">this.innerBorders</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2653</span> </span><span class="WHIT"> </span><span class="NAME">this.innerBorders.push</span><span class="PUNC">(</span><span class="NAME">this.paper.rect</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="STRN">"#efefef"</span><span class="PUNC">,</span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"none"</span><span class="PUNC">,</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2654</span> </span><span class="NAME">this.innerBorders.push</span><span class="PUNC">(</span><span class="NAME">this.paper.rect</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="STRN">"#efefef"</span><span class="PUNC">,</span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"none"</span><span class="PUNC">,</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2655</span> </span><span class="NAME">this.innerBorders.push</span><span class="PUNC">(</span><span class="NAME">this.paper.rect</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="STRN">"#d0d1d1"</span><span class="PUNC">,</span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"none"</span><span class="PUNC">,</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0.8</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2656</span> </span><span class="NAME">this.innerBorders.push</span><span class="PUNC">(</span><span class="NAME">this.paper.rect</span><span class="PUNC">(</span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="STRN">"#efefef"</span><span class="PUNC">,</span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"none"</span><span class="PUNC">,</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2657</span>
-<span class='line'>2658</span>
-<span class='line'>2659</span>
-<span class='line'>2660</span> </span><span class="NAME">this.paperSlider</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.paper.rect</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.heightmax</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="STRN">"#D4D5D5"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"none"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2661</span> </span><span class="WHIT">
-<span class='line'>2662</span> </span><span class="COMM">// the small white line displayed over the slider.</span><span class="WHIT">
-<span class='line'>2663</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderTip</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.paper.rect</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.heightmax</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="STRN">"#fc00ff"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">stroke</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"none"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2664</span> </span><span class="WHIT"> </span><span class="COMM">// decalage </span><span class="WHIT">
-<span class='line'>2665</span> </span><span class="WHIT"> </span><span class="COMM">// tweetSelection = this.paper.rect(-100,-100,5,5).attr({fill:"#fff",stroke: "none",opacity: 1}); </span><span class="WHIT">
-<span class='line'>2666</span> </span><span class="WHIT">
-<span class='line'>2667</span>
-<span class='line'>2668</span> </span><span class="NAME">this.paperSlider.toBack</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2669</span> </span><span class="WHIT"> </span><span class="NAME">this.paperBackground.toBack</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2670</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderTip.toFront</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2671</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2672</span> </span><span class="WHIT">
-<span class='line'>2673</span> </span><span class="NAME">this.selector.mouseleave</span><span class="PUNC">(</span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self.TooltipWidget.hide.call</span><span class="PUNC">(</span><span class="NAME">self.TooltipWidget</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2674</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"timeupdate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.sliderUpdater</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2675</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2676</span>
-<span class='line'>2677</span> </span><span class="NAME">IriSP.PolemicWidget.prototype.sliderUpdater</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2678</span>
-<span class='line'>2679</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2680</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2681</span> </span><span class="WHIT">
-<span class='line'>2682</span> </span><span class="NAME">this.paperSlider.attr</span><span class="PUNC">(</span><span class="STRN">"width"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2683</span> </span><span class="WHIT">
-<span class='line'>2684</span> </span><span class="NAME">this.sliderTip.attr</span><span class="PUNC">(</span><span class="STRN">"x"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2685</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2686</span> </span><span class="WHIT">
-<span class='line'>2687</span> </span><span class="NAME">IriSP.PolemicWidget.prototype.searchHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2688</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2689</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2690</span>
-<span class='line'>2691</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">matches</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.searchTweetsOccurences</span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2692</span>
-<span class='line'>2693</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">IriSP.countProperties</span><span class="PUNC">(</span><span class="NAME">matches</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2694</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.matchFound"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2695</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2696</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.noMatchFound"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2697</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2698</span>
-<span class='line'>2699</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">matches</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2700</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.svgElements.hasOwnProperty</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2701</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.svgElements</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2702</span> </span><span class="WHIT"> </span><span class="NAME">this.svgElements</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"#fc00ff"</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2703</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2704</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2705</span>
-<span class='line'>2706</span> </span><span class="WHIT"> </span><span class="COMM">// clean up the blocks that were in the previous search</span><span class="WHIT">
-<span class='line'>2707</span> </span><span class="WHIT"> </span><span class="COMM">// but who aren't in the current one.</span><span class="WHIT">
-<span class='line'>2708</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.oldSearchMatches</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2709</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">matches.hasOwnProperty</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2710</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.svgElements</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2711</span> </span><span class="WHIT"> </span><span class="NAME">e.attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.color</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2712</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2713</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2714</span> </span><span class="WHIT">
-<span class='line'>2715</span> </span><span class="NAME">this.oldSearchMatches</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">matches</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2716</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2717</span>
-<span class='line'>2718</span> </span><span class="NAME">IriSP.PolemicWidget.prototype.searchFieldClearedHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2719</span> </span><span class="WHIT"> </span><span class="COMM">// clean up the blocks that were in the previous search</span><span class="WHIT">
-<span class='line'>2720</span> </span><span class="WHIT"> </span><span class="COMM">// but who aren't in the current one.</span><span class="WHIT">
-<span class='line'>2721</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.oldSearchMatches</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2722</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.svgElements</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2723</span> </span><span class="WHIT"> </span><span class="NAME">e.attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.color</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2724</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2725</span> </span><span class="WHIT">
-<span class='line'>2726</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2727</span>
-<span class='line'>2728</span> </span><span class="NAME">IriSP.PolemicWidget.prototype.searchFieldClosedHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2729</span> </span><span class="WHIT"> </span><span class="COMM">// clean up the blocks that were in the previous search</span><span class="WHIT">
-<span class='line'>2730</span> </span><span class="WHIT"> </span><span class="COMM">// but who aren't in the current one.</span><span class="WHIT">
-<span class='line'>2731</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.oldSearchMatches</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2732</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.svgElements</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2733</span> </span><span class="WHIT"> </span><span class="NAME">e.attr</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">fill</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.color</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2734</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2735</span> </span><span class="WHIT">
-<span class='line'>2736</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2737</span> </span><span class="WHIT">
-<span class='line'>2738</span> </span><span class="NAME">IriSP.SegmentsWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2739</span>
-<span class='line'>2740</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">self</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2741</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.Widget.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2742</span> </span><span class="WHIT"> </span><span class="NAME">this.oldSearchMatches</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2743</span>
-<span class='line'>2744</span> </span><span class="WHIT"> </span><span class="COMM">// event handlers</span><span class="WHIT">
-<span class='line'>2745</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.search"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self.searchHandler.call</span><span class="PUNC">(</span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">searchString</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2746</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.closed"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self.searchFieldClosedHandler.call</span><span class="PUNC">(</span><span class="NAME">self</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2747</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.cleared"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self.searchFieldClearedHandler.call</span><span class="PUNC">(</span><span class="NAME">self</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2748</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2749</span>
-<span class='line'>2750</span> </span><span class="NAME">IriSP.SegmentsWidget.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.Widget</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2751</span>
-<span class='line'>2752</span> </span><span class="COMM">/* Get the width of a segment, in pixels. */</span><span class="WHIT">
-<span class='line'>2753</span> </span><span class="NAME">IriSP.SegmentsWidget.prototype.segmentToPixel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2754</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">begin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">annotation.begin</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2755</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">annotation.end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2756</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2757</span> </span><span class="WHIT">
-<span class='line'>2758</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startPourcent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.timeToPourcent</span><span class="PUNC">(</span><span class="NAME">begin</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2759</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startPixel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">this.selector.parent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">startPourcent</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2760</span> </span><span class="WHIT">
-<span class='line'>2761</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endPourcent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">IriSP.timeToPourcent</span><span class="PUNC">(</span><span class="NAME">end</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">startPourcent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2762</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endPixel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">this.selector.parent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">endPourcent</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2763</span> </span><span class="WHIT">
-<span class='line'>2764</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">endPixel</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2765</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2766</span>
-<span class='line'>2767</span> </span><span class="COMM">/* compute the total length of a group of segments */</span><span class="WHIT">
-<span class='line'>2768</span> </span><span class="NAME">IriSP.SegmentsWidget.prototype.segmentsLength</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">segmentsList</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2769</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">self</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2770</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">total</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2771</span> </span><span class="WHIT">
-<span class='line'>2772</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">segmentsList.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2773</span> </span><span class="WHIT"> </span><span class="NAME">total</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">self.segmentToPixel</span><span class="PUNC">(</span><span class="NAME">segmentsList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2774</span> </span><span class="WHIT">
-<span class='line'>2775</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">total</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2776</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2777</span>
-<span class='line'>2778</span> </span><span class="NAME">IriSP.SegmentsWidget.prototype.draw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2779</span>
-<span class='line'>2780</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">self</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2781</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer._data.annotations</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2782</span>
-<span class='line'>2783</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.addClass</span><span class="PUNC">(</span><span class="STRN">"Ldt-SegmentsWidget"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2784</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">IriSP.overlay_marker_template</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2785</span> </span><span class="WHIT">
-<span class='line'>2786</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">view_type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.getNonTweetIds</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2787</span>
-<span class='line'>2788</span> </span><span class="NAME">this.positionMarker</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selector.children</span><span class="PUNC">(</span><span class="STRN">":first"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2789</span> </span><span class="WHIT">
-<span class='line'>2790</span> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"timeupdate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.positionUpdater</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2791</span> </span><span class="WHIT">
-<span class='line'>2792</span>
-<span class='line'>2793</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2794</span> </span><span class="WHIT">
-<span class='line'>2795</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">segments_annotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2796</span> </span><span class="WHIT">
-<span class='line'>2797</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">annotations.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2798</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">annotations</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2799</span>
-<span class='line'>2800</span> </span><span class="WHIT"> </span><span class="COMM">/* filter the annotations whose type is not the one we want */</span><span class="WHIT">
-<span class='line'>2801</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">view_type</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT">
-<span class='line'>2802</span> </span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">view_type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2803</span> </span><span class="WHIT"> </span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2804</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2805</span>
-<span class='line'>2806</span> </span><span class="WHIT"> </span><span class="NAME">segments_annotations.push</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2807</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2808</span> </span><span class="WHIT">
-<span class='line'>2809</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">totalWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selector.width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">segments_annotations.length</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2810</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lastSegment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.underscore.max</span><span class="PUNC">(</span><span class="NAME">segments_annotations</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">annotation.end</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2811</span> </span><span class="WHIT">
-<span class='line'>2812</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">segments_annotations.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2813</span> </span><span class="WHIT">
-<span class='line'>2814</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">segments_annotations</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2815</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">begin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">annotation.begin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2816</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">annotation.end</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2817</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2818</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">annotation.id</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2819</span> </span><span class="WHIT">
-<span class='line'>2820</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startPixel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">this.selector.parent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">begin</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2821</span>
-<span class='line'>2822</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endPixel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">this.selector.parent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2823</span> </span><span class="WHIT">
-<span class='line'>2824</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">annotation.id</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">lastSegment.id</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2825</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pxWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endPixel</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">startPixel</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2826</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT">
-<span class='line'>2827</span> </span><span class="WHIT"> </span><span class="COMM">/* the last segment has no segment following it */</span><span class="WHIT">
-<span class='line'>2828</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pxWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endPixel</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">startPixel</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2829</span> </span><span class="WHIT">
-<span class='line'>2830</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">divTitle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">annotation.content.title</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" - "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">annotation.content.description</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">substr</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NUMB">55</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2831</span>
-<span class='line'>2832</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation.content.color</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2833</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">annotation.content.color</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2834</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT">
-<span class='line'>2835</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">annotation.color</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2836</span> </span><span class="WHIT">
-<span class='line'>2837</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hexa_color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.DEC_HEXA_COLOR</span><span class="PUNC">(</span><span class="NAME">color</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2838</span>
-<span class='line'>2839</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hexa_color</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"FFCC00"</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2840</span> </span><span class="WHIT"> </span><span class="NAME">hexa_color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"333"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2841</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hexa_color.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2842</span> </span><span class="WHIT"> </span><span class="NAME">hexa_color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hexa_color</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'00'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2843</span> </span><span class="WHIT">
-<span class='line'>2844</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotationTemplate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">IriSP.annotation_template</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2845</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="STRN">"divTitle"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">divTitle</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"startPixel"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">startPixel</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2846</span> </span><span class="WHIT"> </span><span class="STRN">"pxWidth"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">pxWidth</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"hexa_color"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">hexa_color</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2847</span> </span><span class="WHIT"> </span><span class="STRN">"seekPlace"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="PUNC">(</span><span class="NAME">begin</span><span class="PUNC">/</span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2848</span>
-<span class='line'>2849</span> </span><span class="WHIT">
-<span class='line'>2850</span> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">annotationTemplate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2851</span> </span><span class="WHIT">
-<span class='line'>2852</span> </span><span class="COMM">/* add a special class to the last segment and change its border */</span><span class="WHIT">
-<span class='line'>2853</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">annotation.id</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">lastSegment.id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2854</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">addClass</span><span class="PUNC">(</span><span class="STRN">"Ldt-lastSegment"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2855</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-lastSegment"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"border-color"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">hexa_color</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2856</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2857</span>
-<span class='line'>2858</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">fadeTo</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2859</span>
-<span class='line'>2860</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">mouseover</span><span class="PUNC">(</span><span class="WHIT">
-<span class='line'>2861</span> </span><span class="WHIT"> </span><span class="COMM">/* we wrap the handler in another function because js's scoping
-<span class='line'>2862</span> rules are function-based - otherwise, the internal vars like
-<span class='line'>2863</span> divTitle are preserved but they are looked-up from the draw
-<span class='line'>2864</span> method scope, so after that the loop is run, so they're not
-<span class='line'>2865</span> preserved */</span><span class="WHIT">
-<span class='line'>2866</span> </span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">divTitle</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2867</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2868</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0.6</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2869</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">offset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2870</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">correction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">outerWidth</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2871</span>
-<span class='line'>2872</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset_x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">offset.left</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">correction</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">106</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2873</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">offset_x</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2874</span> </span><span class="WHIT"> </span><span class="NAME">offset_x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2875</span> </span><span class="WHIT">
-<span class='line'>2876</span> </span><span class="NAME">self.TooltipWidget.show</span><span class="PUNC">(</span><span class="NAME">divTitle</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">color</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset_x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">event.pageY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">160</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2877</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="NAME">divTitle</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">mouseout</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2878</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0.3</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2879</span> </span><span class="WHIT"> </span><span class="NAME">self.TooltipWidget.hide</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2880</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2881</span>
-<span class='line'>2882</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.jQuery</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">click</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">_this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2883</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">_this.clickHandler</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2884</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2885</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2886</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2887</span>
-<span class='line'>2888</span> </span><span class="COMM">/* restores the view after a search */</span><span class="WHIT">
-<span class='line'>2889</span> </span><span class="NAME">IriSP.SegmentsWidget.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2890</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.children</span><span class="PUNC">(</span><span class="STRN">".Ldt-iri-chapter"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="NUMB">0.3</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2891</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2892</span>
-<span class='line'>2893</span> </span><span class="NAME">IriSP.SegmentsWidget.prototype.clickHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2894</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.SegmentsWidget.click"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">annotation.id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2895</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">begin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">annotation.begin</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2896</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="NAME">Math.round</span><span class="PUNC">(</span><span class="NAME">begin</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2897</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2898</span>
-<span class='line'>2899</span> </span><span class="NAME">IriSP.SegmentsWidget.prototype.searchHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2900</span>
-<span class='line'>2901</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2902</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2903</span>
-<span class='line'>2904</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">matches</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.searchOccurences</span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2905</span>
-<span class='line'>2906</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">IriSP.countProperties</span><span class="PUNC">(</span><span class="NAME">matches</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2907</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.matchFound"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2908</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2909</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.trigger</span><span class="PUNC">(</span><span class="STRN">"IriSP.search.noMatchFound"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2910</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2911</span>
-<span class='line'>2912</span> </span><span class="WHIT"> </span><span class="COMM">// un-highlight all the blocks</span><span class="WHIT">
-<span class='line'>2913</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.children</span><span class="PUNC">(</span><span class="STRN">".Ldt-iri-chapter"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"opacity"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2914</span> </span><span class="WHIT">
-<span class='line'>2915</span> </span><span class="COMM">// then highlight the ones with matches.</span><span class="WHIT">
-<span class='line'>2916</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">matches</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2917</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">factor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">matches</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.2</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2918</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="PUNC">+</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">dequeue</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2919</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">"#"</span><span class="PUNC">+</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">opacity</span><span class="PUNC">:</span><span class="NAME">factor</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2920</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>2921</span>
-<span class='line'>2922</span> </span><span class="WHIT">
-<span class='line'>2923</span> </span><span class="NAME">this.oldSearchMatches</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">matches</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2924</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2925</span>
-<span class='line'>2926</span> </span><span class="NAME">IriSP.SegmentsWidget.prototype.searchFieldClearedHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2927</span> </span><span class="WHIT"> </span><span class="NAME">this.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2928</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2929</span>
-<span class='line'>2930</span> </span><span class="NAME">IriSP.SegmentsWidget.prototype.searchFieldClosedHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2931</span> </span><span class="WHIT"> </span><span class="NAME">this.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2932</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2933</span>
-<span class='line'>2934</span> </span><span class="NAME">IriSP.SegmentsWidget.prototype.positionUpdater</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2935</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2936</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2937</span> </span><span class="WHIT"> </span><span class="COMM">//var position = ((time / duration) * 100).toFixed(2);</span><span class="WHIT">
-<span class='line'>2938</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toFixed</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2939</span>
-<span class='line'>2940</span> </span><span class="WHIT"> </span><span class="NAME">this.positionMarker.css</span><span class="PUNC">(</span><span class="STRN">"left"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">position</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"%"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2941</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2942</span> </span><span class="NAME">IriSP.SliderWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2943</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.Widget.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2944</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2945</span>
-<span class='line'>2946</span> </span><span class="NAME">IriSP.SliderWidget.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.Widget</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2947</span>
-<span class='line'>2948</span> </span><span class="NAME">IriSP.SliderWidget.prototype.draw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2949</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">self</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2950</span>
-<span class='line'>2951</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">IriSP.sliderWidget_template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2952</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.addClass</span><span class="PUNC">(</span><span class="STRN">"Ldt-SliderMinimized"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2953</span>
-<span class='line'>2954</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderBackground</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-sliderBackground"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2955</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderForeground</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-sliderForeground"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2956</span> </span><span class="WHIT"> </span><span class="NAME">this.positionMarker</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-sliderPositionMarker"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2957</span>
-<span class='line'>2958</span>
-<span class='line'>2959</span> </span><span class="WHIT"> </span><span class="COMM">// a special variable to stop methods from tinkering</span><span class="WHIT">
-<span class='line'>2960</span> </span><span class="WHIT"> </span><span class="COMM">// with the positionMarker when the user is dragging it</span><span class="WHIT">
-<span class='line'>2961</span> </span><span class="WHIT"> </span><span class="NAME">this.draggingOngoing</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2962</span>
-<span class='line'>2963</span> </span><span class="WHIT"> </span><span class="COMM">// another special variable used by the timeout handler to</span><span class="WHIT">
-<span class='line'>2964</span> </span><span class="WHIT"> </span><span class="COMM">// open or close the slider.</span><span class="WHIT">
-<span class='line'>2965</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderMaximized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2966</span> </span><span class="WHIT"> </span><span class="NAME">this.timeOutId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2967</span>
-<span class='line'>2968</span> </span><span class="WHIT">
-<span class='line'>2969</span> </span><span class="NAME">this.positionMarker.draggable</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">axis</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"x"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2970</span> </span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.positionMarkerDraggingStartedHandler</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2971</span> </span><span class="WHIT"> </span><span class="NAME">stop</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.positionMarkerDraggedHandler</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>2972</span> </span><span class="WHIT"> </span><span class="NAME">containment</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"parent"</span><span class="WHIT">
-<span class='line'>2973</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2974</span> </span><span class="WHIT"> </span><span class="NAME">this.positionMarker.css</span><span class="PUNC">(</span><span class="STRN">"position"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2975</span> </span><span class="WHIT">
-<span class='line'>2976</span> </span><span class="NAME">this.sliderBackground.click</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self.backgroundClickHandler.call</span><span class="PUNC">(</span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">event</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2977</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderForeground.click</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">self.foregroundClickHandler.call</span><span class="PUNC">(</span><span class="NAME">self</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">event</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2978</span>
-<span class='line'>2979</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.hover</span><span class="PUNC">(</span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.mouseOverHandler</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.mouseOutHandler</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2980</span>
-<span class='line'>2981</span> </span><span class="WHIT"> </span><span class="COMM">// update the positions</span><span class="WHIT">
-<span class='line'>2982</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"timeupdate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.sliderUpdater</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2983</span>
-<span class='line'>2984</span> </span><span class="WHIT"> </span><span class="COMM">// special messages :</span><span class="WHIT">
-<span class='line'>2985</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.PlayerWidget.MouseOver"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.mouseOverHandler</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2986</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.PlayerWidget.MouseOut"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.mouseOutHandler</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2987</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2988</span>
-<span class='line'>2989</span> </span><span class="COMM">/* update the slider and the position marker as time passes */</span><span class="WHIT">
-<span class='line'>2990</span> </span><span class="NAME">IriSP.SliderWidget.prototype.sliderUpdater</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>2991</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.draggingOngoing</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this._disableUpdate</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>2992</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2993</span> </span><span class="WHIT">
-<span class='line'>2994</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2995</span>
-<span class='line'>2996</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2997</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">percent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toFixed</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>2998</span> </span><span class="WHIT">
-<span class='line'>2999</span> </span><span class="COMM">/* we do these complicated calculations to center exactly
-<span class='line'>3000</span> the position Marker */</span><span class="WHIT">
-<span class='line'>3001</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pixels_to_percents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.selector.width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* how much is a pixel in percents */</span><span class="WHIT">
-<span class='line'>3002</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">positionMarker_width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.positionMarker.width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3003</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">correction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pixels_to_percents</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">positionMarker_width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3004</span>
-<span class='line'>3005</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newPos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">percent</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">correction</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3006</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">newPos</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3007</span> </span><span class="WHIT"> </span><span class="NAME">newPos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3008</span> </span><span class="WHIT">
-<span class='line'>3009</span> </span><span class="NAME">this.sliderForeground.css</span><span class="PUNC">(</span><span class="STRN">"width"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">percent</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"%"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3010</span> </span><span class="WHIT"> </span><span class="NAME">this.positionMarker.css</span><span class="PUNC">(</span><span class="STRN">"left"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPos</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"%"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3011</span>
-<span class='line'>3012</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3013</span>
-<span class='line'>3014</span> </span><span class="NAME">IriSP.SliderWidget.prototype.backgroundClickHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3015</span> </span><span class="WHIT"> </span><span class="COMM">/* this piece of code is a little bit convoluted - here's how it works :
-<span class='line'>3016</span> we want to handle clicks on the progress bar and convert those to seeks in the media.
-<span class='line'>3017</span> However, jquery only gives us a global position, and we want a number of pixels relative
-<span class='line'>3018</span> to our container div, so we get the parent position, and compute an offset to this position,
-<span class='line'>3019</span> and finally compute the progress ratio in the media.
-<span class='line'>3020</span> Finally we multiply this ratio with the duration to get the correct time
-<span class='line'>3021</span> */</span><span class="WHIT">
-<span class='line'>3022</span>
-<span class='line'>3023</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parentOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sliderBackground.parent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">offset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3024</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sliderBackground.width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3025</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">relX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">event.pageX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">parentOffset.left</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3026</span>
-<span class='line'>3027</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3028</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">relX</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toFixed</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3029</span>
-<span class='line'>3030</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="NAME">newTime</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3031</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3032</span>
-<span class='line'>3033</span> </span><span class="COMM">/* same function as the previous one, except that it handles clicks
-<span class='line'>3034</span> on the foreground element */</span><span class="WHIT">
-<span class='line'>3035</span> </span><span class="NAME">IriSP.SliderWidget.prototype.foregroundClickHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3036</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parentOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sliderForeground.parent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">offset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3037</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sliderBackground.width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3038</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">relX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">event.pageX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">parentOffset.left</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3039</span>
-<span class='line'>3040</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3041</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">relX</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toFixed</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3042</span>
-<span class='line'>3043</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="NAME">newTime</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3044</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3045</span>
-<span class='line'>3046</span> </span><span class="COMM">/* handles mouse over the slider */</span><span class="WHIT">
-<span class='line'>3047</span> </span><span class="NAME">IriSP.SliderWidget.prototype.mouseOverHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3048</span> </span><span class="WHIT">
-<span class='line'>3049</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.timeOutId</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3050</span> </span><span class="WHIT"> </span><span class="NAME">window.clearTimeout</span><span class="PUNC">(</span><span class="NAME">this.timeOutId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3051</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3052</span> </span><span class="WHIT">
-<span class='line'>3053</span> </span><span class="NAME">this.sliderMaximized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3054</span>
-<span class='line'>3055</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderBackground.animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">"height"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"9px"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3056</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderForeground.animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">"height"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"9px"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3057</span> </span><span class="WHIT"> </span><span class="NAME">this.positionMarker.animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">"height"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"9px"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"width"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"9px"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3058</span> </span><span class="WHIT"> </span><span class="COMM">//this.positionMarker.css("margin-top", "-4px");</span><span class="WHIT">
-<span class='line'>3059</span> </span><span class="WHIT">
-<span class='line'>3060</span> </span><span class="COMM">// this.selector.removeClass("Ldt-SliderMinimized");</span><span class="WHIT">
-<span class='line'>3061</span> </span><span class="COMM">// this.selector.addClass("Ldt-SliderMaximized");</span><span class="WHIT">
-<span class='line'>3062</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3063</span>
-<span class='line'>3064</span> </span><span class="COMM">/* handles when the mouse leaves the slider */</span><span class="WHIT">
-<span class='line'>3065</span> </span><span class="NAME">IriSP.SliderWidget.prototype.mouseOutHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3066</span>
-<span class='line'>3067</span> </span><span class="WHIT"> </span><span class="NAME">this.timeOutId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.setTimeout</span><span class="PUNC">(</span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.minimizeOnTimeout</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>3068</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.widgetsDefaults.SliderWidget.minimize_period</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3069</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3070</span>
-<span class='line'>3071</span> </span><span class="NAME">IriSP.SliderWidget.prototype.minimizeOnTimeout</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3072</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderBackground.animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">"height"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"5px"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3073</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderForeground.animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">"height"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"5px"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3074</span> </span><span class="WHIT"> </span><span class="NAME">this.positionMarker.animate</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">"height"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"5px"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"width"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"5px"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3075</span> </span><span class="WHIT"> </span><span class="NAME">this.positionMarker.css</span><span class="PUNC">(</span><span class="STRN">"margin-top"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"0px"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3076</span> </span><span class="WHIT"> </span><span class="NAME">this.sliderMinimized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3077</span> </span><span class="WHIT">
-<span class='line'>3078</span> </span><span class="COMM">// this.selector.removeClass("Ldt-SliderMaximized");</span><span class="WHIT">
-<span class='line'>3079</span> </span><span class="COMM">// this.selector.addClass("Ldt-SliderMinimized");</span><span class="WHIT">
-<span class='line'>3080</span>
-<span class='line'>3081</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3082</span>
-<span class='line'>3083</span> </span><span class="COMM">// called when the user starts dragging the position indicator</span><span class="WHIT">
-<span class='line'>3084</span> </span><span class="NAME">IriSP.SliderWidget.prototype.positionMarkerDraggingStartedHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ui</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3085</span> </span><span class="NAME">this.draggingOngoing</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3086</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3087</span>
-<span class='line'>3088</span> </span><span class="NAME">IriSP.SliderWidget.prototype.positionMarkerDraggedHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ui</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3089</span> </span><span class="NAME">this._disableUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// disable slider position updates while dragging is ongoing.</span><span class="WHIT">
-<span class='line'>3090</span> </span><span class="WHIT"> </span><span class="NAME">window.setTimeout</span><span class="PUNC">(</span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">this._disableUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">500</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3091</span>
-<span class='line'>3092</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parentOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sliderForeground.parent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">offset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3093</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sliderBackground.width</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3094</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">relX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">event.pageX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">parentOffset.left</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3095</span>
-<span class='line'>3096</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer.currentMedia</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">meta</span><span class="PUNC">[</span><span class="STRN">"dc:duration"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3097</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">relX</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">duration</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toFixed</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3098</span>
-<span class='line'>3099</span> </span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="NAME">newTime</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3100</span> </span><span class="WHIT">
-<span class='line'>3101</span> </span><span class="NAME">this.draggingOngoing</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3102</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3103</span>
-<span class='line'>3104</span> </span><span class="COMM">/* this widget displays a small tooltip */</span><span class="WHIT">
-<span class='line'>3105</span> </span><span class="NAME">IriSP.TooltipWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3106</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.Widget.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3107</span> </span><span class="WHIT"> </span><span class="NAME">this._shown</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3108</span> </span><span class="WHIT"> </span><span class="NAME">this._displayedText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3109</span> </span><span class="WHIT"> </span><span class="NAME">this._hideTimeout</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3110</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3111</span>
-<span class='line'>3112</span>
-<span class='line'>3113</span> </span><span class="NAME">IriSP.TooltipWidget.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.Widget</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3114</span>
-<span class='line'>3115</span> </span><span class="NAME">IriSP.TooltipWidget.prototype.draw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3116</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">templ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="NAME">IriSP.tooltipWidget_template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3117</span>
-<span class='line'>3118</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">templ</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3119</span> </span><span class="WHIT"> </span><span class="NAME">this.hide</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3120</span>
-<span class='line'>3121</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3122</span>
-<span class='line'>3123</span> </span><span class="NAME">IriSP.TooltipWidget.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3124</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".tiptext"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">text</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3125</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3126</span>
-<span class='line'>3127</span> </span><span class="NAME">IriSP.TooltipWidget.prototype.show</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">color</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3128</span>
-<span class='line'>3129</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._displayedText</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">text</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3130</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3131</span> </span><span class="WHIT">
-<span class='line'>3132</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".tipcolor"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"background-color"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">color</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3133</span> </span><span class="WHIT"> </span><span class="NAME">this._displayedText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">text</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3134</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".tiptext"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">text</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3135</span> </span><span class="WHIT"> </span><span class="COMM">//this.selector.find(".tip").css("left", x).css("top", y); </span><span class="WHIT">
-<span class='line'>3136</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".tip"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"left"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">css</span><span class="PUNC">(</span><span class="STRN">"top"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3137</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".tip"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">show</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3138</span> </span><span class="WHIT"> </span><span class="NAME">this._shown</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3139</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3140</span>
-<span class='line'>3141</span> </span><span class="NAME">IriSP.TooltipWidget.prototype.hide</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3142</span> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".tip"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">hide</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3143</span> </span><span class="WHIT"> </span><span class="NAME">this._shown</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3144</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="COMM">/* a widget that displays tweet - used in conjunction with the polemicWidget */</span><span class="WHIT">
-<span class='line'>3145</span>
-<span class='line'>3146</span> </span><span class="NAME">IriSP.TweetsWidget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3147</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.Widget.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Popcorn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Serializer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3148</span>
-<span class='line'>3149</span> </span><span class="WHIT"> </span><span class="NAME">this._displayingTweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3150</span> </span><span class="WHIT"> </span><span class="NAME">this._timeoutId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3151</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3152</span>
-<span class='line'>3153</span>
-<span class='line'>3154</span> </span><span class="NAME">IriSP.TweetsWidget.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.Widget</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3155</span>
-<span class='line'>3156</span>
-<span class='line'>3157</span> </span><span class="NAME">IriSP.TweetsWidget.prototype.drawTweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3158</span> </span><span class="WHIT">
-<span class='line'>3159</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">title</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.formatTweet</span><span class="PUNC">(</span><span class="NAME">annotation.content.title</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3160</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">annotation.content.img.src</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3161</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">img</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"None"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3162</span> </span><span class="WHIT"> </span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.widgetsDefaults.TweetsWidget.default_profile_picture</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3163</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3164</span>
-<span class='line'>3165</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">imageMarkup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.templToHTML</span><span class="PUNC">(</span><span class="STRN">"<img src='{{src}}' alt='user image'></img>"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>3166</span> </span><span class="PUNC">{</span><span class="NAME">src</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">img</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3167</span> </span><span class="WHIT">
-<span class='line'>3168</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"dc:source"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3169</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tweetContents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JSON.parse</span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"dc:source"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3170</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">creator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tweetContents.user.screen_name</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3171</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">real_name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tweetContents.user.name</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3172</span>
-<span class='line'>3173</span> </span><span class="WHIT"> </span><span class="NAME">imageMarkup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.templToHTML</span><span class="PUNC">(</span><span class="STRN">"<a href='http://twitter.com/{{creator}}'><img src='{{src}}' alt='user image'></img></a>"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>3174</span> </span><span class="PUNC">{</span><span class="NAME">src</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">img</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">creator</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">creator</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3175</span> </span><span class="WHIT">
-<span class='line'>3176</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">formatted_date</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="NAME">tweetContents.created_at</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toLocaleDateString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3177</span> </span><span class="WHIT"> </span><span class="NAME">title</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.templToHTML</span><span class="PUNC">(</span><span class="STRN">"<a class='Ldt-tweet_userHandle' href='http://twitter.com/{{creator}}'>@{{creator}}</a> - "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='line'>3178</span> </span><span class="STRN">"<div class='Ldt-tweet_realName'>{{real_name}}</div>"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='line'>3179</span> </span><span class="WHIT"> </span><span class="STRN">"<div class='Ldt-tweet_tweetContents'>{{{ contents }}}</div>"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='line'>3180</span> </span><span class="WHIT"> </span><span class="STRN">"<div class='Ldt-tweet_date'>{{ date }}</div>"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>3181</span> </span><span class="PUNC">{</span><span class="NAME">creator</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">creator</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">real_name</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">real_name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">contents</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">title</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">date</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">formatted_date</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3182</span>
-<span class='line'>3183</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-TweetReply"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"href"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"http://twitter.com/home?status=@"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">creator</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">":%20"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3184</span>
-<span class='line'>3185</span>
-<span class='line'>3186</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rtText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mustache.to_html</span><span class="PUNC">(</span><span class="STRN">"http://twitter.com/home?status=RT @{{creator}}: {{text}}"</span><span class="PUNC">,</span><span class="WHIT">
-<span class='line'>3187</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">creator</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">creator</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">text</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.encodeURI</span><span class="PUNC">(</span><span class="NAME">annotation.content.title</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3188</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-Retweet"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">attr</span><span class="PUNC">(</span><span class="STRN">"href"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rtText</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3189</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3190</span>
-<span class='line'>3191</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-tweetContents"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">html</span><span class="PUNC">(</span><span class="NAME">title</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3192</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-tweetAvatar"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">html</span><span class="PUNC">(</span><span class="NAME">imageMarkup</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3193</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.show</span><span class="PUNC">(</span><span class="STRN">"blind"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">250</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3194</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3195</span>
-<span class='line'>3196</span> </span><span class="NAME">IriSP.TweetsWidget.prototype.displayTweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3197</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._displayingTweet</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3198</span> </span><span class="WHIT"> </span><span class="NAME">this._displayingTweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3199</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3200</span> </span><span class="WHIT"> </span><span class="NAME">window.clearTimeout</span><span class="PUNC">(</span><span class="NAME">this._timeoutId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3201</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3202</span>
-<span class='line'>3203</span> </span><span class="WHIT"> </span><span class="NAME">this.drawTweet</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3204</span>
-<span class='line'>3205</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._Popcorn.currentTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3206</span> </span><span class="NAME">this._timeoutId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.setTimeout</span><span class="PUNC">(</span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.clearPanel</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.widgetsDefaults.TweetsWidget.tweet_display_period</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3207</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3208</span>
-<span class='line'>3209</span>
-<span class='line'>3210</span> </span><span class="NAME">IriSP.TweetsWidget.prototype.clearPanel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3211</span> </span><span class="NAME">this._displayingTweet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3212</span> </span><span class="WHIT"> </span><span class="NAME">this._timeoutId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3213</span> </span><span class="WHIT"> </span><span class="NAME">this.closePanel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3214</span> </span><span class="WHIT">
-<span class='line'>3215</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3216</span>
-<span class='line'>3217</span> </span><span class="NAME">IriSP.TweetsWidget.prototype.closePanel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3218</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._timeoutId</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3219</span> </span><span class="WHIT"> </span><span class="COMM">/* we're called from the "close window" link */</span><span class="WHIT">
-<span class='line'>3220</span> </span><span class="WHIT"> </span><span class="COMM">/* cancel the timeout */</span><span class="WHIT">
-<span class='line'>3221</span> </span><span class="WHIT"> </span><span class="NAME">window.clearTimeout</span><span class="PUNC">(</span><span class="NAME">this._timeoutId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3222</span> </span><span class="WHIT"> </span><span class="NAME">this._timeoutId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3223</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3224</span> </span><span class="WHIT">
-<span class='line'>3225</span> </span><span class="NAME">this.selector.hide</span><span class="PUNC">(</span><span class="STRN">"blind"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">400</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3226</span> </span><span class="WHIT">
-<span class='line'>3227</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3228</span>
-<span class='line'>3229</span> </span><span class="COMM">/* cancel the timeout if the user clicks on the keep panel open button */</span><span class="WHIT">
-<span class='line'>3230</span> </span><span class="NAME">IriSP.TweetsWidget.prototype.keepPanel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3231</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._timeoutId</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3232</span> </span><span class="WHIT"> </span><span class="COMM">/* we're called from the "close window" link */</span><span class="WHIT">
-<span class='line'>3233</span> </span><span class="WHIT"> </span><span class="COMM">/* cancel the timeout */</span><span class="WHIT">
-<span class='line'>3234</span> </span><span class="WHIT"> </span><span class="NAME">window.clearTimeout</span><span class="PUNC">(</span><span class="NAME">this._timeoutId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3235</span> </span><span class="WHIT"> </span><span class="NAME">this._timeoutId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3236</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3237</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3238</span>
-<span class='line'>3239</span> </span><span class="NAME">IriSP.TweetsWidget.prototype.draw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3240</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_this</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3241</span> </span><span class="WHIT">
-<span class='line'>3242</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tweetMarkup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.templToHTML</span><span class="PUNC">(</span><span class="NAME">IriSP.tweetWidget_template</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="STRN">"share_template"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">IriSP.share_template</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3243</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.append</span><span class="PUNC">(</span><span class="NAME">tweetMarkup</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3244</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.hide</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3245</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-tweetWidgetMinimize"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">click</span><span class="PUNC">(</span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.closePanel</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3246</span> </span><span class="WHIT"> </span><span class="NAME">this.selector.find</span><span class="PUNC">(</span><span class="STRN">".Ldt-tweetWidgetKeepOpen"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">click</span><span class="PUNC">(</span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.keepPanel</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3247</span> </span><span class="WHIT">
-<span class='line'>3248</span> </span><span class="NAME">this._Popcorn.listen</span><span class="PUNC">(</span><span class="STRN">"IriSP.PolemicTweet.click"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IriSP.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.PolemicTweetClickHandler</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3249</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3250</span>
-<span class='line'>3251</span> </span><span class="NAME">IriSP.TweetsWidget.prototype.PolemicTweetClickHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tweet_id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3252</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">index</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3253</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">index</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this._serializer._data.annotations</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3254</span> </span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._serializer._data.annotations</span><span class="PUNC">[</span><span class="NAME">index</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3255</span> </span><span class="WHIT">
-<span class='line'>3256</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">annotation.id</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">tweet_id</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3257</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3258</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3259</span> </span><span class="WHIT">
-<span class='line'>3260</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">annotation.id</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">tweet_id</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3261</span> </span><span class="WHIT"> </span><span class="COMM">/* we haven't found it */</span><span class="WHIT">
-<span class='line'>3262</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3263</span> </span><span class="WHIT">
-<span class='line'>3264</span> </span><span class="NAME">this.displayTweet</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3265</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3266</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3267</span>
-<span class='line'>3268</span> </span><span class="NAME">IriSP.JSONSerializer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">DataLoader</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3269</span> </span><span class="WHIT"> </span><span class="NAME">IriSP.Serializer.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">DataLoader</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3270</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3271</span>
-<span class='line'>3272</span> </span><span class="NAME">IriSP.JSONSerializer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IriSP.Serializer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3273</span>
-<span class='line'>3274</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.serialize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3275</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">JSON.stringify</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3276</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3277</span>
-<span class='line'>3278</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.deserialize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3279</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">JSON.parse</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3280</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3281</span>
-<span class='line'>3282</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.sync</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">callback</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3283</span> </span><span class="WHIT"> </span><span class="COMM">/* we don't have to do much because jQuery handles json for us */</span><span class="WHIT">
-<span class='line'>3284</span>
-<span class='line'>3285</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">self</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3286</span>
-<span class='line'>3287</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3288</span> </span><span class="NAME">self._data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3289</span> </span><span class="COMM">// sort the data too </span><span class="WHIT">
-<span class='line'>3290</span> </span><span class="WHIT"> </span><span class="NAME">self._data</span><span class="PUNC">[</span><span class="STRN">"annotations"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">sort</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3291</span> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a_begin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">a.begin</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3292</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b_begin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="NAME">b.begin</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3293</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a_begin</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">b_begin</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3294</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3295</span> </span><span class="WHIT">
-<span class='line'>3296</span> </span><span class="NAME">callback</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3297</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3298</span> </span><span class="WHIT">
-<span class='line'>3299</span> </span><span class="NAME">this._DataLoader.get</span><span class="PUNC">(</span><span class="NAME">this._url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3300</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3301</span>
-<span class='line'>3302</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.currentMedia</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3303</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._data.medias</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* FIXME: don't hardcode it */</span><span class="WHIT">
-<span class='line'>3304</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3305</span>
-<span class='line'>3306</span> </span><span class="COMM">/* this function searches for an annotation which matches title, description and keyword
-<span class='line'>3307</span> "" matches any field.
-<span class='line'>3308</span> Note: it ignores tweets.
-<span class='line'>3309</span> */</span><span class="WHIT">
-<span class='line'>3310</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.searchAnnotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">title</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">description</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyword</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3311</span> </span><span class="WHIT"> </span><span class="COMM">/* we can have many types of annotations. We want search to only look for regular segments */</span><span class="WHIT">
-<span class='line'>3312</span> </span><span class="WHIT"> </span><span class="COMM">/* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
-<span class='line'>3313</span> null or undefined.
-<span class='line'>3314</span> */</span><span class="WHIT">
-<span class='line'>3315</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">view</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3316</span>
-<span class='line'>3317</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this._data.views</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this._data.views</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3318</span> </span><span class="WHIT"> </span><span class="NAME">view</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._data.views</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3319</span>
-<span class='line'>3320</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">searchViewType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3321</span>
-<span class='line'>3322</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">view</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">view.annotation_types</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">view.annotation_types.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3323</span> </span><span class="WHIT"> </span><span class="NAME">searchViewType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">view.annotation_types</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3324</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3325</span>
-<span class='line'>3326</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">filterfn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3327</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">searchViewType</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>3328</span> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>3329</span> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>3330</span> </span><span class="WHIT"> </span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">searchViewType</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3331</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// don't pass</span><span class="WHIT">
-<span class='line'>3332</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3333</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3334</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3335</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3336</span>
-<span class='line'>3337</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.searchAnnotationsFilter</span><span class="PUNC">(</span><span class="NAME">title</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">description</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyword</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filterfn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3338</span>
-<span class='line'>3339</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3340</span>
-<span class='line'>3341</span> </span><span class="COMM">/* only look for tweets */</span><span class="WHIT">
-<span class='line'>3342</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.searchTweets</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">title</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">description</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyword</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3343</span> </span><span class="WHIT"> </span><span class="COMM">/* we can have many types of annotations. We want search to only look for regular segments */</span><span class="WHIT">
-<span class='line'>3344</span> </span><span class="WHIT"> </span><span class="COMM">/* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
-<span class='line'>3345</span> null or undefined.
-<span class='line'>3346</span> */</span><span class="WHIT">
-<span class='line'>3347</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">view</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3348</span>
-<span class='line'>3349</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this._data.views</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this._data.views</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3350</span> </span><span class="WHIT"> </span><span class="NAME">view</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._data.views</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3351</span>
-<span class='line'>3352</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">searchViewType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3353</span>
-<span class='line'>3354</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">view</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">view.annotation_types</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">view.annotation_types.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3355</span> </span><span class="WHIT"> </span><span class="NAME">searchViewType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">view.annotation_types</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3356</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3357</span>
-<span class='line'>3358</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">filterfn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3359</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">searchViewType</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>3360</span> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>3361</span> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>3362</span> </span><span class="WHIT"> </span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">searchViewType</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3363</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// pass</span><span class="WHIT">
-<span class='line'>3364</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3365</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3366</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3367</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3368</span>
-<span class='line'>3369</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.searchAnnotationsFilter</span><span class="PUNC">(</span><span class="NAME">title</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">description</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyword</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filterfn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3370</span>
-<span class='line'>3371</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3372</span>
-<span class='line'>3373</span> </span><span class="COMM">/*
-<span class='line'>3374</span> the previous function call this one, which is more general:
-<span class='line'>3375</span> */</span><span class="WHIT">
-<span class='line'>3376</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.searchAnnotationsFilter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">title</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">description</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyword</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3377</span>
-<span class='line'>3378</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rTitle</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3379</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rDescription</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3380</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rKeyword</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3381</span> </span><span class="WHIT"> </span><span class="COMM">/* match anything if given the empty string */</span><span class="WHIT">
-<span class='line'>3382</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">title</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3383</span> </span><span class="WHIT"> </span><span class="NAME">title</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">".*"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3384</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">description</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3385</span> </span><span class="WHIT"> </span><span class="NAME">description</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">".*"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3386</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyword</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3387</span> </span><span class="WHIT"> </span><span class="NAME">keyword</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">".*"</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3388</span> </span><span class="WHIT">
-<span class='line'>3389</span> </span><span class="NAME">rTitle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="NAME">title</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"i"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3390</span> </span><span class="NAME">rDescription</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="NAME">description</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"i"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3391</span> </span><span class="NAME">rKeyword</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="NAME">keyword</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"i"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3392</span>
-<span class='line'>3393</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ret_array</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3394</span> </span><span class="WHIT">
-<span class='line'>3395</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3396</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this._data.annotations</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3397</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._data.annotations</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3398</span> </span><span class="WHIT">
-<span class='line'>3399</span> </span><span class="COMM">/* filter the annotations whose type is not the one we want */</span><span class="WHIT">
-<span class='line'>3400</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">filter</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3401</span> </span><span class="WHIT"> </span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3402</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3403</span> </span><span class="WHIT">
-<span class='line'>3404</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rTitle.test</span><span class="PUNC">(</span><span class="NAME">annotation.content.title</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='line'>3405</span> </span><span class="NAME">rDescription.test</span><span class="PUNC">(</span><span class="NAME">annotation.content.description</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3406</span> </span><span class="WHIT"> </span><span class="COMM">/* FIXME : implement keyword support */</span><span class="WHIT">
-<span class='line'>3407</span> </span><span class="WHIT"> </span><span class="NAME">ret_array.push</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3408</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3409</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3410</span> </span><span class="WHIT">
-<span class='line'>3411</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ret_array</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3412</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3413</span>
-<span class='line'>3414</span> </span><span class="COMM">/* breaks a string in words and searches each of these words. Returns an array
-<span class='line'>3415</span> of objects with the id of the annotation and its number of occurences.
-<span class='line'>3416</span>
-<span class='line'>3417</span> FIXME: optimize ? seems to be n^2 in the worst case.
-<span class='line'>3418</span> */</span><span class="WHIT">
-<span class='line'>3419</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.searchOccurences</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3420</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3421</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keywords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">searchString.split</span><span class="PUNC">(</span><span class="REGX">/\s+/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3422</span> </span><span class="WHIT">
-<span class='line'>3423</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">keywords</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3424</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyword</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keywords</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3425</span> </span><span class="WHIT">
-<span class='line'>3426</span> </span><span class="COMM">// search this keyword in descriptions and title</span><span class="WHIT">
-<span class='line'>3427</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">found_annotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
-<span class='line'>3428</span> </span><span class="WHIT"> </span><span class="NAME">found_annotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">found_annotations.concat</span><span class="PUNC">(</span><span class="NAME">this.searchAnnotations</span><span class="PUNC">(</span><span class="NAME">keyword</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3429</span> </span><span class="WHIT"> </span><span class="NAME">found_annotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">found_annotations.concat</span><span class="PUNC">(</span><span class="NAME">this.searchAnnotations</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyword</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3430</span> </span><span class="WHIT">
-<span class='line'>3431</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">found_annotations</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3432</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">current_annotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">found_annotations</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3433</span> </span><span class="WHIT">
-<span class='line'>3434</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">ret.hasOwnProperty</span><span class="PUNC">(</span><span class="NAME">current_annotation.id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3435</span> </span><span class="WHIT"> </span><span class="NAME">ret</span><span class="PUNC">[</span><span class="NAME">current_annotation.id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3436</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3437</span> </span><span class="WHIT"> </span><span class="NAME">ret</span><span class="PUNC">[</span><span class="NAME">current_annotation.id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3438</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3439</span> </span><span class="WHIT">
-<span class='line'>3440</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3441</span>
-<span class='line'>3442</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3443</span> </span><span class="WHIT">
-<span class='line'>3444</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3445</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3446</span>
-<span class='line'>3447</span> </span><span class="COMM">/* breaks a string in words and searches each of these words. Returns an array
-<span class='line'>3448</span> of objects with the id of the annotation and its number of occurences.
-<span class='line'>3449</span>
-<span class='line'>3450</span> FIXME: optimize ? seems to be n^2 in the worst case.
-<span class='line'>3451</span> */</span><span class="WHIT">
-<span class='line'>3452</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.searchTweetsOccurences</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">searchString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3453</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3454</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keywords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">searchString.split</span><span class="PUNC">(</span><span class="REGX">/\s+/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3455</span> </span><span class="WHIT">
-<span class='line'>3456</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">keywords</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3457</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyword</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keywords</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3458</span> </span><span class="WHIT">
-<span class='line'>3459</span> </span><span class="COMM">// search this keyword in descriptions and title</span><span class="WHIT">
-<span class='line'>3460</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">found_annotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
-<span class='line'>3461</span> </span><span class="WHIT"> </span><span class="NAME">found_annotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">found_annotations.concat</span><span class="PUNC">(</span><span class="NAME">this.searchTweets</span><span class="PUNC">(</span><span class="NAME">keyword</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3462</span> </span><span class="WHIT"> </span><span class="NAME">found_annotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">found_annotations.concat</span><span class="PUNC">(</span><span class="NAME">this.searchTweets</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyword</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3463</span> </span><span class="WHIT">
-<span class='line'>3464</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">found_annotations</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3465</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">current_annotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">found_annotations</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3466</span> </span><span class="WHIT">
-<span class='line'>3467</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">ret.hasOwnProperty</span><span class="PUNC">(</span><span class="NAME">current_annotation.id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3468</span> </span><span class="WHIT"> </span><span class="NAME">ret</span><span class="PUNC">[</span><span class="NAME">current_annotation.id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3469</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3470</span> </span><span class="WHIT"> </span><span class="NAME">ret</span><span class="PUNC">[</span><span class="NAME">current_annotation.id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3471</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3472</span> </span><span class="WHIT">
-<span class='line'>3473</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3474</span>
-<span class='line'>3475</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3476</span> </span><span class="WHIT">
-<span class='line'>3477</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ret</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3478</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3479</span>
-<span class='line'>3480</span> </span><span class="COMM">/* takes the currentTime and returns all the annotations that are displayable at the moment
-<span class='line'>3481</span> NB: only takes account the first type of annotations - ignores tweets
-<span class='line'>3482</span> currentTime is in seconds.
-<span class='line'>3483</span> */</span><span class="WHIT">
-<span class='line'>3484</span>
-<span class='line'>3485</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.currentAnnotations</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">currentTime</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3486</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">view</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3487</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentTimeMs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">currentTime</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3488</span>
-<span class='line'>3489</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this._data.views</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this._data.views</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3490</span> </span><span class="WHIT"> </span><span class="NAME">view</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._data.views</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3491</span>
-<span class='line'>3492</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">view_type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3493</span>
-<span class='line'>3494</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">view</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">view.annotation_types</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">view.annotation_types.length</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3495</span> </span><span class="WHIT"> </span><span class="NAME">view_type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">view.annotation_types</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3496</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3497</span>
-<span class='line'>3498</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ret_array</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3499</span> </span><span class="WHIT">
-<span class='line'>3500</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3501</span> </span><span class="WHIT">
-<span class='line'>3502</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this._data.annotations</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3503</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">annotation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._data.annotations</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3504</span> </span><span class="WHIT">
-<span class='line'>3505</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">annotation.meta</span><span class="PUNC">[</span><span class="STRN">"id-ref"</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">view_type</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">annotation.begin</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">currentTimeMs</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">annotation.end</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">currentTimeMs</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3506</span> </span><span class="WHIT"> </span><span class="NAME">ret_array.push</span><span class="PUNC">(</span><span class="NAME">annotation</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3507</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='line'>3508</span>
-<span class='line'>3509</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ret_array</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3510</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3511</span>
-<span class='line'>3512</span>
-<span class='line'>3513</span> </span><span class="COMM">/* this function returns a list of ids of tweet lines */</span><span class="WHIT">
-<span class='line'>3514</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.getTweetIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3515</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this._data.lists</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this._data.lists</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3516</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3517</span>
-<span class='line'>3518</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tweetsId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3519</span> </span><span class="WHIT">
-<span class='line'>3520</span> </span><span class="COMM">/* first get the list containing the tweets */</span><span class="WHIT">
-<span class='line'>3521</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tweets</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.underscore.filter</span><span class="PUNC">(</span><span class="NAME">this._data.lists</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">entry</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">entry.id.indexOf</span><span class="PUNC">(</span><span class="STRN">"tweet"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3522</span> </span><span class="WHIT">
-<span class='line'>3523</span> </span><span class="COMM">// FIXME: collect tweets from multiple sources ?</span><span class="WHIT">
-<span class='line'>3524</span> </span><span class="WHIT"> </span><span class="NAME">tweetsId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.underscore.pluck</span><span class="PUNC">(</span><span class="NAME">tweets</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">items</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-ref"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3525</span>
-<span class='line'>3526</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tweetsId</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3527</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3528</span>
-<span class='line'>3529</span> </span><span class="COMM">/* this function returns a list of lines which are not tweet lines */</span><span class="WHIT">
-<span class='line'>3530</span> </span><span class="NAME">IriSP.JSONSerializer.prototype.getNonTweetIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3531</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this._data.lists</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this._data.lists</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT">
-<span class='line'>3532</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3533</span> </span><span class="WHIT">
-<span class='line'>3534</span> </span><span class="COMM">/* get all the ids */</span><span class="WHIT">
-<span class='line'>3535</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ids</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IriSP.underscore.map</span><span class="PUNC">(</span><span class="NAME">this._data.lists</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">entry</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='line'>3536</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">IriSP.underscore.pluck</span><span class="PUNC">(</span><span class="NAME">entry.items</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-ref"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3537</span> </span><span class="WHIT">
-<span class='line'>3538</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">illegal_values</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getTweetIds</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3539</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">IriSP.underscore.difference</span><span class="PUNC">(</span><span class="NAME">ids</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">illegal_values</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3540</span> </span><span class="WHIT">
-<span class='line'>3541</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='line'>3542</span> </span></pre></body></html>
\ No newline at end of file
--- a/sbin/res/jsdoc/templates/jsdoc/allclasses.tmpl Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-<div align="center">{+new Link().toFile("index.html").withText("Class Index")+}
-| {+new Link().toFile("files.html").withText("File Index")+}</div>
-<hr />
-<h2>Classes</h2>
-<ul class="classList">
- <for each="thisClass" in="data">
- <li>{!
- if (thisClass.alias == "_global_") {
- output += "<i>"+new Link().toClass(thisClass.alias)+"</i>";
- }
- else {
- output += new Link().toClass(thisClass.alias);
- }
- !}</li>
- </for>
-</ul>
-<hr />
\ No newline at end of file
--- a/sbin/res/jsdoc/templates/jsdoc/allfiles.tmpl Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" />
- {! Link.base = ""; /* all generated links will be relative to this */ !}
- <title>JsDoc Reference - File Index</title>
- <meta name="generator" content="JsDoc Toolkit" />
-
- <style type="text/css">
- {+include("static/default.css")+}
- </style>
- </head>
-
- <body>
- {+include("static/header.html")+}
-
- <div id="index">
- {+publish.classesIndex+}
- </div>
-
- <div id="content">
- <h1 class="classTitle">File Index</h1>
-
- <for each="item" in="data">
- <div>
- <h2>{+new Link().toSrc(item.alias).withText(item.name)+}</h2>
- <if test="item.desc">{+resolveLinks(item.desc)+}</if>
- <dl>
- <if test="item.author">
- <dt class="heading">Author:</dt>
- <dd>{+item.author+}</dd>
- </if>
- <if test="item.version">
- <dt class="heading">Version:</dt>
- <dd>{+item.version+}</dd>
- </if>
- {! var locations = item.comment.getTag('location').map(function($){return $.toString().replace(/(^\$ ?| ?\$$)/g, '').replace(/^HeadURL: https:/g, 'http:');}) !}
- <if test="locations.length">
- <dt class="heading">Location:</dt>
- <for each="location" in="locations">
- <dd><a href="{+location+}">{+location+}</a></dd>
- </for>
- </if>
- </dl>
- </div>
- <hr />
- </for>
-
- </div>
- <div class="fineprint" style="clear:both">
- <if test="JSDOC.opt.D.copyright">©{+JSDOC.opt.D.copyright+}<br /></if>
- Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}
- </div>
- </body>
-</html>
\ No newline at end of file
--- a/sbin/res/jsdoc/templates/jsdoc/class.tmpl Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,649 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" />
- <meta name="generator" content="JsDoc Toolkit" />
- {! Link.base = "../"; /* all generated links will be relative to this */ !}
- <title>JsDoc Reference - {+data.alias+}</title>
-
- <style type="text/css">
- {+include("static/default.css")+}
- </style>
- </head>
-
- <body>
-<!-- ============================== header ================================= -->
- <!-- begin static/header.html -->
- {+include("static/header.html")+}
- <!-- end static/header.html -->
-
-<!-- ============================== classes index ============================ -->
- <div id="index">
- <!-- begin publish.classesIndex -->
- {+publish.classesIndex+}
- <!-- end publish.classesIndex -->
- </div>
-
- <div id="content">
-<!-- ============================== class title ============================ -->
- <h1 class="classTitle">
- {!
- var classType = "";
-
- if (data.isBuiltin()) {
- classType += "Built-In ";
- }
-
- if (data.isNamespace) {
- if (data.is('FUNCTION')) {
- classType += "Function ";
- }
- classType += "Namespace ";
- }
- else {
- classType += "Class ";
- }
- !}
- {+classType+}{+data.alias+}
- </h1>
-
-<!-- ============================== class summary ========================== -->
- <p class="description">
- <if test="data.version"><br />Version
- {+ data.version +}.<br />
- </if>
- <if test="data.augments.length"><br />Extends
- {+
- data.augments
- .sort()
- .map(
- function($) { return new Link().toSymbol($); }
- )
- .join(", ")
- +}.<br />
- </if>
-
- {+resolveLinks(data.classDesc)+}
-
- <if test="!data.isBuiltin()">{# isn't defined in any file #}
- <br /><i>Defined in: </i> {+new Link().toSrc(data.srcFile)+}.
- </if>
- </p>
-
-<!-- ============================== constructor summary ==================== -->
- <if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
- <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class {+data.alias+}.">
- <caption>{+classType+}Summary</caption>
- <thead>
- <tr>
- <th scope="col">Constructor Attributes</th>
- <th scope="col">Constructor Name and Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td class="attributes">{!
- if (data.isPrivate) output += "<private> ";
- if (data.isInner) output += "<inner> ";
- !} </td>
- <td class="nameDescription" {!if (data.comment.getTag("hilited").length){output += 'style="color: red"'}!}>
- <div class="fixedFont">
- <b>{+ new Link().toSymbol(data.alias).inner('constructor')+}</b><if test="classType != 'Namespace '">{+ makeSignature(data.params) +}</if>
- </div>
- <div class="description">{+resolveLinks(summarize(data.desc))+}</div>
- </td>
- </tr>
- </tbody>
- </table>
- </if>
-
-<!-- ============================== properties summary ===================== -->
- <if test="data.properties.length">
- {! var ownProperties = data.properties.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !}
- <if test="ownProperties.length">
- <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class {+data.alias+}.">
- <caption>Field Summary</caption>
- <thead>
- <tr>
- <th scope="col">Field Attributes</th>
- <th scope="col">Field Name and Description</th>
- </tr>
- </thead>
- <tbody>
- <for each="member" in="ownProperties">
- <tr>
- <td class="attributes">{!
- if (member.isPrivate) output += "<private> ";
- if (member.isInner) output += "<inner> ";
- if (member.isStatic) output += "<static> ";
- if (member.isConstant) output += "<constant> ";
- !} </td>
- <td class="nameDescription">
- <div class="fixedFont">
- <if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>
- </div>
- <div class="description">{+resolveLinks(summarize(member.desc))+}</div>
- </td>
- </tr>
- </for>
- </tbody>
- </table>
- </if>
-
- <if test="data.inheritsFrom.length">
- <dl class="inheritsList">
- {!
- var borrowedMembers = data.properties.filter(function($) {return $.memberOf != data.alias});
-
- var contributers = [];
- borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)});
- for (var i = 0, l = contributers.length; i < l; i++) {
- output +=
- "<dt>Fields borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>"
- +
- "<dd>" +
- borrowedMembers
- .filter(
- function($) { return $.memberOf == contributers[i] }
- )
- .sort(makeSortby("name"))
- .map(
- function($) { return new Link().toSymbol($.alias).withText($.name) }
- )
- .join(", ")
- +
- "</dd>";
- }
- !}
- </dl>
- </if>
- </if>
-
-<!-- ============================== methods summary ======================== -->
- <if test="data.methods.length">
- {! var ownMethods = data.methods.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !}
- <if test="ownMethods.length">
- <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class {+data.alias+}.">
- <caption>Method Summary</caption>
- <thead>
- <tr>
- <th scope="col">Method Attributes</th>
- <th scope="col">Method Name and Description</th>
- </tr>
- </thead>
- <tbody>
- <for each="member" in="ownMethods">
- <tr>
- <td class="attributes">{!
- if (member.isPrivate) output += "<private> ";
- if (member.isInner) output += "<inner> ";
- if (member.isStatic) output += "<static> ";
- !} </td>
- <td class="nameDescription">
- <div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name.replace(/\^\d+$/, ''))+}</b>{+makeSignature(member.params)+}
- </div>
- <div class="description">{+resolveLinks(summarize(member.desc))+}</div>
- </td>
- </tr>
- </for>
- </tbody>
- </table>
- </if>
-
- <if test="data.inheritsFrom.length">
- <dl class="inheritsList">
- {!
- var borrowedMembers = data.methods.filter(function($) {return $.memberOf != data.alias});
- var contributers = [];
- borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)});
- for (var i = 0, l = contributers.length; i < l; i++) {
- output +=
- "<dt>Methods borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>"
- +
- "<dd>" +
- borrowedMembers
- .filter(
- function($) { return $.memberOf == contributers[i] }
- )
- .sort(makeSortby("name"))
- .map(
- function($) { return new Link().toSymbol($.alias).withText($.name) }
- )
- .join(", ")
- +
- "</dd>";
- }
-
- !}
- </dl>
- </if>
- </if>
-<!-- ============================== events summary ======================== -->
- <if test="data.events.length">
- {! var ownEvents = data.events.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !}
- <if test="ownEvents.length">
- <table class="summaryTable" cellspacing="0" summary="A summary of the events documented in the class {+data.alias+}.">
- <caption>Event Summary</caption>
- <thead>
- <tr>
- <th scope="col">Event Attributes</th>
- <th scope="col">Event Name and Description</th>
- </tr>
- </thead>
- <tbody>
- <for each="member" in="ownEvents">
- <tr>
- <td class="attributes">{!
- if (member.isPrivate) output += "<private> ";
- if (member.isInner) output += "<inner> ";
- if (member.isStatic) output += "<static> ";
- !} </td>
- <td class="nameDescription">
- <div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>{+makeSignature(member.params)+}
- </div>
- <div class="description">{+resolveLinks(summarize(member.desc))+}</div>
- </td>
- </tr>
- </for>
- </tbody>
- </table>
- </if>
-
- <if test="data.inheritsFrom.length">
- <dl class="inheritsList">
- {!
- var borrowedMembers = data.events.filter(function($) {return $.memberOf != data.alias});
- var contributers = [];
- borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)});
- for (var i = 0, l = contributers.length; i < l; i++) {
- output +=
- "<dt>Events borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>"
- +
- "<dd>" +
- borrowedMembers
- .filter(
- function($) { return $.memberOf == contributers[i] }
- )
- .sort(makeSortby("name"))
- .map(
- function($) { return new Link().toSymbol($.alias).withText($.name) }
- )
- .join(", ")
- +
- "</dd>";
- }
-
- !}
- </dl>
- </if>
- </if>
-
-<!-- ============================== constructor details ==================== -->
- <if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
- <div class="details"><a name="constructor"> </a>
- <div class="sectionTitle">
- {+classType+}Detail
- </div>
-
- <div class="fixedFont">{!
- if (data.isPrivate) output += "<private> ";
- if (data.isInner) output += "<inner> ";
- !}
- <b>{+ data.alias +}</b><if test="classType != 'Namespace '">{+ makeSignature(data.params) +}</if>
- </div>
-
- <div class="description">
- {+resolveLinks(data.desc)+}
- <if test="data.author"><br /><i>Author: </i>{+data.author+}.</if>
- </div>
-
- <if test="data.example.length">
- <for each="example" in="data.example">
- <pre class="code">{+example+}</pre>
- </for>
- </if>
-
-
- <if test="data.params.length">
- <dl class="detailList">
- <dt class="heading">Parameters:</dt>
- <for each="item" in="data.params">
- <dt>
- {+((item.type)?""+("<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type)+"}</span> ")) : "")+} <b>{+item.name+}</b>
- <if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if>
- </dt>
- <dd>{+resolveLinks(item.desc)+}</dd>
- </for>
- </dl>
- </if>
- <if test="data.deprecated">
- <dl class="detailList">
- <dt class="heading">Deprecated:</dt>
- <dt>
- {+resolveLinks(data.deprecated)+}
- </dt>
- </dl>
- </if>
- <if test="data.since">
- <dl class="detailList">
- <dt class="heading">Since:</dt>
- <dd>{+ data.since +}</dd>
- </dl>
- </if>
- <if test="data.exceptions.length">
- <dl class="detailList">
- <dt class="heading">Throws:</dt>
- <for each="item" in="data.exceptions">
- <dt>
- {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
- </dt>
- <dd>{+resolveLinks(item.desc)+}</dd>
- </for>
- </dl>
- </if>
- <if test="data.returns.length">
- <dl class="detailList">
- <dt class="heading">Returns:</dt>
- <for each="item" in="data.returns">
- <dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd>
- </for>
- </dl>
- </if>
- <if test="data.requires.length">
- <dl class="detailList">
- <dt class="heading">Requires:</dt>
- <for each="item" in="data.requires">
- <dd>{+ new Link().toSymbol(item) +}</dd>
- </for>
- </dl>
- </if>
- <if test="data.see.length">
- <dl class="detailList">
- <dt class="heading">See:</dt>
- <for each="item" in="data.see">
- <dd>{+ new Link().toSymbol(item) +}</dd>
- </for>
- </dl>
- </if>
-
- </div>
- </if>
-
-<!-- ============================== field details ========================== -->
- <if test="defined(ownProperties) && ownProperties.length">
- <div class="sectionTitle">
- Field Detail
- </div>
- <for each="member" in="ownProperties">
- <a name="{+Link.symbolNameToLinkName(member)+}"> </a>
- <div class="fixedFont">{!
- if (member.isPrivate) output += "<private> ";
- if (member.isInner) output += "<inner> ";
- if (member.isStatic) output += "<static> ";
- if (member.isConstant) output += "<constant> ";
- !}
-
- <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if>
- <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>
-
- </div>
- <div class="description">
- {+resolveLinks(member.desc)+}
- <if test="member.srcFile != data.srcFile">
- <br />
- <i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}.
- </if>
- <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if>
- </div>
-
- <if test="member.example.length">
- <for each="example" in="member.example">
- <pre class="code">{+example+}</pre>
- </for>
- </if>
-
- <if test="member.deprecated">
- <dl class="detailList">
- <dt class="heading">Deprecated:</dt>
- <dt>
- {+ resolveLinks(member.deprecated) +}
- </dt>
- </dl>
- </if>
- <if test="member.since">
- <dl class="detailList">
- <dt class="heading">Since:</dt>
- <dd>{+ member.since +}</dd>
- </dl>
- </if>
- <if test="member.see.length">
- <dl class="detailList">
- <dt class="heading">See:</dt>
- <for each="item" in="member.see">
- <dd>{+ new Link().toSymbol(item) +}</dd>
- </for>
- </dl>
- </if>
- <if test="member.defaultValue">
- <dl class="detailList">
- <dt class="heading">Default Value:</dt>
- <dd>
- {+resolveLinks(member.defaultValue)+}
- </dd>
- </dl>
- </if>
-
- <if test="!$member_last"><hr /></if>
- </for>
- </if>
-
-<!-- ============================== method details ========================= -->
- <if test="defined(ownMethods) && ownMethods.length">
- <div class="sectionTitle">
- Method Detail
- </div>
- <for each="member" in="ownMethods">
- <a name="{+Link.symbolNameToLinkName(member)+}"> </a>
- <div class="fixedFont">{!
- if (member.isPrivate) output += "<private> ";
- if (member.isInner) output += "<inner> ";
- if (member.isStatic) output += "<static> ";
- !}
-
- <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if>
- <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name.replace(/\^\d+$/, '')+}</b>{+makeSignature(member.params)+}
-
- </div>
- <div class="description">
- {+resolveLinks(member.desc)+}
- <if test="member.srcFile != data.srcFile">
- <br />
- <i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}.
- </if>
- <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if>
- </div>
-
- <if test="member.example.length">
- <for each="example" in="member.example">
- <pre class="code">{+example+}</pre>
- </for>
- </if>
-
- <if test="member.params.length">
- <dl class="detailList">
- <dt class="heading">Parameters:</dt>
- <for each="item" in="member.params">
- <dt>
- {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}<b>{+item.name+}</b>
- <if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if>
- </dt>
- <dd>{+resolveLinks(item.desc)+}</dd>
- </for>
- </dl>
- </if>
- <if test="member.deprecated">
- <dl class="detailList">
- <dt class="heading">Deprecated:</dt>
- <dt>
- {+ resolveLinks(member.deprecated) +}
- </dt>
- </dl>
- </if>
- <if test="member.since">
- <dl class="detailList">
- <dt class="heading">Since:</dt>
- <dd>{+ member.since +}</dd>
- </dl>
- </dl>
- </if>
- <if test="member.exceptions.length">
- <dl class="detailList">
- <dt class="heading">Throws:</dt>
- <for each="item" in="member.exceptions">
- <dt>
- {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
- </dt>
- <dd>{+resolveLinks(item.desc)+}</dd>
- </for>
- </dl>
- </if>
- <if test="member.returns.length">
- <dl class="detailList">
- <dt class="heading">Returns:</dt>
- <for each="item" in="member.returns">
- <dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd>
- </for>
- </dl>
- </if>
- <if test="member.requires.length">
- <dl class="detailList">
- <dt class="heading">Requires:</dt>
- <for each="item" in="member.requires">
- <dd>{+ resolveLinks(item) +}</dd>
- </for>
- </dl>
- </if>
- <if test="member.see.length">
- <dl class="detailList">
- <dt class="heading">See:</dt>
- <for each="item" in="member.see">
- <dd>{+ new Link().toSymbol(item) +}</dd>
- </for>
- </dl>
- </if>
-
- <if test="!$member_last"><hr /></if>
- </for>
- </if>
-
-<!-- ============================== event details ========================= -->
- <if test="defined(ownEvents) && ownEvents.length">
- <div class="sectionTitle">
- Event Detail
- </div>
- <for each="member" in="ownEvents">
- <a name="{+Link.symbolNameToLinkName(member)+}"> </a>
- <div class="fixedFont">{!
- if (member.isPrivate) output += "<private> ";
- if (member.isInner) output += "<inner> ";
- if (member.isStatic) output += "<static> ";
- !}
-
- <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if>
- <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>{+makeSignature(member.params)+}
-
- </div>
- <div class="description">
- {+resolveLinks(member.desc)+}
- <if test="member.srcFile != data.srcFile">
- <br />
- <i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}.
- </if>
- <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if>
- </div>
-
- <if test="member.example.length">
- <for each="example" in="member.example">
- <pre class="code">{+example+}</pre>
- </for>
- </if>
-
- <if test="member.params.length">
- <dl class="detailList">
- <dt class="heading">Parameters:</dt>
- <for each="item" in="member.params">
- <dt>
- {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}<b>{+item.name+}</b>
- <if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if>
- </dt>
- <dd>{+ resolveLinks(item.desc) +}</dd>
- </for>
- </dl>
- </if>
- <if test="member.deprecated">
- <dl class="detailList">
- <dt class="heading">Deprecated:</dt>
- <dt>
- {+ resolveLinks(member.deprecated) +}
- </dt>
- </dl>
- </if>
- <if test="member.since">
- <dl class="detailList">
- <dt class="heading">Since:</dt>
- <dd>{+ member.since +}</dd>
- </dl>
- </dl>
- </if>
- <if test="member.exceptions.length">
- <dl class="detailList">
- <dt class="heading">Throws:</dt>
- <for each="item" in="member.exceptions">
- <dt>
- {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
- </dt>
- <dd>{+ resolveLinks(item.desc) +}</dd>
- </for>
- </dl>
- </if>
- <if test="member.returns.length">
- <dl class="detailList">
- <dt class="heading">Returns:</dt>
- <for each="item" in="member.returns">
- <dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd>
- </for>
- </dl>
- </if>
- <if test="member.requires.length">
- <dl class="detailList">
- <dt class="heading">Requires:</dt>
- <for each="item" in="member.requires">
- <dd>{+ resolveLinks(item) +}</dd>
- </for>
- </dl>
- </if>
- <if test="member.see.length">
- <dl class="detailList">
- <dt class="heading">See:</dt>
- <for each="item" in="member.see">
- <dd>{+ new Link().toSymbol(item) +}</dd>
- </for>
- </dl>
- </if>
-
- <if test="!$member_last"><hr /></if>
- </for>
- </if>
-
- <hr />
- </div>
-
-
-<!-- ============================== footer ================================= -->
- <div class="fineprint" style="clear:both">
- <if test="JSDOC.opt.D.copyright">©{+JSDOC.opt.D.copyright+}<br /></if>
- Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}
- </div>
- </body>
-</html>
--- a/sbin/res/jsdoc/templates/jsdoc/index.tmpl Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" />
-
- <title>JsDoc Reference - Index</title>
- <meta name="generator" content="JsDoc Toolkit" />
-
- <style type="text/css">
- {+include("static/default.css")+}
- </style>
- </head>
-
- <body>
- {+include("static/header.html")+}
-
- <div id="index">
- {+publish.classesIndex+}
- </div>
-
- <div id="content">
- <h1 class="classTitle">Class Index</h1>
-
- <for each="thisClass" in="data">
- <div>
- <h2>{+(new Link().toSymbol(thisClass.alias))+}</h2>
- {+resolveLinks(summarize(thisClass.classDesc))+}
- </div>
- <hr />
- </for>
-
- </div>
- <div class="fineprint" style="clear:both">
- <if test="JSDOC.opt.D.copyright">©{+JSDOC.opt.D.copyright+}<br /></if>
- Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}
- </div>
- </body>
-</html>
\ No newline at end of file
--- a/sbin/res/jsdoc/templates/jsdoc/publish.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,201 +0,0 @@
-/** Called automatically by JsDoc Toolkit. */
-function publish(symbolSet) {
- publish.conf = { // trailing slash expected for dirs
- ext: ".html",
- outDir: JSDOC.opt.d || SYS.pwd+"../out/jsdoc/",
- templatesDir: JSDOC.opt.t || SYS.pwd+"../templates/jsdoc/",
- symbolsDir: "symbols/",
- srcDir: "symbols/src/"
- };
-
- // is source output is suppressed, just display the links to the source file
- if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) {
- Link.prototype._makeSrcLink = function(srcFilePath) {
- return "<"+srcFilePath+">";
- }
- }
-
- // create the folders and subfolders to hold the output
- IO.mkPath((publish.conf.outDir+"symbols/src").split("/"));
-
- // used to allow Link to check the details of things being linked to
- Link.symbolSet = symbolSet;
-
- // create the required templates
- try {
- var classTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"class.tmpl");
- var classesTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allclasses.tmpl");
- }
- catch(e) {
- print("Couldn't create the required templates: "+e);
- quit();
- }
-
- // some ustility filters
- function hasNoParent($) {return ($.memberOf == "")}
- function isaFile($) {return ($.is("FILE"))}
- function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace)}
-
- // get an array version of the symbolset, useful for filtering
- var symbols = symbolSet.toArray();
-
- // create the hilited source code files
- var files = JSDOC.opt.srcFiles;
- for (var i = 0, l = files.length; i < l; i++) {
- var file = files[i];
- var srcDir = publish.conf.outDir + "symbols/src/";
- makeSrcFile(file, srcDir);
- }
-
- // get a list of all the classes in the symbolset
- var classes = symbols.filter(isaClass).sort(makeSortby("alias"));
-
- // create a filemap in which outfiles must be to be named uniquely, ignoring case
- if (JSDOC.opt.u) {
- var filemapCounts = {};
- Link.filemap = {};
- for (var i = 0, l = classes.length; i < l; i++) {
- var lcAlias = classes[i].alias.toLowerCase();
-
- if (!filemapCounts[lcAlias]) filemapCounts[lcAlias] = 1;
- else filemapCounts[lcAlias]++;
-
- Link.filemap[classes[i].alias] =
- (filemapCounts[lcAlias] > 1)?
- lcAlias+"_"+filemapCounts[lcAlias] : lcAlias;
- }
- }
-
- // create a class index, displayed in the left-hand column of every class page
- Link.base = "../";
- publish.classesIndex = classesTemplate.process(classes); // kept in memory
-
- // create each of the class pages
- for (var i = 0, l = classes.length; i < l; i++) {
- var symbol = classes[i];
-
- symbol.events = symbol.getEvents(); // 1 order matters
- symbol.methods = symbol.getMethods(); // 2
-
- Link.currentSymbol= symbol;
- var output = "";
- output = classTemplate.process(symbol);
-
- IO.saveFile(publish.conf.outDir+"symbols/", ((JSDOC.opt.u)? Link.filemap[symbol.alias] : symbol.alias) + publish.conf.ext, output);
- }
-
- // regenerate the index with different relative links, used in the index pages
- Link.base = "";
- publish.classesIndex = classesTemplate.process(classes);
-
- // create the class index page
- try {
- var classesindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"index.tmpl");
- }
- catch(e) { print(e.message); quit(); }
-
- var classesIndex = classesindexTemplate.process(classes);
- IO.saveFile(publish.conf.outDir, "index"+publish.conf.ext, classesIndex);
- classesindexTemplate = classesIndex = classes = null;
-
- // create the file index page
- try {
- var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl");
- }
- catch(e) { print(e.message); quit(); }
-
- var documentedFiles = symbols.filter(isaFile); // files that have file-level docs
- var allFiles = []; // not all files have file-level docs, but we need to list every one
-
- for (var i = 0; i < files.length; i++) {
- allFiles.push(new JSDOC.Symbol(files[i], [], "FILE", new JSDOC.DocComment("/** */")));
- }
-
- for (var i = 0; i < documentedFiles.length; i++) {
- var offset = files.indexOf(documentedFiles[i].alias);
- allFiles[offset] = documentedFiles[i];
- }
-
- allFiles = allFiles.sort(makeSortby("name"));
-
- // output the file index page
- var filesIndex = fileindexTemplate.process(allFiles);
- IO.saveFile(publish.conf.outDir, "files"+publish.conf.ext, filesIndex);
- fileindexTemplate = filesIndex = files = null;
-}
-
-
-/** Just the first sentence (up to a full stop). Should not break on dotted variable names. */
-function summarize(desc) {
- if (typeof desc != "undefined")
- return desc.match(/([\w\W]+?\.)[^a-z0-9_$]/i)? RegExp.$1 : desc;
-}
-
-/** Make a symbol sorter by some attribute. */
-function makeSortby(attribute) {
- return function(a, b) {
- if (a[attribute] != undefined && b[attribute] != undefined) {
- a = a[attribute].toLowerCase();
- b = b[attribute].toLowerCase();
- if (a < b) return -1;
- if (a > b) return 1;
- return 0;
- }
- }
-}
-
-/** Pull in the contents of an external file at the given path. */
-function include(path) {
- var path = publish.conf.templatesDir+path;
- return IO.readFile(path);
-}
-
-/** Turn a raw source file into a code-hilited page in the docs. */
-function makeSrcFile(path, srcDir, name) {
- if (JSDOC.opt.s) return;
-
- if (!name) {
- name = path.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_");
- name = name.replace(/\:/g, "_");
- }
-
- var src = {path: path, name:name, charset: IO.encoding, hilited: ""};
-
- if (defined(JSDOC.PluginManager)) {
- JSDOC.PluginManager.run("onPublishSrc", src);
- }
-
- if (src.hilited) {
- IO.saveFile(srcDir, name+publish.conf.ext, src.hilited);
- }
-}
-
-/** Build output for displaying function parameters. */
-function makeSignature(params) {
- if (!params) return "()";
- var signature = "("
- +
- params.filter(
- function($) {
- return $.name.indexOf(".") == -1; // don't show config params in signature
- }
- ).map(
- function($) {
- return $.name;
- }
- ).join(", ")
- +
- ")";
- return signature;
-}
-
-/** Find symbol {@link ...} strings in text and turn into html links */
-function resolveLinks(str, from) {
- str = str.replace(/\{@link ([^} ]+) ?\}/gi,
- function(match, symbolName) {
- return new Link().toSymbol(symbolName);
- }
- );
-
- return str;
-}
--- a/sbin/res/jsdoc/templates/jsdoc/static/default.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-/* default.css */
-body
-{
- font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
- width: 800px;
-}
-
-.header
-{
- clear: both;
- background-color: #ccc;
- padding: 8px;
-}
-
-h1
-{
- font-size: 150%;
- font-weight: bold;
- padding: 0;
- margin: 1em 0 0 .3em;
-}
-
-hr
-{
- border: none 0;
- border-top: 1px solid #7F8FB1;
- height: 1px;
-}
-
-pre.code
-{
- display: block;
- padding: 8px;
- border: 1px dashed #ccc;
-}
-
-#index
-{
- margin-top: 24px;
- float: left;
- width: 160px;
- position: absolute;
- left: 8px;
- background-color: #F3F3F3;
- padding: 8px;
-}
-
-#content
-{
- margin-left: 190px;
- width: 600px;
-}
-
-.classList
-{
- list-style-type: none;
- padding: 0;
- margin: 0 0 0 8px;
- font-family: arial, sans-serif;
- font-size: 1em;
- overflow: auto;
-}
-
-.classList li
-{
- padding: 0;
- margin: 0 0 8px 0;
-}
-
-.summaryTable { width: 100%; }
-
-h1.classTitle
-{
- font-size:170%;
- line-height:130%;
-}
-
-h2 { font-size: 110%; }
-caption, div.sectionTitle
-{
- background-color: #7F8FB1;
- color: #fff;
- font-size:130%;
- text-align: left;
- padding: 2px 6px 2px 6px;
- border: 1px #7F8FB1 solid;
-}
-
-div.sectionTitle { margin-bottom: 8px; }
-.summaryTable thead { display: none; }
-
-.summaryTable td
-{
- vertical-align: top;
- padding: 4px;
- border-bottom: 1px #7F8FB1 solid;
- border-right: 1px #7F8FB1 solid;
-}
-
-/*col#summaryAttributes {}*/
-.summaryTable td.attributes
-{
- border-left: 1px #7F8FB1 solid;
- width: 140px;
- text-align: right;
-}
-
-td.attributes, .fixedFont
-{
- line-height: 15px;
- color: #002EBE;
- font-family: "Courier New",Courier,monospace;
- font-size: 13px;
-}
-
-.summaryTable td.nameDescription
-{
- text-align: left;
- font-size: 13px;
- line-height: 15px;
-}
-
-.summaryTable td.nameDescription, .description
-{
- line-height: 15px;
- padding: 4px;
- padding-left: 4px;
-}
-
-.summaryTable { margin-bottom: 8px; }
-
-ul.inheritsList
-{
- list-style: square;
- margin-left: 20px;
- padding-left: 0;
-}
-
-.detailList {
- margin-left: 20px;
- line-height: 15px;
-}
-.detailList dt { margin-left: 20px; }
-
-.detailList .heading
-{
- font-weight: bold;
- padding-bottom: 6px;
- margin-left: 0;
-}
-
-.light, td.attributes, .light a:link, .light a:visited
-{
- color: #777;
- font-style: italic;
-}
-
-.fineprint
-{
- text-align: right;
- font-size: 10px;
-}
\ No newline at end of file
--- a/sbin/res/jsdoc/templates/jsdoc/static/header.html Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-<div id="header">
-</div>
\ No newline at end of file
--- a/sbin/res/jsdoc/templates/jsdoc/static/index.html Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <title>Generated Javascript Documentation</title>
-</head>
-<frameset cols="20%,80%">
- <frame src="allclasses-frame.html" name="packageFrame" />
- <frame src="splash.html" name="classFrame" />
- <noframes>
- <body>
- <p>
- This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
- </p>
- </body>
- </noframes>
-</frameset>
-</html>
\ No newline at end of file
--- a/sbin/res/jsdoc/templates/jsdoc/symbol.tmpl Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-<symbol alias="{+data.alias+}">
- <name>{+data.name+}</name>
- <memberOf>{+data.memberOf+}</memberOf>
- <isStatic>{+data.isStatic+}</isStatic>
- <isa>{+data.isa+}</isa>
- <desc>{+data.desc+}</desc>
- <classDesc>{+data.classDesc+}</classDesc>
-
- <methods><for each="method" in="data.methods">
- <method>
- <name>{+method.name+}</name>
- <memberOf>{+method.memberOf+}</memberOf>
- <isStatic>{+method.isStatic+}</isStatic>
- <desc>{+method.desc+}</desc>
- <params><for each="param" in="method.params">
- <param>
- <type>{+param.type+}</type>
- <name>{+param.name+}</name>
- <desc>{+param.desc+}</desc>
- <defaultValue>{+param.defaultValue+}</defaultValue>
- </param></for>
- </params>
- </method></for>
- </methods>
-
- <properties><for each="property" in="data.properties">
- <property>
- <name>{+property.name+}</name>
- <memberOf>{+property.memberOf+}</memberOf>
- <isStatic>{+property.isStatic+}</isStatic>
- <desc>{+property.desc+}</desc>
- <type>{+property.type+}</type>
- </property></for>
- </properties>
-</symbol>
--- a/sbin/res/jslint-wrapper.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/* source comes from a similar jquery script */
-/* run it like this : java -jar rhino.jar jslint-wrapper.js file.js */
-
-
-if (arguments.length == 1) {
- jslint = "jslint.js"
- srcfile = arguments[0];
-} else if (arguments.length != 2) {
- print("jslint-wrapper jslint.js myfile.js");
- quit();
-} else {
- var jslint = arguments[0];
- var srcfile = arguments[1];
-}
-
-src = readFile(srcfile, "utf8");
-load(jslint);
-
-JSLINT(src, { browser: true, forin: true, maxerr: 5 });
-
-//All of the following are known issues that we think are 'ok'
-//(in contradiction with JSLint) more information here:
-//http://docs.jquery.com/JQuery_Core_Style_Guidelines
-var ok = {
- "Expected an identifier and instead saw 'undefined' (a reserved word).": true,
- "Use '===' to compare with 'null'.": true,
- "Use '!==' to compare with 'null'.": true,
- "Expected an assignment or function call and instead saw an expression.": true,
- "Expected a 'break' statement before 'case'.": true,
- "'e' is already defined.": true,
- "Expected exactly one space between 'function' and '('": true
-};
-
-var e = JSLINT.errors, found = 0, w;
-
-for ( var i = 0; i < e.length; i++ ) {
- w = e[i];
-
- if ( !ok[ w.reason ] ) {
- found++;
- print( "\n" + w.evidence + "\n" );
- print( " Problem at line " + w.line + " character " + w.character + ": " + w.reason );
- }
-}
-
-if ( found > 0 ) {
- print( "\n" + found + " Error(s) found.\n" );
-
-} else {
- print( "JSLint check passed.\n" );
-}
--- a/sbin/res/jslint.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6917 +0,0 @@
-// jslint.js
-// 2011-10-17
-
-// Copyright (c) 2002 Douglas Crockford (www.JSLint.com)
-
-// 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 shall be used for Good, not Evil.
-
-// 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.
-
-// WARNING: JSLint will hurt your feelings.
-
-// JSLINT is a global function. It takes two parameters.
-
-// var myResult = JSLINT(source, option);
-
-// The first parameter is either a string or an array of strings. If it is a
-// string, it will be split on '\n' or '\r'. If it is an array of strings, it
-// is assumed that each string represents one line. The source can be a
-// JavaScript text, or HTML text, or a JSON text, or a CSS text.
-
-// The second parameter is an optional object of options that control the
-// operation of JSLINT. Most of the options are booleans: They are all
-// optional and have a default value of false. One of the options, predef,
-// can be an array of names, which will be used to declare global variables,
-// or an object whose keys are used as global names, with a boolean value
-// that determines if they are assignable.
-
-// If it checks out, JSLINT returns true. Otherwise, it returns false.
-
-// If false, you can inspect JSLINT.errors to find out the problems.
-// JSLINT.errors is an array of objects containing these properties:
-
-// {
-// line : The line (relative to 0) at which the lint was found
-// character : The character (relative to 0) at which the lint was found
-// reason : The problem
-// evidence : The text line in which the problem occurred
-// raw : The raw message before the details were inserted
-// a : The first detail
-// b : The second detail
-// c : The third detail
-// d : The fourth detail
-// }
-
-// If a stopping error was found, a null will be the last element of the
-// JSLINT.errors array. A stopping error means that JSLint was not confident
-// enough to continue. It does not necessarily mean that the error was
-// especially heinous.
-
-// You can request a Function Report, which shows all of the functions
-// and the parameters and vars that they use. This can be used to find
-// implied global variables and other problems. The report is in HTML and
-// can be inserted in an HTML <body>.
-
-// var myReport = JSLINT.report(errors_only);
-
-// If errors_only is true, then the report will be limited to only errors.
-
-// You can request a data structure that contains JSLint's results.
-
-// var myData = JSLINT.data();
-
-// It returns a structure with this form:
-
-// {
-// errors: [
-// {
-// line: NUMBER,
-// character: NUMBER,
-// reason: STRING,
-// evidence: STRING
-// }
-// ],
-// functions: [
-// {
-// name: STRING,
-// line: NUMBER,
-// last: NUMBER,
-// params: [
-// {
-// string: STRING
-// }
-// ],
-// closure: [
-// STRING
-// ],
-// var: [
-// STRING
-// ],
-// exception: [
-// STRING
-// ],
-// outer: [
-// STRING
-// ],
-// unused: [
-// STRING
-// ],
-// undef: [
-// STRING
-// ],
-// global: [
-// STRING
-// ],
-// label: [
-// STRING
-// ]
-// }
-// ],
-// globals: [
-// STRING
-// ],
-// member: {
-// STRING: NUMBER
-// },
-// urls: [
-// STRING
-// ],
-// json: BOOLEAN
-// }
-
-// Empty arrays will not be included.
-
-// You can obtain the parse tree that JSLint constructed while parsing. The
-// latest tree is kept in JSLINT.tree. A nice stringication can be produced
-// with
-
-// JSON.stringify(JSLINT.tree, [
-// 'string', 'arity', 'name', 'first',
-// 'second', 'third', 'block', 'else'
-// ], 4));
-
-// JSLint provides three directives. They look like slashstar comments, and
-// allow for setting options, declaring global variables, and establishing a
-// set of allowed property names.
-
-// These directives respect function scope.
-
-// The jslint directive is a special comment that can set one or more options.
-// The current option set is
-
-// adsafe true, if ADsafe rules should be enforced
-// bitwise true, if bitwise operators should be allowed
-// browser true, if the standard browser globals should be predefined
-// cap true, if upper case HTML should be allowed
-// confusion true, if types can be used inconsistently
-// 'continue' true, if the continuation statement should be tolerated
-// css true, if CSS workarounds should be tolerated
-// debug true, if debugger statements should be allowed
-// devel true, if logging should be allowed (console, alert, etc.)
-// eqeq true, if == should be allowed
-// es5 true, if ES5 syntax should be allowed
-// evil true, if eval should be allowed
-// forin true, if for in statements need not filter
-// fragment true, if HTML fragments should be allowed
-// indent the indentation factor
-// maxerr the maximum number of errors to allow
-// maxlen the maximum length of a source line
-// newcap true, if constructor names capitalization is ignored
-// node true, if Node.js globals should be predefined
-// nomen true, if names may have dangling _
-// on true, if HTML event handlers should be allowed
-// passfail true, if the scan should stop on first error
-// plusplus true, if increment/decrement should be allowed
-// properties true, if all property names must be declared with /*properties*/
-// regexp true, if the . should be allowed in regexp literals
-// rhino true, if the Rhino environment globals should be predefined
-// undef true, if variables can be declared out of order
-// unparam true, if unused parameters should be tolerated
-// safe true, if use of some browser features should be restricted
-// sloppy true, if the 'use strict'; pragma is optional
-// sub true, if all forms of subscript notation are tolerated
-// vars true, if multiple var statements per function should be allowed
-// white true, if sloppy whitespace is tolerated
-// widget true if the Yahoo Widgets globals should be predefined
-// windows true, if MS Windows-specific globals should be predefined
-
-// For example:
-
-/*jslint
- evil: true, nomen: true, regexp: true
-*/
-
-// The properties directive declares an exclusive list of property names.
-// Any properties named in the program that are not in the list will
-// produce a warning.
-
-// For example:
-
-/*properties
- '\b': string, '\t': string, '\n': string, '\f': string, '\r': string,
- '!=': boolean, '!==': boolean, '"': string, '%': boolean, '\'': string,
- '(begin)', '(breakage)': number, '(complexity)', '(confusion)': boolean,
- '(context)': object, '(error)', '(identifier)', '(line)': number,
- '(loopage)': number, '(name)', '(old_property_type)', '(params)',
- '(scope)': object, '(token)', '(vars)', '(verb)', '*': boolean,
- '+': boolean, '-': boolean, '/': *, '<': boolean, '<=': boolean,
- '==': boolean, '===': boolean, '>': boolean, '>=': boolean,
- ADSAFE: boolean, Array, Date, E: string, Function, LN10: string,
- LN2: string, LOG10E: string, LOG2E: string, MAX_VALUE: string,
- MIN_VALUE: string, NEGATIVE_INFINITY: string, Object, PI: string,
- POSITIVE_INFINITY: string, SQRT1_2: string, SQRT2: string, '\\': string,
- a: object, a_label: string, a_not_allowed: string, a_not_defined: string,
- a_scope: string, abbr: object, acronym: object, address: object, adsafe,
- adsafe_a: string, adsafe_autocomplete: string, adsafe_bad_id: string,
- adsafe_div: string, adsafe_fragment: string, adsafe_go: string,
- adsafe_html: string, adsafe_id: string, adsafe_id_go: string,
- adsafe_lib: string, adsafe_lib_second: string, adsafe_missing_id: string,
- adsafe_name_a: string, adsafe_placement: string, adsafe_prefix_a: string,
- adsafe_script: string, adsafe_source: string, adsafe_subscript_a: string,
- adsafe_tag: string, all: boolean, already_defined: string, and: string,
- applet: object, apply: string, approved: array, area: object,
- arity: string, article: object, aside: object, assign: boolean,
- assign_exception: string, assignment_function_expression: string,
- at: number, attribute_case_a: string, audio: object, autocomplete: string,
- avoid_a: string, b: *, background: array, 'background-attachment': array,
- 'background-color': array, 'background-image': array,
- 'background-position': array, 'background-repeat': array,
- bad_assignment: string, bad_color_a: string, bad_constructor: string,
- bad_entity: string, bad_html: string, bad_id_a: string, bad_in_a: string,
- bad_invocation: string, bad_name_a: string, bad_new: string,
- bad_number: string, bad_operand: string, bad_style: string,
- bad_type: string, bad_url_a: string, bad_wrap: string, base: object,
- bdo: object, big: object, bind: string, bitwise: boolean, block: array,
- blockquote: object, body: object, border: array, 'border-bottom': array,
- 'border-bottom-color', 'border-bottom-left-radius',
- 'border-bottom-right-radius', 'border-bottom-style': array,
- 'border-bottom-width', 'border-collapse': array, 'border-color': array,
- 'border-left': array, 'border-left-color', 'border-left-style': array,
- 'border-left-width', 'border-radius', 'border-right': array,
- 'border-right-color', 'border-right-style': array, 'border-right-width',
- 'border-spacing': array, 'border-style': array, 'border-top': array,
- 'border-top-color', 'border-top-left-radius', 'border-top-right-radius',
- 'border-top-style': array, 'border-top-width', 'border-width': array,
- bottom: array, br: object, braille: boolean, browser: boolean,
- button: object, c, call: string, canvas: object, cap, caption: object,
- 'caption-side': array, ceil: string, center: object, charAt: *,
- charCodeAt: *, character, cite: object, clear: array, clip: array, closure,
- cm: boolean, code: object, col: object, colgroup: object, color,
- combine_var: string, command: object, concat: string,
- conditional_assignment: string, confusing_a: string,
- confusing_regexp: string, confusion: boolean, constructor: string,
- constructor_name_a: string, content: array, continue, control_a: string,
- 'counter-increment': array, 'counter-reset': array, create: *, css: string,
- cursor: array, d, dangerous_comment: string, dangling_a: string,
- data: function object, datalist: object, dd: object, debug,
- defineProperties: string, defineProperty: string, del: object,
- deleted: string, details: object, devel: boolean, dfn: object,
- dialog: object, dir: object, direction: array, display: array,
- disrupt: boolean, div: object, dl: object, dt: object, duplicate_a: string,
- edge: string, edition: string, else, em: *, embed: object,
- embossed: boolean, empty: boolean, 'empty-cells': array,
- empty_block: string, empty_case: string, empty_class: string,
- entityify: function, eqeq, errors: array, es5: string, eval, every: string,
- evidence, evil: string, ex: boolean, exception, exec: *,
- expected_a: string, expected_a_at_b_c: string, expected_a_b: string,
- expected_a_b_from_c_d: string, expected_at_a: string,
- expected_attribute_a: string, expected_attribute_value_a: string,
- expected_class_a: string, expected_fraction_a: string,
- expected_id_a: string, expected_identifier_a: string,
- expected_identifier_a_reserved: string, expected_lang_a: string,
- expected_linear_a: string, expected_media_a: string,
- expected_name_a: string, expected_nonstandard_style_attribute: string,
- expected_number_a: string, expected_operator_a: string,
- expected_percent_a: string, expected_positive_a: string,
- expected_pseudo_a: string, expected_selector_a: string,
- expected_small_a: string, expected_space_a_b: string,
- expected_string_a: string, expected_style_attribute: string,
- expected_style_pattern: string, expected_tagname_a: string,
- expected_type_a: string, f: string, fieldset: object, figure: object,
- filter: *, first: *, flag, float: array, floor: *, font: *, 'font-family',
- 'font-size': array, 'font-size-adjust': array, 'font-stretch': array,
- 'font-style': array, 'font-variant': array, 'font-weight': array,
- footer: object, for, forEach: *, for_if: string, forin, form: object,
- fragment, frame: object, frameset: object, freeze: string, from: number,
- fromCharCode: function, fud: function, funct: object, function,
- function_block: string, function_eval: string, function_loop: string,
- function_statement: string, function_strict: string, functions: array,
- getDate: string, getDay: string, getFullYear: string, getHours: string,
- getMilliseconds: string, getMinutes: string, getMonth: string,
- getOwnPropertyDescriptor: string, getOwnPropertyNames: string,
- getPrototypeOf: string, getSeconds: string, getTime: string,
- getTimezoneOffset: string, getUTCDate: string, getUTCDay: string,
- getUTCFullYear: string, getUTCHours: string, getUTCMilliseconds: string,
- getUTCMinutes: string, getUTCMonth: string, getUTCSeconds: string,
- getYear: string, global, globals, h1: object, h2: object, h3: object,
- h4: object, h5: object, h6: object, handheld: boolean, hasOwnProperty: *,
- head: object, header: object, height: array, hgroup: object, hr: object,
- 'hta:application': object, html: *, html_confusion_a: string,
- html_handlers: string, i: object, id: string, identifier: boolean,
- identifier_function: string, iframe: object, img: object, immed: boolean,
- implied_evil: string, in, indent: number, indexOf: *, infix_in: string,
- init: function, input: object, ins: object, insecure_a: string,
- isAlpha: function, isArray: function boolean, isDigit: function,
- isExtensible: string, isFrozen: string, isNaN: string,
- isPrototypeOf: string, isSealed: string, join: *, jslint: function boolean,
- json: boolean, kbd: object, keygen: object, keys: *, label: object,
- label_a_b: string, labeled: boolean, lang: string, lastIndex: string,
- lastIndexOf: *, lbp: number, leading_decimal_a: string, led: function,
- left: array, legend: object, length: *, 'letter-spacing': array,
- li: object, lib: boolean, line: number, 'line-height': array, link: object,
- 'list-style': array, 'list-style-image': array,
- 'list-style-position': array, 'list-style-type': array, map: *,
- margin: array, 'margin-bottom', 'margin-left', 'margin-right',
- 'margin-top', mark: object, 'marker-offset': array, match: function,
- 'max-height': array, 'max-width': array, maxerr: number,
- maxlen: number, member: object, menu: object, message, meta: object,
- meter: object, 'min-height': function, 'min-width': function,
- missing_a: string, missing_a_after_b: string, missing_option: string,
- missing_property: string, missing_space_a_b: string, missing_url: string,
- missing_use_strict: string, mixed: string, mm: boolean, mode: string,
- move_invocation: string, move_var: string, n: string, name: string,
- name_function: string, nav: object, nested_comment: string,
- newcap: boolean, node: boolean, noframes: object, nomen, noscript: object,
- not: string, not_a_constructor: string, not_a_defined: string,
- not_a_function: string, not_a_label: string, not_a_scope: string,
- not_greater: string, now: string, nud: function, number: number,
- object: object, ol: object, on, opacity, open: boolean, optgroup: object,
- option: object, outer: regexp, outline: array, 'outline-color': array,
- 'outline-style': array, 'outline-width', output: object, overflow: array,
- 'overflow-x': array, 'overflow-y': array, p: object, padding: array,
- 'padding-bottom': function, 'padding-left': function,
- 'padding-right': function, 'padding-top': function,
- 'page-break-after': array, 'page-break-before': array, param: object,
- parameter_a_get_b: string, parameter_set_a: string, params: array,
- paren: boolean, parent: string, parse: string, passfail, pc: boolean,
- plusplus, pop: *, position: array, postscript: boolean, pre: object,
- predef, preventExtensions: string, print: boolean, progress: object,
- projection: boolean, properties: boolean, propertyIsEnumerable: string,
- prototype: string, pt: boolean, push: *, px: boolean, q: object, quote,
- quotes: array, r: string, radix: string, range: function, raw,
- read_only: string, reason, redefinition_a: string, reduce: string,
- reduceRight: string, regexp, replace: function, report: function,
- reserved: boolean, reserved_a: string, reverse: string, rhino: boolean,
- right: array, rp: object, rt: object, ruby: object, safe: boolean,
- samp: object, scanned_a_b: string, screen: boolean, script: object,
- seal: string, search: function, second: *, section: object, select: object,
- setDate: string, setDay: string, setFullYear: string, setHours: string,
- setMilliseconds: string, setMinutes: string, setMonth: string,
- setSeconds: string, setTime: string, setTimezoneOffset: string,
- setUTCDate: string, setUTCDay: string, setUTCFullYear: string,
- setUTCHours: string, setUTCMilliseconds: string, setUTCMinutes: string,
- setUTCMonth: string, setUTCSeconds: string, setYear: string, shift: *,
- slash_equal: string, slice: string, sloppy, small: object, some: string,
- sort: *, source: object, span: object, speech: boolean, splice: string,
- split: function, src, statement_block: string, stopping: string,
- strange_loop: string, strict: string, string: string, stringify: string,
- strong: object, style: *, styleproperty: regexp, sub: object,
- subscript: string, substr: *, substring: string, sup: object,
- supplant: function, t: string, table: object, 'table-layout': array,
- tag_a_in_b: string, tbody: object, td: object, test: *,
- 'text-align': array, 'text-decoration': array, 'text-indent': function,
- 'text-shadow': array, 'text-transform': array, textarea: object,
- tfoot: object, th: object, thead: object, third: array, thru: number,
- time: object, title: object, toDateString: string, toExponential: string,
- toFixed: string, toISOString: string, toJSON: string,
- toLocaleDateString: string, toLocaleLowerCase: string,
- toLocaleString: string, toLocaleTimeString: string,
- toLocaleUpperCase: string, toLowerCase: *, toPrecision: string,
- toString: function, toTimeString: string, toUTCString: string,
- toUpperCase: *, token: function, too_long: string, too_many: string,
- top: array, tr: object, trailing_decimal_a: string, tree: string,
- trim: string, tt: object, tty: boolean, tv: boolean, type: string,
- type_confusion_a_b: string, u: object, ul: object, unclosed: string,
- unclosed_comment: string, unclosed_regexp: string, undef: boolean,
- undefined, unescaped_a: string, unexpected_a: string,
- unexpected_char_a_b: string, unexpected_comment: string,
- unexpected_property_a: string, unexpected_space_a_b: string,
- 'unicode-bidi': array, unnecessary_initialize: string,
- unnecessary_use: string, unparam, unreachable_a_b: string,
- unrecognized_style_attribute_a: string, unrecognized_tag_a: string,
- unsafe: string, unshift: string, unused: array, url: string, urls: array,
- use_array: string, use_braces: string, use_charAt: string,
- use_object: string, use_or: string, use_param: string,
- used_before_a: string, valueOf: string, var: object, var_a_not: string,
- vars, 'vertical-align': array, video: object, visibility: array,
- warn: boolean, was: object, weird_assignment: string,
- weird_condition: string, weird_new: string, weird_program: string,
- weird_relation: string, weird_ternary: string, white: boolean,
- 'white-space': array, widget: boolean, width: array, windows: boolean,
- 'word-spacing': array, 'word-wrap': array, wrap: boolean,
- wrap_immediate: string, wrap_regexp: string, write_is_wrong: string,
- writeable: boolean, 'z-index': array
-*/
-
-// The global directive is used to declare global variables that can
-// be accessed by the program. If a declaration is true, then the variable
-// is writeable. Otherwise, it is read-only.
-
-// We build the application inside a function so that we produce only a single
-// global variable. That function will be invoked immediately, and its return
-// value is the JSLINT function itself. That function is also an object that
-// can contain data and other functions.
-
-var JSLINT = (function () {
- 'use strict';
-
- function array_to_object(array, value) {
-
-// Make an object from an array of keys and a common value.
-
- var i, length = array.length, object = {};
- for (i = 0; i < length; i += 1) {
- object[array[i]] = value;
- }
- return object;
- }
-
-
- var adsafe_id, // The widget's ADsafe id.
- adsafe_may, // The widget may load approved scripts.
- adsafe_top, // At the top of the widget script.
- adsafe_went, // ADSAFE.go has been called.
- anonname, // The guessed name for anonymous functions.
- approved, // ADsafe approved urls.
-
-// These are operators that should not be used with the ! operator.
-
- bang = {
- '<' : true,
- '<=' : true,
- '==' : true,
- '===': true,
- '!==': true,
- '!=' : true,
- '>' : true,
- '>=' : true,
- '+' : true,
- '-' : true,
- '*' : true,
- '/' : true,
- '%' : true
- },
-
-// These are property names that should not be permitted in the safe subset.
-
- banned = array_to_object([
- 'arguments', 'callee', 'caller', 'constructor', 'eval', 'prototype',
- 'stack', 'unwatch', 'valueOf', 'watch'
- ], true),
- begin, // The root token
-
-// browser contains a set of global names that are commonly provided by a
-// web browser environment.
-
- browser = array_to_object([
- 'clearInterval', 'clearTimeout', 'document', 'event', 'frames',
- 'history', 'Image', 'localStorage', 'location', 'name', 'navigator',
- 'Option', 'parent', 'screen', 'sessionStorage', 'setInterval',
- 'setTimeout', 'Storage', 'window', 'XMLHttpRequest'
- ], false),
-
-// bundle contains the text messages.
-
- bundle = {
- a_label: "'{a}' is a statement label.",
- a_not_allowed: "'{a}' is not allowed.",
- a_not_defined: "'{a}' is not defined.",
- a_scope: "'{a}' used out of scope.",
- adsafe_a: "ADsafe violation: '{a}'.",
- adsafe_autocomplete: "ADsafe autocomplete violation.",
- adsafe_bad_id: "ADSAFE violation: bad id.",
- adsafe_div: "ADsafe violation: Wrap the widget in a div.",
- adsafe_fragment: "ADSAFE: Use the fragment option.",
- adsafe_go: "ADsafe violation: Misformed ADSAFE.go.",
- adsafe_html: "Currently, ADsafe does not operate on whole HTML " +
- "documents. It operates on <div> fragments and .js files.",
- adsafe_id: "ADsafe violation: id does not match.",
- adsafe_id_go: "ADsafe violation: Missing ADSAFE.id or ADSAFE.go.",
- adsafe_lib: "ADsafe lib violation.",
- adsafe_lib_second: "ADsafe: The second argument to lib must be a function.",
- adsafe_missing_id: "ADSAFE violation: missing ID_.",
- adsafe_name_a: "ADsafe name violation: '{a}'.",
- adsafe_placement: "ADsafe script placement violation.",
- adsafe_prefix_a: "ADsafe violation: An id must have a '{a}' prefix",
- adsafe_script: "ADsafe script violation.",
- adsafe_source: "ADsafe unapproved script source.",
- adsafe_subscript_a: "ADsafe subscript '{a}'.",
- adsafe_tag: "ADsafe violation: Disallowed tag '{a}'.",
- already_defined: "'{a}' is already defined.",
- and: "The '&&' subexpression should be wrapped in parens.",
- assign_exception: "Do not assign to the exception parameter.",
- assignment_function_expression: "Expected an assignment or " +
- "function call and instead saw an expression.",
- attribute_case_a: "Attribute '{a}' not all lower case.",
- avoid_a: "Avoid '{a}'.",
- bad_assignment: "Bad assignment.",
- bad_color_a: "Bad hex color '{a}'.",
- bad_constructor: "Bad constructor.",
- bad_entity: "Bad entity.",
- bad_html: "Bad HTML string",
- bad_id_a: "Bad id: '{a}'.",
- bad_in_a: "Bad for in variable '{a}'.",
- bad_invocation: "Bad invocation.",
- bad_name_a: "Bad name: '{a}'.",
- bad_new: "Do not use 'new' for side effects.",
- bad_number: "Bad number '{a}'.",
- bad_operand: "Bad operand.",
- bad_style: "Bad style.",
- bad_type: "Bad type.",
- bad_url_a: "Bad url '{a}'.",
- bad_wrap: "Do not wrap function literals in parens unless they " +
- "are to be immediately invoked.",
- combine_var: "Combine this with the previous 'var' statement.",
- conditional_assignment: "Expected a conditional expression and " +
- "instead saw an assignment.",
- confusing_a: "Confusing use of '{a}'.",
- confusing_regexp: "Confusing regular expression.",
- constructor_name_a: "A constructor name '{a}' should start with " +
- "an uppercase letter.",
- control_a: "Unexpected control character '{a}'.",
- css: "A css file should begin with @charset 'UTF-8';",
- dangling_a: "Unexpected dangling '_' in '{a}'.",
- dangerous_comment: "Dangerous comment.",
- deleted: "Only properties should be deleted.",
- duplicate_a: "Duplicate '{a}'.",
- empty_block: "Empty block.",
- empty_case: "Empty case.",
- empty_class: "Empty class.",
- es5: "This is an ES5 feature.",
- evil: "eval is evil.",
- expected_a: "Expected '{a}'.",
- expected_a_b: "Expected '{a}' and instead saw '{b}'.",
- expected_a_b_from_c_d: "Expected '{a}' to match '{b}' from line " +
- "{c} and instead saw '{d}'.",
- expected_at_a: "Expected an at-rule, and instead saw @{a}.",
- expected_a_at_b_c: "Expected '{a}' at column {b}, not column {c}.",
- expected_attribute_a: "Expected an attribute, and instead saw [{a}].",
- expected_attribute_value_a: "Expected an attribute value and " +
- "instead saw '{a}'.",
- expected_class_a: "Expected a class, and instead saw .{a}.",
- expected_fraction_a: "Expected a number between 0 and 1 and " +
- "instead saw '{a}'",
- expected_id_a: "Expected an id, and instead saw #{a}.",
- expected_identifier_a: "Expected an identifier and instead saw '{a}'.",
- expected_identifier_a_reserved: "Expected an identifier and " +
- "instead saw '{a}' (a reserved word).",
- expected_linear_a: "Expected a linear unit and instead saw '{a}'.",
- expected_lang_a: "Expected a lang code, and instead saw :{a}.",
- expected_media_a: "Expected a CSS media type, and instead saw '{a}'.",
- expected_name_a: "Expected a name and instead saw '{a}'.",
- expected_nonstandard_style_attribute: "Expected a non-standard " +
- "style attribute and instead saw '{a}'.",
- expected_number_a: "Expected a number and instead saw '{a}'.",
- expected_operator_a: "Expected an operator and instead saw '{a}'.",
- expected_percent_a: "Expected a percentage and instead saw '{a}'",
- expected_positive_a: "Expected a positive number and instead saw '{a}'",
- expected_pseudo_a: "Expected a pseudo, and instead saw :{a}.",
- expected_selector_a: "Expected a CSS selector, and instead saw {a}.",
- expected_small_a: "Expected a small positive integer and instead saw '{a}'",
- expected_space_a_b: "Expected exactly one space between '{a}' and '{b}'.",
- expected_string_a: "Expected a string and instead saw {a}.",
- expected_style_attribute: "Excepted a style attribute, and instead saw '{a}'.",
- expected_style_pattern: "Expected a style pattern, and instead saw '{a}'.",
- expected_tagname_a: "Expected a tagName, and instead saw {a}.",
- expected_type_a: "Expected a type, and instead saw {a}.",
- for_if: "The body of a for in should be wrapped in an if " +
- "statement to filter unwanted properties from the prototype.",
- function_block: "Function statements should not be placed in blocks. " +
- "Use a function expression or move the statement to the top of " +
- "the outer function.",
- function_eval: "The Function constructor is eval.",
- function_loop: "Don't make functions within a loop.",
- function_statement: "Function statements are not invocable. " +
- "Wrap the whole function invocation in parens.",
- function_strict: "Use the function form of 'use strict'.",
- html_confusion_a: "HTML confusion in regular expression '<{a}'.",
- html_handlers: "Avoid HTML event handlers.",
- identifier_function: "Expected an identifier in an assignment " +
- "and instead saw a function invocation.",
- implied_evil: "Implied eval is evil. Pass a function instead of a string.",
- infix_in: "Unexpected 'in'. Compare with undefined, or use the " +
- "hasOwnProperty method instead.",
- insecure_a: "Insecure '{a}'.",
- isNaN: "Use the isNaN function to compare with NaN.",
- label_a_b: "Label '{a}' on '{b}' statement.",
- lang: "lang is deprecated.",
- leading_decimal_a: "A leading decimal point can be confused with a dot: '.{a}'.",
- missing_a: "Missing '{a}'.",
- missing_a_after_b: "Missing '{a}' after '{b}'.",
- missing_option: "Missing option value.",
- missing_property: "Missing property name.",
- missing_space_a_b: "Missing space between '{a}' and '{b}'.",
- missing_url: "Missing url.",
- missing_use_strict: "Missing 'use strict' statement.",
- mixed: "Mixed spaces and tabs.",
- move_invocation: "Move the invocation into the parens that " +
- "contain the function.",
- move_var: "Move 'var' declarations to the top of the function.",
- name_function: "Missing name in function statement.",
- nested_comment: "Nested comment.",
- not: "Nested not.",
- not_a_constructor: "Do not use {a} as a constructor.",
- not_a_defined: "'{a}' has not been fully defined yet.",
- not_a_function: "'{a}' is not a function.",
- not_a_label: "'{a}' is not a label.",
- not_a_scope: "'{a}' is out of scope.",
- not_greater: "'{a}' should not be greater than '{b}'.",
- parameter_a_get_b: "Unexpected parameter '{a}' in get {b} function.",
- parameter_set_a: "Expected parameter (value) in set {a} function.",
- radix: "Missing radix parameter.",
- read_only: "Read only.",
- redefinition_a: "Redefinition of '{a}'.",
- reserved_a: "Reserved name '{a}'.",
- scanned_a_b: "{a} ({b}% scanned).",
- slash_equal: "A regular expression literal can be confused with '/='.",
- statement_block: "Expected to see a statement and instead saw a block.",
- stopping: "Stopping. ",
- strange_loop: "Strange loop.",
- strict: "Strict violation.",
- subscript: "['{a}'] is better written in dot notation.",
- tag_a_in_b: "A '<{a}>' must be within '<{b}>'.",
- too_long: "Line too long.",
- too_many: "Too many errors.",
- trailing_decimal_a: "A trailing decimal point can be confused " +
- "with a dot: '.{a}'.",
- type: "type is unnecessary.",
- type_confusion_a_b: "Type confusion: {a} and {b}.",
- unclosed: "Unclosed string.",
- unclosed_comment: "Unclosed comment.",
- unclosed_regexp: "Unclosed regular expression.",
- unescaped_a: "Unescaped '{a}'.",
- unexpected_a: "Unexpected '{a}'.",
- unexpected_char_a_b: "Unexpected character '{a}' in {b}.",
- unexpected_comment: "Unexpected comment.",
- unexpected_property_a: "Unexpected /*property*/ '{a}'.",
- unexpected_space_a_b: "Unexpected space between '{a}' and '{b}'.",
- unnecessary_initialize: "It is not necessary to initialize '{a}' " +
- "to 'undefined'.",
- unnecessary_use: "Unnecessary 'use strict'.",
- unreachable_a_b: "Unreachable '{a}' after '{b}'.",
- unrecognized_style_attribute_a: "Unrecognized style attribute '{a}'.",
- unrecognized_tag_a: "Unrecognized tag '<{a}>'.",
- unsafe: "Unsafe character.",
- url: "JavaScript URL.",
- use_array: "Use the array literal notation [].",
- use_braces: "Spaces are hard to count. Use {{a}}.",
- use_charAt: "Use the charAt method.",
- use_object: "Use the object literal notation {}.",
- use_or: "Use the || operator.",
- use_param: "Use a named parameter.",
- used_before_a: "'{a}' was used before it was defined.",
- var_a_not: "Variable {a} was not declared correctly.",
- weird_assignment: "Weird assignment.",
- weird_condition: "Weird condition.",
- weird_new: "Weird construction. Delete 'new'.",
- weird_program: "Weird program.",
- weird_relation: "Weird relation.",
- weird_ternary: "Weird ternary.",
- wrap_immediate: "Wrap an immediate function invocation in parentheses " +
- "to assist the reader in understanding that the expression " +
- "is the result of a function, and not the function itself.",
- wrap_regexp: "Wrap the /regexp/ literal in parens to " +
- "disambiguate the slash operator.",
- write_is_wrong: "document.write can be a form of eval."
- },
- comments_off,
- css_attribute_data,
- css_any,
-
- css_colorData = array_to_object([
- "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige",
- "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown",
- "burlywood", "cadetblue", "chartreuse", "chocolate", "coral",
- "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue",
- "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki",
- "darkmagenta", "darkolivegreen", "darkorange", "darkorchid",
- "darkred", "darksalmon", "darkseagreen", "darkslateblue",
- "darkslategray", "darkturquoise", "darkviolet", "deeppink",
- "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite",
- "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold",
- "goldenrod", "gray", "green", "greenyellow", "honeydew", "hotpink",
- "indianred", "indigo", "ivory", "khaki", "lavender",
- "lavenderblush", "lawngreen", "lemonchiffon", "lightblue",
- "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgreen",
- "lightpink", "lightsalmon", "lightseagreen", "lightskyblue",
- "lightslategray", "lightsteelblue", "lightyellow", "lime",
- "limegreen", "linen", "magenta", "maroon", "mediumaquamarine",
- "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen",
- "mediumslateblue", "mediumspringgreen", "mediumturquoise",
- "mediumvioletred", "midnightblue", "mintcream", "mistyrose",
- "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab",
- "orange", "orangered", "orchid", "palegoldenrod", "palegreen",
- "paleturquoise", "palevioletred", "papayawhip", "peachpuff",
- "peru", "pink", "plum", "powderblue", "purple", "red", "rosybrown",
- "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen",
- "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray",
- "snow", "springgreen", "steelblue", "tan", "teal", "thistle",
- "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke",
- "yellow", "yellowgreen",
-
- "activeborder", "activecaption", "appworkspace", "background",
- "buttonface", "buttonhighlight", "buttonshadow", "buttontext",
- "captiontext", "graytext", "highlight", "highlighttext",
- "inactiveborder", "inactivecaption", "inactivecaptiontext",
- "infobackground", "infotext", "menu", "menutext", "scrollbar",
- "threeddarkshadow", "threedface", "threedhighlight",
- "threedlightshadow", "threedshadow", "window", "windowframe",
- "windowtext"
- ], true),
-
- css_border_style,
- css_break,
-
- css_lengthData = {
- '%': true,
- 'cm': true,
- 'em': true,
- 'ex': true,
- 'in': true,
- 'mm': true,
- 'pc': true,
- 'pt': true,
- 'px': true
- },
-
- css_media,
- css_overflow,
-
- descapes = {
- 'b': '\b',
- 't': '\t',
- 'n': '\n',
- 'f': '\f',
- 'r': '\r',
- '"': '"',
- '/': '/',
- '\\': '\\'
- },
-
- devel = array_to_object([
- 'alert', 'confirm', 'console', 'Debug', 'opera', 'prompt', 'WSH'
- ], false),
- directive,
- escapes = {
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '\'': '\\\'',
- '"' : '\\"',
- '/' : '\\/',
- '\\': '\\\\'
- },
-
- funct, // The current function, including the labels used in
- // the function, as well as (breakage), (complexity),
- // (context), (loopage), (name), (params), (token),
- // (vars), (verb)
-
- functionicity = [
- 'closure', 'exception', 'global', 'label', 'outer', 'undef',
- 'unused', 'var'
- ],
-
- functions, // All of the functions
- global_funct, // The global body
- global_scope, // The global scope
- html_tag = {
- a: {},
- abbr: {},
- acronym: {},
- address: {},
- applet: {},
- area: {empty: true, parent: ' map '},
- article: {},
- aside: {},
- audio: {},
- b: {},
- base: {empty: true, parent: ' head '},
- bdo: {},
- big: {},
- blockquote: {},
- body: {parent: ' html noframes '},
- br: {empty: true},
- button: {},
- canvas: {parent: ' body p div th td '},
- caption: {parent: ' table '},
- center: {},
- cite: {},
- code: {},
- col: {empty: true, parent: ' table colgroup '},
- colgroup: {parent: ' table '},
- command: {parent: ' menu '},
- datalist: {},
- dd: {parent: ' dl '},
- del: {},
- details: {},
- dialog: {},
- dfn: {},
- dir: {},
- div: {},
- dl: {},
- dt: {parent: ' dl '},
- em: {},
- embed: {},
- fieldset: {},
- figure: {},
- font: {},
- footer: {},
- form: {},
- frame: {empty: true, parent: ' frameset '},
- frameset: {parent: ' html frameset '},
- h1: {},
- h2: {},
- h3: {},
- h4: {},
- h5: {},
- h6: {},
- head: {parent: ' html '},
- header: {},
- hgroup: {},
- hr: {empty: true},
- 'hta:application':
- {empty: true, parent: ' head '},
- html: {parent: '*'},
- i: {},
- iframe: {},
- img: {empty: true},
- input: {empty: true},
- ins: {},
- kbd: {},
- keygen: {},
- label: {},
- legend: {parent: ' details fieldset figure '},
- li: {parent: ' dir menu ol ul '},
- link: {empty: true, parent: ' head '},
- map: {},
- mark: {},
- menu: {},
- meta: {empty: true, parent: ' head noframes noscript '},
- meter: {},
- nav: {},
- noframes: {parent: ' html body '},
- noscript: {parent: ' body head noframes '},
- object: {},
- ol: {},
- optgroup: {parent: ' select '},
- option: {parent: ' optgroup select '},
- output: {},
- p: {},
- param: {empty: true, parent: ' applet object '},
- pre: {},
- progress: {},
- q: {},
- rp: {},
- rt: {},
- ruby: {},
- samp: {},
- script: {empty: true, parent: ' body div frame head iframe p pre span '},
- section: {},
- select: {},
- small: {},
- span: {},
- source: {},
- strong: {},
- style: {parent: ' head ', empty: true},
- sub: {},
- sup: {},
- table: {},
- tbody: {parent: ' table '},
- td: {parent: ' tr '},
- textarea: {},
- tfoot: {parent: ' table '},
- th: {parent: ' tr '},
- thead: {parent: ' table '},
- time: {},
- title: {parent: ' head '},
- tr: {parent: ' table tbody thead tfoot '},
- tt: {},
- u: {},
- ul: {},
- 'var': {},
- video: {}
- },
-
- ids, // HTML ids
- in_block,
- indent,
-// infer_statement,// Inference rules for statements
- is_type = array_to_object([
- '*', 'array', 'boolean', 'function', 'number', 'object',
- 'regexp', 'string'
- ], true),
- itself, // JSLint itself
- jslint_limit = {
- indent: 10,
- maxerr: 1000,
- maxlen: 256
- },
- json_mode,
- lex, // the tokenizer
- lines,
- lookahead,
- member,
- node = array_to_object([
- 'Buffer', 'clearInterval', 'clearTimeout', 'console', 'exports',
- 'global', 'module', 'process', 'querystring', 'require',
- 'setInterval', 'setTimeout', '__dirname', '__filename'
- ], false),
- node_js,
- numbery = array_to_object(['indexOf', 'lastIndexOf', 'search'], true),
- next_token,
- option,
- predefined, // Global variables defined by option
- prereg,
- prev_token,
- property_type,
- regexp_flag = array_to_object(['g', 'i', 'm'], true),
- return_this = function return_this() {
- return this;
- },
- rhino = array_to_object([
- 'defineClass', 'deserialize', 'gc', 'help', 'load', 'loadClass',
- 'print', 'quit', 'readFile', 'readUrl', 'runCommand', 'seal',
- 'serialize', 'spawn', 'sync', 'toint32', 'version'
- ], false),
-
- scope, // An object containing an object for each variable in scope
- semicolon_coda = array_to_object([';', '"', '\'', ')'], true),
- src,
- stack,
-
-// standard contains the global names that are provided by the
-// ECMAScript standard.
-
- standard = array_to_object([
- 'Array', 'Boolean', 'Date', 'decodeURI', 'decodeURIComponent',
- 'encodeURI', 'encodeURIComponent', 'Error', 'eval', 'EvalError',
- 'Function', 'isFinite', 'isNaN', 'JSON', 'Math', 'Number', 'Object',
- 'parseInt', 'parseFloat', 'RangeError', 'ReferenceError', 'RegExp',
- 'String', 'SyntaxError', 'TypeError', 'URIError'
- ], false),
-
- standard_property_type = {
- E : 'number',
- LN2 : 'number',
- LN10 : 'number',
- LOG2E : 'number',
- LOG10E : 'number',
- MAX_VALUE : 'number',
- MIN_VALUE : 'number',
- NEGATIVE_INFINITY : 'number',
- PI : 'number',
- POSITIVE_INFINITY : 'number',
- SQRT1_2 : 'number',
- SQRT2 : 'number',
- apply : 'function',
- bind : 'function function',
- call : 'function',
- ceil : 'function number',
- charAt : 'function string',
- concat : 'function',
- constructor : 'function object',
- create : 'function object',
- defineProperty : 'function object',
- defineProperties : 'function object',
- every : 'function boolean',
- exec : 'function array',
- filter : 'function array',
- floor : 'function number',
- forEach : 'function',
- freeze : 'function object',
- getDate : 'function number',
- getDay : 'function number',
- getFullYear : 'function number',
- getHours : 'function number',
- getMilliseconds : 'function number',
- getMinutes : 'function number',
- getMonth : 'function number',
- getOwnPropertyDescriptor
- : 'function object',
- getOwnPropertyNames : 'function array',
- getPrototypeOf : 'function object',
- getSeconds : 'function number',
- getTime : 'function number',
- getTimezoneOffset : 'function number',
- getUTCDate : 'function number',
- getUTCDay : 'function number',
- getUTCFullYear : 'function number',
- getUTCHours : 'function number',
- getUTCMilliseconds : 'function number',
- getUTCMinutes : 'function number',
- getUTCMonth : 'function number',
- getUTCSeconds : 'function number',
- getYear : 'function number',
- hasOwnProperty : 'function boolean',
- indexOf : 'function number',
- isExtensible : 'function boolean',
- isFrozen : 'function boolean',
- isPrototypeOf : 'function boolean',
- isSealed : 'function boolean',
- join : 'function string',
- keys : 'function array',
- lastIndexOf : 'function number',
- lastIndex : 'number',
- length : 'number',
- map : 'function array',
- now : 'function number',
- parse : 'function',
- pop : 'function',
- preventExtensions : 'function object',
- propertyIsEnumerable: 'function boolean',
- prototype : 'object',
- push : 'function number',
- reduce : 'function',
- reduceRight : 'function',
- reverse : 'function',
- seal : 'function object',
- setDate : 'function',
- setDay : 'function',
- setFullYear : 'function',
- setHours : 'function',
- setMilliseconds : 'function',
- setMinutes : 'function',
- setMonth : 'function',
- setSeconds : 'function',
- setTime : 'function',
- setTimezoneOffset : 'function',
- setUTCDate : 'function',
- setUTCDay : 'function',
- setUTCFullYear : 'function',
- setUTCHours : 'function',
- setUTCMilliseconds : 'function',
- setUTCMinutes : 'function',
- setUTCMonth : 'function',
- setUTCSeconds : 'function',
- setYear : 'function',
- shift : 'function',
- slice : 'function',
- some : 'function boolean',
- sort : 'function',
- splice : 'function',
- stringify : 'function string',
- substr : 'function string',
- substring : 'function string',
- test : 'function boolean',
- toDateString : 'function string',
- toExponential : 'function string',
- toFixed : 'function string',
- toJSON : 'function',
- toISOString : 'function string',
- toLocaleDateString : 'function string',
- toLocaleLowerCase : 'function string',
- toLocaleUpperCase : 'function string',
- toLocaleString : 'function string',
- toLocaleTimeString : 'function string',
- toLowerCase : 'function string',
- toPrecision : 'function string',
- toTimeString : 'function string',
- toUpperCase : 'function string',
- toUTCString : 'function string',
- trim : 'function string',
- unshift : 'function number',
- valueOf : 'function'
- },
-
- strict_mode,
- syntax = {},
- tab,
- token,
-// type_state_change,
- urls,
- var_mode,
- warnings,
-
-// widget contains the global names which are provided to a Yahoo
-// (fna Konfabulator) widget.
-
- widget = array_to_object([
- 'alert', 'animator', 'appleScript', 'beep', 'bytesToUIString',
- 'Canvas', 'chooseColor', 'chooseFile', 'chooseFolder',
- 'closeWidget', 'COM', 'convertPathToHFS', 'convertPathToPlatform',
- 'CustomAnimation', 'escape', 'FadeAnimation', 'filesystem', 'Flash',
- 'focusWidget', 'form', 'FormField', 'Frame', 'HotKey', 'Image',
- 'include', 'isApplicationRunning', 'iTunes', 'konfabulatorVersion',
- 'log', 'md5', 'MenuItem', 'MoveAnimation', 'openURL', 'play',
- 'Point', 'popupMenu', 'preferenceGroups', 'preferences', 'print',
- 'prompt', 'random', 'Rectangle', 'reloadWidget', 'ResizeAnimation',
- 'resolvePath', 'resumeUpdates', 'RotateAnimation', 'runCommand',
- 'runCommandInBg', 'saveAs', 'savePreferences', 'screen',
- 'ScrollBar', 'showWidgetPreferences', 'sleep', 'speak', 'Style',
- 'suppressUpdates', 'system', 'tellWidget', 'Text', 'TextArea',
- 'Timer', 'unescape', 'updateNow', 'URL', 'Web', 'widget', 'Window',
- 'XMLDOM', 'XMLHttpRequest', 'yahooCheckLogin', 'yahooLogin',
- 'yahooLogout'
- ], true),
-
- windows = array_to_object([
- 'ActiveXObject', 'CScript', 'Debug', 'Enumerator', 'System',
- 'VBArray', 'WScript', 'WSH'
- ], false),
-
-// xmode is used to adapt to the exceptions in html parsing.
-// It can have these states:
-// '' .js script file
-// 'html'
-// 'outer'
-// 'script'
-// 'style'
-// 'scriptstring'
-// 'styleproperty'
-
- xmode,
- xquote,
-
-// Regular expressions. Some of these are stupidly long.
-
-// unsafe comment or string
- ax = /@cc|<\/?|script|\]\s*\]|<\s*!|</i,
-// carriage return, or carriage return linefeed
- crx = /\r/g,
- crlfx = /\r\n/g,
-// unsafe characters that are silently deleted by one or more browsers
- cx = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/,
-// query characters for ids
- dx = /[\[\]\/\\"'*<>.&:(){}+=#]/,
-// html token
- hx = /^\s*(['"=>\/&#]|<(?:\/|\!(?:--)?)?|[a-zA-Z][a-zA-Z0-9_\-:]*|[0-9]+|--)/,
-// identifier
- ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/,
-// javascript url
- jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i,
-// star slash
- lx = /\*\/|\/\*/,
-// characters in strings that need escapement
- nx = /[\u0000-\u001f'\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-// outer html token
- ox = /[>&]|<[\/!]?|--/,
-// attributes characters
- qx = /[^a-zA-Z0-9+\-_\/ ]/,
-// style
- sx = /^\s*([{}:#%.=,>+\[\]@()"';]|\*=?|\$=|\|=|\^=|~=|[a-zA-Z_][a-zA-Z0-9_\-]*|[0-9]+|<\/|\/\*)/,
- ssx = /^\s*([@#!"'};:\-%.=,+\[\]()*_]|[a-zA-Z][a-zA-Z0-9._\-]*|\/\*?|\d+(?:\.\d+)?|<\/)/,
-// token
- tx = /^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/(\*(jslint|properties|property|members?|globals?)?|=|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/,
-// url badness
- ux = /&|\+|\u00AD|\.\.|\/\*|%[^;]|base64|url|expression|data|mailto|script/i,
-
- rx = {
- outer: hx,
- html: hx,
- style: sx,
- styleproperty: ssx
- };
-
-
- function F() {} // Used by Object.create
-
-// Provide critical ES5 functions to ES3.
-
- if (typeof Array.prototype.filter !== 'function') {
- Array.prototype.filter = function (f) {
- var i, length = this.length, result = [], value;
- for (i = 0; i < length; i += 1) {
- try {
- value = this[i];
- if (f(value)) {
- result.push(value);
- }
- } catch (ignore) {
- }
- }
- return result;
- };
- }
-
- if (typeof Array.prototype.forEach !== 'function') {
- Array.prototype.forEach = function (f) {
- var i, length = this.length;
- for (i = 0; i < length; i += 1) {
- try {
- f(this[i]);
- } catch (ignore) {
- }
- }
- };
- }
-
- if (typeof Array.isArray !== 'function') {
- Array.isArray = function (o) {
- return Object.prototype.toString.apply(o) === '[object Array]';
- };
- }
-
- if (!Object.prototype.hasOwnProperty.call(Object, 'create')) {
- Object.create = function (o) {
- F.prototype = o;
- return new F();
- };
- }
-
- if (typeof Object.keys !== 'function') {
- Object.keys = function (o) {
- var array = [], key;
- for (key in o) {
- if (Object.prototype.hasOwnProperty.call(o, key)) {
- array.push(key);
- }
- }
- return array;
- };
- }
-
- if (typeof String.prototype.entityify !== 'function') {
- String.prototype.entityify = function () {
- return this
- .replace(/&/g, '&')
- .replace(/</g, '<')
- .replace(/>/g, '>');
- };
- }
-
- if (typeof String.prototype.isAlpha !== 'function') {
- String.prototype.isAlpha = function () {
- return (this >= 'a' && this <= 'z\uffff') ||
- (this >= 'A' && this <= 'Z\uffff');
- };
- }
-
- if (typeof String.prototype.isDigit !== 'function') {
- String.prototype.isDigit = function () {
- return (this >= '0' && this <= '9');
- };
- }
-
- if (typeof String.prototype.supplant !== 'function') {
- String.prototype.supplant = function (o) {
- return this.replace(/\{([^{}]*)\}/g, function (a, b) {
- var replacement = o[b];
- return typeof replacement === 'string' ||
- typeof replacement === 'number' ? replacement : a;
- });
- };
- }
-
-
- function sanitize(a) {
-
-// Escapify a troublesome character.
-
- return escapes[a] ||
- '\\u' + ('0000' + a.charCodeAt().toString(16)).slice(-4);
- }
-
-
- function add_to_predefined(group) {
- Object.keys(group).forEach(function (name) {
- predefined[name] = group[name];
- });
- }
-
-
- function assume() {
- if (!option.safe) {
- if (option.rhino) {
- add_to_predefined(rhino);
- option.rhino = false;
- }
- if (option.devel) {
- add_to_predefined(devel);
- option.devel = false;
- }
- if (option.browser) {
- add_to_predefined(browser);
- option.browser = false;
- }
- if (option.windows) {
- add_to_predefined(windows);
- option.windows = false;
- }
- if (option.node) {
- add_to_predefined(node);
- option.node = false;
- node_js = true;
- }
- if (option.widget) {
- add_to_predefined(widget);
- option.widget = false;
- }
- }
- if (option.type) {
- option.confusion = true;
- }
- }
-
-
-// Produce an error warning.
-
- function artifact(tok) {
- if (!tok) {
- tok = next_token;
- }
- return tok.number || tok.string;
- }
-
- function quit(message, line, character) {
- throw {
- name: 'JSLintError',
- line: line,
- character: character,
- message: bundle.scanned_a_b.supplant({
- a: message,
- b: Math.floor((line / lines.length) * 100)
- })
- };
- }
-
- function warn(message, offender, a, b, c, d) {
- var character, line, warning;
- offender = offender || next_token; // `~
- line = offender.line || 0;
- character = offender.from || 0;
- warning = {
- id: '(error)',
- raw: bundle[message] || message,
- evidence: lines[line - 1] || '',
- line: line,
- character: character,
- a: a || (offender.id === '(number)'
- ? String(offender.number)
- : offender.string),
- b: b,
- c: c,
- d: d
- };
- warning.reason = warning.raw.supplant(warning);
- JSLINT.errors.push(warning);
- if (option.passfail) {
- quit(bundle.stopping, line, character);
- }
- warnings += 1;
- if (warnings >= option.maxerr) {
- quit(bundle.too_many, line, character);
- }
- return warning;
- }
-
- function warn_at(message, line, character, a, b, c, d) {
- return warn(message, {
- line: line,
- from: character
- }, a, b, c, d);
- }
-
- function stop(message, offender, a, b, c, d) {
- var warning = warn(message, offender, a, b, c, d);
- quit(bundle.stopping, warning.line, warning.character);
- }
-
- function stop_at(message, line, character, a, b, c, d) {
- return stop(message, {
- line: line,
- from: character
- }, a, b, c, d);
- }
-
- function expected_at(at) {
- if (!option.white && next_token.from !== at) {
- warn('expected_a_at_b_c', next_token, '', at,
- next_token.from);
- }
- }
-
- function aint(it, name, expected) {
- if (it[name] !== expected) {
- warn('expected_a_b', it, expected, it[name]);
- return true;
- } else {
- return false;
- }
- }
-
-
-// lexical analysis and token construction
-
- lex = (function lex() {
- var character, c, from, length, line, pos, source_row;
-
-// Private lex methods
-
- function next_line() {
- var at;
- if (line >= lines.length) {
- return false;
- }
- character = 1;
- source_row = lines[line];
- line += 1;
- at = source_row.search(/ \t/);
- if (at >= 0) {
- warn_at('mixed', line, at + 1);
- }
- source_row = source_row.replace(/\t/g, tab);
- at = source_row.search(cx);
- if (at >= 0) {
- warn_at('unsafe', line, at);
- }
- if (option.maxlen && option.maxlen < source_row.length) {
- warn_at('too_long', line, source_row.length);
- }
- return true;
- }
-
-// Produce a token object. The token inherits from a syntax symbol.
-
- function it(type, value) {
- var id, the_token;
- if (type === '(string)' || type === '(range)') {
- if (jx.test(value)) {
- warn_at('url', line, from);
- }
- }
- the_token = Object.create(syntax[(
- type === '(punctuator)' || (type === '(identifier)' &&
- Object.prototype.hasOwnProperty.call(syntax, value))
- ? value
- : type
- )] || syntax['(error)']);
- if (type === '(identifier)') {
- the_token.identifier = true;
- if (value === '__iterator__' || value === '__proto__') {
- stop_at('reserved_a', line, from, value);
- } else if (!option.nomen &&
- (value.charAt(0) === '_' ||
- value.charAt(value.length - 1) === '_')) {
- warn_at('dangling_a', line, from, value);
- }
- }
- if (type === '(number)') {
- the_token.number = +value;
- } else if (value !== undefined) {
- the_token.string = String(value);
- }
- the_token.line = line;
- the_token.from = from;
- the_token.thru = character;
- id = the_token.id;
- prereg = id && (
- ('(,=:[!&|?{};'.indexOf(id.charAt(id.length - 1)) >= 0) ||
- id === 'return' || id === 'case'
- );
- return the_token;
- }
-
- function match(x) {
- var exec = x.exec(source_row), first;
- if (exec) {
- length = exec[0].length;
- first = exec[1];
- c = first.charAt(0);
- source_row = source_row.slice(length);
- from = character + length - first.length;
- character += length;
- return first;
- }
- }
-
- function string(x) {
- var c, pos = 0, r = '', result;
-
- function hex(n) {
- var i = parseInt(source_row.substr(pos + 1, n), 16);
- pos += n;
- if (i >= 32 && i <= 126 &&
- i !== 34 && i !== 92 && i !== 39) {
- warn_at('unexpected_a', line, character, '\\');
- }
- character += n;
- c = String.fromCharCode(i);
- }
-
- if (json_mode && x !== '"') {
- warn_at('expected_a', line, character, '"');
- }
-
- if (xquote === x || (xmode === 'scriptstring' && !xquote)) {
- return it('(punctuator)', x);
- }
-
- for (;;) {
- while (pos >= source_row.length) {
- pos = 0;
- if (xmode !== 'html' || !next_line()) {
- stop_at('unclosed', line, from);
- }
- }
- c = source_row.charAt(pos);
- if (c === x) {
- character += 1;
- source_row = source_row.slice(pos + 1);
- result = it('(string)', r);
- result.quote = x;
- return result;
- }
- if (c < ' ') {
- if (c === '\n' || c === '\r') {
- break;
- }
- warn_at('control_a', line, character + pos,
- source_row.slice(0, pos));
- } else if (c === xquote) {
- warn_at('bad_html', line, character + pos);
- } else if (c === '<') {
- if (option.safe && xmode === 'html') {
- warn_at('adsafe_a', line, character + pos, c);
- } else if (source_row.charAt(pos + 1) === '/' && (xmode || option.safe)) {
- warn_at('expected_a_b', line, character,
- '<\\/', '</');
- } else if (source_row.charAt(pos + 1) === '!' && (xmode || option.safe)) {
- warn_at('unexpected_a', line, character, '<!');
- }
- } else if (c === '\\') {
- if (xmode === 'html') {
- if (option.safe) {
- warn_at('adsafe_a', line, character + pos, c);
- }
- } else if (xmode === 'styleproperty') {
- pos += 1;
- character += 1;
- c = source_row.charAt(pos);
- if (c !== x) {
- warn_at('unexpected_a', line, character, '\\');
- }
- } else {
- pos += 1;
- character += 1;
- c = source_row.charAt(pos);
- switch (c) {
- case '':
- if (!option.es5) {
- warn_at('es5', line, character);
- }
- next_line();
- pos = -1;
- break;
- case xquote:
- warn_at('bad_html', line, character + pos);
- break;
- case '\'':
- if (json_mode) {
- warn_at('unexpected_a', line, character, '\\\'');
- }
- break;
- case 'u':
- hex(4);
- break;
- case 'v':
- if (json_mode) {
- warn_at('unexpected_a', line, character, '\\v');
- }
- c = '\v';
- break;
- case 'x':
- if (json_mode) {
- warn_at('unexpected_a', line, character, '\\x');
- }
- hex(2);
- break;
- default:
- c = descapes[c];
- if (typeof c !== 'string') {
- warn_at('unexpected_a', line, character, '\\');
- }
- }
- }
- }
- r += c;
- character += 1;
- pos += 1;
- }
- }
-
- function number(snippet) {
- var digit;
- if (xmode !== 'style' && xmode !== 'styleproperty' &&
- source_row.charAt(0).isAlpha()) {
- warn_at('expected_space_a_b',
- line, character, c, source_row.charAt(0));
- }
- if (c === '0') {
- digit = snippet.charAt(1);
- if (digit.isDigit()) {
- if (token.id !== '.' && xmode !== 'styleproperty') {
- warn_at('unexpected_a', line, character, snippet);
- }
- } else if (json_mode && (digit === 'x' || digit === 'X')) {
- warn_at('unexpected_a', line, character, '0x');
- }
- }
- if (snippet.slice(snippet.length - 1) === '.') {
- warn_at('trailing_decimal_a', line, character, snippet);
- }
- if (xmode !== 'style') {
- digit = +snippet;
- if (!isFinite(digit)) {
- warn_at('bad_number', line, character, snippet);
- }
- snippet = digit;
- }
- return it('(number)', snippet);
- }
-
- function comment(snippet) {
- if (comments_off || src || (xmode && xmode !== 'script' &&
- xmode !== 'style' && xmode !== 'styleproperty')) {
- warn_at('unexpected_comment', line, character);
- } else if (xmode === 'script' && /<\//i.test(source_row)) {
- warn_at('unexpected_a', line, character, '<\/');
- } else if (option.safe && ax.test(snippet)) {
- warn_at('dangerous_comment', line, character);
- }
- }
-
- function regexp() {
- var b,
- bit,
- captures = 0,
- depth = 0,
- flag = '',
- high,
- letter,
- length = 0,
- low,
- potential,
- quote,
- result;
- for (;;) {
- b = true;
- c = source_row.charAt(length);
- length += 1;
- switch (c) {
- case '':
- stop_at('unclosed_regexp', line, from);
- return;
- case '/':
- if (depth > 0) {
- warn_at('unescaped_a', line, from + length, '/');
- }
- c = source_row.slice(0, length - 1);
- potential = Object.create(regexp_flag);
- for (;;) {
- letter = source_row.charAt(length);
- if (potential[letter] !== true) {
- break;
- }
- potential[letter] = false;
- length += 1;
- flag += letter;
- }
- if (source_row.charAt(length).isAlpha()) {
- stop_at('unexpected_a', line, from, source_row.charAt(length));
- }
- character += length;
- source_row = source_row.slice(length);
- quote = source_row.charAt(0);
- if (quote === '/' || quote === '*') {
- stop_at('confusing_regexp', line, from);
- }
- result = it('(regexp)', c);
- result.flag = flag;
- return result;
- case '\\':
- c = source_row.charAt(length);
- if (c < ' ') {
- warn_at('control_a', line, from + length, String(c));
- } else if (c === '<') {
- warn_at(bundle.unexpected_a, line, from + length, '\\');
- }
- length += 1;
- break;
- case '(':
- depth += 1;
- b = false;
- if (source_row.charAt(length) === '?') {
- length += 1;
- switch (source_row.charAt(length)) {
- case ':':
- case '=':
- case '!':
- length += 1;
- break;
- default:
- warn_at(bundle.expected_a_b, line, from + length,
- ':', source_row.charAt(length));
- }
- } else {
- captures += 1;
- }
- break;
- case '|':
- b = false;
- break;
- case ')':
- if (depth === 0) {
- warn_at('unescaped_a', line, from + length, ')');
- } else {
- depth -= 1;
- }
- break;
- case ' ':
- pos = 1;
- while (source_row.charAt(length) === ' ') {
- length += 1;
- pos += 1;
- }
- if (pos > 1) {
- warn_at('use_braces', line, from + length, pos);
- }
- break;
- case '[':
- c = source_row.charAt(length);
- if (c === '^') {
- length += 1;
- if (!option.regexp) {
- warn_at('insecure_a', line, from + length, c);
- } else if (source_row.charAt(length) === ']') {
- stop_at('unescaped_a', line, from + length, '^');
- }
- }
- bit = false;
- if (c === ']') {
- warn_at('empty_class', line, from + length - 1);
- bit = true;
- }
-klass: do {
- c = source_row.charAt(length);
- length += 1;
- switch (c) {
- case '[':
- case '^':
- warn_at('unescaped_a', line, from + length, c);
- bit = true;
- break;
- case '-':
- if (bit) {
- bit = false;
- } else {
- warn_at('unescaped_a', line, from + length, '-');
- bit = true;
- }
- break;
- case ']':
- if (!bit) {
- warn_at('unescaped_a', line, from + length - 1, '-');
- }
- break klass;
- case '\\':
- c = source_row.charAt(length);
- if (c < ' ') {
- warn_at(bundle.control_a, line, from + length, String(c));
- } else if (c === '<') {
- warn_at(bundle.unexpected_a, line, from + length, '\\');
- }
- length += 1;
- bit = true;
- break;
- case '/':
- warn_at('unescaped_a', line, from + length - 1, '/');
- bit = true;
- break;
- case '<':
- if (xmode === 'script') {
- c = source_row.charAt(length);
- if (c === '!' || c === '/') {
- warn_at(bundle.html_confusion_a, line,
- from + length, c);
- }
- }
- bit = true;
- break;
- default:
- bit = true;
- }
- } while (c);
- break;
- case '.':
- if (!option.regexp) {
- warn_at('insecure_a', line, from + length, c);
- }
- break;
- case ']':
- case '?':
- case '{':
- case '}':
- case '+':
- case '*':
- warn_at('unescaped_a', line, from + length, c);
- break;
- case '<':
- if (xmode === 'script') {
- c = source_row.charAt(length);
- if (c === '!' || c === '/') {
- warn_at(bundle.html_confusion_a, line, from + length, c);
- }
- }
- break;
- }
- if (b) {
- switch (source_row.charAt(length)) {
- case '?':
- case '+':
- case '*':
- length += 1;
- if (source_row.charAt(length) === '?') {
- length += 1;
- }
- break;
- case '{':
- length += 1;
- c = source_row.charAt(length);
- if (c < '0' || c > '9') {
- warn_at(bundle.expected_number_a, line,
- from + length, c);
- }
- length += 1;
- low = +c;
- for (;;) {
- c = source_row.charAt(length);
- if (c < '0' || c > '9') {
- break;
- }
- length += 1;
- low = +c + (low * 10);
- }
- high = low;
- if (c === ',') {
- length += 1;
- high = Infinity;
- c = source_row.charAt(length);
- if (c >= '0' && c <= '9') {
- length += 1;
- high = +c;
- for (;;) {
- c = source_row.charAt(length);
- if (c < '0' || c > '9') {
- break;
- }
- length += 1;
- high = +c + (high * 10);
- }
- }
- }
- if (source_row.charAt(length) !== '}') {
- warn_at(bundle.expected_a_b, line, from + length,
- '}', c);
- } else {
- length += 1;
- }
- if (source_row.charAt(length) === '?') {
- length += 1;
- }
- if (low > high) {
- warn_at(bundle.not_greater, line, from + length,
- low, high);
- }
- break;
- }
- }
- }
- c = source_row.slice(0, length - 1);
- character += length;
- source_row = source_row.slice(length);
- return it('(regexp)', c);
- }
-
-// Public lex methods
-
- return {
- init: function (source) {
- if (typeof source === 'string') {
- lines = source
- .replace(crlfx, '\n')
- .replace(crx, '\n')
- .split('\n');
- } else {
- lines = source;
- }
- line = 0;
- next_line();
- from = 1;
- },
-
- range: function (begin, end) {
- var c, value = '';
- from = character;
- if (source_row.charAt(0) !== begin) {
- stop_at('expected_a_b', line, character, begin,
- source_row.charAt(0));
- }
- for (;;) {
- source_row = source_row.slice(1);
- character += 1;
- c = source_row.charAt(0);
- switch (c) {
- case '':
- stop_at('missing_a', line, character, c);
- break;
- case end:
- source_row = source_row.slice(1);
- character += 1;
- return it('(range)', value);
- case xquote:
- case '\\':
- warn_at('unexpected_a', line, character, c);
- break;
- }
- value += c;
- }
- },
-
-// token -- this is called by advance to get the next token.
-
- token: function () {
- var c, i, snippet;
-
- for (;;) {
- while (!source_row) {
- if (!next_line()) {
- return it('(end)');
- }
- }
- while (xmode === 'outer') {
- i = source_row.search(ox);
- if (i === 0) {
- break;
- } else if (i > 0) {
- character += 1;
- source_row = source_row.slice(i);
- break;
- } else {
- if (!next_line()) {
- return it('(end)', '');
- }
- }
- }
- snippet = match(rx[xmode] || tx);
- if (!snippet) {
- if (source_row) {
- if (source_row.charAt(0) === ' ') {
- if (!option.white) {
- warn_at('unexpected_a', line, character,
- '(space)');
- }
- character += 1;
- source_row = '';
- } else {
- stop_at('unexpected_a', line, character,
- source_row.charAt(0));
- }
- }
- } else {
-
-// identifier
-
- c = snippet.charAt(0);
- if (c.isAlpha() || c === '_' || c === '$') {
- return it('(identifier)', snippet);
- }
-
-// number
-
- if (c.isDigit()) {
- return number(snippet);
- }
- switch (snippet) {
-
-// string
-
- case '"':
- case "'":
- return string(snippet);
-
-// // comment
-
- case '//':
- comment(source_row);
- source_row = '';
- break;
-
-// /* comment
-
- case '/*':
- for (;;) {
- i = source_row.search(lx);
- if (i >= 0) {
- break;
- }
- comment(source_row);
- if (!next_line()) {
- stop_at('unclosed_comment', line, character);
- }
- }
- comment(source_row.slice(0, i));
- character += i + 2;
- if (source_row.charAt(i) === '/') {
- stop_at('nested_comment', line, character);
- }
- source_row = source_row.slice(i + 2);
- break;
-
- case '':
- break;
-// /
- case '/':
- if (token.id === '/=') {
- stop_at(
- bundle.slash_equal,
- line,
- from
- );
- }
- return prereg
- ? regexp()
- : it('(punctuator)', snippet);
-
-// punctuator
-
- case '<!--':
- length = line;
-// c = character;
- for (;;) {
- i = source_row.indexOf('--');
- if (i >= 0) {
- break;
- }
- i = source_row.indexOf('<!');
- if (i >= 0) {
- stop_at('nested_comment',
- line, character + i);
- }
- if (!next_line()) {
- stop_at('unclosed_comment', length, c);
- }
- }
- length = source_row.indexOf('<!');
- if (length >= 0 && length < i) {
- stop_at('nested_comment',
- line, character + length);
- }
- character += i;
- if (source_row.charAt(i + 2) !== '>') {
- stop_at('expected_a', line, character, '-->');
- }
- character += 3;
- source_row = source_row.slice(i + 3);
- break;
- case '#':
- if (xmode === 'html' || xmode === 'styleproperty') {
- for (;;) {
- c = source_row.charAt(0);
- if ((c < '0' || c > '9') &&
- (c < 'a' || c > 'f') &&
- (c < 'A' || c > 'F')) {
- break;
- }
- character += 1;
- source_row = source_row.slice(1);
- snippet += c;
- }
- if (snippet.length !== 4 && snippet.length !== 7) {
- warn_at('bad_color_a', line,
- from + length, snippet);
- }
- return it('(color)', snippet);
- }
- return it('(punctuator)', snippet);
-
- default:
- if (xmode === 'outer' && c === '&') {
- character += 1;
- source_row = source_row.slice(1);
- for (;;) {
- c = source_row.charAt(0);
- character += 1;
- source_row = source_row.slice(1);
- if (c === ';') {
- break;
- }
- if (!((c >= '0' && c <= '9') ||
- (c >= 'a' && c <= 'z') ||
- c === '#')) {
- stop_at('bad_entity', line, from + length,
- character);
- }
- }
- break;
- }
- return it('(punctuator)', snippet);
- }
- }
- }
- }
- };
- }());
-
-
- function add_label(token, kind, name) {
-
-// Define the symbol in the current function in the current scope.
-
- name = name || token.string;
-
-// Global variables cannot be created in the safe subset. If a global variable
-// already exists, do nothing. If it is predefined, define it.
-
- if (funct === global_funct) {
- if (option.safe) {
- warn('adsafe_a', token, name);
- }
- if (typeof global_funct[name] !== 'string') {
- token.writeable = typeof predefined[name] === 'boolean'
- ? predefined[name]
- : true;
- token.funct = funct;
- global_scope[name] = token;
- }
- if (kind === 'becoming') {
- kind = 'var';
- }
-
-// Ordinary variables.
-
- } else {
-
-// Warn if the variable already exists.
-
- if (typeof funct[name] === 'string') {
- if (funct[name] === 'undef') {
- if (!option.undef) {
- warn('used_before_a', token, name);
- }
- kind = 'var';
- } else {
- warn('already_defined', token, name);
- }
- } else {
-
-// Add the symbol to the current function.
-
- token.funct = funct;
- token.writeable = true;
- scope[name] = token;
- }
- }
- funct[name] = kind;
- }
-
-
- function peek(distance) {
-
-// Peek ahead to a future token. The distance is how far ahead to look. The
-// default is the next token.
-
- var found, slot = 0;
-
- distance = distance || 0;
- while (slot <= distance) {
- found = lookahead[slot];
- if (!found) {
- found = lookahead[slot] = lex.token();
- }
- slot += 1;
- }
- return found;
- }
-
-
- function advance(id, match) {
-
-// Produce the next token, also looking for programming errors.
-
- if (indent) {
-
-// If indentation checking was requested, then inspect all of the line breakings.
-// The var statement is tricky because the names might be aligned or not. We
-// look at the first line break after the var to determine the programmer's
-// intention.
-
- if (var_mode && next_token.line !== token.line) {
- if ((var_mode !== indent || !next_token.edge) &&
- next_token.from === indent.at -
- (next_token.edge ? option.indent : 0)) {
- var dent = indent;
- for (;;) {
- dent.at -= option.indent;
- if (dent === var_mode) {
- break;
- }
- dent = dent.was;
- }
- dent.open = false;
- }
- var_mode = null;
- }
- if (next_token.id === '?' && indent.mode === ':' &&
- token.line !== next_token.line) {
- indent.at -= option.indent;
- }
- if (indent.open) {
-
-// If the token is an edge.
-
- if (next_token.edge) {
- if (next_token.edge === 'label') {
- expected_at(1);
- } else if (next_token.edge === 'case') {
- expected_at(indent.at - option.indent);
- } else if (indent.mode !== 'array' || next_token.line !== token.line) {
- expected_at(indent.at);
- }
-
-// If the token is not an edge, but is the first token on the line.
-
- } else if (next_token.line !== token.line) {
- if (next_token.from < indent.at + (indent.mode ===
- 'expression' ? 0 : option.indent)) {
- expected_at(indent.at + option.indent);
- }
- indent.wrap = true;
- }
- } else if (next_token.line !== token.line) {
- if (next_token.edge) {
- expected_at(indent.at);
- } else {
- indent.wrap = true;
- if (indent.mode === 'statement' || indent.mode === 'var') {
- expected_at(indent.at + option.indent);
- } else if (next_token.from < indent.at + (indent.mode ===
- 'expression' ? 0 : option.indent)) {
- expected_at(indent.at + option.indent);
- }
- }
- }
- }
-
- switch (token.id) {
- case '(number)':
- if (next_token.id === '.') {
- warn('trailing_decimal_a');
- }
- break;
- case '-':
- if (next_token.id === '-' || next_token.id === '--') {
- warn('confusing_a');
- }
- break;
- case '+':
- if (next_token.id === '+' || next_token.id === '++') {
- warn('confusing_a');
- }
- break;
- }
- if (token.id === '(string)' || token.identifier) {
- anonname = token.string;
- }
-
- if (id && next_token.id !== id) {
- if (match) {
- warn('expected_a_b_from_c_d', next_token, id,
- match.id, match.line, artifact());
- } else if (!next_token.identifier || next_token.string !== id) {
- warn('expected_a_b', next_token, id, artifact());
- }
- }
- prev_token = token;
- token = next_token;
- next_token = lookahead.shift() || lex.token();
- }
-
-
- function advance_identifier(string) {
- if (next_token.identifier && next_token.string === string) {
- advance();
- } else {
- warn('expected_a_b', next_token, string, artifact());
- }
- }
-
-
- function do_safe() {
- if (option.adsafe) {
- option.safe = true;
- }
- if (option.safe) {
- option.browser =
- option['continue'] =
- option.css =
- option.debug =
- option.devel =
- option.evil =
- option.forin =
- option.newcap =
- option.nomen =
- option.on =
- option.rhino =
- option.sloppy =
- option.sub =
- option.undef =
- option.widget =
- option.windows = false;
-
-
- delete predefined.Array;
- delete predefined.Date;
- delete predefined.Function;
- delete predefined.Object;
- delete predefined['eval'];
-
- add_to_predefined({
- ADSAFE: false,
- lib: false
- });
- }
- }
-
-
- function do_globals() {
- var name, writeable;
- for (;;) {
- if (next_token.id !== '(string)' && !next_token.identifier) {
- return;
- }
- name = next_token.string;
- advance();
- writeable = false;
- if (next_token.id === ':') {
- advance(':');
- switch (next_token.id) {
- case 'true':
- writeable = predefined[name] !== false;
- advance('true');
- break;
- case 'false':
- advance('false');
- break;
- default:
- stop('unexpected_a');
- }
- }
- predefined[name] = writeable;
- if (next_token.id !== ',') {
- return;
- }
- advance(',');
- }
- }
-
-
- function do_jslint() {
- var name, value;
- while (next_token.id === '(string)' || next_token.identifier) {
- name = next_token.string;
- advance();
- if (next_token.id !== ':') {
- stop('expected_a_b', next_token, ':', artifact());
- }
- advance(':');
- if (typeof jslint_limit[name] === 'number') {
- value = next_token.number;
- if (value > jslint_limit[name] || value <= 0 ||
- Math.floor(value) !== value) {
- stop('expected_small_a');
- }
- option[name] = value;
- } else {
- if (next_token.id === 'true') {
- option[name] = true;
- } else if (next_token.id === 'false') {
- option[name] = false;
- } else {
- stop('unexpected_a');
- }
- switch (name) {
- case 'adsafe':
- option.safe = true;
- do_safe();
- break;
- case 'safe':
- do_safe();
- break;
- }
- }
- advance();
- if (next_token.id === ',') {
- advance(',');
- }
- }
- assume();
- }
-
-
- function do_properties() {
- var name, type;
- option.properties = true;
- if (!funct['(old_property_type)']) {
- funct['(old_property_type)'] = property_type;
- property_type = Object.create(property_type);
- }
- for (;;) {
- if (next_token.id !== '(string)' && !next_token.identifier) {
- return;
- }
- name = next_token.string;
- type = '';
- advance();
- if (next_token.id === ':') {
- advance(':');
- if (next_token.id === 'function') {
- advance('function');
- if (is_type[next_token.string] === true) {
- type = 'function ' + next_token.string;
- advance();
- } else {
- type = 'function';
- }
- } else {
- type = next_token.string;
- if (is_type[type] !== true) {
- warn('expected_type_a', next_token);
- type = '';
- }
- advance();
- }
- }
- property_type[name] = type;
- if (next_token.id !== ',') {
- return;
- }
- advance(',');
- }
- }
-
-
- directive = function directive() {
- var command = this.id,
- old_comments_off = comments_off,
- old_indent = indent;
- comments_off = true;
- indent = null;
- if (next_token.line === token.line && next_token.from === token.thru) {
- warn('missing_space_a_b', next_token, artifact(token), artifact());
- }
- if (lookahead.length > 0) {
- warn('unexpected_a', this);
- }
- switch (command) {
- case '/*properties':
- case '/*property':
- case '/*members':
- case '/*member':
- do_properties();
- break;
- case '/*jslint':
- if (option.safe) {
- warn('adsafe_a', this);
- }
- do_jslint();
- break;
- case '/*globals':
- case '/*global':
- if (option.safe) {
- warn('adsafe_a', this);
- }
- do_globals();
- break;
- default:
- stop('unexpected_a', this);
- }
- comments_off = old_comments_off;
- advance('*/');
- indent = old_indent;
- };
-
-
-// Indentation intention
-
- function edge(mode) {
- next_token.edge = indent ? indent.open && (mode || 'edge') : '';
- }
-
-
- function step_in(mode) {
- var open;
- if (typeof mode === 'number') {
- indent = {
- at: +mode,
- open: true,
- was: indent
- };
- } else if (!indent) {
- indent = {
- at: 1,
- mode: 'statement',
- open: true
- };
- } else {
- open = mode === 'var' ||
- (next_token.line !== token.line && mode !== 'statement');
- indent = {
- at: (open || mode === 'control'
- ? indent.at + option.indent
- : indent.at) + (indent.wrap ? option.indent : 0),
- mode: mode,
- open: open,
- was: indent
- };
- if (mode === 'var' && open) {
- var_mode = indent;
- }
- }
- }
-
- function step_out(id, symbol) {
- if (id) {
- if (indent && indent.open) {
- indent.at -= option.indent;
- edge();
- }
- advance(id, symbol);
- }
- if (indent) {
- indent = indent.was;
- }
- }
-
-// Functions for conformance of whitespace.
-
- function one_space(left, right) {
- left = left || token;
- right = right || next_token;
- if (right.id !== '(end)' && !option.white &&
- (token.line !== right.line ||
- token.thru + 1 !== right.from)) {
- warn('expected_space_a_b', right, artifact(token), artifact(right));
- }
- }
-
- function one_space_only(left, right) {
- left = left || token;
- right = right || next_token;
- if (right.id !== '(end)' && (left.line !== right.line ||
- (!option.white && left.thru + 1 !== right.from))) {
- warn('expected_space_a_b', right, artifact(left), artifact(right));
- }
- }
-
- function no_space(left, right) {
- left = left || token;
- right = right || next_token;
- if ((!option.white || xmode === 'styleproperty' || xmode === 'style') &&
- left.thru !== right.from && left.line === right.line) {
- warn('unexpected_space_a_b', right, artifact(left), artifact(right));
- }
- }
-
- function no_space_only(left, right) {
- left = left || token;
- right = right || next_token;
- if (right.id !== '(end)' && (left.line !== right.line ||
- (!option.white && left.thru !== right.from))) {
- warn('unexpected_space_a_b', right, artifact(left), artifact(right));
- }
- }
-
- function spaces(left, right) {
- if (!option.white) {
- left = left || token;
- right = right || next_token;
- if (left.thru === right.from && left.line === right.line) {
- warn('missing_space_a_b', right, artifact(left), artifact(right));
- }
- }
- }
-
- function comma() {
- if (next_token.id !== ',') {
- warn_at('expected_a_b', token.line, token.thru, ',', artifact());
- } else {
- if (!option.white) {
- no_space_only();
- }
- advance(',');
- spaces();
- }
- }
-
-
- function semicolon() {
- if (next_token.id !== ';') {
- warn_at('expected_a_b', token.line, token.thru, ';', artifact());
- } else {
- if (!option.white) {
- no_space_only();
- }
- advance(';');
- if (semicolon_coda[next_token.id] !== true) {
- spaces();
- }
- }
- }
-
- function use_strict() {
- if (next_token.string === 'use strict') {
- if (strict_mode) {
- warn('unnecessary_use');
- }
- edge();
- advance();
- semicolon();
- strict_mode = true;
- option.newcap = false;
- option.undef = false;
- return true;
- } else {
- return false;
- }
- }
-
-
- function are_similar(a, b) {
- if (a === b) {
- return true;
- }
- if (Array.isArray(a)) {
- if (Array.isArray(b) && a.length === b.length) {
- var i;
- for (i = 0; i < a.length; i += 1) {
- if (!are_similar(a[i], b[i])) {
- return false;
- }
- }
- return true;
- }
- return false;
- }
- if (Array.isArray(b)) {
- return false;
- }
- if (a.id === '(number)' && b.id === '(number)') {
- return a.number === b.number;
- }
- if (a.arity === b.arity && a.string === b.string) {
- switch (a.arity) {
- case 'prefix':
- case 'suffix':
- case undefined:
- return a.id === b.id && are_similar(a.first, b.first);
- case 'infix':
- return are_similar(a.first, b.first) &&
- are_similar(a.second, b.second);
- case 'ternary':
- return are_similar(a.first, b.first) &&
- are_similar(a.second, b.second) &&
- are_similar(a.third, b.third);
- case 'function':
- case 'regexp':
- return false;
- default:
- return true;
- }
- } else {
- if (a.id === '.' && b.id === '[' && b.arity === 'infix') {
- return a.second.string === b.second.string && b.second.id === '(string)';
- } else if (a.id === '[' && a.arity === 'infix' && b.id === '.') {
- return a.second.string === b.second.string && a.second.id === '(string)';
- }
- }
- return false;
- }
-
-
-// This is the heart of JSLINT, the Pratt parser. In addition to parsing, it
-// is looking for ad hoc lint patterns. We add .fud to Pratt's model, which is
-// like .nud except that it is only used on the first token of a statement.
-// Having .fud makes it much easier to define statement-oriented languages like
-// JavaScript. I retained Pratt's nomenclature.
-
-// .nud Null denotation
-// .fud First null denotation
-// .led Left denotation
-// lbp Left binding power
-// rbp Right binding power
-
-// They are elements of the parsing method called Top Down Operator Precedence.
-
- function expression(rbp, initial) {
-
-// rbp is the right binding power.
-// initial indicates that this is the first expression of a statement.
-
- var left;
- if (next_token.id === '(end)') {
- stop('unexpected_a', token, next_token.id);
- }
- advance();
- if (option.safe && scope[token.string] &&
- scope[token.string] === global_scope[token.string] &&
- (next_token.id !== '(' && next_token.id !== '.')) {
- warn('adsafe_a', token);
- }
- if (initial) {
- anonname = 'anonymous';
- funct['(verb)'] = token.string;
- }
- if (initial === true && token.fud) {
- left = token.fud();
- } else {
- if (token.nud) {
- left = token.nud();
- } else {
- if (next_token.id === '(number)' && token.id === '.') {
- warn('leading_decimal_a', token, artifact());
- advance();
- return token;
- } else {
- stop('expected_identifier_a', token, token.id);
- }
- }
- while (rbp < next_token.lbp) {
- advance();
- if (token.led) {
- left = token.led(left);
- } else {
- stop('expected_operator_a', token, token.id);
- }
- }
- }
- return left;
- }
-
-
-// Functional constructors for making the symbols that will be inherited by
-// tokens.
-
- function symbol(s, p) {
- var x = syntax[s];
- if (!x || typeof x !== 'object') {
- syntax[s] = x = {
- id: s,
- lbp: p || 0,
- string: s
- };
- }
- return x;
- }
-
- function postscript(x) {
- x.postscript = true;
- return x;
- }
-
- function ultimate(s) {
- var x = symbol(s, 0);
- x.from = 1;
- x.thru = 1;
- x.line = 0;
- x.edge = 'edge';
- s.string = s;
- return postscript(x);
- }
-
-
- function stmt(s, f) {
- var x = symbol(s);
- x.identifier = x.reserved = true;
- x.fud = f;
- return x;
- }
-
- function labeled_stmt(s, f) {
- var x = stmt(s, f);
- x.labeled = true;
- }
-
- function disrupt_stmt(s, f) {
- var x = stmt(s, f);
- x.disrupt = true;
- }
-
-
- function reserve_name(x) {
- var c = x.id.charAt(0);
- if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
- x.identifier = x.reserved = true;
- }
- return x;
- }
-
-
- function prefix(s, f, type) {
- var x = symbol(s, 150);
- reserve_name(x);
- x.nud = typeof f === 'function'
- ? f
- : function () {
- if (s === 'typeof') {
- one_space();
- } else {
- no_space_only();
- }
- this.first = expression(150);
- this.arity = 'prefix';
- if (this.id === '++' || this.id === '--') {
- if (!option.plusplus) {
- warn('unexpected_a', this);
- } else if ((!this.first.identifier || this.first.reserved) &&
- this.first.id !== '.' && this.first.id !== '[') {
- warn('bad_operand', this);
- }
- }
- this.type = type;
- return this;
- };
- return x;
- }
-
-
- function type(s, t, nud) {
- var x = symbol(s);
- x.arity = x.type = t;
- if (nud) {
- x.nud = nud;
- }
- return x;
- }
-
-
- function reserve(s, f) {
- var x = symbol(s);
- x.identifier = x.reserved = true;
- if (typeof f === 'function') {
- x.nud = f;
- }
- return x;
- }
-
-
- function constant(name, type) {
- var x = reserve(name);
- x.type = type;
- x.string = name;
- x.nud = return_this;
- return x;
- }
-
-
- function reservevar(s, v) {
- return reserve(s, function () {
- if (typeof v === 'function') {
- v(this);
- }
- return this;
- });
- }
-
-
- function infix(s, p, f, type, w) {
- var x = symbol(s, p);
- reserve_name(x);
- x.led = function (left) {
- this.arity = 'infix';
- if (!w) {
- spaces(prev_token, token);
- spaces();
- }
- if (!option.bitwise && this.bitwise) {
- warn('unexpected_a', this);
- }
- if (typeof f === 'function') {
- return f(left, this);
- } else {
- this.first = left;
- this.second = expression(p);
- return this;
- }
- };
- if (type) {
- x.type = type;
- }
- return x;
- }
-
- function expected_relation(node, message) {
- if (node.assign) {
- warn(message || bundle.conditional_assignment, node);
- }
- return node;
- }
-
- function expected_condition(node, message) {
- switch (node.id) {
- case '[':
- case '-':
- if (node.arity !== 'infix') {
- warn(message || bundle.weird_condition, node);
- }
- break;
- case 'false':
- case 'function':
- case 'Infinity':
- case 'NaN':
- case 'null':
- case 'true':
- case 'undefined':
- case 'void':
- case '(number)':
- case '(regexp)':
- case '(string)':
- case '{':
- warn(message || bundle.weird_condition, node);
- break;
- case '(':
- if (node.first.id === '.' && numbery[node.first.second.string] === true) {
- warn(message || bundle.weird_condition, node);
- }
- break;
- }
- return node;
- }
-
- function check_relation(node) {
- switch (node.arity) {
- case 'prefix':
- switch (node.id) {
- case '{':
- case '[':
- warn('unexpected_a', node);
- break;
- case '!':
- warn('confusing_a', node);
- break;
- }
- break;
- case 'function':
- case 'regexp':
- warn('unexpected_a', node);
- break;
- default:
- if (node.id === 'NaN') {
- warn('isnan', node);
- }
- }
- return node;
- }
-
-
- function relation(s, eqeq) {
- return infix(s, 100, function (left, that) {
- check_relation(left);
- if (eqeq && !option.eqeq) {
- warn('expected_a_b', that, eqeq, that.id);
- }
- var right = expression(100);
- if (are_similar(left, right) ||
- ((left.id === '(string)' || left.id === '(number)') &&
- (right.id === '(string)' || right.id === '(number)'))) {
- warn('weird_relation', that);
- }
- that.first = left;
- that.second = check_relation(right);
- return that;
- }, 'boolean');
- }
-
-
- function assignop(s, op) {
- var x = infix(s, 20, function (left, that) {
- var l;
- that.first = left;
- if (left.identifier) {
- if (scope[left.string]) {
- if (scope[left.string].writeable === false) {
- warn('read_only', left);
- }
- } else {
- stop('read_only');
- }
- } else if (option.safe) {
- l = left;
- do {
- if (typeof predefined[l.string] === 'boolean') {
- warn('adsafe_a', l);
- }
- l = l.first;
- } while (l);
- }
- if (left === syntax['function']) {
- warn('identifier_function', token);
- }
- if (left.id === '.' || left.id === '[') {
- if (!left.first || left.first.string === 'arguments') {
- warn('bad_assignment', that);
- }
- } else if (left.identifier && !left.reserved) {
- if (funct[left.string] === 'exception') {
- warn('assign_exception', left);
- }
- }
- that.second = expression(19);
- if (that.id === '=' && are_similar(that.first, that.second)) {
- warn('weird_assignment', that);
- }
- return that;
- });
- x.assign = true;
- if (op) {
- if (syntax[op].type) {
- x.type = syntax[op].type;
- }
- if (syntax[op].bitwise) {
- x.bitwise = true;
- }
- }
- return x;
- }
-
-
- function bitwise(s, p) {
- var x = infix(s, p, 'number');
- x.bitwise = true;
- return x;
- }
-
-
- function suffix(s) {
- var x = symbol(s, 150);
- x.led = function (left) {
- no_space_only(prev_token, token);
- if (!option.plusplus) {
- warn('unexpected_a', this);
- } else if ((!left.identifier || left.reserved) &&
- left.id !== '.' && left.id !== '[') {
- warn('bad_operand', this);
- }
- this.first = left;
- this.arity = 'suffix';
- return this;
- };
- return x;
- }
-
-
- function optional_identifier() {
- if (next_token.identifier) {
- advance();
- if (option.safe && banned[token.string]) {
- warn('adsafe_a', token);
- } else if (token.reserved && !option.es5) {
- warn('expected_identifier_a_reserved', token);
- }
- return token.string;
- }
- }
-
-
- function identifier() {
- var i = optional_identifier();
- if (!i) {
- stop(token.id === 'function' && next_token.id === '('
- ? 'name_function'
- : 'expected_identifier_a');
- }
- return i;
- }
-
-
- function statement() {
-
- var label, old_scope = scope, the_statement;
-
-// We don't like the empty statement.
-
- if (next_token.id === ';') {
- warn('unexpected_a');
- semicolon();
- return;
- }
-
-// Is this a labeled statement?
-
- if (next_token.identifier && !next_token.reserved && peek().id === ':') {
- edge('label');
- label = next_token;
- advance();
- advance(':');
- scope = Object.create(old_scope);
- add_label(label, 'label');
- if (next_token.labeled !== true) {
- warn('label_a_b', next_token, label.string, artifact());
- } else if (jx.test(label.string + ':')) {
- warn('url', label);
- } else if (funct === global_funct) {
- stop('unexpected_a', token);
- }
- next_token.label = label;
- }
-
-// Parse the statement.
-
- edge();
- step_in('statement');
- the_statement = expression(0, true);
- if (the_statement) {
-
-// Look for the final semicolon.
-
- if (the_statement.arity === 'statement') {
- if (the_statement.id === 'switch' ||
- (the_statement.block && the_statement.id !== 'do')) {
- spaces();
- } else {
- semicolon();
- }
- } else {
-
-// If this is an expression statement, determine if it is acceptable.
-// We do not like
-// new Blah();
-// statments. If it is to be used at all, new should only be used to make
-// objects, not side effects. The expression statements we do like do
-// assignment or invocation or delete.
-
- if (the_statement.id === '(') {
- if (the_statement.first.id === 'new') {
- warn('bad_new');
- }
- } else if (!the_statement.assign &&
- the_statement.id !== 'delete' &&
- the_statement.id !== '++' &&
- the_statement.id !== '--') {
- warn('assignment_function_expression', token);
- }
- semicolon();
- }
- }
- step_out();
- scope = old_scope;
- return the_statement;
- }
-
-
- function statements() {
- var array = [], disruptor, the_statement;
-
-// A disrupt statement may not be followed by any other statement.
-// If the last statement is disrupt, then the sequence is disrupt.
-
- while (next_token.postscript !== true) {
- if (next_token.id === ';') {
- warn('unexpected_a', next_token);
- semicolon();
- } else {
- if (next_token.string === 'use strict') {
- if ((!node_js && xmode !== 'script') || funct !== global_funct || array.length > 0) {
- warn('function_strict');
- }
- use_strict();
- }
- if (disruptor) {
- warn('unreachable_a_b', next_token, next_token.string,
- disruptor.string);
- disruptor = null;
- }
- the_statement = statement();
- if (the_statement) {
- array.push(the_statement);
- if (the_statement.disrupt) {
- disruptor = the_statement;
- array.disrupt = true;
- }
- }
- }
- }
- return array;
- }
-
-
- function block(ordinary) {
-
-// array block is array sequence of statements wrapped in braces.
-// ordinary is false for function bodies and try blocks.
-// ordinary is true for if statements, while, etc.
-
- var array,
- curly = next_token,
- old_in_block = in_block,
- old_scope = scope,
- old_strict_mode = strict_mode;
-
- in_block = ordinary;
- scope = Object.create(scope);
- spaces();
- if (next_token.id === '{') {
- advance('{');
- step_in();
- if (!ordinary && !use_strict() && !old_strict_mode &&
- !option.sloppy && funct['(context)'] === global_funct) {
- warn('missing_use_strict');
- }
- array = statements();
- strict_mode = old_strict_mode;
- step_out('}', curly);
- } else if (!ordinary) {
- stop('expected_a_b', next_token, '{', artifact());
- } else {
- warn('expected_a_b', next_token, '{', artifact());
- array = [statement()];
- array.disrupt = array[0].disrupt;
- }
- funct['(verb)'] = null;
- scope = old_scope;
- in_block = old_in_block;
- if (ordinary && array.length === 0) {
- warn('empty_block');
- }
- return array;
- }
-
-
- function tally_property(name) {
- if (option.properties && typeof property_type[name] !== 'string') {
- warn('unexpected_property_a', token, name);
- }
- if (typeof member[name] === 'number') {
- member[name] += 1;
- } else {
- member[name] = 1;
- }
- }
-
-
-// ECMAScript parser
-
- syntax['(identifier)'] = {
- id: '(identifier)',
- lbp: 0,
- identifier: true,
- nud: function () {
- var name = this.string,
- variable = scope[name],
- site,
- writeable;
-
-// If the variable is not in scope, then we may have an undeclared variable.
-// Check the predefined list. If it was predefined, create the global
-// variable.
-
- if (typeof variable !== 'object') {
- writeable = predefined[name];
- if (typeof writeable === 'boolean') {
- global_scope[name] = variable = {
- string: name,
- writeable: writeable,
- funct: global_funct
- };
- global_funct[name] = 'var';
-
-// But if the variable is not in scope, and is not predefined, and if we are not
-// in the global scope, then we have an undefined variable error.
-
- } else {
- if (!option.undef) {
- warn('used_before_a', token);
- }
- scope[name] = variable = {
- string: name,
- writeable: true,
- funct: funct
- };
- funct[name] = 'undef';
- }
-
- }
- site = variable.funct;
-
-// The name is in scope and defined in the current function.
-
- if (funct === site) {
-
-// Change 'unused' to 'var', and reject labels.
-
- switch (funct[name]) {
- case 'becoming':
- warn('unexpected_a', token);
- funct[name] = 'var';
- break;
- case 'unused':
- funct[name] = 'var';
- break;
- case 'unparam':
- funct[name] = 'parameter';
- break;
- case 'unction':
- funct[name] = 'function';
- break;
- case 'label':
- warn('a_label', token, name);
- break;
- }
-
-// If the name is already defined in the current
-// function, but not as outer, then there is a scope error.
-
- } else {
- switch (funct[name]) {
- case 'closure':
- case 'function':
- case 'var':
- case 'unused':
- warn('a_scope', token, name);
- break;
- case 'label':
- warn('a_label', token, name);
- break;
- case 'outer':
- case 'global':
- break;
- default:
-
-// If the name is defined in an outer function, make an outer entry, and if
-// it was unused, make it var.
-
- switch (site[name]) {
- case 'becoming':
- case 'closure':
- case 'function':
- case 'parameter':
- case 'unction':
- case 'unused':
- case 'var':
- site[name] = 'closure';
- funct[name] = site === global_funct
- ? 'global'
- : 'outer';
- break;
- case 'unparam':
- site[name] = 'parameter';
- funct[name] = 'outer';
- break;
- case 'undef':
- funct[name] = 'undef';
- break;
- case 'label':
- warn('a_label', token, name);
- break;
- }
- }
- }
- return this;
- },
- led: function () {
- stop('expected_operator_a');
- }
- };
-
-// Build the syntax table by declaring the syntactic elements.
-
- type('(array)', 'array');
- type('(color)', 'color');
- type('(function)', 'function');
- type('(number)', 'number', return_this);
- type('(object)', 'object');
- type('(string)', 'string', return_this);
- type('(boolean)', 'boolean', return_this);
- type('(range)', 'range');
- type('(regexp)', 'regexp', return_this);
-
- ultimate('(begin)');
- ultimate('(end)');
- ultimate('(error)');
- postscript(symbol('</'));
- symbol('<!');
- symbol('<!--');
- symbol('-->');
- postscript(symbol('}'));
- symbol(')');
- symbol(']');
- postscript(symbol('"'));
- postscript(symbol('\''));
- symbol(';');
- symbol(':');
- symbol(',');
- symbol('#');
- symbol('@');
- symbol('*/');
- postscript(reserve('case'));
- reserve('catch');
- postscript(reserve('default'));
- reserve('else');
- reserve('finally');
-
- reservevar('arguments', function (x) {
- if (strict_mode && funct === global_funct) {
- warn('strict', x);
- } else if (option.safe) {
- warn('adsafe_a', x);
- }
- });
- reservevar('eval', function (x) {
- if (option.safe) {
- warn('adsafe_a', x);
- }
- });
- constant('false', 'boolean');
- constant('Infinity', 'number');
- constant('NaN', 'number');
- constant('null', '');
- reservevar('this', function (x) {
- if (option.safe) {
- warn('adsafe_a', x);
- } else if (strict_mode && funct['(token)'].arity === 'statement' &&
- funct['(name)'].charAt(0) > 'Z') {
- warn('strict', x);
- }
- });
- constant('true', 'boolean');
- constant('undefined', '');
-
- infix('?', 30, function (left, that) {
- step_in('?');
- that.first = expected_condition(expected_relation(left));
- that.second = expression(0);
- spaces();
- step_out();
- var colon = next_token;
- advance(':');
- step_in(':');
- spaces();
- that.third = expression(10);
- that.arity = 'ternary';
- if (are_similar(that.second, that.third)) {
- warn('weird_ternary', colon);
- } else if (are_similar(that.first, that.second)) {
- warn('use_or', that);
- }
- step_out();
- return that;
- });
-
- infix('||', 40, function (left, that) {
- function paren_check(that) {
- if (that.id === '&&' && !that.paren) {
- warn('and', that);
- }
- return that;
- }
-
- that.first = paren_check(expected_condition(expected_relation(left)));
- that.second = paren_check(expected_relation(expression(40)));
- if (are_similar(that.first, that.second)) {
- warn('weird_condition', that);
- }
- return that;
- });
-
- infix('&&', 50, function (left, that) {
- that.first = expected_condition(expected_relation(left));
- that.second = expected_relation(expression(50));
- if (are_similar(that.first, that.second)) {
- warn('weird_condition', that);
- }
- return that;
- });
-
- prefix('void', function () {
- this.first = expression(0);
- this.arity = 'prefix';
- if (option.es5) {
- warn('expected_a_b', this, 'undefined', 'void');
- } else if (this.first.number !== 0) {
- warn('expected_a_b', this.first, '0', artifact(this.first));
- }
- this.type = 'undefined';
- return this;
- });
-
- bitwise('|', 70);
- bitwise('^', 80);
- bitwise('&', 90);
-
- relation('==', '===');
- relation('===');
- relation('!=', '!==');
- relation('!==');
- relation('<');
- relation('>');
- relation('<=');
- relation('>=');
-
- bitwise('<<', 120);
- bitwise('>>', 120);
- bitwise('>>>', 120);
-
- infix('in', 120, function (left, that) {
- warn('infix_in', that);
- that.left = left;
- that.right = expression(130);
- return that;
- }, 'boolean');
- infix('instanceof', 120, null, 'boolean');
- infix('+', 130, function (left, that) {
- if (left.id === '(number)') {
- if (left.number === 0) {
- warn('unexpected_a', left, '0');
- }
- } else if (left.id === '(string)') {
- if (left.string === '') {
- warn('expected_a_b', left, 'String', '\'\'');
- }
- }
- var right = expression(130);
- if (right.id === '(number)') {
- if (right.number === 0) {
- warn('unexpected_a', right, '0');
- }
- } else if (right.id === '(string)') {
- if (right.string === '') {
- warn('expected_a_b', right, 'String', '\'\'');
- }
- }
- if (left.id === right.id) {
- if (left.id === '(string)' || left.id === '(number)') {
- if (left.id === '(string)') {
- left.string += right.string;
- if (jx.test(left.string)) {
- warn('url', left);
- }
- } else {
- left.number += right.number;
- }
- left.thru = right.thru;
- return left;
- }
- }
- that.first = left;
- that.second = right;
- return that;
- });
- prefix('+', 'num');
- prefix('+++', function () {
- warn('confusing_a', token);
- this.first = expression(150);
- this.arity = 'prefix';
- return this;
- });
- infix('+++', 130, function (left) {
- warn('confusing_a', token);
- this.first = left;
- this.second = expression(130);
- return this;
- });
- infix('-', 130, function (left, that) {
- if ((left.id === '(number)' && left.number === 0) || left.id === '(string)') {
- warn('unexpected_a', left);
- }
- var right = expression(130);
- if ((right.id === '(number)' && right.number === 0) || right.id === '(string)') {
- warn('unexpected_a', left);
- }
- if (left.id === right.id && left.id === '(number)') {
- left.number -= right.number;
- left.thru = right.thru;
- return left;
- }
- that.first = left;
- that.second = right;
- return that;
- }, 'number');
- prefix('-');
- prefix('---', function () {
- warn('confusing_a', token);
- this.first = expression(150);
- this.arity = 'prefix';
- return this;
- });
- infix('---', 130, function (left) {
- warn('confusing_a', token);
- this.first = left;
- this.second = expression(130);
- return this;
- });
- infix('*', 140, function (left, that) {
- if ((left.id === '(number)' && (left.number === 0 || left.number === 1)) || left.id === '(string)') {
- warn('unexpected_a', left);
- }
- var right = expression(140);
- if ((right.id === '(number)' && (right.number === 0 || right.number === 1)) || right.id === '(string)') {
- warn('unexpected_a', right);
- }
- if (left.id === right.id && left.id === '(number)') {
- left.number *= right.number;
- left.thru = right.thru;
- return left;
- }
- that.first = left;
- that.second = right;
- return that;
- }, 'number');
- infix('/', 140, function (left, that) {
- if ((left.id === '(number)' && left.number === 0) || left.id === '(string)') {
- warn('unexpected_a', left);
- }
- var right = expression(140);
- if ((right.id === '(number)' && (right.number === 0 || right.number === 1)) || right.id === '(string)') {
- warn('unexpected_a', right);
- }
- if (left.id === right.id && left.id === '(number)') {
- left.number /= right.number;
- left.thru = right.thru;
- return left;
- }
- that.first = left;
- that.second = right;
- return that;
- }, 'number');
- infix('%', 140, function (left, that) {
- if ((left.id === '(number)' && (left.number === 0 || left.number === 1)) || left.id === '(string)') {
- warn('unexpected_a', left);
- }
- var right = expression(140);
- if ((right.id === '(number)' && right.number === 0) || right.id === '(string)') {
- warn('unexpected_a', right);
- }
- if (left.id === right.id && left.id === '(number)') {
- left.number %= right.number;
- left.thru = right.thru;
- return left;
- }
- that.first = left;
- that.second = right;
- return that;
- }, 'number');
-
- suffix('++');
- prefix('++');
-
- suffix('--');
- prefix('--');
- prefix('delete', function () {
- one_space();
- var p = expression(0);
- if (!p || (p.id !== '.' && p.id !== '[')) {
- warn('deleted');
- }
- this.first = p;
- return this;
- });
-
-
- prefix('~', function () {
- no_space_only();
- if (!option.bitwise) {
- warn('unexpected_a', this);
- }
- expression(150);
- return this;
- }, 'number');
- prefix('!', function () {
- no_space_only();
- this.first = expected_condition(expression(150));
- this.arity = 'prefix';
- if (bang[this.first.id] === true || this.first.assign) {
- warn('confusing_a', this);
- }
- return this;
- }, 'boolean');
- prefix('typeof', null, 'string');
- prefix('new', function () {
- one_space();
- var c = expression(160), n, p, v;
- this.first = c;
- if (c.id !== 'function') {
- if (c.identifier) {
- switch (c.string) {
- case 'Object':
- warn('use_object', token);
- break;
- case 'Array':
- if (next_token.id === '(') {
- p = next_token;
- p.first = this;
- advance('(');
- if (next_token.id !== ')') {
- n = expression(0);
- p.second = [n];
- if (n.type !== 'number' || next_token.id === ',') {
- warn('use_array', p);
- }
- while (next_token.id === ',') {
- advance(',');
- p.second.push(expression(0));
- }
- } else {
- warn('use_array', token);
- }
- advance(')', p);
- return p;
- }
- warn('use_array', token);
- break;
- case 'Number':
- case 'String':
- case 'Boolean':
- case 'Math':
- case 'JSON':
- warn('not_a_constructor', c);
- break;
- case 'Function':
- if (!option.evil) {
- warn('function_eval');
- }
- break;
- case 'Date':
- case 'RegExp':
- break;
- default:
- if (c.id !== 'function') {
- v = c.string.charAt(0);
- if (!option.newcap && (v < 'A' || v > 'Z')) {
- warn('constructor_name_a', token);
- }
- }
- }
- } else {
- if (c.id !== '.' && c.id !== '[' && c.id !== '(') {
- warn('bad_constructor', token);
- }
- }
- } else {
- warn('weird_new', this);
- }
- if (next_token.id !== '(') {
- warn('missing_a', next_token, '()');
- }
- return this;
- });
-
- infix('(', 160, function (left, that) {
- var p;
- if (indent && indent.mode === 'expression') {
- no_space(prev_token, token);
- } else {
- no_space_only(prev_token, token);
- }
- if (!left.immed && left.id === 'function') {
- warn('wrap_immediate');
- }
- p = [];
- if (left.identifier) {
- if (left.string.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {
- if (left.string !== 'Number' && left.string !== 'String' &&
- left.string !== 'Boolean' && left.string !== 'Date') {
- if (left.string === 'Math' || left.string === 'JSON') {
- warn('not_a_function', left);
- } else if (left.string === 'Object') {
- warn('use_object', token);
- } else if (left.string === 'Array' || !option.newcap) {
- warn('missing_a', left, 'new');
- }
- }
- }
- } else if (left.id === '.') {
- if (option.safe && left.first.string === 'Math' &&
- left.second === 'random') {
- warn('adsafe_a', left);
- } else if (left.second.string === 'split' &&
- left.first.id === '(string)') {
- warn('use_array', left.second);
- }
- }
- step_in();
- if (next_token.id !== ')') {
- no_space();
- for (;;) {
- edge();
- p.push(expression(10));
- if (next_token.id !== ',') {
- break;
- }
- comma();
- }
- }
- no_space();
- step_out(')', that);
- if (typeof left === 'object') {
- if (left.string === 'parseInt' && p.length === 1) {
- warn('radix', left);
- }
- if (!option.evil) {
- if (left.string === 'eval' || left.string === 'Function' ||
- left.string === 'execScript') {
- warn('evil', left);
- } else if (p[0] && p[0].id === '(string)' &&
- (left.string === 'setTimeout' ||
- left.string === 'setInterval')) {
- warn('implied_evil', left);
- }
- }
- if (!left.identifier && left.id !== '.' && left.id !== '[' &&
- left.id !== '(' && left.id !== '&&' && left.id !== '||' &&
- left.id !== '?') {
- warn('bad_invocation', left);
- }
- }
- that.first = left;
- that.second = p;
- return that;
- }, '', true);
-
- prefix('(', function () {
- step_in('expression');
- no_space();
- edge();
- if (next_token.id === 'function') {
- next_token.immed = true;
- }
- var value = expression(0);
- value.paren = true;
- no_space();
- step_out(')', this);
- if (value.id === 'function') {
- if (next_token.id === '(') {
- warn('move_invocation');
- } else {
- warn('bad_wrap', this);
- }
- }
- return value;
- });
-
- infix('.', 170, function (left, that) {
- no_space(prev_token, token);
- no_space();
- var name = identifier(), type;
- if (typeof name === 'string') {
- tally_property(name);
- }
- that.first = left;
- that.second = token;
- if (left && left.string === 'arguments' &&
- (name === 'callee' || name === 'caller')) {
- warn('avoid_a', left, 'arguments.' + name);
- } else if (!option.evil && left && left.string === 'document' &&
- (name === 'write' || name === 'writeln')) {
- warn('write_is_wrong', left);
- } else if (option.adsafe) {
- if (!adsafe_top && left.string === 'ADSAFE') {
- if (name === 'id' || name === 'lib') {
- warn('adsafe_a', that);
- } else if (name === 'go') {
- if (xmode !== 'script') {
- warn('adsafe_a', that);
- } else if (adsafe_went || next_token.id !== '(' ||
- peek(0).id !== '(string)' ||
- peek(0).string !== adsafe_id ||
- peek(1).id !== ',') {
- stop('adsafe_a', that, 'go');
- }
- adsafe_went = true;
- adsafe_may = false;
- }
- }
- adsafe_top = false;
- }
- if (!option.evil && (name === 'eval' || name === 'execScript')) {
- warn('evil');
- } else if (option.safe) {
- for (;;) {
- if (banned[name] === true) {
- warn('adsafe_a', token, name);
- }
- if (typeof predefined[left.string] !== 'boolean' || //// check for writeable
- next_token.id === '(') {
- break;
- }
- if (next_token.id !== '.') {
- warn('adsafe_a', that);
- break;
- }
- advance('.');
- token.first = that;
- token.second = name;
- that = token;
- name = identifier();
- if (typeof name === 'string') {
- tally_property(name);
- }
- }
- }
- type = property_type[name];
- if (type && typeof type === 'string' && type !== '*') {
- that.type = type;
- }
- return that;
- }, '', true);
-
- infix('[', 170, function (left, that) {
- var e, s;
- no_space_only(prev_token, token);
- no_space();
- step_in();
- edge();
- e = expression(0);
- switch (e.type) {
- case 'number':
- if (e.id === '(number)' && left.id === 'arguments') {
- warn('use_param', left);
- }
- break;
- case 'string':
- if (e.id === '(string)') {
- if (option.safe && (banned[e.string] ||
- e.string.charAt(0) === '_' || e.string.slice(-1) === '_')) {
- warn('adsafe_subscript_a', e);
- } else if (!option.evil &&
- (e.string === 'eval' || e.string === 'execScript')) {
- warn('evil', e);
- } else if (!option.sub && ix.test(e.string)) {
- s = syntax[e.string];
- if (!s || !s.reserved) {
- warn('subscript', e);
- }
- }
- tally_property(e.string);
- } else if (option.safe && e.id !== 'typeof') {
- warn('adsafe_subscript_a', e);
- }
- break;
- case undefined:
- if (option.safe) {
- warn('adsafe_subscript_a', e);
- }
- break;
- default:
- if (option.safe) {
- warn('adsafe_subscript_a', e);
- }
- }
- step_out(']', that);
- no_space(prev_token, token);
- that.first = left;
- that.second = e;
- return that;
- }, '', true);
-
- prefix('[', function () {
- this.arity = 'prefix';
- this.first = [];
- step_in('array');
- while (next_token.id !== '(end)') {
- while (next_token.id === ',') {
- warn('unexpected_a', next_token);
- advance(',');
- }
- if (next_token.id === ']') {
- break;
- }
- indent.wrap = false;
- edge();
- this.first.push(expression(10));
- if (next_token.id === ',') {
- comma();
- if (next_token.id === ']' && !option.es5) {
- warn('unexpected_a', token);
- break;
- }
- } else {
- break;
- }
- }
- step_out(']', this);
- return this;
- }, 170);
-
-
- function property_name() {
- var id = optional_identifier(true);
- if (!id) {
- if (next_token.id === '(string)') {
- id = next_token.string;
- if (option.safe) {
- if (banned[id]) {
- warn('adsafe_a');
- } else if (id.charAt(0) === '_' ||
- id.charAt(id.length - 1) === '_') {
- warn('dangling_a');
- }
- }
- advance();
- } else if (next_token.id === '(number)') {
- id = next_token.number.toString();
- advance();
- }
- }
- return id;
- }
-
-
- function function_params() {
- var id, paren = next_token, params = [];
- advance('(');
- step_in();
- no_space();
- if (next_token.id === ')') {
- no_space();
- step_out(')', paren);
- return;
- }
- for (;;) {
- edge();
- id = identifier();
- params.push(token);
- add_label(token, option.unparam ? 'parameter' : 'unparam');
- if (next_token.id === ',') {
- comma();
- } else {
- no_space();
- step_out(')', paren);
- return params;
- }
- }
- }
-
-
- function complexity(exp) {
- var score = 0;
- if (exp) {
- if (Array.isArray(exp)) {
- exp.forEach(function (tok) {
- score += complexity(tok);
- });
- } else {
- switch (exp.arity) {
- case 'statement':
- switch (exp.id) {
- case 'if':
- score += complexity(exp.first) + complexity(exp.block) +
- complexity(exp['else']) + 1;
- break;
- case 'while':
- case 'do':
- if (exp.first.id !== 'true' && exp.first.number !== 1) {
- score += 1;
- }
- score += complexity(exp.first) + complexity(exp.block);
- break;
- case 'for':
- if (exp.second !== undefined &&
- exp.second.id !== 'true' &&
- exp.second.number !== 1) {
- score += 1;
- }
- score += complexity(exp.first) + complexity(exp.second) +
- complexity(exp.third) + complexity(exp.block);
- break;
- case 'switch':
- score += complexity(exp.first) +
- complexity(exp.second) + exp.second.length;
- if (exp.second[exp.second.length - 1].id === 'default') {
- score -= 1;
- }
- break;
- case 'try':
- if (exp.second) {
- score += 1;
- }
- if (exp.third) {
- score += 1;
- }
- score += complexity(exp.first) + complexity(exp.second) +
- complexity(exp.third) + complexity(exp.block);
- break;
- }
- break;
- case 'prefix':
- score += complexity(exp.first);
- break;
- case 'case':
- case 'infix':
- score += complexity(exp.first) + complexity(exp.second);
- if (exp.id === '&&' || exp.id === '||') {
- score += 1;
- }
- break;
- case 'ternary':
- score += complexity(exp.first) + complexity(exp.second) + complexity(exp.third);
- break;
- }
- }
- }
- return score;
- }
-
-
- function do_function(func, name) {
- var old_funct = funct,
- old_option = option,
- old_scope = scope;
- funct = {
- '(name)' : name || '\'' + (anonname || '').replace(nx, sanitize) + '\'',
- '(line)' : next_token.line,
- '(context)' : old_funct,
- '(breakage)' : 0,
- '(loopage)' : 0,
- '(scope)' : scope,
- '(token)' : func
- };
- option = Object.create(old_option);
- scope = Object.create(old_scope);
- functions.push(funct);
- func.name = name;
- if (name) {
- add_label(func, 'function', name);
- }
- func.writeable = false;
- func.first = funct['(params)'] = function_params();
- one_space();
- func.block = block(false);
- if (funct['(old_property_type)']) {
- property_type = funct['(old_property_type)'];
- delete funct['(old_property_type)'];
- }
- funct['(complexity)'] = complexity(func.block) + 1;
- if (option.confusion) {
- funct['(confusion)'] = true;
- }
- funct = old_funct;
- option = old_option;
- scope = old_scope;
- }
-
-
- assignop('=');
- assignop('+=', '+');
- assignop('-=', '-');
- assignop('*=', '*');
- assignop('/=', '/').nud = function () {
- stop('slash_equal');
- };
- assignop('%=', '%');
- assignop('&=', '&');
- assignop('|=', '|');
- assignop('^=', '^');
- assignop('<<=', '<<');
- assignop('>>=', '>>');
- assignop('>>>=', '>>>');
-
-
- prefix('{', function () {
- var get, i, j, name, p, set, seen = {};
- this.arity = 'prefix';
- this.first = [];
- step_in();
- while (next_token.id !== '}') {
- indent.wrap = false;
-
-// JSLint recognizes the ES5 extension for get/set in object literals,
-// but requires that they be used in pairs.
-
- edge();
- if (next_token.string === 'get' && peek().id !== ':') {
- if (!option.es5) {
- warn('es5');
- }
- get = next_token;
- advance('get');
- one_space_only();
- name = next_token;
- i = property_name();
- if (!i) {
- stop('missing_property');
- }
- get.string = '';
- do_function(get);
- if (funct['(loopage)']) {
- warn('function_loop', get);
- }
- p = get.first;
- if (p) {
- warn('parameter_a_get_b', p[0], p[0].string, i);
- }
- comma();
- set = next_token;
- spaces();
- edge();
- advance('set');
- set.string = '';
- one_space_only();
- j = property_name();
- if (i !== j) {
- stop('expected_a_b', token, i, j || next_token.string);
- }
- do_function(set);
- p = set.first;
- if (!p || p.length !== 1) {
- stop('parameter_set_a', set, 'value');
- } else if (p[0].string !== 'value') {
- stop('expected_a_b', p[0], 'value', p[0].string);
- }
- name.first = [get, set];
- } else {
- name = next_token;
- i = property_name();
- if (typeof i !== 'string') {
- stop('missing_property');
- }
- advance(':');
- spaces();
- name.first = expression(10);
- }
- this.first.push(name);
- if (seen[i] === true) {
- warn('duplicate_a', next_token, i);
- }
- seen[i] = true;
- tally_property(i);
- if (next_token.id !== ',') {
- break;
- }
- for (;;) {
- comma();
- if (next_token.id !== ',') {
- break;
- }
- warn('unexpected_a', next_token);
- }
- if (next_token.id === '}' && !option.es5) {
- warn('unexpected_a', token);
- }
- }
- step_out('}', this);
- return this;
- });
-
- stmt('{', function () {
- warn('statement_block');
- this.arity = 'statement';
- this.block = statements();
- this.disrupt = this.block.disrupt;
- advance('}', this);
- return this;
- });
-
- stmt('/*global', directive);
- stmt('/*globals', directive);
- stmt('/*jslint', directive);
- stmt('/*member', directive);
- stmt('/*members', directive);
- stmt('/*property', directive);
- stmt('/*properties', directive);
-
- stmt('var', function () {
-
-// JavaScript does not have block scope. It only has function scope. So,
-// declaring a variable in a block can have unexpected consequences.
-
-// var.first will contain an array, the array containing name tokens
-// and assignment tokens.
-
- var assign, id, name;
-
- if (funct['(vars)'] && !option.vars) {
- warn('combine_var');
- } else if (funct !== global_funct) {
- funct['(vars)'] = true;
- }
- this.arity = 'statement';
- this.first = [];
- step_in('var');
- for (;;) {
- name = next_token;
- id = identifier();
- add_label(name, 'becoming');
-
- if (next_token.id === '=') {
- assign = next_token;
- assign.first = name;
- spaces();
- advance('=');
- spaces();
- if (next_token.id === 'undefined') {
- warn('unnecessary_initialize', token, id);
- }
- if (peek(0).id === '=' && next_token.identifier) {
- stop('var_a_not');
- }
- assign.second = expression(0);
- assign.arity = 'infix';
- this.first.push(assign);
- } else {
- this.first.push(name);
- }
- if (funct[id] === 'becoming') {
- funct[id] = 'unused';
- }
- if (next_token.id !== ',') {
- break;
- }
- comma();
- indent.wrap = false;
- if (var_mode && next_token.line === token.line &&
- this.first.length === 1) {
- var_mode = null;
- indent.open = false;
- indent.at -= option.indent;
- }
- spaces();
- edge();
- }
- var_mode = null;
- step_out();
- return this;
- });
-
- stmt('function', function () {
- one_space();
- if (in_block) {
- warn('function_block', token);
- }
- var name = next_token, id = identifier();
- add_label(name, 'unction');
- no_space();
- this.arity = 'statement';
- do_function(this, id);
- if (next_token.id === '(' && next_token.line === token.line) {
- stop('function_statement');
- }
- return this;
- });
-
- prefix('function', function () {
- one_space();
- var id = optional_identifier();
- if (id) {
- no_space();
- } else {
- id = '';
- }
- do_function(this, id);
- if (funct['(loopage)']) {
- warn('function_loop');
- }
- this.arity = 'function';
- return this;
- });
-
- stmt('if', function () {
- var paren = next_token;
- one_space();
- advance('(');
- step_in('control');
- no_space();
- edge();
- this.arity = 'statement';
- this.first = expected_condition(expected_relation(expression(0)));
- no_space();
- step_out(')', paren);
- one_space();
- this.block = block(true);
- if (next_token.id === 'else') {
- one_space();
- advance('else');
- one_space();
- this['else'] = next_token.id === 'if' || next_token.id === 'switch'
- ? statement(true)
- : block(true);
- if (this['else'].disrupt && this.block.disrupt) {
- this.disrupt = true;
- }
- }
- return this;
- });
-
- stmt('try', function () {
-
-// try.first The catch variable
-// try.second The catch clause
-// try.third The finally clause
-// try.block The try block
-
- var exception_variable, old_scope, paren;
- if (option.adsafe) {
- warn('adsafe_a', this);
- }
- one_space();
- this.arity = 'statement';
- this.block = block(false);
- if (next_token.id === 'catch') {
- one_space();
- advance('catch');
- one_space();
- paren = next_token;
- advance('(');
- step_in('control');
- no_space();
- edge();
- old_scope = scope;
- scope = Object.create(old_scope);
- exception_variable = next_token.string;
- this.first = exception_variable;
- if (!next_token.identifier) {
- warn('expected_identifier_a', next_token);
- } else {
- add_label(next_token, 'exception');
- }
- advance();
- no_space();
- step_out(')', paren);
- one_space();
- this.second = block(false);
- scope = old_scope;
- }
- if (next_token.id === 'finally') {
- one_space();
- advance('finally');
- one_space();
- this.third = block(false);
- } else if (!this.second) {
- stop('expected_a_b', next_token, 'catch', artifact());
- }
- return this;
- });
-
- labeled_stmt('while', function () {
- one_space();
- var paren = next_token;
- funct['(breakage)'] += 1;
- funct['(loopage)'] += 1;
- advance('(');
- step_in('control');
- no_space();
- edge();
- this.arity = 'statement';
- this.first = expected_relation(expression(0));
- if (this.first.id !== 'true') {
- expected_condition(this.first, bundle.unexpected_a);
- }
- no_space();
- step_out(')', paren);
- one_space();
- this.block = block(true);
- if (this.block.disrupt) {
- warn('strange_loop', prev_token);
- }
- funct['(breakage)'] -= 1;
- funct['(loopage)'] -= 1;
- return this;
- });
-
- reserve('with');
-
- labeled_stmt('switch', function () {
-
-// switch.first the switch expression
-// switch.second the array of cases. A case is 'case' or 'default' token:
-// case.first the array of case expressions
-// case.second the array of statements
-// If all of the arrays of statements are disrupt, then the switch is disrupt.
-
- var cases = [],
- old_in_block = in_block,
- particular,
- the_case = next_token,
- unbroken = true;
-
- function find_duplicate_case(value) {
- if (are_similar(particular, value)) {
- warn('duplicate_a', value);
- }
- }
-
- funct['(breakage)'] += 1;
- one_space();
- advance('(');
- no_space();
- step_in();
- this.arity = 'statement';
- this.first = expected_condition(expected_relation(expression(0)));
- no_space();
- step_out(')', the_case);
- one_space();
- advance('{');
- step_in();
- in_block = true;
- this.second = [];
- while (next_token.id === 'case') {
- the_case = next_token;
- cases.forEach(find_duplicate_case);
- the_case.first = [];
- the_case.arity = 'case';
- spaces();
- edge('case');
- advance('case');
- for (;;) {
- one_space();
- particular = expression(0);
- cases.forEach(find_duplicate_case);
- cases.push(particular);
- the_case.first.push(particular);
- if (particular.id === 'NaN') {
- warn('unexpected_a', particular);
- }
- no_space_only();
- advance(':');
- if (next_token.id !== 'case') {
- break;
- }
- spaces();
- edge('case');
- advance('case');
- }
- spaces();
- the_case.second = statements();
- if (the_case.second && the_case.second.length > 0) {
- particular = the_case.second[the_case.second.length - 1];
- if (particular.disrupt) {
- if (particular.id === 'break') {
- unbroken = false;
- }
- } else {
- warn('missing_a_after_b', next_token, 'break', 'case');
- }
- } else {
- warn('empty_case');
- }
- this.second.push(the_case);
- }
- if (this.second.length === 0) {
- warn('missing_a', next_token, 'case');
- }
- if (next_token.id === 'default') {
- spaces();
- the_case = next_token;
- the_case.arity = 'case';
- edge('case');
- advance('default');
- no_space_only();
- advance(':');
- spaces();
- the_case.second = statements();
- if (the_case.second && the_case.second.length > 0) {
- particular = the_case.second[the_case.second.length - 1];
- if (unbroken && particular.disrupt && particular.id !== 'break') {
- this.disrupt = true;
- }
- }
- this.second.push(the_case);
- }
- funct['(breakage)'] -= 1;
- spaces();
- step_out('}', this);
- in_block = old_in_block;
- return this;
- });
-
- stmt('debugger', function () {
- if (!option.debug) {
- warn('unexpected_a', this);
- }
- this.arity = 'statement';
- return this;
- });
-
- labeled_stmt('do', function () {
- funct['(breakage)'] += 1;
- funct['(loopage)'] += 1;
- one_space();
- this.arity = 'statement';
- this.block = block(true);
- if (this.block.disrupt) {
- warn('strange_loop', prev_token);
- }
- one_space();
- advance('while');
- var paren = next_token;
- one_space();
- advance('(');
- step_in();
- no_space();
- edge();
- this.first = expected_condition(expected_relation(expression(0)), bundle.unexpected_a);
- no_space();
- step_out(')', paren);
- funct['(breakage)'] -= 1;
- funct['(loopage)'] -= 1;
- return this;
- });
-
- labeled_stmt('for', function () {
-
- var blok, filter, ok = false, paren = next_token, value;
- this.arity = 'statement';
- funct['(breakage)'] += 1;
- funct['(loopage)'] += 1;
- advance('(');
- if (next_token.id === ';') {
- no_space();
- advance(';');
- no_space();
- advance(';');
- no_space();
- advance(')');
- blok = block(true);
- } else {
- step_in('control');
- spaces(this, paren);
- no_space();
- if (next_token.id === 'var') {
- stop('move_var');
- }
- edge();
- if (peek(0).id === 'in') {
- this.forin = true;
- value = next_token;
- switch (funct[value.string]) {
- case 'unused':
- funct[value.string] = 'var';
- break;
- case 'closure':
- case 'var':
- break;
- default:
- warn('bad_in_a', value);
- }
- advance();
- advance('in');
- this.first = value;
- this.second = expression(20);
- step_out(')', paren);
- blok = block(true);
- if (!option.forin) {
- if (blok.length === 1 && typeof blok[0] === 'object' &&
- blok[0].string === 'if' && !blok[0]['else']) {
- filter = blok[0].first;
- while (filter.id === '&&') {
- filter = filter.first;
- }
- switch (filter.id) {
- case '===':
- case '!==':
- ok = filter.first.id === '['
- ? filter.first.first.string === this.second.string &&
- filter.first.second.string === this.first.string
- : filter.first.id === 'typeof' &&
- filter.first.first.id === '[' &&
- filter.first.first.first.string === this.second.string &&
- filter.first.first.second.string === this.first.string;
- break;
- case '(':
- ok = filter.first.id === '.' && ((
- filter.first.first.string === this.second.string &&
- filter.first.second.string === 'hasOwnProperty' &&
- filter.second[0].string === this.first.string
- ) || (
- filter.first.first.string === 'ADSAFE' &&
- filter.first.second.string === 'has' &&
- filter.second[0].string === this.second.string &&
- filter.second[1].string === this.first.string
- ) || (
- filter.first.first.id === '.' &&
- filter.first.first.first.id === '.' &&
- filter.first.first.first.first.string === 'Object' &&
- filter.first.first.first.second.string === 'prototype' &&
- filter.first.first.second.string === 'hasOwnProperty' &&
- filter.first.second.string === 'call' &&
- filter.second[0].string === this.second.string &&
- filter.second[1].string === this.first.string
- ));
- break;
- }
- }
- if (!ok) {
- warn('for_if', this);
- }
- }
- } else {
- edge();
- this.first = [];
- for (;;) {
- this.first.push(expression(0, 'for'));
- if (next_token.id !== ',') {
- break;
- }
- comma();
- }
- semicolon();
- edge();
- this.second = expected_relation(expression(0));
- if (this.second.id !== 'true') {
- expected_condition(this.second, bundle.unexpected_a);
- }
- semicolon(token);
- if (next_token.id === ';') {
- stop('expected_a_b', next_token, ')', ';');
- }
- this.third = [];
- edge();
- for (;;) {
- this.third.push(expression(0, 'for'));
- if (next_token.id !== ',') {
- break;
- }
- comma();
- }
- no_space();
- step_out(')', paren);
- one_space();
- blok = block(true);
- }
- }
- if (blok.disrupt) {
- warn('strange_loop', prev_token);
- }
- this.block = blok;
- funct['(breakage)'] -= 1;
- funct['(loopage)'] -= 1;
- return this;
- });
-
- disrupt_stmt('break', function () {
- var label = next_token.string;
- this.arity = 'statement';
- if (funct['(breakage)'] === 0) {
- warn('unexpected_a', this);
- }
- if (next_token.identifier && token.line === next_token.line) {
- one_space_only();
- if (funct[label] !== 'label') {
- warn('not_a_label', next_token);
- } else if (scope[label].funct !== funct) {
- warn('not_a_scope', next_token);
- }
- this.first = next_token;
- advance();
- }
- return this;
- });
-
- disrupt_stmt('continue', function () {
- if (!option['continue']) {
- warn('unexpected_a', this);
- }
- var label = next_token.string;
- this.arity = 'statement';
- if (funct['(breakage)'] === 0) {
- warn('unexpected_a', this);
- }
- if (next_token.identifier && token.line === next_token.line) {
- one_space_only();
- if (funct[label] !== 'label') {
- warn('not_a_label', next_token);
- } else if (scope[label].funct !== funct) {
- warn('not_a_scope', next_token);
- }
- this.first = next_token;
- advance();
- }
- return this;
- });
-
- disrupt_stmt('return', function () {
- if (funct === global_funct) {
- warn('unexpected_a', this);
- }
- this.arity = 'statement';
- if (next_token.id !== ';' && next_token.line === token.line) {
- one_space_only();
- if (next_token.id === '/' || next_token.id === '(regexp)') {
- warn('wrap_regexp');
- }
- this.first = expression(20);
- }
- return this;
- });
-
- disrupt_stmt('throw', function () {
- this.arity = 'statement';
- one_space_only();
- this.first = expression(20);
- return this;
- });
-
-
-// Superfluous reserved words
-
- reserve('class');
- reserve('const');
- reserve('enum');
- reserve('export');
- reserve('extends');
- reserve('import');
- reserve('super');
-
-// Harmony reserved words
-
- reserve('implements');
- reserve('interface');
- reserve('let');
- reserve('package');
- reserve('private');
- reserve('protected');
- reserve('public');
- reserve('static');
- reserve('yield');
-
-
-// Type inference
-
-// function get_type(one) {
-// var type;
-// if (typeof one === 'string') {
-// return one;
-// } else if (one.type) {
-// return one.type;
-// } else if (one.id === '.') {
-// type = property_type[one.second.string];
-// return typeof type === 'string' ? type : '';
-// } else {
-// return ((one.identifier && scope[one.string]) || one).type;
-// }
-// }
-
-
-// function match_type(one_type, two_type, one, two) {
-// if (one_type === two_type) {
-// return true;
-// } else {
-// if (!funct.confusion && !two.warn) {
-// if (typeof one !== 'string') {
-// if (one.id === '.') {
-// one_type = '.' + one.second.string + ': ' + one_type;
-// } else {
-// one_type = one.string + ': ' + one_type;
-// }
-// }
-// if (two.id === '.') {
-// two_type = '.' + two.second.string + ': ' + one_type;
-// } else {
-// two_type = two.string + ': ' + one_type;
-// }
-// warn('type_confusion_a_b', two, one_type, two_type);
-// two.warn = true;
-// }
-// return false;
-// }
-// }
-
-
-// function conform(one, two) {
-//
-// // The conform function takes a type string and a token, or two tokens.
-//
-// var one_type = typeof one === 'string' ? one : one.type,
-// two_type = two.type,
-// two_thing;
-//
-// // If both tokens already have a type, and if they match, then we are done.
-// // Once a token has a type, it is locked. Neither token will change, but if
-// // they do not match, there will be a warning.
-//
-// if (one_type) {
-// if (two_type) {
-// match_type(one_type, two_type, one, two);
-// } else {
-//
-// // two does not have a type, so look deeper. If two is a variable or property,
-// // then use its type if it has one, and make the deep type one's type if it
-// // doesn't. If the type was *, or if there was a mismatch, don't change the
-// // deep type.
-//
-// two_thing = two.id === '(identifier)'
-// ? scope[two.string]
-// : two.id === '.'
-// ? property_type[two.second.string]
-// : null;
-// if (two_thing) {
-// two_type = two_thing.type;
-// if (two_type) {
-// if (two_type !== '*') {
-// if (!match_type(one_type, two_type, one, two)) {
-// return '';
-// }
-// }
-// } else {
-// two_thing.type = one_type;
-// }
-// }
-//
-// // In any case, we give two a type.
-//
-// two.type = one_type;
-// type_state_change = true;
-// return one_type;
-// }
-//
-// // one does not have a type, but two does, so do the old switcheroo.
-//
-// } else {
-// if (two_type) {
-// return conform(two, one);
-//
-// // Neither token has a type yet. So we have to look deeper to see if either
-// // is a variable or property.
-//
-// } else {
-// if (one.id === '(identifier)') {
-// one_type = scope[one.string].type;
-// if (one_type && one_type !== '*') {
-// one.type = one_type;
-// return conform(one, two);
-// }
-// } else if (one.id === '.') {
-// one_type = property_type[one.second.string];
-// if (one_type && one_type !== '*') {
-// one.type = scope[one.string].type;
-// return conform(one, two);
-// }
-// }
-// if (two.id === '(identifier)') {
-// two_type = scope[two.string].type;
-// if (two_type && two_type !== '*') {
-// two.type = two_type;
-// return conform(two, one);
-// }
-// } else if (two.id === '.') {
-// two_type = property_type[two.second.string];
-// if (two_type && two_type !== '*') {
-// two.type = scope[two.string].type;
-// return conform(two, one);
-// }
-// }
-// }
-// }
-//
-// // Return a falsy string if we were unable to determine the type of either token.
-//
-// return '';
-// }
-
-// function conform_array(type, array) {
-// array.forEach(function (item) {
-// return conform(type, item);
-// }, type);
-// }
-
-
-// function infer(node) {
-// if (Array.isArray(node)) {
-// node.forEach(infer);
-// } else {
-// switch (node.arity) {
-// case 'statement':
-// infer_statement[node.id](node);
-// break;
-// case 'infix':
-// infer(node.first);
-// infer(node.second);
-// switch (node.id) {
-// case '(':
-// conform('function', node.first);
-// break;
-// default:
-// stop('unfinished');
-// }
-// break;
-// case 'number':
-// case 'string':
-// case 'boolean':
-// break;
-// default:
-// stop('unfinished');
-// }
-// }
-// }
-
-
-// infer_statement = {
-// 'var': function (node) {
-// var i, item, list = node.first;
-// for (i = 0; i < list.length; i += 1) {
-// item = list[i];
-// if (item.id === '=') {
-// infer(item.second);
-// conform(item.first, item.second);
-// conform(item.first, item);
-// }
-// }
-// },
-// 'for': function (node) {
-// infer(node.first);
-// infer(node.second);
-// if (node.forin) {
-// conform('string', node.first);
-// conform('object', node.second);
-// } else {
-// infer(node.third);
-// conform_array('number', node.first);
-// conform('boolean', node.second);
-// conform_array('number', node.third);
-// }
-// infer(node.block);
-// }
-// };
-
-
-// function infer_types(node) {
-// do {
-// funct = global_funct;
-// scope = global_scope;
-// type_state_change = false;
-// infer(node);
-// } while (type_state_change);
-// }
-
-
-// Parse JSON
-
- function json_value() {
-
- function json_object() {
- var brace = next_token, object = {};
- advance('{');
- if (next_token.id !== '}') {
- while (next_token.id !== '(end)') {
- while (next_token.id === ',') {
- warn('unexpected_a', next_token);
- advance(',');
- }
- if (next_token.id !== '(string)') {
- warn('expected_string_a');
- }
- if (object[next_token.string] === true) {
- warn('duplicate_a');
- } else if (next_token.string === '__proto__') {
- warn('dangling_a');
- } else {
- object[next_token.string] = true;
- }
- advance();
- advance(':');
- json_value();
- if (next_token.id !== ',') {
- break;
- }
- advance(',');
- if (next_token.id === '}') {
- warn('unexpected_a', token);
- break;
- }
- }
- }
- advance('}', brace);
- }
-
- function json_array() {
- var bracket = next_token;
- advance('[');
- if (next_token.id !== ']') {
- while (next_token.id !== '(end)') {
- while (next_token.id === ',') {
- warn('unexpected_a', next_token);
- advance(',');
- }
- json_value();
- if (next_token.id !== ',') {
- break;
- }
- advance(',');
- if (next_token.id === ']') {
- warn('unexpected_a', token);
- break;
- }
- }
- }
- advance(']', bracket);
- }
-
- switch (next_token.id) {
- case '{':
- json_object();
- break;
- case '[':
- json_array();
- break;
- case 'true':
- case 'false':
- case 'null':
- case '(number)':
- case '(string)':
- advance();
- break;
- case '-':
- advance('-');
- no_space_only();
- advance('(number)');
- break;
- default:
- stop('unexpected_a');
- }
- }
-
-
-// CSS parsing.
-
- function css_name() {
- if (next_token.identifier) {
- advance();
- return true;
- }
- }
-
-
- function css_number() {
- if (next_token.id === '-') {
- advance('-');
- no_space_only();
- }
- if (next_token.id === '(number)') {
- advance('(number)');
- return true;
- }
- }
-
-
- function css_string() {
- if (next_token.id === '(string)') {
- advance();
- return true;
- }
- }
-
- function css_color() {
- var i, number, paren, value;
- if (next_token.identifier) {
- value = next_token.string;
- if (value === 'rgb' || value === 'rgba') {
- advance();
- paren = next_token;
- advance('(');
- for (i = 0; i < 3; i += 1) {
- if (i) {
- comma();
- }
- number = next_token.number;
- if (next_token.id !== '(number)' || number < 0) {
- warn('expected_positive_a', next_token);
- advance();
- } else {
- advance();
- if (next_token.id === '%') {
- advance('%');
- if (number > 100) {
- warn('expected_percent_a', token, number);
- }
- } else {
- if (number > 255) {
- warn('expected_small_a', token, number);
- }
- }
- }
- }
- if (value === 'rgba') {
- comma();
- number = next_token.number;
- if (next_token.id !== '(number)' || number < 0 || number > 1) {
- warn('expected_fraction_a', next_token);
- }
- advance();
- if (next_token.id === '%') {
- warn('unexpected_a');
- advance('%');
- }
- }
- advance(')', paren);
- return true;
- } else if (css_colorData[next_token.string] === true) {
- advance();
- return true;
- }
- } else if (next_token.id === '(color)') {
- advance();
- return true;
- }
- return false;
- }
-
-
- function css_length() {
- if (next_token.id === '-') {
- advance('-');
- no_space_only();
- }
- if (next_token.id === '(number)') {
- advance();
- if (next_token.id !== '(string)' &&
- css_lengthData[next_token.string] === true) {
- no_space_only();
- advance();
- } else if (+token.number !== 0) {
- warn('expected_linear_a');
- }
- return true;
- }
- return false;
- }
-
-
- function css_line_height() {
- if (next_token.id === '-') {
- advance('-');
- no_space_only();
- }
- if (next_token.id === '(number)') {
- advance();
- if (next_token.id !== '(string)' &&
- css_lengthData[next_token.string] === true) {
- no_space_only();
- advance();
- }
- return true;
- }
- return false;
- }
-
-
- function css_width() {
- if (next_token.identifier) {
- switch (next_token.string) {
- case 'thin':
- case 'medium':
- case 'thick':
- advance();
- return true;
- }
- } else {
- return css_length();
- }
- }
-
-
- function css_margin() {
- if (next_token.identifier) {
- if (next_token.string === 'auto') {
- advance();
- return true;
- }
- } else {
- return css_length();
- }
- }
-
- function css_attr() {
- if (next_token.identifier && next_token.string === 'attr') {
- advance();
- advance('(');
- if (!next_token.identifier) {
- warn('expected_name_a');
- }
- advance();
- advance(')');
- return true;
- }
- return false;
- }
-
-
- function css_comma_list() {
- while (next_token.id !== ';') {
- if (!css_name() && !css_string()) {
- warn('expected_name_a');
- }
- if (next_token.id !== ',') {
- return true;
- }
- comma();
- }
- }
-
-
- function css_counter() {
- if (next_token.identifier && next_token.string === 'counter') {
- advance();
- advance('(');
- advance();
- if (next_token.id === ',') {
- comma();
- if (next_token.id !== '(string)') {
- warn('expected_string_a');
- }
- advance();
- }
- advance(')');
- return true;
- }
- if (next_token.identifier && next_token.string === 'counters') {
- advance();
- advance('(');
- if (!next_token.identifier) {
- warn('expected_name_a');
- }
- advance();
- if (next_token.id === ',') {
- comma();
- if (next_token.id !== '(string)') {
- warn('expected_string_a');
- }
- advance();
- }
- if (next_token.id === ',') {
- comma();
- if (next_token.id !== '(string)') {
- warn('expected_string_a');
- }
- advance();
- }
- advance(')');
- return true;
- }
- return false;
- }
-
-
- function css_radius() {
- return css_length() && (next_token.id !== '(number)' || css_length());
- }
-
-
- function css_shape() {
- var i;
- if (next_token.identifier && next_token.string === 'rect') {
- advance();
- advance('(');
- for (i = 0; i < 4; i += 1) {
- if (!css_length()) {
- warn('expected_number_a');
- break;
- }
- }
- advance(')');
- return true;
- }
- return false;
- }
-
-
- function css_url() {
- var c, url;
- if (next_token.identifier && next_token.string === 'url') {
- next_token = lex.range('(', ')');
- url = next_token.string;
- c = url.charAt(0);
- if (c === '"' || c === '\'') {
- if (url.slice(-1) !== c) {
- warn('bad_url_a');
- } else {
- url = url.slice(1, -1);
- if (url.indexOf(c) >= 0) {
- warn('bad_url_a');
- }
- }
- }
- if (!url) {
- warn('missing_url');
- }
- if (ux.test(url)) {
- stop('bad_url_a');
- }
- urls.push(url);
- advance();
- return true;
- }
- return false;
- }
-
-
- css_any = [css_url, function () {
- for (;;) {
- if (next_token.identifier) {
- switch (next_token.string.toLowerCase()) {
- case 'url':
- css_url();
- break;
- case 'expression':
- warn('unexpected_a');
- advance();
- break;
- default:
- advance();
- }
- } else {
- if (next_token.id === ';' || next_token.id === '!' ||
- next_token.id === '(end)' || next_token.id === '}') {
- return true;
- }
- advance();
- }
- }
- }];
-
-
- function font_face() {
- advance_identifier('font-family');
- advance(':');
- if (!css_name() && !css_string()) {
- stop('expected_name_a');
- }
- semicolon();
- advance_identifier('src');
- advance(':');
- while (true) {
- if (next_token.string === 'local') {
- advance_identifier('local');
- advance('(');
- if (ux.test(next_token.string)) {
- stop('bad_url_a');
- }
-
- if (!css_name() && !css_string()) {
- stop('expected_name_a');
- }
- advance(')');
- } else if (!css_url()) {
- stop('expected_a_b', next_token, 'url', artifact());
- }
- if (next_token.id !== ',') {
- break;
- }
- comma();
- }
- semicolon();
- }
-
-
- css_border_style = [
- 'none', 'dashed', 'dotted', 'double', 'groove',
- 'hidden', 'inset', 'outset', 'ridge', 'solid'
- ];
-
- css_break = [
- 'auto', 'always', 'avoid', 'left', 'right'
- ];
-
- css_media = {
- 'all': true,
- 'braille': true,
- 'embossed': true,
- 'handheld': true,
- 'print': true,
- 'projection': true,
- 'screen': true,
- 'speech': true,
- 'tty': true,
- 'tv': true
- };
-
- css_overflow = [
- 'auto', 'hidden', 'scroll', 'visible'
- ];
-
- css_attribute_data = {
- background: [
- true, 'background-attachment', 'background-color',
- 'background-image', 'background-position', 'background-repeat'
- ],
- 'background-attachment': ['scroll', 'fixed'],
- 'background-color': ['transparent', css_color],
- 'background-image': ['none', css_url],
- 'background-position': [
- 2, [css_length, 'top', 'bottom', 'left', 'right', 'center']
- ],
- 'background-repeat': [
- 'repeat', 'repeat-x', 'repeat-y', 'no-repeat'
- ],
- 'border': [true, 'border-color', 'border-style', 'border-width'],
- 'border-bottom': [
- true, 'border-bottom-color', 'border-bottom-style',
- 'border-bottom-width'
- ],
- 'border-bottom-color': css_color,
- 'border-bottom-left-radius': css_radius,
- 'border-bottom-right-radius': css_radius,
- 'border-bottom-style': css_border_style,
- 'border-bottom-width': css_width,
- 'border-collapse': ['collapse', 'separate'],
- 'border-color': ['transparent', 4, css_color],
- 'border-left': [
- true, 'border-left-color', 'border-left-style', 'border-left-width'
- ],
- 'border-left-color': css_color,
- 'border-left-style': css_border_style,
- 'border-left-width': css_width,
- 'border-radius': function () {
- function count(separator) {
- var n = 1;
- if (separator) {
- advance(separator);
- }
- if (!css_length()) {
- return false;
- }
- while (next_token.id === '(number)') {
- if (!css_length()) {
- return false;
- }
- n += 1;
- }
- if (n > 4) {
- warn('bad_style');
- }
- return true;
- }
-
- return count() && (next_token.id !== '/' || count('/'));
- },
- 'border-right': [
- true, 'border-right-color', 'border-right-style',
- 'border-right-width'
- ],
- 'border-right-color': css_color,
- 'border-right-style': css_border_style,
- 'border-right-width': css_width,
- 'border-spacing': [2, css_length],
- 'border-style': [4, css_border_style],
- 'border-top': [
- true, 'border-top-color', 'border-top-style', 'border-top-width'
- ],
- 'border-top-color': css_color,
- 'border-top-left-radius': css_radius,
- 'border-top-right-radius': css_radius,
- 'border-top-style': css_border_style,
- 'border-top-width': css_width,
- 'border-width': [4, css_width],
- bottom: [css_length, 'auto'],
- 'caption-side' : ['bottom', 'left', 'right', 'top'],
- clear: ['both', 'left', 'none', 'right'],
- clip: [css_shape, 'auto'],
- color: css_color,
- content: [
- 'open-quote', 'close-quote', 'no-open-quote', 'no-close-quote',
- css_string, css_url, css_counter, css_attr
- ],
- 'counter-increment': [
- css_name, 'none'
- ],
- 'counter-reset': [
- css_name, 'none'
- ],
- cursor: [
- css_url, 'auto', 'crosshair', 'default', 'e-resize', 'help', 'move',
- 'n-resize', 'ne-resize', 'nw-resize', 'pointer', 's-resize',
- 'se-resize', 'sw-resize', 'w-resize', 'text', 'wait'
- ],
- direction: ['ltr', 'rtl'],
- display: [
- 'block', 'compact', 'inline', 'inline-block', 'inline-table',
- 'list-item', 'marker', 'none', 'run-in', 'table', 'table-caption',
- 'table-cell', 'table-column', 'table-column-group',
- 'table-footer-group', 'table-header-group', 'table-row',
- 'table-row-group'
- ],
- 'empty-cells': ['show', 'hide'],
- 'float': ['left', 'none', 'right'],
- font: [
- 'caption', 'icon', 'menu', 'message-box', 'small-caption',
- 'status-bar', true, 'font-size', 'font-style', 'font-weight',
- 'font-family'
- ],
- 'font-family': css_comma_list,
- 'font-size': [
- 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large',
- 'xx-large', 'larger', 'smaller', css_length
- ],
- 'font-size-adjust': ['none', css_number],
- 'font-stretch': [
- 'normal', 'wider', 'narrower', 'ultra-condensed',
- 'extra-condensed', 'condensed', 'semi-condensed',
- 'semi-expanded', 'expanded', 'extra-expanded'
- ],
- 'font-style': [
- 'normal', 'italic', 'oblique'
- ],
- 'font-variant': [
- 'normal', 'small-caps'
- ],
- 'font-weight': [
- 'normal', 'bold', 'bolder', 'lighter', css_number
- ],
- height: [css_length, 'auto'],
- left: [css_length, 'auto'],
- 'letter-spacing': ['normal', css_length],
- 'line-height': ['normal', css_line_height],
- 'list-style': [
- true, 'list-style-image', 'list-style-position', 'list-style-type'
- ],
- 'list-style-image': ['none', css_url],
- 'list-style-position': ['inside', 'outside'],
- 'list-style-type': [
- 'circle', 'disc', 'square', 'decimal', 'decimal-leading-zero',
- 'lower-roman', 'upper-roman', 'lower-greek', 'lower-alpha',
- 'lower-latin', 'upper-alpha', 'upper-latin', 'hebrew', 'katakana',
- 'hiragana-iroha', 'katakana-oroha', 'none'
- ],
- margin: [4, css_margin],
- 'margin-bottom': css_margin,
- 'margin-left': css_margin,
- 'margin-right': css_margin,
- 'margin-top': css_margin,
- 'marker-offset': [css_length, 'auto'],
- 'max-height': [css_length, 'none'],
- 'max-width': [css_length, 'none'],
- 'min-height': css_length,
- 'min-width': css_length,
- opacity: css_number,
- outline: [true, 'outline-color', 'outline-style', 'outline-width'],
- 'outline-color': ['invert', css_color],
- 'outline-style': [
- 'dashed', 'dotted', 'double', 'groove', 'inset', 'none',
- 'outset', 'ridge', 'solid'
- ],
- 'outline-width': css_width,
- overflow: css_overflow,
- 'overflow-x': css_overflow,
- 'overflow-y': css_overflow,
- padding: [4, css_length],
- 'padding-bottom': css_length,
- 'padding-left': css_length,
- 'padding-right': css_length,
- 'padding-top': css_length,
- 'page-break-after': css_break,
- 'page-break-before': css_break,
- position: ['absolute', 'fixed', 'relative', 'static'],
- quotes: [8, css_string],
- right: [css_length, 'auto'],
- 'table-layout': ['auto', 'fixed'],
- 'text-align': ['center', 'justify', 'left', 'right'],
- 'text-decoration': [
- 'none', 'underline', 'overline', 'line-through', 'blink'
- ],
- 'text-indent': css_length,
- 'text-shadow': ['none', 4, [css_color, css_length]],
- 'text-transform': ['capitalize', 'uppercase', 'lowercase', 'none'],
- top: [css_length, 'auto'],
- 'unicode-bidi': ['normal', 'embed', 'bidi-override'],
- 'vertical-align': [
- 'baseline', 'bottom', 'sub', 'super', 'top', 'text-top', 'middle',
- 'text-bottom', css_length
- ],
- visibility: ['visible', 'hidden', 'collapse'],
- 'white-space': [
- 'normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'inherit'
- ],
- width: [css_length, 'auto'],
- 'word-spacing': ['normal', css_length],
- 'word-wrap': ['break-word', 'normal'],
- 'z-index': ['auto', css_number]
- };
-
- function style_attribute() {
- var v;
- while (next_token.id === '*' || next_token.id === '#' ||
- next_token.string === '_') {
- if (!option.css) {
- warn('unexpected_a');
- }
- advance();
- }
- if (next_token.id === '-') {
- if (!option.css) {
- warn('unexpected_a');
- }
- advance('-');
- if (!next_token.identifier) {
- warn('expected_nonstandard_style_attribute');
- }
- advance();
- return css_any;
- } else {
- if (!next_token.identifier) {
- warn('expected_style_attribute');
- } else {
- if (Object.prototype.hasOwnProperty.call(css_attribute_data,
- next_token.string)) {
- v = css_attribute_data[next_token.string];
- } else {
- v = css_any;
- if (!option.css) {
- warn('unrecognized_style_attribute_a');
- }
- }
- }
- advance();
- return v;
- }
- }
-
-
- function style_value(v) {
-
- /*jslint confusion: true */
-
- var i = 0,
- n,
- once,
- match,
- round,
- start = 0,
- vi;
- switch (typeof v) {
- case 'function':
- return v();
- case 'string':
- if (next_token.identifier && next_token.string === v) {
- advance();
- return true;
- }
- return false;
- }
- for (;;) {
- if (i >= v.length) {
- return false;
- }
- vi = v[i];
- i += 1;
- if (typeof vi === 'boolean') {
- break;
- } else if (typeof vi === 'number') {
- n = vi;
- vi = v[i];
- i += 1;
- } else {
- n = 1;
- }
- match = false;
- while (n > 0) {
- if (style_value(vi)) {
- match = true;
- n -= 1;
- } else {
- break;
- }
- }
- if (match) {
- return true;
- }
- }
- start = i;
- once = [];
- for (;;) {
- round = false;
- for (i = start; i < v.length; i += 1) {
- if (!once[i]) {
- if (style_value(css_attribute_data[v[i]])) {
- match = true;
- round = true;
- once[i] = true;
- break;
- }
- }
- }
- if (!round) {
- return match;
- }
- }
- }
-
- function style_child() {
- if (next_token.id === '(number)') {
- advance();
- if (next_token.string === 'n' && next_token.identifier) {
- no_space_only();
- advance();
- if (next_token.id === '+') {
- no_space_only();
- advance('+');
- no_space_only();
- advance('(number)');
- }
- }
- return;
- } else {
- if (next_token.identifier &&
- (next_token.string === 'odd' || next_token.string === 'even')) {
- advance();
- return;
- }
- }
- warn('unexpected_a');
- }
-
- function substyle() {
- var v;
- for (;;) {
- if (next_token.id === '}' || next_token.id === '(end)' ||
- (xquote && next_token.id === xquote)) {
- return;
- }
- v = style_attribute();
- advance(':');
- if (next_token.identifier && next_token.string === 'inherit') {
- advance();
- } else {
- if (!style_value(v)) {
- warn('unexpected_a');
- advance();
- }
- }
- if (next_token.id === '!') {
- advance('!');
- no_space_only();
- if (next_token.identifier && next_token.string === 'important') {
- advance();
- } else {
- warn('expected_a_b',
- next_token, 'important', artifact());
- }
- }
- if (next_token.id === '}' || next_token.id === xquote) {
- warn('expected_a_b', next_token, ';', artifact());
- } else {
- semicolon();
- }
- }
- }
-
- function style_selector() {
- if (next_token.identifier) {
- if (!Object.prototype.hasOwnProperty.call(html_tag, option.cap
- ? next_token.string.toLowerCase()
- : next_token.string)) {
- warn('expected_tagname_a');
- }
- advance();
- } else {
- switch (next_token.id) {
- case '>':
- case '+':
- advance();
- style_selector();
- break;
- case ':':
- advance(':');
- switch (next_token.string) {
- case 'active':
- case 'after':
- case 'before':
- case 'checked':
- case 'disabled':
- case 'empty':
- case 'enabled':
- case 'first-child':
- case 'first-letter':
- case 'first-line':
- case 'first-of-type':
- case 'focus':
- case 'hover':
- case 'last-child':
- case 'last-of-type':
- case 'link':
- case 'only-of-type':
- case 'root':
- case 'target':
- case 'visited':
- advance_identifier(next_token.string);
- break;
- case 'lang':
- advance_identifier('lang');
- advance('(');
- if (!next_token.identifier) {
- warn('expected_lang_a');
- }
- advance(')');
- break;
- case 'nth-child':
- case 'nth-last-child':
- case 'nth-last-of-type':
- case 'nth-of-type':
- advance_identifier(next_token.string);
- advance('(');
- style_child();
- advance(')');
- break;
- case 'not':
- advance_identifier('not');
- advance('(');
- if (next_token.id === ':' && peek(0).string === 'not') {
- warn('not');
- }
- style_selector();
- advance(')');
- break;
- default:
- warn('expected_pseudo_a');
- }
- break;
- case '#':
- advance('#');
- if (!next_token.identifier) {
- warn('expected_id_a');
- }
- advance();
- break;
- case '*':
- advance('*');
- break;
- case '.':
- advance('.');
- if (!next_token.identifier) {
- warn('expected_class_a');
- }
- advance();
- break;
- case '[':
- advance('[');
- if (!next_token.identifier) {
- warn('expected_attribute_a');
- }
- advance();
- if (next_token.id === '=' || next_token.string === '~=' ||
- next_token.string === '$=' ||
- next_token.string === '|=' ||
- next_token.id === '*=' ||
- next_token.id === '^=') {
- advance();
- if (next_token.id !== '(string)') {
- warn('expected_string_a');
- }
- advance();
- }
- advance(']');
- break;
- default:
- stop('expected_selector_a');
- }
- }
- }
-
- function style_pattern() {
- if (next_token.id === '{') {
- warn('expected_style_pattern');
- }
- for (;;) {
- style_selector();
- if (next_token.id === '</' || next_token.id === '{' ||
- next_token.id === '}' || next_token.id === '(end)') {
- return '';
- }
- if (next_token.id === ',') {
- comma();
- }
- }
- }
-
- function style_list() {
- while (next_token.id !== '}' && next_token.id !== '</' &&
- next_token.id !== '(end)') {
- style_pattern();
- xmode = 'styleproperty';
- if (next_token.id === ';') {
- semicolon();
- } else {
- advance('{');
- substyle();
- xmode = 'style';
- advance('}');
- }
- }
- }
-
- function styles() {
- var i;
- while (next_token.id === '@') {
- i = peek();
- advance('@');
- switch (next_token.string) {
- case 'import':
- advance_identifier('import');
- if (!css_url()) {
- warn('expected_a_b',
- next_token, 'url', artifact());
- advance();
- }
- semicolon();
- break;
- case 'media':
- advance_identifier('media');
- for (;;) {
- if (!next_token.identifier || css_media[next_token.string] !== true) {
- stop('expected_media_a');
- }
- advance();
- if (next_token.id !== ',') {
- break;
- }
- comma();
- }
- advance('{');
- style_list();
- advance('}');
- break;
- case 'font-face':
- advance_identifier('font-face');
- advance('{');
- font_face();
- advance('}');
- break;
- default:
- stop('expected_at_a');
- }
- }
- style_list();
- }
-
-
-// Parse HTML
-
- function do_begin(n) {
- if (n !== 'html' && !option.fragment) {
- if (n === 'div' && option.adsafe) {
- stop('adsafe_fragment');
- } else {
- stop('expected_a_b', token, 'html', n);
- }
- }
- if (option.adsafe) {
- if (n === 'html') {
- stop('adsafe_html', token);
- }
- if (option.fragment) {
- if (n !== 'div') {
- stop('adsafe_div', token);
- }
- } else {
- stop('adsafe_fragment', token);
- }
- }
- option.browser = true;
- }
-
- function do_attribute(a, v) {
- var u, x;
- if (a === 'id') {
- u = typeof v === 'string' ? v.toUpperCase() : '';
- if (ids[u] === true) {
- warn('duplicate_a', next_token, v);
- }
- if (!/^[A-Za-z][A-Za-z0-9._:\-]*$/.test(v)) {
- warn('bad_id_a', next_token, v);
- } else if (option.adsafe) {
- if (adsafe_id) {
- if (v.slice(0, adsafe_id.length) !== adsafe_id) {
- warn('adsafe_prefix_a', next_token, adsafe_id);
- } else if (!/^[A-Z]+_[A-Z]+$/.test(v)) {
- warn('adsafe_bad_id');
- }
- } else {
- adsafe_id = v;
- if (!/^[A-Z]+_$/.test(v)) {
- warn('adsafe_bad_id');
- }
- }
- }
- x = v.search(dx);
- if (x >= 0) {
- warn('unexpected_char_a_b', token, v.charAt(x), a);
- }
- ids[u] = true;
- } else if (a === 'class' || a === 'type' || a === 'name') {
- x = v.search(qx);
- if (x >= 0) {
- warn('unexpected_char_a_b', token, v.charAt(x), a);
- }
- ids[u] = true;
- } else if (a === 'href' || a === 'background' ||
- a === 'content' || a === 'data' ||
- a.indexOf('src') >= 0 || a.indexOf('url') >= 0) {
- if (option.safe && ux.test(v)) {
- stop('bad_url_a', next_token, v);
- }
- urls.push(v);
- } else if (a === 'for') {
- if (option.adsafe) {
- if (adsafe_id) {
- if (v.slice(0, adsafe_id.length) !== adsafe_id) {
- warn('adsafe_prefix_a', next_token, adsafe_id);
- } else if (!/^[A-Z]+_[A-Z]+$/.test(v)) {
- warn('adsafe_bad_id');
- }
- } else {
- warn('adsafe_bad_id');
- }
- }
- } else if (a === 'name') {
- if (option.adsafe && v.indexOf('_') >= 0) {
- warn('adsafe_name_a', next_token, v);
- }
- }
- }
-
- function do_tag(name, attribute) {
- var i, tag = html_tag[name], script, x;
- src = false;
- if (!tag) {
- stop(
- bundle.unrecognized_tag_a,
- next_token,
- name === name.toLowerCase()
- ? name
- : name + ' (capitalization error)'
- );
- }
- if (stack.length > 0) {
- if (name === 'html') {
- stop('unexpected_a', token, name);
- }
- x = tag.parent;
- if (x) {
- if (x.indexOf(' ' + stack[stack.length - 1].name + ' ') < 0) {
- stop('tag_a_in_b', token, name, x);
- }
- } else if (!option.adsafe && !option.fragment) {
- i = stack.length;
- do {
- if (i <= 0) {
- stop('tag_a_in_b', token, name, 'body');
- }
- i -= 1;
- } while (stack[i].name !== 'body');
- }
- }
- switch (name) {
- case 'div':
- if (option.adsafe && stack.length === 1 && !adsafe_id) {
- warn('adsafe_missing_id');
- }
- break;
- case 'script':
- xmode = 'script';
- advance('>');
- if (attribute.lang) {
- warn('lang', token);
- }
- if (option.adsafe && stack.length !== 1) {
- warn('adsafe_placement', token);
- }
- if (attribute.src) {
- if (option.adsafe && (!adsafe_may || !approved[attribute.src])) {
- warn('adsafe_source', token);
- }
- if (attribute.type) {
- warn('type', token);
- }
- } else {
- step_in(next_token.from);
- edge();
- use_strict();
- adsafe_top = true;
- script = statements();
-
-// JSLint is also the static analyzer for ADsafe. See www.ADsafe.org.
-
- if (option.adsafe) {
- if (adsafe_went) {
- stop('adsafe_script', token);
- }
- if (script.length !== 1 ||
- aint(script[0], 'id', '(') ||
- aint(script[0].first, 'id', '.') ||
- aint(script[0].first.first, 'string', 'ADSAFE') ||
- aint(script[0].second[0], 'string', adsafe_id)) {
- stop('adsafe_id_go');
- }
- switch (script[0].first.second.string) {
- case 'id':
- if (adsafe_may || adsafe_went ||
- script[0].second.length !== 1) {
- stop('adsafe_id', next_token);
- }
- adsafe_may = true;
- break;
- case 'go':
- if (adsafe_went) {
- stop('adsafe_go');
- }
- if (script[0].second.length !== 2 ||
- aint(script[0].second[1], 'id', 'function') ||
- !script[0].second[1].first ||
- script[0].second[1].first.length !== 2 ||
- aint(script[0].second[1].first[0], 'string', 'dom') ||
- aint(script[0].second[1].first[1], 'string', 'lib')) {
- stop('adsafe_go', next_token);
- }
- adsafe_went = true;
- break;
- default:
- stop('adsafe_id_go');
- }
- }
- indent = null;
- }
- xmode = 'html';
- advance('</');
- advance_identifier('script');
- xmode = 'outer';
- break;
- case 'style':
- xmode = 'style';
- advance('>');
- styles();
- xmode = 'html';
- advance('</');
- advance_identifier('style');
- break;
- case 'input':
- switch (attribute.type) {
- case 'button':
- case 'checkbox':
- case 'radio':
- case 'reset':
- case 'submit':
- break;
- case 'file':
- case 'hidden':
- case 'image':
- case 'password':
- case 'text':
- if (option.adsafe && attribute.autocomplete !== 'off') {
- warn('adsafe_autocomplete');
- }
- break;
- default:
- warn('bad_type');
- }
- break;
- case 'applet':
- case 'body':
- case 'embed':
- case 'frame':
- case 'frameset':
- case 'head':
- case 'iframe':
- case 'noembed':
- case 'noframes':
- case 'object':
- case 'param':
- if (option.adsafe) {
- warn('adsafe_tag', next_token, name);
- }
- break;
- }
- }
-
-
- function closetag(name) {
- return '</' + name + '>';
- }
-
- function html() {
-
- /*jslint confusion: true */
-
- var attribute, attributes, is_empty, name, old_white = option.white,
- quote, tag_name, tag, wmode;
- xmode = 'html';
- xquote = '';
- stack = null;
- for (;;) {
- switch (next_token.string) {
- case '<':
- xmode = 'html';
- advance('<');
- attributes = {};
- tag_name = next_token;
- name = tag_name.string;
- advance_identifier(name);
- if (option.cap) {
- name = name.toLowerCase();
- }
- tag_name.name = name;
- if (!stack) {
- stack = [];
- do_begin(name);
- }
- tag = html_tag[name];
- if (typeof tag !== 'object') {
- stop('unrecognized_tag_a', tag_name, name);
- }
- is_empty = tag.empty;
- tag_name.type = name;
- for (;;) {
- if (next_token.id === '/') {
- advance('/');
- if (next_token.id !== '>') {
- warn('expected_a_b', next_token, '>', artifact());
- }
- break;
- }
- if (next_token.id && next_token.id.charAt(0) === '>') {
- break;
- }
- if (!next_token.identifier) {
- if (next_token.id === '(end)' || next_token.id === '(error)') {
- warn('expected_a_b', next_token, '>', artifact());
- }
- warn('bad_name_a');
- }
- option.white = false;
- spaces();
- attribute = next_token.string;
- option.white = old_white;
- advance();
- if (!option.cap && attribute !== attribute.toLowerCase()) {
- warn('attribute_case_a', token);
- }
- attribute = attribute.toLowerCase();
- xquote = '';
- if (Object.prototype.hasOwnProperty.call(attributes, attribute)) {
- warn('duplicate_a', token, attribute);
- }
- if (attribute.slice(0, 2) === 'on') {
- if (!option.on) {
- warn('html_handlers');
- }
- xmode = 'scriptstring';
- advance('=');
- quote = next_token.id;
- if (quote !== '"' && quote !== '\'') {
- stop('expected_a_b', next_token, '"', artifact());
- }
- xquote = quote;
- wmode = option.white;
- option.white = true;
- advance(quote);
- use_strict();
- statements();
- option.white = wmode;
- if (next_token.id !== quote) {
- stop('expected_a_b', next_token, quote, artifact());
- }
- xmode = 'html';
- xquote = '';
- advance(quote);
- tag = false;
- } else if (attribute === 'style') {
- xmode = 'scriptstring';
- advance('=');
- quote = next_token.id;
- if (quote !== '"' && quote !== '\'') {
- stop('expected_a_b', next_token, '"', artifact());
- }
- xmode = 'styleproperty';
- xquote = quote;
- advance(quote);
- substyle();
- xmode = 'html';
- xquote = '';
- advance(quote);
- tag = false;
- } else {
- if (next_token.id === '=') {
- advance('=');
- tag = next_token.string;
- if (!next_token.identifier &&
- next_token.id !== '"' &&
- next_token.id !== '\'' &&
- next_token.id !== '(string)' &&
- next_token.id !== '(string)' &&
- next_token.id !== '(color)') {
- warn('expected_attribute_value_a', token, attribute);
- }
- advance();
- } else {
- tag = true;
- }
- }
- attributes[attribute] = tag;
- do_attribute(attribute, tag);
- }
- do_tag(name, attributes);
- if (!is_empty) {
- stack.push(tag_name);
- }
- xmode = 'outer';
- advance('>');
- break;
- case '</':
- xmode = 'html';
- advance('</');
- if (!next_token.identifier) {
- warn('bad_name_a');
- }
- name = next_token.string;
- if (option.cap) {
- name = name.toLowerCase();
- }
- advance();
- if (!stack) {
- stop('unexpected_a', next_token, closetag(name));
- }
- tag_name = stack.pop();
- if (!tag_name) {
- stop('unexpected_a', next_token, closetag(name));
- }
- if (tag_name.name !== name) {
- stop('expected_a_b',
- next_token, closetag(tag_name.name), closetag(name));
- }
- if (next_token.id !== '>') {
- stop('expected_a_b', next_token, '>', artifact());
- }
- xmode = 'outer';
- advance('>');
- break;
- case '<!':
- if (option.safe) {
- warn('adsafe_a');
- }
- xmode = 'html';
- for (;;) {
- advance();
- if (next_token.id === '>' || next_token.id === '(end)') {
- break;
- }
- if (next_token.string.indexOf('--') >= 0) {
- stop('unexpected_a', next_token, '--');
- }
- if (next_token.string.indexOf('<') >= 0) {
- stop('unexpected_a', next_token, '<');
- }
- if (next_token.string.indexOf('>') >= 0) {
- stop('unexpected_a', next_token, '>');
- }
- }
- xmode = 'outer';
- advance('>');
- break;
- case '(end)':
- return;
- default:
- if (next_token.id === '(end)') {
- stop('missing_a', next_token,
- '</' + stack[stack.length - 1].string + '>');
- } else {
- advance();
- }
- }
- if (stack && stack.length === 0 && (option.adsafe ||
- !option.fragment || next_token.id === '(end)')) {
- break;
- }
- }
- if (next_token.id !== '(end)') {
- stop('unexpected_a');
- }
- }
-
-
-// The actual JSLINT function itself.
-
- itself = function JSLint(the_source, the_option) {
-
- var i, predef, tree;
- JSLINT.errors = [];
- JSLINT.tree = '';
- begin = prev_token = token = next_token =
- Object.create(syntax['(begin)']);
- predefined = {};
- add_to_predefined(standard);
- property_type = Object.create(standard_property_type);
- if (the_option) {
- option = Object.create(the_option);
- predef = option.predef;
- if (predef) {
- if (Array.isArray(predef)) {
- for (i = 0; i < predef.length; i += 1) {
- predefined[predef[i]] = true;
- }
- } else if (typeof predef === 'object') {
- add_to_predefined(predef);
- }
- }
- do_safe();
- } else {
- option = {};
- }
- option.indent = +option.indent || 4;
- option.maxerr = +option.maxerr || 50;
- adsafe_id = '';
- adsafe_may = adsafe_top = adsafe_went = false;
- approved = {};
- if (option.approved) {
- for (i = 0; i < option.approved.length; i += 1) {
- approved[option.approved[i]] = option.approved[i];
- }
- } else {
- approved.test = 'test';
- }
- tab = '';
- for (i = 0; i < option.indent; i += 1) {
- tab += ' ';
- }
- global_scope = scope = {};
- global_funct = funct = {
- '(scope)': scope,
- '(breakage)': 0,
- '(loopage)': 0
- };
- functions = [funct];
-
- comments_off = false;
- ids = {};
- in_block = false;
- indent = null;
- json_mode = false;
- lookahead = [];
- member = {};
- node_js = false;
- prereg = true;
- src = false;
- stack = null;
- strict_mode = false;
- urls = [];
- var_mode = null;
- warnings = 0;
- xmode = '';
- lex.init(the_source);
-
- assume();
-
- try {
- advance();
- if (next_token.id === '(number)') {
- stop('unexpected_a');
- } else if (next_token.string.charAt(0) === '<') {
- html();
- if (option.adsafe && !adsafe_went) {
- warn('adsafe_go', this);
- }
- } else {
- switch (next_token.id) {
- case '{':
- case '[':
- json_mode = true;
- json_value();
- break;
- case '@':
- case '*':
- case '#':
- case '.':
- case ':':
- xmode = 'style';
- advance();
- if (token.id !== '@' || !next_token.identifier ||
- next_token.string !== 'charset' || token.line !== 1 ||
- token.from !== 1) {
- stop('css');
- }
- advance();
- if (next_token.id !== '(string)' &&
- next_token.string !== 'UTF-8') {
- stop('css');
- }
- advance();
- semicolon();
- styles();
- break;
-
- default:
- if (option.adsafe && option.fragment) {
- stop('expected_a_b',
- next_token, '<div>', artifact());
- }
-
-// If the first token is a semicolon, ignore it. This is sometimes used when
-// files are intended to be appended to files that may be sloppy. A sloppy
-// file may be depending on semicolon insertion on its last line.
-
- step_in(1);
- if (next_token.id === ';' && !node_js) {
- semicolon();
- }
- adsafe_top = true;
- tree = statements();
- begin.first = tree;
- JSLINT.tree = begin;
- // infer_types(tree);
- if (option.adsafe && (tree.length !== 1 ||
- aint(tree[0], 'id', '(') ||
- aint(tree[0].first, 'id', '.') ||
- aint(tree[0].first.first, 'string', 'ADSAFE') ||
- aint(tree[0].first.second, 'string', 'lib') ||
- tree[0].second.length !== 2 ||
- tree[0].second[0].id !== '(string)' ||
- aint(tree[0].second[1], 'id', 'function'))) {
- stop('adsafe_lib');
- }
- if (tree.disrupt) {
- warn('weird_program', prev_token);
- }
- }
- }
- indent = null;
- advance('(end)');
- } catch (e) {
- if (e) { // `~
- JSLINT.errors.push({
- reason : e.message,
- line : e.line || next_token.line,
- character : e.character || next_token.from
- }, null);
- }
- }
- return JSLINT.errors.length === 0;
- };
-
-
-// Data summary.
-
- itself.data = function () {
- var data = {functions: []},
- function_data,
- globals,
- i,
- j,
- kind,
- members = [],
- name,
- the_function,
- undef = [],
- unused = [];
- if (itself.errors.length) {
- data.errors = itself.errors;
- }
-
- if (json_mode) {
- data.json = true;
- }
-
- if (urls.length > 0) {
- data.urls = urls;
- }
-
- globals = Object.keys(global_scope).filter(function (value) {
- return value.charAt(0) !== '(' && typeof standard[value] !== 'boolean';
- });
- if (globals.length > 0) {
- data.globals = globals;
- }
-
- for (i = 1; i < functions.length; i += 1) {
- the_function = functions[i];
- function_data = {};
- for (j = 0; j < functionicity.length; j += 1) {
- function_data[functionicity[j]] = [];
- }
- for (name in the_function) {
- if (Object.prototype.hasOwnProperty.call(the_function, name)) {
- if (name.charAt(0) !== '(') {
- kind = the_function[name];
- if (kind === 'unction' || kind === 'unparam') {
- kind = 'unused';
- }
- if (Array.isArray(function_data[kind])) {
- function_data[kind].push(name);
- if (kind === 'unused') {
- unused.push({
- name: name,
- line: the_function['(line)'],
- 'function': the_function['(name)']
- });
- } else if (kind === 'undef') {
- undef.push({
- name: name,
- line: the_function['(line)'],
- 'function': the_function['(name)']
- });
- }
- }
- }
- }
- }
- for (j = 0; j < functionicity.length; j += 1) {
- if (function_data[functionicity[j]].length === 0) {
- delete function_data[functionicity[j]];
- }
- }
- function_data.name = the_function['(name)'];
- function_data.params = the_function['(params)'];
- function_data.line = the_function['(line)'];
- function_data['(complexity)'] = the_function['(complexity)'];
- data.functions.push(function_data);
- }
-
- if (unused.length > 0) {
- data.unused = unused;
- }
- if (undef.length > 0) {
- data['undefined'] = undef;
- }
-
- members = [];
- for (name in member) {
- if (typeof member[name] === 'number') {
- data.member = member;
- break;
- }
- }
-
- return data;
- };
-
-
- itself.report = function (errors_only) {
- var data = itself.data(), err, evidence, i, italics, j, key, keys, length,
- mem = '', name, names, output = [], snippets, the_function, type,
- warning;
-
- function detail(h, value) {
- var comma_needed, singularity;
- if (Array.isArray(value)) {
- output.push('<div><i>' + h + '</i> ');
- value.sort().forEach(function (item) {
- if (item !== singularity) {
- singularity = item;
- output.push((comma_needed ? ', ' : '') + singularity);
- comma_needed = true;
- }
- });
- output.push('</div>');
- } else if (value) {
- output.push('<div><i>' + h + '</i> ' + value + '</div>');
- }
- }
-
- if (data.errors || data.unused || data['undefined']) {
- err = true;
- output.push('<div id=errors><i>Error:</i>');
- if (data.errors) {
- for (i = 0; i < data.errors.length; i += 1) {
- warning = data.errors[i];
- if (warning) {
- evidence = warning.evidence || '';
- output.push('<p>Problem' + (isFinite(warning.line)
- ? ' at line ' + String(warning.line) +
- ' character ' + String(warning.character)
- : '') +
- ': ' + warning.reason.entityify() +
- '</p><p class=evidence>' +
- (evidence && (evidence.length > 80
- ? evidence.slice(0, 77) + '...'
- : evidence).entityify()) + '</p>');
- }
- }
- }
-
- if (data['undefined']) {
- snippets = [];
- for (i = 0; i < data['undefined'].length; i += 1) {
- snippets[i] = '<code><u>' + data['undefined'][i].name + '</u></code> <i>' +
- String(data['undefined'][i].line) + ' </i> <small>' +
- data['undefined'][i]['function'] + '</small>';
- }
- output.push('<p><i>Undefined variable:</i> ' + snippets.join(', ') + '</p>');
- }
- if (data.unused) {
- snippets = [];
- for (i = 0; i < data.unused.length; i += 1) {
- snippets[i] = '<code><u>' + data.unused[i].name + '</u></code> <i>' +
- String(data.unused[i].line) + ' </i> <small>' +
- data.unused[i]['function'] + '</small>';
- }
- output.push('<p><i>Unused variable:</i> ' + snippets.join(', ') + '</p>');
- }
- if (data.json) {
- output.push('<p>JSON: bad.</p>');
- }
- output.push('</div>');
- }
-
- if (!errors_only) {
-
- output.push('<br><div id=functions>');
-
- if (data.urls) {
- detail("URLs<br>", data.urls, '<br>');
- }
-
- if (xmode === 'style') {
- output.push('<p>CSS.</p>');
- } else if (data.json && !err) {
- output.push('<p>JSON: good.</p>');
- } else if (data.globals) {
- output.push('<div><i>Global</i> ' +
- data.globals.sort().join(', ') + '</div>');
- } else {
- output.push('<div><i>No new global variables introduced.</i></div>');
- }
-
- for (i = 0; i < data.functions.length; i += 1) {
- the_function = data.functions[i];
- names = [];
- if (the_function.params) {
- for (j = 0; j < the_function.params.length; j += 1) {
- names[j] = the_function.params[j].string;
- }
- }
- output.push('<br><div class=function><i>' +
- String(the_function.line) + '</i> ' +
- the_function.name.entityify() +
- '(' + names.join(', ') + ')</div>');
- detail('<big><b>Undefined</b></big>', the_function['undefined']);
- detail('<big><b>Unused</b></big>', the_function.unused);
- detail('Closure', the_function.closure);
- detail('Variable', the_function['var']);
- detail('Exception', the_function.exception);
- detail('Outer', the_function.outer);
- detail('Global', the_function.global);
- detail('Label', the_function.label);
- detail('Complexity', the_function['(complexity)']);
- }
-
- if (data.member) {
- keys = Object.keys(data.member);
- if (keys.length) {
- keys = keys.sort();
- output.push('<br><pre id=properties>/*properties<br>');
- mem = ' ';
- italics = 0;
- j = 0;
- if (option.confusion) {
- for (i = 0; i < keys.length; i += 1) {
- key = keys[i];
- if (typeof standard_property_type[key] !== 'string') {
- name = ix.test(key)
- ? key
- : '\'' + key.entityify().replace(nx, sanitize) + '\'';
- if (data.member[key] === 1) {
- name = '<i>' + name + '</i>';
- italics += 1;
- j = 1;
- }
- if (i < keys.length - 1) {
- name += ', ';
- }
- if (mem.length + name.length - (italics * 7) > 80) {
- output.push(mem + '<br>');
- mem = ' ';
- italics = j;
- }
- mem += name;
- j = 0;
- }
- }
- } else {
- for (i = 0; i < keys.length; i += 1) {
- key = keys[i];
- type = property_type[key];
- if (typeof type !== 'string') {
- type = '';
- }
- if (standard_property_type[key] !== type) {
- name = ix.test(key)
- ? key
- : '\'' + key.entityify().replace(nx, sanitize) + '\'';
- length += name.length + 2;
- if (data.member[key] === 1) {
- name = '<i>' + name + '</i>';
- italics += 1;
- j = 1;
- }
- if (type) {
- name += ': ' + type;
- }
- if (i < keys.length - 1) {
- name += ', ';
- }
- if (mem.length + name.length - (italics * 7) > 80) {
- output.push(mem + '<br>');
- mem = ' ';
- italics = j;
- }
- mem += name;
- j = 0;
- }
- }
- }
- output.push(mem + '<br>*/</pre>');
- }
- output.push('</div>');
- }
- }
- return output.join('');
- };
- itself.jslint = itself;
-
- itself.edition = '2011-10-17';
-
- return itself;
-
-}());
\ No newline at end of file
Binary file sbin/res/rhino.jar has changed
--- a/src/js/header.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-
-/*
- *
- __ __ _ _ _ _
- | \/ | ___| |_ __ _ __| | __ _| |_ __ _ _ __ | | __ _ _ _ ___ _ __
- | |\/| |/ _ \ __/ _` |/ _` |/ _` | __/ _` | '_ \| |/ _` | | | |/ _ \ '__|
- | | | | __/ || (_| | (_| | (_| | || (_| | |_) | | (_| | |_| | __/ |
- |_| |_|\___|\__\__,_|\__,_|\__,_|\__\__,_| .__/|_|\__,_|\__, |\___|_|
- |_| |___/
-
- * Copyright 2010-2012 Institut de recherche et d'innovation
- * contributor(s) : Karim Hamidou, Samuel Huron, Raphael Velt, Thibaut Cavalie, Yves-Marie Haussonne, Nicolas Durand, Olivier Aubert
- *
- * contact@iri.centrepompidou.fr
- * http://www.iri.centrepompidou.fr
- *
- * This software is a computer program whose purpose is to show and add annotations on a video .
- * This software is governed by the CeCILL-C license under French law and
- * abiding by the rules of distribution of free software. You can use,
- * modify and/ or redistribute the software under the terms of the CeCILL-C
- * license as circulated by CEA, CNRS and INRIA at the following URL
- * "http://www.cecill.info".
- *
- * The fact that you are presently reading this means that you have had
- * knowledge of the CeCILL-C license and that you accept its terms.
-*/
--- a/src/js/html-player.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/html-player.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,6 +1,6 @@
/* HTML player, to be reused in a widget, or elsewhere */
-
-IriSP.htmlPlayer = function(media, jqselector, options) {
+import jQuery from "jquery";
+const htmlPlayer = function(media, jqselector, options) {
var opts = options || {},
videoURL = opts.video || media.video;
@@ -9,7 +9,7 @@
videoURL = opts.url_transform(videoURL);
}
- var videoEl = IriSP.jQuery('<video>');
+ var videoEl = jQuery('<video>');
videoEl.attr({
width : opts.width || undefined,
@@ -22,7 +22,7 @@
videoEl.attr("src",videoURL);
} else {
for (var i = 0; i < videoURL.length; i++) {
- var _srcNode = IriSP.jQuery('<source>');
+ var _srcNode = jQuery('<source>');
_srcNode.attr({
src: videoURL[i].src,
type: videoURL[i].type
@@ -31,7 +31,7 @@
}
}
if (opts.subtitle) {
- var _trackNode = IriSP.jQuery('<track>');
+ var _trackNode = jQuery('<track>');
_trackNode.attr({
label: "Subtitles",
kind: "subtitles",
@@ -147,3 +147,5 @@
};
});
};
+
+export default htmlPlayer;
--- a/src/js/iframe_embed/embedder.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/iframe_embed/embedder.js Wed Sep 04 17:32:50 2024 +0200
@@ -3,11 +3,7 @@
to the iframe url in the page url.
*/
-if (typeof IriSP === "undefined") {
- IriSP = {};
-}
-
-IriSP.iFrameUpdater = function(_frameId) {
+const iFrameUpdater = function(_frameId) {
var _frame = document.getElementById(_frameId),
_blocked = false,
@@ -34,3 +30,5 @@
window.setTimeout(_updater, 2000);
};
+
+export default iFrameUpdater;
--- a/src/js/init.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/init.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,19 +1,27 @@
/* Initialization of the namespace */
+import {$,jQuery} from 'jquery';
+window.$ = $;
+window.jQuery = jQuery;
+global.$ = $;
+global.jQuery = jQuery;
-if (typeof window.IriSP === "undefined") {
- window.IriSP = {
- VERSION: "0.3.2"
- };
-}
+import 'jquery-ui/dist/jquery-ui';
+
+import 'jquery-ui/dist/themes/base/jquery-ui.css';
+
+import _ from "lodash";
-if (typeof IriSP.jQuery === "undefined" && typeof window.jQuery !== "undefined") {
- var jvp = window.jQuery().jquery.split("."),
- jv = 100 * parseInt(jvp[0]) + parseInt(jvp[1]);
- if (jv > 170) {
- IriSP.jQuery = window.jQuery;
- }
-}
+const __APP_VERSION__ = "";
+
+const APP_VERSION = __APP_VERSION__;
-if (typeof IriSP._ === "undefined" && typeof window._ !== "undefined" && parseFloat(window._.VERSION) >= 1.4) {
- IriSP._ = window._;
-}
+const IriSP = {
+ VERSION: APP_VERSION,
+ jQuery: jQuery,
+ libFiles: { locations: {} },
+
+};
+
+window.IriSP = IriSP;
+
+export default IriSP;
--- a/src/js/model.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/model.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,837 +1,943 @@
-
/* js is where data is stored in a standard form, whatever the serializer */
//TODO: Separate Project-specific data from Source
+import _ from "lodash";
+import jQuery from "jquery";
-IriSP.Model = (function (ns) {
-
- function pad(n, x, b) {
- b = b || 10;
- var s = (x).toString(b);
- while (s.length < n) {
- s = "0" + s;
- }
- return s;
- }
-
- function rand16(n) {
- return pad(n, Math.floor(Math.random()*Math.pow(16,n)), 16);
+const Model = function (ns) {
+ function pad(n, x, b) {
+ b = b || 10;
+ var s = x.toString(b);
+ while (s.length < n) {
+ s = "0" + s;
}
-
- var uidbase = rand16(8) + "-" + rand16(4) + "-", uidincrement = Math.floor(Math.random()*0x10000);
-
- var charsub = [
- '[aáàâä]',
- '[cç]',
- '[eéèêë]',
- '[iíìîï]',
- '[oóòôö]',
- '[uùûü]'
- ];
-
- var removeChars = [
- String.fromCharCode(768), String.fromCharCode(769), String.fromCharCode(770), String.fromCharCode(771), String.fromCharCode(807),
- "{", "}", "(", ")", "[", "]", "【", "】", "、", "・", "‥", "。", "「", "」", "『", "』", "〜", ":", "!", "?", " ",
- ",", " ", ";", "(", ")", ".", "*", "+", "\\", "?", "|", "{", "}", "[", "]", "^", "#", "/"
- ];
-
-var Model = {},
- _SOURCE_STATUS_EMPTY = Model._SOURCE_STATUS_EMPTY = 0,
- _SOURCE_STATUS_WAITING = Model._SOURCE_STATUS_WAITING = 1,
- _SOURCE_STATUS_READY = Model._SOURCE_STATUS_READY = 2,
- extendPrototype = Model.extendPrototype = function(toClass, fromClass) {
- var fromP = fromClass.prototype,
- toP = toClass.prototype;
- for (var k in fromP) {
- if (fromP.hasOwnProperty(k)) {
- toP[k] = fromP[k];
- }
+ return s;
+ }
+
+ function rand16(n) {
+ return pad(n, Math.floor(Math.random() * Math.pow(16, n)), 16);
+ }
+
+ var uidbase = rand16(8) + "-" + rand16(4) + "-",
+ uidincrement = Math.floor(Math.random() * 0x10000);
+
+ var charsub = ["[aáàâä]", "[cç]", "[eéèêë]", "[iíìîï]", "[oóòôö]", "[uùûü]"];
+
+ var removeChars = [
+ String.fromCharCode(768),
+ String.fromCharCode(769),
+ String.fromCharCode(770),
+ String.fromCharCode(771),
+ String.fromCharCode(807),
+ "{",
+ "}",
+ "(",
+ ")",
+ "[",
+ "]",
+ "【",
+ "】",
+ "、",
+ "・",
+ "‥",
+ "。",
+ "「",
+ "」",
+ "『",
+ "』",
+ "〜",
+ ":",
+ "!",
+ "?",
+ " ",
+ ",",
+ " ",
+ ";",
+ "(",
+ ")",
+ ".",
+ "*",
+ "+",
+ "\\",
+ "?",
+ "|",
+ "{",
+ "}",
+ "[",
+ "]",
+ "^",
+ "#",
+ "/",
+ ];
+
+ var Model = {},
+ _SOURCE_STATUS_EMPTY = (Model._SOURCE_STATUS_EMPTY = 0),
+ _SOURCE_STATUS_WAITING = (Model._SOURCE_STATUS_WAITING = 1),
+ _SOURCE_STATUS_READY = (Model._SOURCE_STATUS_READY = 2),
+ extendPrototype = (Model.extendPrototype = function (toClass, fromClass) {
+ var fromP = fromClass.prototype,
+ toP = toClass.prototype;
+ for (var k in fromP) {
+ if (fromP.hasOwnProperty(k)) {
+ toP[k] = fromP[k];
}
- },
- getUID = Model.getUID = function() {
- return uidbase + pad(4, (++uidincrement % 0x10000), 16) + "-" + rand16(4) + "-" + rand16(6) + rand16(6);
- },
- isLocalURL = Model.isLocalURL = function(url) {
- var matches = url.match(/^(\w+:)\/\/([^/]+)/);
- if (matches) {
- return(matches[1] === document.location.protocol && matches[2] === document.location.host);
- }
- return true;
- },
- regexpFromTextOrArray = Model.regexpFromTextOrArray = function(_textOrArray, _testOnly, _iexact) {
- var _testOnly = _testOnly || false,
- _iexact = _iexact || false;
- function escapeText(_text) {
- return _text.replace(/([\\\*\+\?\|\{\[\}\]\(\)\^\$\.\#\/])/gm, '\\$1');
- }
- var _source =
- typeof _textOrArray === "string"
+ }
+ }),
+ getUID = (Model.getUID = function () {
+ return (
+ uidbase +
+ pad(4, ++uidincrement % 0x10000, 16) +
+ "-" +
+ rand16(4) +
+ "-" +
+ rand16(6) +
+ rand16(6)
+ );
+ }),
+ isLocalURL = (Model.isLocalURL = function (url) {
+ var matches = url.match(/^(\w+:)\/\/([^/]+)/);
+ if (matches) {
+ return (
+ matches[1] === document.location.protocol &&
+ matches[2] === document.location.host
+ );
+ }
+ return true;
+ }),
+ regexpFromTextOrArray = (Model.regexpFromTextOrArray = function (
+ _textOrArray,
+ _testOnly,
+ _iexact
+ ) {
+ var _testOnly = _testOnly || false,
+ _iexact = _iexact || false;
+ function escapeText(_text) {
+ return _text.replace(/([\\\*\+\?\|\{\[\}\]\(\)\^\$\.\#\/])/gm, "\\$1");
+ }
+ var _source =
+ typeof _textOrArray === "string"
? escapeText(_textOrArray)
- : ns._(_textOrArray).map(escapeText).join("|"),
- _flags = 'im';
- if (!_testOnly) {
- _source = '(' + _source + ')';
- _flags += 'g';
- }
- if (_iexact) {
- _source = '^' + _source + '$';
- }
- return new RegExp( _source, _flags);
- },
- fullTextRegexps = Model.fullTextRegexps = function(_text) {
- var remsrc = "[\\" + removeChars.join("\\") + "]",
- remrx = new RegExp(remsrc,"gm"),
- txt = _text.toLowerCase().replace(remrx,""),
- res = [],
- charsrx = ns._(charsub).map(function(c) {
- return new RegExp(c);
- }),
- src = "";
- for (var j = 0; j < txt.length; j++) {
- if (j) {
- src += remsrc + "*";
- }
- var l = txt[j];
- ns._(charsub).each(function(v, k) {
- l = l.replace(charsrx[k], v);
- });
- src += l;
+ : _(_textOrArray).map(escapeText).join("|"),
+ _flags = "im";
+ if (!_testOnly) {
+ _source = "(" + _source + ")";
+ _flags += "g";
+ }
+ if (_iexact) {
+ _source = "^" + _source + "$";
+ }
+ return new RegExp(_source, _flags);
+ }),
+ fullTextRegexps = (Model.fullTextRegexps = function (_text) {
+ var remsrc = "[\\" + removeChars.join("\\") + "]",
+ remrx = new RegExp(remsrc, "gm"),
+ txt = _text.toLowerCase().replace(remrx, ""),
+ res = [],
+ charsrx = _(charsub).map(function (c) {
+ return new RegExp(c);
+ }),
+ src = "";
+ for (var j = 0; j < txt.length; j++) {
+ if (j) {
+ src += remsrc + "*";
}
- return "(" + src + ")";
- },
- isoToDate = Model.isoToDate = function(_str) {
- // http://delete.me.uk/2005/03/iso8601.html
- var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
- var d = _str.match(new RegExp(regexp));
-
- var offset = 0;
- var date = new Date(d[1], 0, 1);
-
- if (d[3]) { date.setMonth(d[3] - 1); }
- if (d[5]) { date.setDate(d[5]); }
- if (d[7]) { date.setHours(d[7]); }
- if (d[8]) { date.setMinutes(d[8]); }
- if (d[10]) { date.setSeconds(d[10]); }
- if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
- if (d[14]) {
- offset = (Number(d[16]) * 60) + Number(d[17]);
- offset *= ((d[15] == '-') ? 1 : -1);
- }
-
- offset -= date.getTimezoneOffset();
- time = (Number(date) + (offset * 60 * 1000));
- var _res = new Date();
- _res.setTime(Number(time));
- return _res;
- },
- dateToIso = Model.dateToIso = function(_d) {
- var d = _d ? new Date(_d) : new Date();
- return d.getUTCFullYear()+'-'
- + pad(2, d.getUTCMonth()+1)+'-'
- + pad(2, d.getUTCDate())+'T'
- + pad(2, d.getUTCHours())+':'
- + pad(2, d.getUTCMinutes())+':'
- + pad(2, d.getUTCSeconds())+'Z' ;
- };
+ var l = txt[j];
+ _(charsub).each(function (v, k) {
+ l = l.replace(charsrx[k], v);
+ });
+ src += l;
+ }
+ return "(" + src + ")";
+ }),
+ isoToDate = (Model.isoToDate = function (_str) {
+ // http://delete.me.uk/2005/03/iso8601.html
+ var regexp =
+ "([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
+ var d = _str.match(new RegExp(regexp));
+
+ var offset = 0;
+ var date = new Date(d[1], 0, 1);
-/*
- * List is a class for a list of elements (e.g. annotations, medias, etc. that each have a distinct ID)
- */
-var List = Model.List = function(_directory) {
+ if (d[3]) {
+ date.setMonth(d[3] - 1);
+ }
+ if (d[5]) {
+ date.setDate(d[5]);
+ }
+ if (d[7]) {
+ date.setHours(d[7]);
+ }
+ if (d[8]) {
+ date.setMinutes(d[8]);
+ }
+ if (d[10]) {
+ date.setSeconds(d[10]);
+ }
+ if (d[12]) {
+ date.setMilliseconds(Number("0." + d[12]) * 1000);
+ }
+ if (d[14]) {
+ offset = Number(d[16]) * 60 + Number(d[17]);
+ offset *= d[15] == "-" ? 1 : -1;
+ }
+
+ offset -= date.getTimezoneOffset();
+ const time = Number(date) + offset * 60 * 1000;
+ var _res = new Date();
+ _res.setTime(Number(time));
+ return _res;
+ }),
+ dateToIso = (Model.dateToIso = function (_d) {
+ var d = _d ? new Date(_d) : new Date();
+ return (
+ d.getUTCFullYear() +
+ "-" +
+ pad(2, d.getUTCMonth() + 1) +
+ "-" +
+ pad(2, d.getUTCDate()) +
+ "T" +
+ pad(2, d.getUTCHours()) +
+ ":" +
+ pad(2, d.getUTCMinutes()) +
+ ":" +
+ pad(2, d.getUTCSeconds()) +
+ "Z"
+ );
+ });
+
+ /*
+ * List is a class for a list of elements (e.g. annotations, medias, etc. that each have a distinct ID)
+ */
+ var List = (Model.List = function (_directory) {
Array.call(this);
this.directory = _directory;
this.idIndex = [];
this.__events = {};
if (typeof _directory == "undefined") {
- console.trace();
- throw "Error : new List(directory): directory is undefined";
+ console.trace();
+ throw "Error : new List(directory): directory is undefined";
}
- var _this = this;
- this.on("clear-search", function() {
- _this.searching = false;
- _this.regexp = undefined;
- _this.forEach(function(_element) {
- _element.found = undefined;
- });
- _this.trigger("search-cleared");
+ var _this = this;
+ this.on("clear-search", function () {
+ _this.searching = false;
+ _this.regexp = undefined;
+ _this.forEach(function (_element) {
+ _element.found = undefined;
+ });
+ _this.trigger("search-cleared");
});
-};
+ });
-List.prototype = new Array();
+ List.prototype = new Array();
-List.prototype.hasId = function(_id) {
- return ns._(this.idIndex).include(_id);
-};
+ List.prototype.hasId = function (_id) {
+ return _(this.idIndex).includes(_id);
+ };
-/* On recent browsers, forEach and map are defined and do what we want.
- * Otherwise, we'll use the Underscore.js functions
- */
-if (typeof Array.prototype.forEach === "undefined") {
- List.prototype.forEach = function(_callback) {
- var _this = this;
- ns._(this).forEach(function(_value, _key) {
- _callback(_value, _key, _this);
- });
+ /* On recent browsers, forEach and map are defined and do what we want.
+ * Otherwise, we'll use the Underscore.js functions
+ */
+ if (typeof Array.prototype.forEach === "undefined") {
+ List.prototype.forEach = function (_callback) {
+ var _this = this;
+ _(this).forEach(function (_value, _key) {
+ _callback(_value, _key, _this);
+ });
};
-};
+ }
-if (typeof Array.prototype.map === "undefined") {
- List.prototype.map = function(_callback) {
- var _this = this;
- return ns._(this).map(function(_value, _key) {
- return _callback(_value, _key, _this);
- });
+ if (typeof Array.prototype.map === "undefined") {
+ List.prototype.map = function (_callback) {
+ var _this = this;
+ return _(this).map(function (_value, _key) {
+ return _callback(_value, _key, _this);
+ });
};
-};
+ }
-List.prototype.pluck = function(_key) {
- return this.map(function(_value) {
- return _value[_key];
+ List.prototype.pluck = function (_key) {
+ return this.map(function (_value) {
+ return _value[_key];
});
-};
+ };
-/* We override Array's filter function because it doesn't return an List
- */
-List.prototype.filter = function(_callback) {
+ /* We override Array's filter function because it doesn't return an List
+ */
+ List.prototype.filter = function (_callback) {
var _this = this,
- _res = new List(this.directory);
- _res.addElements(ns._(this).filter(function(_value, _key) {
+ _res = new List(this.directory);
+ _res.addElements(
+ _(this).filter(function (_value, _key) {
return _callback(_value, _key, _this);
- }));
+ })
+ );
return _res;
-};
+ };
-List.prototype.slice = function(_start, _end) {
+ List.prototype.slice = function (_start, _end) {
var _res = new List(this.directory);
_res.addElements(Array.prototype.slice.call(this, _start, _end));
return _res;
-};
+ };
-List.prototype.splice = function(_start, _end) {
+ List.prototype.splice = function (_start, _end) {
var _res = new List(this.directory);
_res.addElements(Array.prototype.splice.call(this, _start, _end));
this.idIndex.splice(_start, _end);
return _res;
-};
+ };
-/* Array has a sort function, but it's not as interesting as Underscore.js's sortBy
- * and won't return a new List
- */
-List.prototype.sortBy = function(_callback) {
+ /* Array has a sort function, but it's not as interesting as Underscore.js's sortBy
+ * and won't return a new List
+ */
+ List.prototype.sortBy = function (_callback) {
var _this = this,
- _res = new List(this.directory);
- _res.addElements(ns._(this).sortBy(function(_value, _key) {
+ _res = new List(this.directory);
+ _res.addElements(
+ _(this).sortBy(function (_value, _key) {
return _callback(_value, _key, _this);
- }));
+ })
+ );
return _res;
-};
+ };
-/* Title and Description are basic information for (almost) all element types,
- * here we can search by these criteria
- */
-List.prototype.searchByTitle = function(_text, _iexact) {
+ /* Title and Description are basic information for (almost) all element types,
+ * here we can search by these criteria
+ */
+ List.prototype.searchByTitle = function (_text, _iexact) {
var _iexact = _iexact || false,
- _rgxp = regexpFromTextOrArray(_text, true, _iexact);
- return this.filter(function(_element) {
- return _rgxp.test(_element.title);
+ _rgxp = regexpFromTextOrArray(_text, true, _iexact);
+ return this.filter(function (_element) {
+ return _rgxp.test(_element.title);
});
-};
+ };
-List.prototype.searchByDescription = function(_text, _iexact) {
+ List.prototype.searchByDescription = function (_text, _iexact) {
var _iexact = _iexact || false,
- _rgxp = regexpFromTextOrArray(_text, true, _iexact);
- return this.filter(function(_element) {
- return _rgxp.test(_element.description);
+ _rgxp = regexpFromTextOrArray(_text, true, _iexact);
+ return this.filter(function (_element) {
+ return _rgxp.test(_element.description);
});
-};
+ };
-List.prototype.searchByTextFields = function(_text, _iexact) {
+ List.prototype.searchByTextFields = function (_text, _iexact) {
var _iexact = _iexact || false,
- _rgxp = regexpFromTextOrArray(_text, true, _iexact);
- return this.filter(function(_element) {
- var keywords = (_element.keywords || _element.getTagTexts() || []).join(", ");
- return _rgxp.test(_element.description) || _rgxp.test(_element.title) || _rgxp.test(keywords);
+ _rgxp = regexpFromTextOrArray(_text, true, _iexact);
+ return this.filter(function (_element) {
+ var keywords = (_element.keywords || _element.getTagTexts() || []).join(
+ ", "
+ );
+ return (
+ _rgxp.test(_element.description) ||
+ _rgxp.test(_element.title) ||
+ _rgxp.test(keywords)
+ );
});
-};
+ };
-List.prototype.search = function(_text) {
+ List.prototype.search = function (_text) {
if (!_text) {
- this.trigger("clear-search");
- return this;
+ this.trigger("clear-search");
+ return this;
}
this.searching = true;
this.trigger("search", _text);
var rxsource = fullTextRegexps(_text),
- rgxp = new RegExp(rxsource,"im");
- this.regexp = new RegExp(rxsource,"gim");
- var res = this.filter(function(_element, _k) {
- var titlematch = rgxp.test(_element.title),
- descmatch = rgxp.test(_element.description),
- _isfound = !!(titlematch || descmatch);
- _element.found = _isfound;
- _element.trigger(_isfound ? "found" : "not-found");
- return _isfound;
+ rgxp = new RegExp(rxsource, "im");
+ this.regexp = new RegExp(rxsource, "gim");
+ var res = this.filter(function (_element, _k) {
+ var titlematch = rgxp.test(_element.title),
+ descmatch = rgxp.test(_element.description),
+ _isfound = !!(titlematch || descmatch);
+ _element.found = _isfound;
+ _element.trigger(_isfound ? "found" : "not-found");
+ return _isfound;
});
- this.trigger(res.length ? "found" : "not-found",res);
+ this.trigger(res.length ? "found" : "not-found", res);
return res;
-};
+ };
-List.prototype.searchByTags = function(_text) {
+ List.prototype.searchByTags = function (_text) {
if (!_text) {
- this.trigger("clear-search");
- return this;
+ this.trigger("clear-search");
+ return this;
}
this.searching = true;
this.trigger("search", _text);
var rxsource = fullTextRegexps(_text),
- rgxp = new RegExp(rxsource,"im");
- this.regexp = new RegExp(rxsource,"gim");
- var res = this.filter(function(_element, _k) {
- var _isfound = rgxp.test(_element.getTagTexts());
- _element.found = _isfound;
- _element.trigger(_isfound ? "found" : "not-found");
- return _isfound;
+ rgxp = new RegExp(rxsource, "im");
+ this.regexp = new RegExp(rxsource, "gim");
+ var res = this.filter(function (_element, _k) {
+ var _isfound = rgxp.test(_element.getTagTexts());
+ _element.found = _isfound;
+ _element.trigger(_isfound ? "found" : "not-found");
+ return _isfound;
});
- this.trigger(res.length ? "found" : "not-found",res);
+ this.trigger(res.length ? "found" : "not-found", res);
return res;
-};
+ };
-List.prototype.getTitles = function() {
- return this.map(function(_el) {
- return _el.title;
+ List.prototype.getTitles = function () {
+ return this.map(function (_el) {
+ return _el.title;
});
-};
+ };
-List.prototype.addId = function(_id) {
+ List.prototype.addId = function (_id) {
var _el = this.directory.getElement(_id);
if (!this.hasId(_id) && typeof _el !== "undefined") {
- this.idIndex.push(_id);
- Array.prototype.push.call(this, _el);
+ this.idIndex.push(_id);
+ Array.prototype.push.call(this, _el);
}
-};
+ };
-List.prototype.push = function(_el) {
+ List.prototype.push = function (_el) {
if (typeof _el === "undefined") {
- return;
+ return;
}
- var _index = (ns._(this.idIndex).indexOf(_el.id));
+ var _index = _(this.idIndex).indexOf(_el.id);
if (_index === -1) {
- this.idIndex.push(_el.id);
- Array.prototype.push.call(this, _el);
+ this.idIndex.push(_el.id);
+ Array.prototype.push.call(this, _el);
} else {
- this[_index] = _el;
+ this[_index] = _el;
}
-};
+ };
-List.prototype.addIds = function(_array) {
+ List.prototype.addIds = function (_array) {
var _l = _array.length,
- _this = this;
- ns._(_array).forEach(function(_id) {
- _this.addId(_id);
+ _this = this;
+ _(_array).forEach(function (_id) {
+ _this.addId(_id);
});
-};
+ };
-List.prototype.addElements = function(_array) {
+ List.prototype.addElements = function (_array) {
var _this = this;
- ns._(_array).forEach(function(_el) {
- _this.push(_el);
+ _(_array).forEach(function (_el) {
+ _this.push(_el);
});
-};
+ };
-List.prototype.removeId = function(_id, _deleteFromDirectory) {
+ List.prototype.removeId = function (_id, _deleteFromDirectory) {
var _deleteFromDirectory = _deleteFromDirectory || false,
- _index = (ns._(this.idIndex).indexOf(_id));
+ _index = _(this.idIndex).indexOf(_id);
if (_index !== -1) {
- this.splice(_index,1);
+ this.splice(_index, 1);
}
if (_deleteFromDirectory) {
- delete this.directory.elements[_id];
+ delete this.directory.elements[_id];
}
-};
+ };
-List.prototype.removeElement = function(_el, _deleteFromDirectory) {
+ List.prototype.removeElement = function (_el, _deleteFromDirectory) {
var _deleteFromDirectory = _deleteFromDirectory || false;
this.removeId(_el.id);
-};
+ };
-List.prototype.removeIds = function(_list, _deleteFromDirectory) {
+ List.prototype.removeIds = function (_list, _deleteFromDirectory) {
var _deleteFromDirectory = _deleteFromDirectory || false,
- _this = this;
- ns._(_list).forEach(function(_id) {
- _this.removeId(_id);
+ _this = this;
+ _(_list).forEach(function (_id) {
+ _this.removeId(_id);
});
-};
+ };
-List.prototype.removeElements = function(_list, _deleteFromDirectory) {
+ List.prototype.removeElements = function (_list, _deleteFromDirectory) {
var _deleteFromDirectory = _deleteFromDirectory || false,
- _this = this;
- ns._(_list).forEach(function(_el) {
- _this.removeElement(_el);
+ _this = this;
+ _(_list).forEach(function (_el) {
+ _this.removeElement(_el);
});
-};
+ };
-List.prototype.on = function(_event, _callback) {
+ List.prototype.on = function (_event, _callback) {
if (typeof this.__events[_event] === "undefined") {
- this.__events[_event] = [];
+ this.__events[_event] = [];
}
this.__events[_event].push(_callback);
-};
+ };
-List.prototype.off = function(_event, _callback) {
+ List.prototype.off = function (_event, _callback) {
if (typeof this.__events[_event] !== "undefined") {
- this.__events[_event] = ns._(this.__events[_event]).reject(function(_fn) {
- return _fn === _callback;
+ this.__events[_event] = ns
+ ._(this.__events[_event])
+ .reject(function (_fn) {
+ return _fn === _callback;
});
}
-};
+ };
-List.prototype.trigger = function(_event, _data) {
+ List.prototype.trigger = function (_event, _data) {
var _list = this;
- ns._(this.__events[_event]).each(function(_callback) {
- _callback.call(_list, _data);
+ _(this.__events[_event]).each(function (_callback) {
+ _callback.call(_list, _data);
});
-};
+ };
-/* A simple time management object, that helps converting millisecs to seconds and strings,
- * without the clumsiness of the original Date object.
- */
+ /* A simple time management object, that helps converting millisecs to seconds and strings,
+ * without the clumsiness of the original Date object.
+ */
-var Time = Model.Time = function(_milliseconds) {
+ var Time = (Model.Time = function (_milliseconds) {
this.milliseconds = 0;
this.setMilliseconds(_milliseconds);
-};
+ });
-Time.prototype.setMilliseconds = function(_milliseconds) {
+ Time.prototype.setMilliseconds = function (_milliseconds) {
var _ante = this.milliseconds;
- switch(typeof _milliseconds) {
- case "string":
- this.milliseconds = parseInt(_milliseconds);
- break;
- case "number":
- this.milliseconds = Math.floor(_milliseconds);
- break;
- case "object":
- this.milliseconds = parseInt(_milliseconds.valueOf());
- break;
- default:
- this.milliseconds = 0;
+ switch (typeof _milliseconds) {
+ case "string":
+ this.milliseconds = parseInt(_milliseconds);
+ break;
+ case "number":
+ this.milliseconds = Math.floor(_milliseconds);
+ break;
+ case "object":
+ this.milliseconds = parseInt(_milliseconds.valueOf());
+ break;
+ default:
+ this.milliseconds = 0;
}
if (this.milliseconds === NaN) {
- this.milliseconds = _ante;
+ this.milliseconds = _ante;
}
-};
+ };
-Time.prototype.setSeconds = function(_seconds) {
+ Time.prototype.setSeconds = function (_seconds) {
this.milliseconds = 1000 * _seconds;
-};
+ };
-Time.prototype.getSeconds = function() {
+ Time.prototype.getSeconds = function () {
return this.milliseconds / 1000;
-};
+ };
-Time.prototype.getHMS = function() {
+ Time.prototype.getHMS = function () {
var _totalSeconds = Math.abs(Math.floor(this.getSeconds()));
return {
- hours : Math.floor(_totalSeconds / 3600),
- minutes : (Math.floor(_totalSeconds / 60) % 60),
- seconds : _totalSeconds % 60,
- milliseconds: this.milliseconds % 1000
+ hours: Math.floor(_totalSeconds / 3600),
+ minutes: Math.floor(_totalSeconds / 60) % 60,
+ seconds: _totalSeconds % 60,
+ milliseconds: this.milliseconds % 1000,
};
-};
+ };
-Time.prototype.add = function(_milliseconds) {
+ Time.prototype.add = function (_milliseconds) {
this.milliseconds += new Time(_milliseconds).milliseconds;
-};
+ };
-Time.prototype.valueOf = function() {
+ Time.prototype.valueOf = function () {
return this.milliseconds;
-};
+ };
-Time.prototype.toString = function(showCs) {
+ Time.prototype.toString = function (showCs) {
var _hms = this.getHMS(),
- _res = '';
+ _res = "";
if (_hms.hours) {
- _res += _hms.hours + ':';
+ _res += _hms.hours + ":";
}
- _res += pad(2, _hms.minutes) + ':' + pad(2, _hms.seconds);
+ _res += pad(2, _hms.minutes) + ":" + pad(2, _hms.seconds);
if (showCs) {
- _res += "." + Math.floor(_hms.milliseconds / 100);
+ _res += "." + Math.floor(_hms.milliseconds / 100);
}
return _res;
-};
+ };
-/* Reference handles references between elements
- */
+ /* Reference handles references between elements
+ */
-var Reference = Model.Reference = function(_source, _idRef) {
+ var Reference = (Model.Reference = function (_source, _idRef) {
this.source = _source;
this.id = _idRef;
if (typeof _idRef === "object") {
- this.isList = true;
+ this.isList = true;
} else {
- this.isList = false;
+ this.isList = false;
}
this.refresh();
-};
+ });
-Reference.prototype.refresh = function() {
+ Reference.prototype.refresh = function () {
if (this.isList) {
- this.contents = new List(this.source.directory);
- this.contents.addIds(this.id);
+ this.contents = new List(this.source.directory);
+ this.contents.addIds(this.id);
} else {
- this.contents = this.source.getElement(this.id);
+ this.contents = this.source.getElement(this.id);
}
-
-};
+ };
-Reference.prototype.getContents = function() {
- if (typeof this.contents === "undefined" || (this.isList && this.contents.length != this.id.length)) {
- this.refresh();
+ Reference.prototype.getContents = function () {
+ if (
+ typeof this.contents === "undefined" ||
+ (this.isList && this.contents.length != this.id.length)
+ ) {
+ this.refresh();
}
return this.contents;
-};
+ };
-Reference.prototype.isOrHasId = function(_idRef) {
+ Reference.prototype.isOrHasId = function (_idRef) {
if (this.isList) {
- return (ns._(this.id).indexOf(_idRef) !== -1);
+ return _(this.id).indexOf(_idRef) !== -1;
} else {
- return (this.id == _idRef);
+ return this.id == _idRef;
}
-};
+ };
-/* */
+ /* */
-var BaseElement = Model.Element = function(_id, _source) {
- this.elementType = 'element';
+ var BaseElement = (Model.Element = function (_id, _source) {
+ this.elementType = "element";
this.title = "";
this.description = "";
this.__events = {};
if (typeof _source === "undefined") {
- return;
+ return;
}
if (typeof _id === "undefined" || !_id) {
- _id = getUID();
+ _id = getUID();
}
this.id = _id;
this.source = _source;
if (_source !== this) {
- this.source.directory.addElement(this);
+ this.source.directory.addElement(this);
}
-};
+ });
-BaseElement.prototype.toString = function() {
- return this.elementType + (this.elementType !== 'element' ? ', id=' + this.id + ', title="' + this.title + '"' : '');
-};
+ BaseElement.prototype.toString = function () {
+ return (
+ this.elementType +
+ (this.elementType !== "element"
+ ? ", id=" + this.id + ', title="' + this.title + '"'
+ : "")
+ );
+ };
-BaseElement.prototype.setReference = function(_elementType, _idRef) {
+ BaseElement.prototype.setReference = function (_elementType, _idRef) {
this[_elementType] = new Reference(this.source, _idRef);
-};
+ };
-BaseElement.prototype.getReference = function(_elementType) {
+ BaseElement.prototype.getReference = function (_elementType) {
if (typeof this[_elementType] !== "undefined") {
- return this[_elementType].getContents();
+ return this[_elementType].getContents();
}
-};
+ };
-BaseElement.prototype.getRelated = function(_elementType, _global) {
- _global = (typeof _global !== "undefined" && _global);
+ BaseElement.prototype.getRelated = function (_elementType, _global) {
+ _global = typeof _global !== "undefined" && _global;
var _this = this;
- return this.source.getList(_elementType, _global).filter(function(_el) {
- var _ref = _el[_this.elementType];
- return _ref && _ref.isOrHasId(_this.id);
+ return this.source.getList(_elementType, _global).filter(function (_el) {
+ var _ref = _el[_this.elementType];
+ return _ref && _ref.isOrHasId(_this.id);
});
-};
+ };
-BaseElement.prototype.on = function(_event, _callback) {
+ BaseElement.prototype.on = function (_event, _callback) {
if (typeof this.__events[_event] === "undefined") {
- this.__events[_event] = [];
+ this.__events[_event] = [];
}
this.__events[_event].push(_callback);
-};
+ };
-BaseElement.prototype.off = function(_event, _callback) {
+ BaseElement.prototype.off = function (_event, _callback) {
if (typeof this.__events[_event] !== "undefined") {
- this.__events[_event] = ns._(this.__events[_event]).reject(function(_fn) {
- return _fn === _callback;
- });
+ this.__events[_event] = _(this.__events[_event]).reject(function (_fn) {
+ return _fn === _callback;
+ });
}
-};
+ };
-BaseElement.prototype.trigger = function(_event, _data) {
+ BaseElement.prototype.trigger = function (_event, _data) {
var _element = this;
- ns._(this.__events[_event]).each(function(_callback) {
- _callback.call(_element, _data);
+ _(this.__events[_event]).each(function (_callback) {
+ _callback.call(_element, _data);
});
-};
+ };
-/* */
+ /* */
-var Playable = Model.Playable = function(_id, _source) {
+ var Playable = (Model.Playable = function (_id, _source) {
BaseElement.call(this, _id, _source);
if (typeof _source === "undefined") {
- return;
+ return;
}
- this.elementType = 'playable';
+ this.elementType = "playable";
this.currentTime = new Time();
- this.volume = .5;
+ this.volume = 0.5;
this.paused = true;
this.muted = false;
this.timeRange = false;
this.loadedMetadata = false;
var _this = this;
- this.on("play", function() {
- _this.paused = false;
+ this.on("play", function () {
+ _this.paused = false;
});
- this.on("pause", function() {
- _this.paused = true;
+ this.on("pause", function () {
+ _this.paused = true;
});
- this.on("timeupdate", function(_time) {
- _this.currentTime = _time;
- _this.getAnnotations().filter(function(_a) {
- return (_a.end <= _time || _a.begin > _time) && _a.playing;
- }).forEach(function(_a) {
- _a.playing = false;
- _a.trigger("leave");
- _this.trigger("leave-annotation",_a);
+ this.on("timeupdate", function (_time) {
+ _this.currentTime = _time;
+ _this
+ .getAnnotations()
+ .filter(function (_a) {
+ return (_a.end <= _time || _a.begin > _time) && _a.playing;
+ })
+ .forEach(function (_a) {
+ _a.playing = false;
+ _a.trigger("leave");
+ _this.trigger("leave-annotation", _a);
});
- _this.getAnnotations().filter(function(_a) {
- return _a.begin <= _time && _a.end > _time && !_a.playing;
- }).forEach(function(_a) {
- _a.playing = true;
- _a.trigger("enter");
- _this.trigger("enter-annotation",_a);
+ _this
+ .getAnnotations()
+ .filter(function (_a) {
+ return _a.begin <= _time && _a.end > _time && !_a.playing;
+ })
+ .forEach(function (_a) {
+ _a.playing = true;
+ _a.trigger("enter");
+ _this.trigger("enter-annotation", _a);
});
-
- if (_this.getTimeRange()){
- if (_this.getTimeRange()[0] > _time) {
- _this.pause();
- _this.setCurrentTime(_this.getTimeRange()[0]);
- }
- if (_this.getTimeRange()[1] < _time){
- _this.pause();
- _this.setCurrentTime(_this.getTimeRange()[1]);
- }
+
+ if (_this.getTimeRange()) {
+ if (_this.getTimeRange()[0] > _time) {
+ _this.pause();
+ _this.setCurrentTime(_this.getTimeRange()[0]);
}
-
+ if (_this.getTimeRange()[1] < _time) {
+ _this.pause();
+ _this.setCurrentTime(_this.getTimeRange()[1]);
+ }
+ }
});
- this.on("loadedmetadata", function() {
- _this.loadedMetadata = true;
+ this.on("loadedmetadata", function () {
+ _this.loadedMetadata = true;
});
-};
-
-extendPrototype(Playable, BaseElement);
+ });
-Playable.prototype.getCurrentTime = function() {
+ extendPrototype(Playable, BaseElement);
+
+ Playable.prototype.getCurrentTime = function () {
return this.currentTime;
-};
+ };
-Playable.prototype.getVolume = function() {
+ Playable.prototype.getVolume = function () {
return this.volume;
-};
+ };
-Playable.prototype.getPaused = function() {
+ Playable.prototype.getPaused = function () {
return this.paused;
-};
+ };
-Playable.prototype.getMuted = function() {
+ Playable.prototype.getMuted = function () {
return this.muted;
-};
+ };
-Playable.prototype.getTimeRange = function() {
+ Playable.prototype.getTimeRange = function () {
return this.timeRange;
-}
+ };
-Playable.prototype.setCurrentTime = function(_time) {
- this.trigger("setcurrenttime",_time);
-};
+ Playable.prototype.setCurrentTime = function (_time) {
+ this.trigger("setcurrenttime", _time);
+ };
-Playable.prototype.setVolume = function(_vol) {
- this.trigger("setvolume",_vol);
-};
+ Playable.prototype.setVolume = function (_vol) {
+ this.trigger("setvolume", _vol);
+ };
-Playable.prototype.setMuted = function(_muted) {
- this.trigger("setmuted",_muted);
-};
+ Playable.prototype.setMuted = function (_muted) {
+ this.trigger("setmuted", _muted);
+ };
-Playable.prototype.setTimeRange = function(_timeBegin, _timeEnd) {
- if ((_timeBegin < _timeEnd)&&(_timeBegin >= 0)&&(_timeEnd>0)){
- return this.trigger("settimerange", [_timeBegin, _timeEnd]);
+ Playable.prototype.setTimeRange = function (_timeBegin, _timeEnd) {
+ if (_timeBegin < _timeEnd && _timeBegin >= 0 && _timeEnd > 0) {
+ return this.trigger("settimerange", [_timeBegin, _timeEnd]);
}
-}
+ };
-Playable.prototype.resetTimeRange = function() {
+ Playable.prototype.resetTimeRange = function () {
return this.trigger("resettimerange");
-}
+ };
-Playable.prototype.play = function() {
+ Playable.prototype.play = function () {
this.trigger("setplay");
-};
+ };
-Playable.prototype.pause = function() {
+ Playable.prototype.pause = function () {
this.trigger("setpause");
-};
+ };
-Playable.prototype.show = function() {};
+ Playable.prototype.show = function () {};
-Playable.prototype.hide = function() {};
+ Playable.prototype.hide = function () {};
-/* */
+ /* */
-var Media = Model.Media = function(_id, _source) {
+ var Media = (Model.Media = function (_id, _source) {
Playable.call(this, _id, _source);
- this.elementType = 'media';
+ this.elementType = "media";
this.duration = new Time();
- this.video = '';
+ this.video = "";
var _this = this;
-};
+ });
-extendPrototype(Media, Playable);
-/* */
+ extendPrototype(Media, Playable);
+ /* */
-var Media = Model.Media = function(_id, _source) {
+ var Media = (Model.Media = function (_id, _source) {
Playable.call(this, _id, _source);
- this.elementType = 'media';
+ this.elementType = "media";
this.duration = new Time();
- this.video = '';
+ this.video = "";
var _this = this;
-};
+ });
-extendPrototype(Media, Playable);
+ extendPrototype(Media, Playable);
-/* Default functions to be overriden by players */
-
-Media.prototype.setDuration = function(_durationMs) {
+ /* Default functions to be overriden by players */
+
+ Media.prototype.setDuration = function (_durationMs) {
this.duration.setMilliseconds(_durationMs);
-};
+ };
-Media.prototype.getAnnotations = function() {
+ Media.prototype.getAnnotations = function () {
return this.getRelated("annotation");
-};
+ };
-Media.prototype.getAnnotationsByTypeTitle = function(_title) {
- var _annTypes = this.source.getAnnotationTypes().searchByTitle(_title).pluck("id");
+ Media.prototype.getAnnotationsByTypeTitle = function (_title) {
+ var _annTypes = this.source
+ .getAnnotationTypes()
+ .searchByTitle(_title)
+ .pluck("id");
if (_annTypes.length) {
- return this.getAnnotations().filter(function(_annotation) {
- return ns._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1;
- });
+ return this.getAnnotations().filter(function (_annotation) {
+ return _(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1;
+ });
} else {
- return new List(this.source.directory);
+ return new List(this.source.directory);
}
-};
+ };
-/* */
+ /* */
-var Tag = Model.Tag = function(_id, _source) {
+ var Tag = (Model.Tag = function (_id, _source) {
BaseElement.call(this, _id, _source);
- this.elementType = 'tag';
-};
+ this.elementType = "tag";
+ });
-extendPrototype(Tag, BaseElement);
+ extendPrototype(Tag, BaseElement);
-Tag.prototype.getAnnotations = function() {
+ Tag.prototype.getAnnotations = function () {
return this.getRelated("annotation");
-};
+ };
-/* */
-var AnnotationType = Model.AnnotationType = function(_id, _source) {
+ /* */
+ var AnnotationType = (Model.AnnotationType = function (_id, _source) {
BaseElement.call(this, _id, _source);
- this.elementType = 'annotationType';
-};
+ this.elementType = "annotationType";
+ });
-extendPrototype(AnnotationType, BaseElement);
+ extendPrototype(AnnotationType, BaseElement);
-AnnotationType.prototype.getAnnotations = function() {
+ AnnotationType.prototype.getAnnotations = function () {
return this.getRelated("annotation");
-};
+ };
-/* Annotation
- * */
+ /* Annotation
+ * */
-var Annotation = Model.Annotation = function(_id, _source) {
+ var Annotation = (Model.Annotation = function (_id, _source) {
BaseElement.call(this, _id, _source);
- this.elementType = 'annotation';
+ this.elementType = "annotation";
this.begin = new Time();
this.end = new Time();
this.tag = new Reference(_source, []);
this.playing = false;
var _this = this;
- this.on("click", function() {
- _this.getMedia().setCurrentTime(_this.begin);
+ this.on("click", function () {
+ _this.getMedia().setCurrentTime(_this.begin);
});
-};
+ });
-extendPrototype(Annotation, BaseElement);
+ extendPrototype(Annotation, BaseElement);
-/* Set begin and end in one go, to avoid undesired side-effects in
- * setBegin/setEnd interaction */
-Annotation.prototype.setBeginEnd = function(_beginMs, _endMs) {
- _beginMs = Math.max(0,_beginMs);
- _endMs = Math.max(0,_endMs);
- if (_endMs < _beginMs)
- _endMs = _beginMs;
+ /* Set begin and end in one go, to avoid undesired side-effects in
+ * setBegin/setEnd interaction */
+ Annotation.prototype.setBeginEnd = function (_beginMs, _endMs) {
+ _beginMs = Math.max(0, _beginMs);
+ _endMs = Math.max(0, _endMs);
+ if (_endMs < _beginMs) _endMs = _beginMs;
this.begin.setMilliseconds(_beginMs);
this.end.setMilliseconds(_endMs);
this.trigger("change-begin");
this.trigger("change-end");
-};
+ };
-Annotation.prototype.setBegin = function(_beginMs) {
- this.begin.setMilliseconds(Math.max(0,_beginMs));
+ Annotation.prototype.setBegin = function (_beginMs) {
+ this.begin.setMilliseconds(Math.max(0, _beginMs));
this.trigger("change-begin");
if (this.end < this.begin) {
- this.setEnd(this.begin);
+ this.setEnd(this.begin);
}
-};
+ };
-Annotation.prototype.setEnd = function(_endMs) {
- this.end.setMilliseconds(Math.min(_endMs, this.getMedia().duration.milliseconds));
+ Annotation.prototype.setEnd = function (_endMs) {
+ this.end.setMilliseconds(
+ Math.min(_endMs, this.getMedia().duration.milliseconds)
+ );
this.trigger("change-end");
if (this.end < this.begin) {
- this.setBegin(this.end);
+ this.setBegin(this.end);
}
-};
+ };
-Annotation.prototype.setDuration = function(_durMs) {
+ Annotation.prototype.setDuration = function (_durMs) {
this.setEnd(_durMs + this.begin.milliseconds);
-};
+ };
-Annotation.prototype.setMedia = function(_idRef) {
+ Annotation.prototype.setMedia = function (_idRef) {
this.setReference("media", _idRef);
-};
+ };
-Annotation.prototype.getMedia = function() {
+ Annotation.prototype.getMedia = function () {
return this.getReference("media");
-};
+ };
-Annotation.prototype.setAnnotationType = function(_idRef) {
+ Annotation.prototype.setAnnotationType = function (_idRef) {
this.setReference("annotationType", _idRef);
-};
+ };
-Annotation.prototype.getAnnotationType = function() {
+ Annotation.prototype.getAnnotationType = function () {
return this.getReference("annotationType");
-};
+ };
-Annotation.prototype.setTags = function(_idRefs) {
+ Annotation.prototype.setTags = function (_idRefs) {
this.setReference("tag", _idRefs);
-};
+ };
-Annotation.prototype.getTags = function() {
+ Annotation.prototype.getTags = function () {
return this.getReference("tag");
-};
+ };
-Annotation.prototype.getTagTexts = function() {
+ Annotation.prototype.getTagTexts = function () {
return this.getTags().getTitles();
-};
+ };
-Annotation.prototype.getDuration = function() {
+ Annotation.prototype.getDuration = function () {
return new Time(this.end.milliseconds - this.begin.milliseconds);
-};
+ };
+
+ /* */
-/* */
-
-var MashedAnnotation = Model.MashedAnnotation = function(_mashup, _annotation) {
- BaseElement.call(this, _mashup.id + "_" + _annotation.id, _annotation.source);
- this.elementType = 'mashedAnnotation';
+ var MashedAnnotation = (Model.MashedAnnotation = function (
+ _mashup,
+ _annotation
+ ) {
+ BaseElement.call(
+ this,
+ _mashup.id + "_" + _annotation.id,
+ _annotation.source
+ );
+ this.elementType = "mashedAnnotation";
this.annotation = _annotation;
this.begin = new Time();
this.end = new Time();
@@ -840,433 +946,439 @@
this.description = this.annotation.description;
this.color = this.annotation.color;
var _this = this;
- this.on("click", function() {
- _mashup.setCurrentTime(_this.begin);
+ this.on("click", function () {
+ _mashup.setCurrentTime(_this.begin);
});
- this.on("enter", function() {
- _this.annotation.trigger("enter");
+ this.on("enter", function () {
+ _this.annotation.trigger("enter");
});
- this.on("leave", function() {
- _this.annotation.trigger("leave");
+ this.on("leave", function () {
+ _this.annotation.trigger("leave");
});
-};
+ });
-extendPrototype(MashedAnnotation, BaseElement);
+ extendPrototype(MashedAnnotation, BaseElement);
-MashedAnnotation.prototype.getMedia = function() {
+ MashedAnnotation.prototype.getMedia = function () {
return this.annotation.getReference("media");
-};
+ };
-MashedAnnotation.prototype.getAnnotationType = function() {
+ MashedAnnotation.prototype.getAnnotationType = function () {
return this.annotation.getReference("annotationType");
-};
+ };
-MashedAnnotation.prototype.getTags = function() {
+ MashedAnnotation.prototype.getTags = function () {
return this.annotation.getReference("tag");
-};
+ };
-MashedAnnotation.prototype.getTagTexts = function() {
+ MashedAnnotation.prototype.getTagTexts = function () {
return this.annotation.getTags().getTitles();
-};
+ };
-MashedAnnotation.prototype.getDuration = function() {
+ MashedAnnotation.prototype.getDuration = function () {
return this.annotation.getDuration();
-};
+ };
-MashedAnnotation.prototype.setBegin = function(_begin) {
+ MashedAnnotation.prototype.setBegin = function (_begin) {
this.begin.setMilliseconds(_begin);
this.duration.setMilliseconds(this.annotation.getDuration());
this.end.setMilliseconds(_begin + this.duration);
-};
+ };
-/* */
+ /* */
-var Mashup = Model.Mashup = function(_id, _source) {
+ var Mashup = (Model.Mashup = function (_id, _source) {
Playable.call(this, _id, _source);
- this.elementType = 'mashup';
+ this.elementType = "mashup";
this.duration = new Time();
this.segments = new List(_source.directory);
this.loaded = false;
var _this = this;
- this._updateTimes = function() {
- _this.updateTimes();
- _this.trigger("change");
+ this._updateTimes = function () {
+ _this.updateTimes();
+ _this.trigger("change");
};
this.on("add", this._updateTimes);
this.on("remove", this._updateTimes);
-};
+ });
-extendPrototype(Mashup, Playable);
+ extendPrototype(Mashup, Playable);
-Mashup.prototype.updateTimes = function() {
+ Mashup.prototype.updateTimes = function () {
var _time = 0;
- this.segments.forEach(function(_segment) {
- _segment.setBegin(_time);
- _time = _segment.end;
+ this.segments.forEach(function (_segment) {
+ _segment.setBegin(_time);
+ _time = _segment.end;
});
this.duration.setMilliseconds(_time);
-};
+ };
-Mashup.prototype.addAnnotation = function(_annotation, _defer) {
+ Mashup.prototype.addAnnotation = function (_annotation, _defer) {
var _mashedAnnotation = new MashedAnnotation(this, _annotation),
- _defer = _defer || false;
+ _defer = _defer || false;
this.segments.push(_mashedAnnotation);
_annotation.on("change-begin", this._updateTimes);
_annotation.on("change-end", this._updateTimes);
if (!_defer) {
- this.trigger("add");
+ this.trigger("add");
}
-};
+ };
-Mashup.prototype.addAnnotationById = function(_elId, _defer) {
+ Mashup.prototype.addAnnotationById = function (_elId, _defer) {
var _annotation = this.source.getElement(_elId),
- _defer = _defer || false;
+ _defer = _defer || false;
if (typeof _annotation !== "undefined") {
- this.addAnnotation(_annotation, _defer);
+ this.addAnnotation(_annotation, _defer);
}
-};
+ };
-Mashup.prototype.addAnnotations = function(_segments) {
+ Mashup.prototype.addAnnotations = function (_segments) {
var _this = this;
- ns._(_segments).forEach(function(_segment) {
- _this.addAnnotation(_segment, true);
+ _(_segments).forEach(function (_segment) {
+ _this.addAnnotation(_segment, true);
});
this.trigger("add");
-};
+ };
-Mashup.prototype.addAnnotationsById = function(_segments) {
+ Mashup.prototype.addAnnotationsById = function (_segments) {
var _this = this;
- ns._(_segments).forEach(function(_segment) {
- _this.addAnnotationById(_segment, true);
+ _(_segments).forEach(function (_segment) {
+ _this.addAnnotationById(_segment, true);
});
this.trigger("add");
-};
+ };
-Mashup.prototype.removeAnnotation = function(_annotation, _defer) {
+ Mashup.prototype.removeAnnotation = function (_annotation, _defer) {
var _defer = _defer || false;
_annotation.off("change-begin", this._updateTimes);
_annotation.off("change-end", this._updateTimes);
this.segments.removeId(this.id + "_" + _annotation.id);
if (!_defer) {
- this.trigger("remove");
+ this.trigger("remove");
}
-};
+ };
-Mashup.prototype.removeAnnotationById = function(_annId, _defer) {
+ Mashup.prototype.removeAnnotationById = function (_annId, _defer) {
var _defer = _defer || false;
var _annotation = this.source.getElement(_annId);
if (_annotation) {
- this.removeAnnotation(_annotation, _defer);
+ this.removeAnnotation(_annotation, _defer);
}
if (!_defer) {
- this.trigger("remove");
+ this.trigger("remove");
}
-};
+ };
-Mashup.prototype.setAnnotations = function(_segments) {
+ Mashup.prototype.setAnnotations = function (_segments) {
while (this.segments.length) {
- this.removeAnnotation(this.segments[0].annotation, true);
+ this.removeAnnotation(this.segments[0].annotation, true);
}
this.addAnnotations(_segments);
-};
+ };
-Mashup.prototype.setAnnotationsById = function(_segments) {
+ Mashup.prototype.setAnnotationsById = function (_segments) {
while (this.segments.length) {
- this.removeAnnotation(this.segments[0].annotation, true);
+ this.removeAnnotation(this.segments[0].annotation, true);
}
this.addAnnotationsById(_segments);
-};
+ };
-Mashup.prototype.hasAnnotation = function(_annotation) {
- return !!ns._(this.segments).find(function(_s) {
- return _s.annotation === _annotation;
+ Mashup.prototype.hasAnnotation = function (_annotation) {
+ return !!_(this.segments).find(function (_s) {
+ return _s.annotation === _annotation;
});
-};
+ };
-Mashup.prototype.getAnnotation = function(_annotation) {
- return ns._(this.segments).find(function(_s) {
- return _s.annotation === _annotation;
+ Mashup.prototype.getAnnotation = function (_annotation) {
+ return _(this.segments).find(function (_s) {
+ return _s.annotation === _annotation;
});
-};
+ };
-Mashup.prototype.getAnnotationById = function(_id) {
- return ns._(this.segments).find(function(_s) {
- return _s.annotation.id === _id;
+ Mashup.prototype.getAnnotationById = function (_id) {
+ return _(this.segments).find(function (_s) {
+ return _s.annotation.id === _id;
});
-};
+ };
-Mashup.prototype.getAnnotations = function() {
+ Mashup.prototype.getAnnotations = function () {
return this.segments;
-};
+ };
-Mashup.prototype.getOriginalAnnotations = function() {
+ Mashup.prototype.getOriginalAnnotations = function () {
var annotations = new List(this.source.directory);
- this.segments.forEach(function(_s) {
- annotations.push(_s.annotation);
+ this.segments.forEach(function (_s) {
+ annotations.push(_s.annotation);
});
return annotations;
-};
+ };
-Mashup.prototype.getMedias = function() {
+ Mashup.prototype.getMedias = function () {
var medias = new List(this.source.directory);
- this.segments.forEach(function(_annotation) {
- medias.push(_annotation.getMedia());
+ this.segments.forEach(function (_annotation) {
+ medias.push(_annotation.getMedia());
});
return medias;
-};
+ };
-Mashup.prototype.getAnnotationsByTypeTitle = function(_title) {
- var _annTypes = this.source.getAnnotationTypes().searchByTitle(_title).pluck("id");
+ Mashup.prototype.getAnnotationsByTypeTitle = function (_title) {
+ var _annTypes = this.source
+ .getAnnotationTypes()
+ .searchByTitle(_title)
+ .pluck("id");
if (_annTypes.length) {
- return this.getAnnotations().filter(function(_annotation) {
- return ns._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1;
- });
+ return this.getAnnotations().filter(function (_annotation) {
+ return _(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1;
+ });
} else {
- return new List(this.source.directory);
+ return new List(this.source.directory);
}
-};
+ };
-Mashup.prototype.getAnnotationAtTime = function(_time) {
- var _list = this.segments.filter(function(_annotation) {
- return _annotation.begin <= _time && _annotation.end > _time;
+ Mashup.prototype.getAnnotationAtTime = function (_time) {
+ var _list = this.segments.filter(function (_annotation) {
+ return _annotation.begin <= _time && _annotation.end > _time;
});
if (_list.length) {
- return _list[0];
+ return _list[0];
} else {
- return undefined;
+ return undefined;
}
-};
+ };
-Mashup.prototype.getMediaAtTime = function(_time) {
+ Mashup.prototype.getMediaAtTime = function (_time) {
var _annotation = this.getAnnotationAtTime(_time);
if (typeof _annotation !== "undefined") {
- return _annotation.getMedia();
+ return _annotation.getMedia();
} else {
- return undefined;
+ return undefined;
}
-};
+ };
-/* */
+ /* */
-var Source = Model.Source = function(_config) {
+ var Source = (Model.Source = function (_config) {
BaseElement.call(this, false, this);
this.status = _SOURCE_STATUS_EMPTY;
this.elementType = "source";
if (typeof _config !== "undefined") {
- var _this = this;
- ns._(_config).forEach(function(_v, _k) {
- _this[_k] = _v;
- });
- this.callbackQueue = [];
- this.contents = {};
- this.get();
+ var _this = this;
+ _(_config).forEach(function (_v, _k) {
+ _this[_k] = _v;
+ });
+ this.callbackQueue = [];
+ this.contents = {};
+ this.get();
}
-};
+ });
-extendPrototype(Source, BaseElement);
+ extendPrototype(Source, BaseElement);
-Source.prototype.addList = function(_listId, _contents) {
+ Source.prototype.addList = function (_listId, _contents) {
if (typeof this.contents[_listId] === "undefined") {
- this.contents[_listId] = new List(this.directory);
+ this.contents[_listId] = new List(this.directory);
}
this.contents[_listId].addElements(_contents);
-};
+ };
-Source.prototype.getList = function(_listId, _global) {
- _global = (typeof _global !== "undefined" && _global);
+ Source.prototype.getList = function (_listId, _global) {
+ _global = typeof _global !== "undefined" && _global;
if (_global) {
- return this.directory.getGlobalList().filter(function(_e) {
- return (_e.elementType === _listId);
- });
+ return this.directory.getGlobalList().filter(function (_e) {
+ return _e.elementType === _listId;
+ });
} else {
- if (typeof this.contents[_listId] === "undefined") {
- this.contents[_listId] = new List(this.directory);
- }
- return this.contents[_listId];
+ if (typeof this.contents[_listId] === "undefined") {
+ this.contents[_listId] = new List(this.directory);
+ }
+ return this.contents[_listId];
}
-};
+ };
-Source.prototype.forEach = function(_callback) {
+ Source.prototype.forEach = function (_callback) {
var _this = this;
- ns._(this.contents).forEach(function(_value, _key) {
- _callback.call(_this, _value, _key);
+ _(this.contents).forEach(function (_value, _key) {
+ _callback.call(_this, _value, _key);
});
-};
+ };
-Source.prototype.getElement = function(_elId) {
+ Source.prototype.getElement = function (_elId) {
return this.directory.getElement(_elId);
-};
+ };
-Source.prototype.get = function() {
+ Source.prototype.get = function () {
this.status = _SOURCE_STATUS_WAITING;
this.handleCallbacks();
-};
+ };
-/* We defer the callbacks calls so they execute after the queue is cleared */
-Source.prototype.deferCallback = function(_callback) {
+ /* We defer the callbacks calls so they execute after the queue is cleared */
+ Source.prototype.deferCallback = function (_callback) {
var _this = this;
- ns._.defer(function() {
- _callback.call(_this);
+ _.defer(function () {
+ _callback.call(_this);
});
-};
+ };
-Source.prototype.handleCallbacks = function() {
+ Source.prototype.handleCallbacks = function () {
this.status = _SOURCE_STATUS_READY;
while (this.callbackQueue.length) {
- this.deferCallback(this.callbackQueue.splice(0,1)[0]);
+ this.deferCallback(this.callbackQueue.splice(0, 1)[0]);
}
-};
-Source.prototype.onLoad = function(_callback) {
+ };
+ Source.prototype.onLoad = function (_callback) {
if (this.status === _SOURCE_STATUS_READY) {
- this.deferCallback(_callback);
+ this.deferCallback(_callback);
} else {
- this.callbackQueue.push(_callback);
+ this.callbackQueue.push(_callback);
}
-};
+ };
-Source.prototype.serialize = function() {
+ Source.prototype.serialize = function () {
return this.serializer.serialize(this);
-};
+ };
+
+ Source.prototype.deSerialize = function (_data) {
+ this.serializer.deSerialize(_data, this);
+ };
+
+ Source.prototype.getAnnotations = function (_global) {
+ _global = typeof _global !== "undefined" && _global;
+ return this.getList("annotation", _global);
+ };
+
+ Source.prototype.getMedias = function (_global) {
+ _global = typeof _global !== "undefined" && _global;
+ return this.getList("media", _global);
+ };
+
+ Source.prototype.getTags = function (_global) {
+ _global = typeof _global !== "undefined" && _global;
+ return this.getList("tag", _global);
+ };
-Source.prototype.deSerialize = function(_data) {
- this.serializer.deSerialize(_data, this);
-};
+ Source.prototype.getMashups = function (_global) {
+ _global = typeof _global !== "undefined" && _global;
+ return this.getList("mashup", _global);
+ };
+
+ Source.prototype.getAnnotationTypes = function (_global) {
+ _global = typeof _global !== "undefined" && _global;
+ return this.getList("annotationType", _global);
+ };
+
+ Source.prototype.getAnnotationsByTypeTitle = function (_title, _global) {
+ _global = typeof _global !== "undefined" && _global;
+ var _res = new List(this.directory),
+ _annTypes = this.getAnnotationTypes(_global).searchByTitle(_title);
+ _annTypes.forEach(function (_annType) {
+ _res.addElements(_annType.getAnnotations(_global));
+ });
+ return _res;
+ };
+
+ Source.prototype.getDuration = function () {
+ var _m = this.currentMedia;
+ if (typeof _m !== "undefined") {
+ return this.currentMedia.duration;
+ }
+ };
-Source.prototype.getAnnotations = function(_global) {
- _global = (typeof _global !== "undefined" && _global);
- return this.getList("annotation", _global);
-};
+ Source.prototype.getCurrentMedia = function (_opts) {
+ if (typeof this.currentMedia === "undefined") {
+ if (_opts.is_mashup) {
+ var _mashups = this.getMashups();
+ if (_mashups.length) {
+ this.currentMedia = _mashups[0];
+ }
+ } else {
+ var _medias = this.getMedias();
+ if (_medias.length) {
+ this.currentMedia = _medias[0];
+ }
+ }
+ }
+ return this.currentMedia;
+ };
-Source.prototype.getMedias = function(_global) {
- _global = (typeof _global !== "undefined" && _global);
- return this.getList("media", _global);
-};
+ Source.prototype.merge = function (_source) {
+ var _this = this;
+ _source.forEach(function (_value, _key) {
+ _this.getList(_key).addElements(_value);
+ });
+ };
+
+ /* */
+
+ var RemoteSource = (Model.RemoteSource = function (_config) {
+ Source.call(this, _config);
+ });
+
+ extendPrototype(RemoteSource, Source);
-Source.prototype.getTags = function(_global) {
- _global = (typeof _global !== "undefined" && _global);
- return this.getList("tag", _global);
-};
+ RemoteSource.prototype.get = function () {
+ this.status = _SOURCE_STATUS_WAITING;
+ var _this = this,
+ urlparams = this.url_params || {},
+ dataType = this.dataType || "json";
+ urlparams.format = dataType;
+ jQuery.ajax({
+ url: this.url,
+ dataType: dataType,
+ data: urlparams,
+ traditional: true,
+ success: function (_result) {
+ _this.deSerialize(_result);
+ _this.handleCallbacks();
+ },
+ });
+ };
+
+ /* */
+
+ var Directory = (Model.Directory = function () {
+ this.remoteSources = {};
+ this.elements = {};
+ });
-Source.prototype.getMashups = function(_global) {
- _global = (typeof _global !== "undefined" && _global);
- return this.getList("mashup", _global);
-};
+ Directory.prototype.remoteSource = function (_properties) {
+ if (
+ typeof _properties !== "object" ||
+ typeof _properties.url === "undefined"
+ ) {
+ throw "Error : Directory.remoteSource(configuration): configuration.url is undefined";
+ }
+ var _config = _({ directory: this }).extend(_properties);
+ _config.url_params = _config.url_params || {};
+ var _hash = _config.url + "?" + jQuery.param(_config.url_params);
+ if (typeof this.remoteSources[_hash] === "undefined") {
+ this.remoteSources[_hash] = new RemoteSource(_config);
+ }
+ return this.remoteSources[_hash];
+ };
-Source.prototype.getAnnotationTypes = function(_global) {
- _global = (typeof _global !== "undefined" && _global);
- return this.getList("annotationType", _global);
+ Directory.prototype.newLocalSource = function (_properties) {
+ var _config = _({ directory: this }).extend(_properties),
+ _res = new Source(_config);
+ return _res;
+ };
+
+ Directory.prototype.getElement = function (_id) {
+ return this.elements[_id];
+ };
+
+ Directory.prototype.addElement = function (_element) {
+ this.elements[_element.id] = _element;
+ };
+
+ Directory.prototype.getGlobalList = function () {
+ var _res = new List(this);
+ _res.addIds(_(this.elements).keys());
+ return _res;
+ };
+ return Model;
};
-Source.prototype.getAnnotationsByTypeTitle = function(_title, _global) {
- _global = (typeof _global !== "undefined" && _global);
- var _res = new List(this.directory),
- _annTypes = this.getAnnotationTypes(_global).searchByTitle(_title);
- _annTypes.forEach(function(_annType) {
- _res.addElements(_annType.getAnnotations(_global));
- });
- return _res;
-};
-
-Source.prototype.getDuration = function() {
- var _m = this.currentMedia;
- if (typeof _m !== "undefined") {
- return this.currentMedia.duration;
- }
-};
-
-Source.prototype.getCurrentMedia = function(_opts) {
- if (typeof this.currentMedia === "undefined") {
- if (_opts.is_mashup) {
- var _mashups = this.getMashups();
- if (_mashups.length) {
- this.currentMedia = _mashups[0];
- }
- } else {
- var _medias = this.getMedias();
- if (_medias.length) {
- this.currentMedia = _medias[0];
- }
- }
- }
- return this.currentMedia;
-};
-
-Source.prototype.merge = function(_source) {
- var _this = this;
- _source.forEach(function(_value, _key) {
- _this.getList(_key).addElements(_value);
- });
-};
-
-/* */
-
-var RemoteSource = Model.RemoteSource = function(_config) {
- Source.call(this, _config);
-};
-
-extendPrototype(RemoteSource, Source);
-
-RemoteSource.prototype.get = function() {
- this.status = _SOURCE_STATUS_WAITING;
- var _this = this,
- urlparams = this.url_params || {},
- dataType = (isLocalURL(this.url) ? "json" : "jsonp");
- urlparams.format = dataType;
- ns.jQuery.ajax({
- url: this.url,
- dataType: dataType,
- data: urlparams,
- traditional: true,
- success: function(_result) {
- _this.deSerialize(_result);
- _this.handleCallbacks();
- }
- });
-};
-
-/* */
-
-var Directory = Model.Directory = function() {
- this.remoteSources = {};
- this.elements = {};
-};
-
-Directory.prototype.remoteSource = function(_properties) {
- if (typeof _properties !== "object" || typeof _properties.url === "undefined") {
- throw "Error : Directory.remoteSource(configuration): configuration.url is undefined";
- }
- var _config = ns._({ directory: this }).extend(_properties);
- _config.url_params = _config.url_params || {};
- var _hash = _config.url + "?" + ns.jQuery.param(_config.url_params);
- if (typeof this.remoteSources[_hash] === "undefined") {
- this.remoteSources[_hash] = new RemoteSource(_config);
- }
- return this.remoteSources[_hash];
-};
-
-Directory.prototype.newLocalSource = function(_properties) {
- var _config = ns._({ directory: this }).extend(_properties),
- _res = new Source(_config);
- return _res;
-};
-
-Directory.prototype.getElement = function(_id) {
- return this.elements[_id];
-};
-
-Directory.prototype.addElement = function(_element) {
- this.elements[_element.id] = _element;
-};
-
-Directory.prototype.getGlobalList = function() {
- var _res = new List(this);
- _res.addIds(ns._(this.elements).keys());
- return _res;
-};
-return Model;
-
-})(IriSP);
+export default Model;
/* END js */
-
--- a/src/js/serializers/contentapi-serializer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/serializers/contentapi-serializer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,10 +1,7 @@
/* START contentapi-serializer.js */
+import _ from "lodash";
-if (typeof IriSP.serializers === "undefined") {
- IriSP.serializers = {};
-}
-
-IriSP.serializers.content = {
+const content = function(IriSP) { return {
deSerialize : function(_data, _source) {
var _medialist = new IriSP.Model.List(_source.directory);
@@ -21,13 +18,15 @@
}
if (typeof _data.objects !== "undefined") {
- IriSP._(_data.objects).each(deserializeObject);
+ _(_data.objects).each(deserializeObject);
} else {
deserializeObject(_data, 0);
}
_source.addList("media", _medialist);
}
-};
+}};
+
+export default content;
/* END contentapi-serializer.js */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/js/serializers/index.js Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,19 @@
+import contentapiSerializer from "./contentapi-serializer";
+
+import ldt_annotate from "./ldt_annotate";
+
+import ldt_localstorage from "./ldt_localstorage";
+
+import ldtSerializer from "./ldt-serializer";
+
+import segmentapiSerializer from "./segmentapi-serializer";
+
+const serializers = function (IriSP) { return {
+ content: contentapiSerializer(IriSP),
+ ldt_annotate: ldt_annotate(IriSP),
+ ldt_localstorage: ldt_localstorage(IriSP),
+ ldt: ldtSerializer(IriSP),
+ segmentapi: segmentapiSerializer(IriSP),
+}};
+
+export default serializers;
--- a/src/js/serializers/ldt-serializer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/serializers/ldt-serializer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,10 +1,7 @@
/* Start ldt-serializer.js */
+import _ from "lodash";
-if (typeof IriSP.serializers === "undefined") {
- IriSP.serializers = {};
-}
-
-IriSP.serializers.ldt = {
+const ldt = function(IriSP) { return {
types : {
media : {
serialized_name : "medias",
@@ -151,7 +148,7 @@
_res.content = _data.content;
_res.setMedia(_data.media);
_res.setAnnotationType(_data.meta["id-ref"]);
- _res.setTags(IriSP._(_data.tags).pluck("id-ref"));
+ _res.setTags(_(_data.tags).map("id-ref"));
_res.keywords = _res.getTagTexts();
_res.setBegin(_data.begin);
_res.setEnd(_data.end);
@@ -171,7 +168,7 @@
id : _data.id,
begin : _data.begin.milliseconds,
end : _data.end.milliseconds,
- content : IriSP._.defaults(
+ content : _.defaults(
{},
{
title : _data.title,
@@ -199,13 +196,13 @@
}
};
if (_source.regenerateTags) {
- _res.tags = IriSP._(_data.keywords).map(function(_kw) {
+ _res.tags = _(_data.keywords).map(function(_kw) {
return {
"id-ref": _source.__keywords[_kw.toLowerCase()].id
};
});
} else {
- _res.tags = IriSP._(_data.tag.id).map(function(_id) {
+ _res.tags = _(_data.tag.id).map(function(_id) {
return {
"id-ref" : _id
};
@@ -276,7 +273,7 @@
if (_source.regenerateTags) {
_source.__keywords = {};
_source.getAnnotations().forEach(function(a) {
- IriSP._(a.keywords).each(function(kw) {
+ _(a.keywords).each(function(kw) {
var lkw = kw.toLowerCase();
if (typeof _source.__keywords[lkw] === "undefined") {
_source.__keywords[lkw] = {
@@ -287,7 +284,7 @@
}
});
});
- IriSP._(_source.__keywords).each(function(kw) {
+ _(_source.__keywords).each(function(kw) {
_this.types.tag.serializer(kw, _source, _res);
});
}
@@ -304,7 +301,7 @@
if (typeof _data !== "object" || _data === null) {
return;
}
- IriSP._(this.types).forEach(function(_type, _typename) {
+ _(this.types).forEach(function(_type, _typename) {
var _listdata = _data[_type.serialized_name],
_list = new IriSP.Model.List(_source.directory);
if (typeof _listdata !== "undefined" && _listdata !== null) {
@@ -339,6 +336,8 @@
_source.currentMedia = _source.getElement(_data.meta.main_media["id-ref"]);
}
}
-};
+}};
+
+export default ldt;
/* End of LDT Platform Serializer */
--- a/src/js/serializers/ldt_annotate.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/serializers/ldt_annotate.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,10 +1,7 @@
/* ldt_annotate serializer: Used when Putting annotations on the platform */
+import _ from "lodash";
-if (typeof IriSP.serializers === "undefined") {
- IriSP.serializers = {};
-}
-
-IriSP.serializers.ldt_annotate = {
+const ldt_annotate = function(IriSP) { return {
serializeAnnotation : function(_data, _source) {
var _annType = _data.getAnnotationType();
return {
@@ -45,7 +42,7 @@
_source.getAnnotationTypes().push(_anntype);
}
_ann.setAnnotationType(_anntype.id);
- var _tagIds = IriSP._(_anndata.tags).map(function(_title) {
+ var _tagIds = _(_anndata.tags).map(function(_title) {
var _tags = _source.getTags(true).searchByTitle(_title, true);
if (_tags.length) {
var _tag = _tags[0];
@@ -80,6 +77,8 @@
_source.addList('annotation', new IriSP.Model.List(_source.directory));
this.deserializeAnnotation(_data, _source);
}
-};
+}};
+
+export default ldt_annotate;
/* End ldt_annotate serializer */
--- a/src/js/serializers/ldt_localstorage.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/serializers/ldt_localstorage.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,10 +1,7 @@
/* ldt_localstorage serializer: Used to store personal annotations in local storage */
+import _ from "lodash";
-if (typeof IriSP.serializers === "undefined") {
- IriSP.serializers = {};
-}
-
-IriSP.serializers.ldt_localstorage = {
+const ldt_localstorage = function(IriSP) { return {
serializeAnnotation : function(_data, _source) {
var _annType = _data.getAnnotationType();
return {
@@ -45,7 +42,7 @@
_source.getAnnotationTypes().push(_anntype);
}
_ann.setAnnotationType(_anntype.id);
- var _tagIds = IriSP._(_anndata.tags).map(function(_title) {
+ var _tagIds = _(_anndata.tags).map(function(_title) {
var _tags = _source.getTags(true).searchByTitle(_title, true);
if (_tags.length) {
var _tag = _tags[0];
@@ -82,6 +79,8 @@
_source.addList('annotation', new IriSP.Model.List(_source.directory));
_data.map( function (a) { _this.deserializeAnnotation(a, _source); });
}
-};
+}};
+
+export default ldt_localstorage;
/* End ldt_localstorage serializer */
--- a/src/js/serializers/segmentapi-serializer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/serializers/segmentapi-serializer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,10 +1,7 @@
/* START segmentapi-serializer.js */
+import _ from "lodash";
-if (typeof IriSP.serializers === "undefined") {
- IriSP.serializers = {};
-}
-
-IriSP.serializers.segmentapi = {
+const segmentapi = function(IriSP) { return {
deSerialize : function(_data, _source) {
var _annotationlist = new IriSP.Model.List(_source.directory),
_medialist = new IriSP.Model.List(_source.directory);
@@ -28,12 +25,14 @@
}
if (typeof _data.objects !== "undefined") {
- IriSP._(_data.objects).each(deserializeObject);
+ _(_data.objects).each(deserializeObject);
} else {
deserializeObject(_data);
}
_source.addList("annotation", _annotationlist);
}
-};
+}};
+
+export default segmentapi;
/* END segmentapi-serializer.js */
--- a/src/js/utils.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/utils.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,35 +1,12 @@
/* utils.js - various utils that don't belong anywhere else */
-
-IriSP.jqEscape = function(_text) {
- return _text.replace(/(:|\.)/g,'\\$1');
-};
+import _ from "lodash";
-IriSP.getLib = function(lib) {
- if (IriSP.libFiles.useCdn && typeof IriSP.libFiles.cdn[lib] == "string") {
- return IriSP.libFiles.cdn[lib];
- }
- if (typeof IriSP.libFiles.locations[lib] == "string") {
- return IriSP.libFiles.locations[lib];
- }
- if (typeof IriSP.libFiles.inDefaultDir[lib] == "string") {
- return IriSP.libFiles.defaultDir + '/' + IriSP.libFiles.inDefaultDir[lib];
- }
-};
+export default function(IriSP) { return {
+ jqEscape: function(_text) {
+ return _text.replace(/(:|\.)/g,'\\$1');
+ },
-IriSP._cssCache = [];
-
-IriSP.loadCss = function(_cssFile) {
- if (IriSP._(IriSP._cssCache).indexOf(_cssFile) === -1) {
- IriSP.jQuery("<link>", {
- rel : "stylesheet",
- type : "text/css",
- href : _cssFile
- }).appendTo('head');
- IriSP._cssCache.push(_cssFile);
- }
-};
-
-IriSP.textFieldHtml = function(_text, _regexp, _extend) {
+ textFieldHtml: function(_text, _regexp, _extend) {
var list = [],
positions = [],
text = _text.replace(/(^\s+|\s+$)/g,'');
@@ -66,11 +43,11 @@
addToList(/\*[^*]+\*/gm, '<b>', '</b>');
addToList(/[\n\r]+/gm, '', '<br />');
- IriSP._(_extend).each(function(x) {
+ _(_extend).each(function(x) {
addToList.apply(null, x);
});
- positions = IriSP._(positions)
+ positions = _(positions)
.chain()
.uniq()
.sortBy(function(p) { return parseInt(p); })
@@ -100,22 +77,22 @@
return res;
-};
+ },
-IriSP.log = function() {
+ log: function() {
if (typeof console !== "undefined" && typeof IriSP.logging !== "undefined" && IriSP.logging) {
console.log.apply(console, arguments);
}
-};
+ },
-IriSP.attachDndData = function(jqSel, data) {
+ attachDndData: function(jqSel, data) {
jqSel.attr("draggable", "true").on("dragstart", function(_event) {
var d = (typeof data === "function" ? data.call(this) : data);
try {
if (d.html === undefined && d.uri && d.text) {
d.html = '<a href="' + d.uri + '">' + d.text + '</a>';
}
- IriSP._(d).each(function(v, k) {
+ _(d).each(function(v, k) {
if (v && k != 'text' && k != 'html') {
_event.originalEvent.dataTransfer.setData("text/x-iri-" + k, v);
}
@@ -137,17 +114,17 @@
_event.originalEvent.dataTransfer.setData("Text", JSON.stringify(d));
}
});
-};
+ },
-IriSP.FakeClass = function(properties) {
+ FakeClass: function(properties) {
var _this = this,
noop = (function() {});
- IriSP._(properties).each(function(p) {
+ _(properties).each(function(p) {
_this[p] = noop;
});
-};
+ },
-IriSP.timestamp2ms = function(t) {
+ timestamp2ms: function(t) {
// Convert timestamp to numeric value
// It accepts the following forms:
// [h:mm:ss] [mm:ss] [ss]
@@ -156,9 +133,9 @@
s.push("0");
}
return 1000 * (3600 * parseInt(s[2], 10) + 60 * parseInt(s[1], 10) + parseInt(s[0], 10));
-};
+ },
-IriSP.setFullScreen= function(elem, value) {
+ setFullScreen: function(elem, value) {
// Set fullscreen on or off
if (value) {
if (elem.requestFullscreen) {
@@ -181,24 +158,25 @@
document.webkitExitFullscreen();
}
}
-};
+ },
-IriSP.isFullscreen = function() {
+ isFullscreen: function() {
return (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement);
-};
+ },
-IriSP.getFullscreenElement = function () {
+ getFullscreenElement: function () {
return (document.fullscreenElement
|| document.webkitFullscreenElement
|| document.mozFullScreenElement
|| document.msFullscreenElement
|| undefined);
-};
+ },
-IriSP.getFullscreenEventname = function () {
+ getFullscreenEventname: function () {
return ((document.exitFullscreen && "fullscreenchange")
|| (document.webkitExitFullscreen && "webkitfullscreenchange")
|| (document.mozExitFullScreen && "mozfullscreenchange")
|| (document.msExitFullscreen && "msfullscreenchange")
|| "");
-};
+ },
+}};
\ No newline at end of file
--- a/src/js/version.js Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-// Metadataplayer - version 0.3
--- a/src/js/widgets-container/defaults.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/widgets-container/defaults.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,123 +1,141 @@
/* Start of defaults.js */
+export default function (IriSP) {
-IriSP.language = 'en';
+ const defaults = {};
+
+ defaults.language = "en";
-IriSP.libFiles = {
- defaultDir : "js/libs/",
- inDefaultDir : {
- underscore : "underscore-min.js",
- Mustache : "mustache.js",
- jQuery : "jquery.min.js",
- jQueryUI : "jquery-ui.min.js",
- swfObject : "swfobject.js",
- cssjQueryUI : "jquery-ui.css",
- popcorn : "popcorn-complete.min.js",
- jwplayer : "jwplayer.js",
- raphael : "raphael-min.js",
- tracemanager : "tracemanager.js",
- jwPlayerSWF : "player.swf",
- json : "json2.js",
- zeroClipboardJs: "ZeroClipboard.js",
- zeroClipboardSwf: "ZeroClipboard.swf",
- backbone: "backbone.js",
- backboneRelational: "backbone-relational.js",
- paper: "paper.js",
- jqueryMousewheel: "jquery.mousewheel.min.js",
- splitter: "jquery.touchsplitter.js",
- cssSplitter: "jquery.touchsplitter.css",
- renkanPublish: "renkan.js",
- processing: "processing-1.3.6.min.js",
- recordMicSwf: "record_mic.swf",
- mousetrap: "mousetrap.min.js",
- mousetrapGlobal: "mousetrap-global-bind.js"
- },
- locations : {
- // use to define locations outside default_dir
- },
- cdn : {
- jQuery : "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js",
- jQueryUI : "http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/jquery-ui.min.js",
- swfObject : "http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",
- cssjQueryUI : "http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/themes/ui-lightness/jquery-ui.css",
- underscore : "http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js",
- Mustache : "http://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.5.0-dev/mustache.min.js",
- raphael : "http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js",
- json : "http://cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js",
- popcorn: "http://cdn.popcornjs.org/code/dist/popcorn-complete.min.js"
- },
- useCdn : false
-};
+ // defaults.libFiles = {
+ // defaultDir: "js/libs/",
+ // inDefaultDir: {
+ // underscore: "underscore-min.js",
+ // Mustache: "mustache.js",
+ // jQuery: "jquery.min.js",
+ // jQueryUI: "jquery-ui.min.js",
+ // swfObject: "swfobject.js",
+ // cssjQueryUI: "jquery-ui.css",
+ // popcorn: "popcorn-complete.min.js",
+ // jwplayer: "jwplayer.js",
+ // raphael: "raphael-min.js",
+ // tracemanager: "tracemanager.js",
+ // jwPlayerSWF: "player.swf",
+ // json: "json2.js",
+ // zeroClipboardJs: "ZeroClipboard.js",
+ // zeroClipboardSwf: "ZeroClipboard.swf",
+ // backbone: "backbone.js",
+ // backboneRelational: "backbone-relational.js",
+ // paper: "paper.js",
+ // jqueryMousewheel: "jquery.mousewheel.min.js",
+ // splitter: "jquery.touchsplitter.js",
+ // cssSplitter: "jquery.touchsplitter.css",
+ // renkanPublish: "renkan.js",
+ // processing: "processing-1.3.6.min.js",
+ // recordMicSwf: "record_mic.swf",
+ // mousetrap: "mousetrap.min.js",
+ // mousetrapGlobal: "mousetrap-global-bind.js",
+ // },
+ // locations: {
+ // // use to define locations outside default_dir
+ // },
+ // cdn: {
+ // jQuery: "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js",
+ // jQueryUI:
+ // "http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/jquery-ui.min.js",
+ // swfObject:
+ // "http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",
+ // cssjQueryUI:
+ // "http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/themes/ui-lightness/jquery-ui.css",
+ // underscore:
+ // "http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js",
+ // Mustache:
+ // "http://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.5.0-dev/mustache.min.js",
+ // raphael:
+ // "http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js",
+ // json: "http://cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js",
+ // popcorn: "http://cdn.popcornjs.org/code/dist/popcorn-complete.min.js",
+ // },
+ // useCdn: false,
+ // };
-IriSP.widgetsDir = 'widgets';
+ defaults.widgetsDir = "widgets";
-IriSP.widgetsRequirements = {
+ defaults.widgetsRequirements = {
PopcornPlayer: {
- noCss: true,
- requires: [ "popcorn" ]
+ noCss: true,
+ requires: ["popcorn"],
},
HtmlPlayer: {
- noCss: true
+ noCss: true,
},
JwpPlayer: {
- noCss: true,
- requires: [ "jwplayer" ]
+ noCss: true,
+ requires: ["jwplayer"],
},
DailymotionPlayer: {
- noCss: true,
- requires: [ "swfObject" ]
+ noCss: true,
+ requires: ["swfObject"],
},
AdaptivePlayer: {
- noCss: true
+ noCss: true,
},
AutoPlayer: {
- noCss: true
+ noCss: true,
},
AnnotationsList: {
- requires: [ "jwplayer" ]
+ requires: ["jwplayer"],
},
Sparkline: {
- noCss: true,
- requires: [ "raphael" ]
+ noCss: true,
+ requires: ["raphael"],
},
Arrow: {
- noCss: true,
- requires: [ "raphael" ]
+ noCss: true,
+ requires: ["raphael"],
},
Mediafragment: {
- noCss: true
+ noCss: true,
},
- Trace : {
- noCss: true,
- requires: [ "tracemanager" ]
+ Trace: {
+ noCss: true,
+ requires: ["tracemanager"],
},
Slideshare: {
- requires: [ "swfObject" ]
+ requires: ["swfObject"],
},
Social: {
- requires: [ "zeroClipboardJs" ]
+ requires: ["zeroClipboardJs"],
},
Renkan: {
- requires: [ "backbone", "backboneRelational", "paper", "jqueryMousewheel", "renkanPublish" ]
+ requires: [
+ "backbone",
+ "backboneRelational",
+ "paper",
+ "jqueryMousewheel",
+ "renkanPublish",
+ ],
},
KnowledgeConcierge: {
- requires: [ "processing" ]
+ requires: ["processing"],
},
MultiSegments: {
- noCss: true
+ noCss: true,
},
SlideVideoPlayer: {
- requires: [ "jQuery", "jQueryUI", "splitter" ]
+ requires: ["jQuery", "jQueryUI", "splitter"],
},
Shortcuts: {
- requires: [ "mousetrap", "mousetrapGlobal" ]
- }
-};
+ requires: ["mousetrap", "mousetrapGlobal"],
+ },
+ };
-IriSP.guiDefaults = {
- width : 640,
- container : 'LdtPlayer',
- spacer_div_height : 0,
- widgets: []
+ defaults.guiDefaults = {
+ width: 640,
+ container: "LdtPlayer",
+ spacer_div_height: 0,
+ widgets: [],
+ };
+
+ return defaults;
};
/* End of defaults.js */
--- a/src/js/widgets-container/metadataplayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/widgets-container/metadataplayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,252 +1,225 @@
/* widgets-container/metadataplayer.js - initialization and configuration of the widgets
-*/
+ */
/* The Metadataplayer Object, single point of entry, replaces IriSP.init_player */
-
-(function(ns) {
+import _ from "lodash";
+import jQuery from "jquery";
-var formerJQuery, formerUnderscore, former$;
+export default function (ns) {
+ var formerJQuery, formerUnderscore, former$;
-var Metadataplayer = ns.Metadataplayer = function(config) {
+ var Metadataplayer = (ns.Metadataplayer = function (config) {
ns.log("IriSP.Metadataplayer constructor");
for (var key in ns.guiDefaults) {
- if (ns.guiDefaults.hasOwnProperty(key) && !config.hasOwnProperty(key)) {
- config[key] = ns.guiDefaults[key]
- }
+ if (ns.guiDefaults.hasOwnProperty(key) && !config.hasOwnProperty(key)) {
+ config[key] = ns.guiDefaults[key];
+ }
}
var _container = document.getElementById(config.container);
- _container.innerHTML = '<h3 class="Ldt-Loader">Loading... Chargement...</h3>';
+ _container.innerHTML =
+ '<h3 class="Ldt-Loader">Loading... Chargement...</h3>';
this.sourceManager = new ns.Model.Directory();
this.config = config;
this.__events = {};
- this.loadLibs();
-};
+ //this.loadLibs();
+ this.onLibsLoaded();
+ });
-Metadataplayer.prototype.toString = function() {
- return 'Metadataplayer in #' + this.config.container;
-};
+ Metadataplayer.prototype.toString = function () {
+ return "Metadataplayer in #" + this.config.container;
+ };
-Metadataplayer.prototype.on = function(_event, _callback) {
+ Metadataplayer.prototype.on = function (_event, _callback) {
if (typeof this.__events[_event] === "undefined") {
- this.__events[_event] = [];
+ this.__events[_event] = [];
}
this.__events[_event].push(_callback);
-};
-
-Metadataplayer.prototype.trigger = function(_event, _data) {
- var _element = this;
- ns._(this.__events[_event]).each(function(_callback) {
- _callback.call(_element, _data);
- });
-};
-
-Metadataplayer.prototype.loadLibs = function() {
- ns.log("IriSP.Metadataplayer.prototype.loadLibs");
- var $L = $LAB
- .queueScript(ns.getLib("Mustache"));
- formerJQuery = !!window.jQuery;
- former$ = !!window.$;
- formerUnderscore = !!window._;
-
- if (typeof ns.jQuery === "undefined") {
- $L.queueScript(ns.getLib("jQuery"));
- }
-
- if (typeof ns._ === "undefined") {
- $L.queueScript(ns.getLib("underscore"));
- }
+ };
- if (typeof window.JSON == "undefined") {
- $L.queueScript(ns.getLib("json"));
- }
- $L.queueWait().queueScript(ns.getLib("jQueryUI")).queueWait();
+ Metadataplayer.prototype.trigger = function (_event, _data) {
+ var _element = this;
+ _(this.__events[_event]).each(function (_callback) {
+ _callback.call(_element, _data);
+ });
+ };
- /* widget specific requirements */
- for(var _i = 0; _i < this.config.widgets.length; _i++) {
- var _t = this.config.widgets[_i].type;
- if (typeof ns.widgetsRequirements[_t] !== "undefined" && typeof ns.widgetsRequirements[_t].requires !== "undefined" ) {
- for (var _j = 0; _j < ns.widgetsRequirements[_t].requires.length; _j++) {
- $L.queueScript(ns.getLib(ns.widgetsRequirements[_t].requires[_j]));
- }
- }
- }
-
- var _this = this;
- $L.queueWait(function() {
- _this.onLibsLoaded();
- });
-
- $L.runQueue();
-};
-
-Metadataplayer.prototype.onLibsLoaded = function() {
+ Metadataplayer.prototype.onLibsLoaded = function () {
ns.log("IriSP.Metadataplayer.prototype.onLibsLoaded");
- if (typeof ns.jQuery === "undefined" && typeof window.jQuery !== "undefined") {
- ns.jQuery = window.jQuery;
- if (former$ || formerJQuery) {
- window.jQuery.noConflict(formerJQuery);
- }
- }
- if (typeof ns._ === "undefined" && typeof window._ !== "undefined") {
- ns._ = window._;
- if (formerUnderscore) {
- _.noConflict();
- }
- }
-
- ns.loadCss(ns.getLib("cssjQueryUI"));
- ns.loadCss(this.config.css);
+ // if (
+ // typeof jQuery === "undefined" &&
+ // typeof window.jQuery !== "undefined"
+ // ) {
+ // jQuery = window.jQuery;
+ // if (former$ || formerJQuery) {
+ // window.jQuery.noConflict(formerJQuery);
+ // }
+ // }
+ // if (typeof _ === "undefined" && typeof window._ !== "undefined") {
+ // _ = window._;
+ // if (formerUnderscore) {
+ // _.noConflict();
+ // }
+ // }
- this.$ = ns.jQuery('#' + this.config.container);
+ this.$ = jQuery("#" + this.config.container);
this.$.css({
- "width": this.config.width,
- "clear": "both"
+ width: this.config.width,
+ clear: "both",
});
if (typeof this.config.height !== "undefined") {
- this.$.css("height", this.config.height);
+ this.$.css("height", this.config.height);
}
this.widgets = [];
var _this = this;
- ns._(this.config.widgets).each(function(widgetconf, key) {
- _this.widgets.push(null);
- _this.loadWidget(widgetconf, function(widget) {
- _this.widgets[key] = widget;
- if (widget.isLoaded()) {
- _this.trigger("widget-loaded");
- }
- });
+ _(this.config.widgets).each(function (widgetconf, key) {
+ _this.widgets.push(null);
+ _this.loadWidget(widgetconf, function (widget) {
+ _this.widgets[key] = widget;
+ if (widget.isLoaded()) {
+ _this.trigger("widget-loaded");
+ }
+ });
});
- this.$.find('.Ldt-Loader').detach();
+ this.$.find(".Ldt-Loader").detach();
this.widgetsLoaded = false;
- this.on("widget-loaded", function() {
- if (_this.widgetsLoaded) {
- return;
- }
- var isloaded = !ns._(_this.widgets).any(function(w) {
- return !(w && w.isLoaded());
- });
- if (isloaded) {
- _this.widgetsLoaded = true;
- _this.trigger("widgets-loaded");
- }
+ this.on("widget-loaded", function () {
+ if (_this.widgetsLoaded) {
+ return;
+ }
+ var isloaded = !_(_this.widgets).some(function (w) {
+ return !(w && w.isLoaded());
+ });
+ if (isloaded) {
+ _this.widgetsLoaded = true;
+ _this.trigger("widgets-loaded");
+ }
});
-};
+ };
-Metadataplayer.prototype.loadLocalAnnotations = function(localsourceidentifier) {
+ Metadataplayer.prototype.loadLocalAnnotations = function (
+ localsourceidentifier
+ ) {
if (this.localSource === undefined)
- this.localSource = this.sourceManager.newLocalSource({serializer: IriSP.serializers['ldt_localstorage']});
+ this.localSource = this.sourceManager.newLocalSource({
+ serializer: IriSP.serializers["ldt_localstorage"],
+ });
// Load current local annotations
if (localsourceidentifier) {
- // Allow to override localsourceidentifier when necessary (usually at init time)
- this.localSource.identifier = localsourceidentifier;
+ // Allow to override localsourceidentifier when necessary (usually at init time)
+ this.localSource.identifier = localsourceidentifier;
}
- this.localSource.deSerialize(window.localStorage[this.localSource.identifier] || "[]");
+ this.localSource.deSerialize(
+ window.localStorage[this.localSource.identifier] || "[]"
+ );
return this.localSource;
-};
+ };
-Metadataplayer.prototype.saveLocalAnnotations = function() {
+ Metadataplayer.prototype.saveLocalAnnotations = function () {
// Save annotations back to localstorage
- window.localStorage[this.localSource.identifier] = this.localSource.serialize();
+ window.localStorage[this.localSource.identifier] =
+ this.localSource.serialize();
// Merge modifications into widget source
// this.source.merge(this.localSource);
-};
+ };
-Metadataplayer.prototype.addLocalAnnotation = function(a) {
+ Metadataplayer.prototype.addLocalAnnotation = function (a) {
this.loadLocalAnnotations();
this.localSource.getAnnotations().push(a);
this.saveLocalAnnotations();
-};
+ };
-Metadataplayer.prototype.deleteLocalAnnotation = function(ident) {
+ Metadataplayer.prototype.deleteLocalAnnotation = function (ident) {
this.localSource.getAnnotations().removeId(ident, true);
this.saveLocalAnnotations();
-};
+ };
-Metadataplayer.prototype.getLocalAnnotation = function (ident) {
+ Metadataplayer.prototype.getLocalAnnotation = function (ident) {
this.loadLocalAnnotations();
// We cannot use .getElement since it fetches
// elements from the global Directory
- return IriSP._.first(IriSP._.filter(this.localSource.getAnnotations(), function (a) { return a.id == ident; }));
-};
+ return _.first(
+ _.filter(this.localSource.getAnnotations(), function (a) {
+ return a.id == ident;
+ })
+ );
+ };
-Metadataplayer.prototype.loadMetadata = function(_metadataInfo) {
+ Metadataplayer.prototype.loadMetadata = function (_metadataInfo) {
if (_metadataInfo.elementType === "source") {
- return _metadataInfo;
+ return _metadataInfo;
}
- if (typeof _metadataInfo.serializer === "undefined" && typeof _metadataInfo.format !== "undefined") {
- _metadataInfo.serializer = ns.serializers[_metadataInfo.format];
+ if (
+ typeof _metadataInfo.serializer === "undefined" &&
+ typeof _metadataInfo.format !== "undefined"
+ ) {
+ _metadataInfo.serializer = ns.serializers[_metadataInfo.format];
}
- if (typeof _metadataInfo.url !== "undefined" && typeof _metadataInfo.serializer !== "undefined") {
- return this.sourceManager.remoteSource(_metadataInfo);
+ if (
+ typeof _metadataInfo.url !== "undefined" &&
+ typeof _metadataInfo.serializer !== "undefined"
+ ) {
+ return this.sourceManager.remoteSource(_metadataInfo);
} else {
- return this.sourceManager.newLocalSource(_metadataInfo);
+ return this.sourceManager.newLocalSource(_metadataInfo);
}
-};
+ };
-Metadataplayer.prototype.loadWidget = function(_widgetConfig, _callback) {
+ Metadataplayer.prototype.loadWidget = function (_widgetConfig, _callback) {
/* Creating containers if needed */
if (typeof _widgetConfig.container === "undefined") {
- var _divs = this.layoutDivs(_widgetConfig.type);
- _widgetConfig.container = _divs[0];
+ var _divs = this.layoutDivs(_widgetConfig.type);
+ _widgetConfig.container = _divs[0];
}
var _this = this;
if (typeof ns.Widgets[_widgetConfig.type] !== "undefined") {
- ns._.defer(function() {
- _callback(new ns.Widgets[_widgetConfig.type](_this, _widgetConfig));
- });
+ _.defer(function () {
+ _callback(new ns.Widgets[_widgetConfig.type](_this, _widgetConfig));
+ });
} else {
- /* Loading Widget CSS */
- if (typeof ns.widgetsRequirements[_widgetConfig.type] === "undefined" || typeof ns.widgetsRequirements[_widgetConfig.type].noCss === "undefined" || !ns.widgetsRequirements[_widgetConfig.type].noCss) {
- ns.loadCss(ns.widgetsDir + '/' + _widgetConfig.type + '.css');
- }
- /* Loading Widget JS */
- $LAB.script(ns.widgetsDir + '/' + _widgetConfig.type + '.js').wait(function() {
- _callback(new ns.Widgets[_widgetConfig.type](_this, _widgetConfig));
- });
+ ns.log("Widget type " + _widgetConfig.type + " Unkown !");
}
-};
+ };
-/** create a subdiv with an unique id, and a spacer div as well.
+ /** create a subdiv with an unique id, and a spacer div as well.
@param widgetName the name of the widget.
@return an array of the form [createdivId, spacerdivId].
*/
-Metadataplayer.prototype.layoutDivs = function(_name, _height) {
- if (typeof(_name) === "undefined") {
- _name = "";
+ Metadataplayer.prototype.layoutDivs = function (_name, _height) {
+ if (typeof _name === "undefined") {
+ _name = "";
}
- var newDiv = ns._.uniqueId(this.config.container + "_widget_" + _name + "_"),
- spacerDiv = ns._.uniqueId("LdtPlayer_spacer_"),
- divHtml = ns.jQuery('<div>')
- .attr("id",newDiv)
- .css({
- width: this.config.width + "px",
- position: "relative",
- clear: "both"
- }),
- spacerHtml = ns.jQuery('<div>')
- .attr("id",spacerDiv)
- .css({
- width: this.config.width + "px",
- height: this.config.spacer_div_height + "px",
- position: "relative",
- clear: "both"
- });
+ var newDiv = _.uniqueId(this.config.container + "_widget_" + _name + "_"),
+ spacerDiv = _.uniqueId("LdtPlayer_spacer_"),
+ divHtml = jQuery("<div>")
+ .attr("id", newDiv)
+ .css({
+ width: this.config.width + "px",
+ position: "relative",
+ clear: "both",
+ }),
+ spacerHtml = jQuery("<div>")
+ .attr("id", spacerDiv)
+ .css({
+ width: this.config.width + "px",
+ height: this.config.spacer_div_height + "px",
+ position: "relative",
+ clear: "both",
+ });
if (typeof _height !== "undefined") {
- divHtml.css("height", _height);
+ divHtml.css("height", _height);
}
this.$.append(divHtml);
this.$.append(spacerHtml);
return [newDiv, spacerDiv];
-};
-
-})(IriSP);
+ };
+}
/* End of widgets-container/metadataplayer.js */
--- a/src/js/widgets-container/widget.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/js/widgets-container/widget.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,8 +1,6 @@
/* widgetsDefinition of an ancestor for the Widget classes */
-
-if (typeof IriSP.Widgets === "undefined") {
- IriSP.Widgets = {};
-}
+import Mustache from "mustache";
+import jQuery from "jquery";
/**
* @class IriSP.Widget is an "abstract" class. It's mostly used to define some properties common to every widget.
@@ -13,273 +11,333 @@
* @constructor
* @param player - a reference to the player widget
* @param config - configuration options for the widget
+ *
*/
+import _ from "lodash";
-IriSP.Widgets.Widget = function(player, config) {
+export default function (IriSP) {
+ const Widgets = {};
+
+ Widgets.Widget = class {
+
+ static defaults = {};
- if( typeof player === "undefined") {
+ static template = "";
+
+ static messages = { en: {} };
+
+ constructor(player, config) {
+ if (typeof player === "undefined") {
/* Probably an abstract call of the class when
* individual widgets set their prototype */
return;
- }
+ }
- this.__subwidgets = [];
+ this.__subwidgets = [];
- /* Setting all the configuration options */
- var _type = config.type || "(unknown)",
- _config = IriSP._.defaults({}, config, (player && player.config ? player.config.default_options : {}), this.defaults),
+ /* Setting all the configuration options */
+ var _type = config.type || "(unknown)",
+ _config = _.defaults(
+ {},
+ config,
+ player && player.config ? player.config.default_options : {},
+ this.constructor.defaults
+ ),
_this = this;
- IriSP._(_config).forEach(function(_value, _key) {
- _this[_key] = _value;
- });
+ _(_config).forEach(function (_value, _key) {
+ _this[_key] = _value;
+ });
- this.$ = IriSP.jQuery('#' + this.container);
+ this.$ = jQuery("#" + this.container);
- if (typeof this.width === "undefined") {
+ if (typeof this.width === "undefined") {
this.width = this.$.width();
- } else {
+ } else {
this.$.css("width", this.width);
- }
+ }
- if (typeof this.height !== "undefined") {
+ if (typeof this.height !== "undefined") {
this.$.css("height", this.height);
- }
+ }
- /* Setting this.player at the end in case it's been overriden
- * by a configuration option of the same name :-(
- */
- this.player = player || new IriSP.FakeClass(["on","trigger","off","loadWidget","loadMetadata"]);
+ /* Setting this.player at the end in case it's been overriden
+ * by a configuration option of the same name :-(
+ */
+ this.player =
+ player ||
+ new IriSP.FakeClass([
+ "on",
+ "trigger",
+ "off",
+ "loadWidget",
+ "loadMetadata",
+ ]);
- /* Adding classes and html attributes */
- this.$.addClass("Ldt-TraceMe Ldt-Widget").attr("widget-type", _type);
+ /* Adding classes and html attributes */
+ this.$.addClass("Ldt-TraceMe Ldt-Widget").attr("widget-type", _type);
- this.l10n = (
- typeof this.messages[IriSP.language] !== "undefined"
- ? this.messages[IriSP.language]
- : (
- IriSP.language.length > 2 && typeof this.messages[IriSP.language.substr(0,2)] !== "undefined"
- ? this.messages[IriSP.language.substr(0,2)]
- : this.messages["en"]
- )
- );
+ this.l10n =
+ typeof this.constructor.messages[IriSP.language] !== "undefined"
+ ? this.constructor.messages[IriSP.language]
+ : IriSP.language.length > 2 &&
+ typeof this.constructor.messages[IriSP.language.substr(0, 2)] !== "undefined"
+ ? this.constructor.messages[IriSP.language.substr(0, 2)]
+ : this.constructor.messages["en"];
- /* Loading Metadata if required */
+ /* Loading Metadata if required */
- function onsourceloaded() {
+ function onsourceloaded() {
if (_this.localannotations) {
- _this.localsource = player.loadLocalAnnotations(_this.localannotations);
- _this.source.merge(_this.localsource);
+ _this.localsource = player.loadLocalAnnotations(
+ _this.localannotations
+ );
+ _this.source.merge(_this.localsource);
}
if (_this.media_id) {
- _this.media = this.getElement(_this.media_id);
- } else {
- var _mediaopts = {
- is_mashup: _this.is_mashup || false
- };
- _this.media = _this.source.getCurrentMedia(_mediaopts);
- }
- if (_this.pre_draw_callback){
- IriSP.jQuery.when(_this.pre_draw_callback()).done(_this.draw());
+ _this.media = this.getElement(_this.media_id);
+ } else {
+ var _mediaopts = {
+ is_mashup: _this.is_mashup || false,
+ };
+ _this.media = _this.source.getCurrentMedia(_mediaopts);
}
- else {
- _this.draw();
+ if (_this.pre_draw_callback) {
+ jQuery.when(_this.pre_draw_callback()).done(_this.draw());
+ } else {
+ _this.draw();
}
_this.player.trigger("widget-loaded");
- }
+ }
- if (this.metadata) {
+ if (this.metadata) {
/* Getting metadata */
this.source = player.loadMetadata(this.metadata);
/* Call draw when loaded */
this.source.onLoad(onsourceloaded);
- } else {
+ } else {
if (this.source) {
- onsourceloaded();
+ onsourceloaded();
}
+ }
+ }
+
+ toString() {
+ return "Widget " + this.type;
+ }
+
+ templateToHtml(_template) {
+ return Mustache.render(_template, this);
+ }
+
+ renderTemplate() {
+ this.$.append(this.templateToHtml(this.constructor.template));
+ }
+
+ functionWrapper(_name) {
+ var _this = this,
+ _function = this[_name];
+ if (typeof _function !== "undefined") {
+ return function () {
+ return _function.apply(
+ _this,
+ Array.prototype.slice.call(arguments, 0)
+ );
+ };
+ } else {
+ console.log(
+ "Error, Unknown function IriSP.Widgets." + this.type + "." + _name
+ );
+ }
+ }
+
+ getFunctionOrName(_functionOrName) {
+ switch (typeof _functionOrName) {
+ case "function":
+ return _functionOrName;
+ case "string":
+ return this.functionWrapper(_functionOrName);
+ default:
+ return undefined;
+ }
+ }
+
+ onMdpEvent(_eventName, _functionOrName) {
+ this.player.on(_eventName, this.getFunctionOrName(_functionOrName));
+ }
+
+ onMediaEvent(_eventName, _functionOrName) {
+ this.media.on(_eventName, this.getFunctionOrName(_functionOrName));
+ }
+
+ getWidgetAnnotations() {
+ var result = null;
+ if (typeof this.annotation_type === "undefined") {
+ result = this.media.getAnnotations();
+ } else if (this.annotation_type.elementType === "annotationType") {
+ result = this.annotation_type.getAnnotations();
+ } else {
+ result = this.media.getAnnotationsByTypeTitle(this.annotation_type);
+ }
+ if (typeof this.annotation_filter !== "undefined") {
+ return this.annotation_filter(result);
+ } else {
+ return result;
+ }
+ }
+
+ getWidgetAnnotationsAtTime() {
+ var _time = this.media.getCurrentTime();
+ return this.getWidgetAnnotations().filter(function (_annotation) {
+ return _annotation.begin <= _time && _annotation.end > _time;
+ });
+ }
+
+ isLoaded() {
+ var isloaded = !_(this.__subwidgets).some(function (w) {
+ return !(w && w.isLoaded());
+ });
+ return isloaded;
+ }
+
+ insertSubwidget(_selector, _widgetoptions, _propname) {
+ var _id = _selector.attr("id"),
+ _this = this,
+ key = this.__subwidgets.length;
+ this.__subwidgets.push(null);
+ if (typeof _id == "undefined") {
+ _id = _.uniqueId(this.container + "_sub_widget_" + _widgetoptions.type);
+ _selector.attr("id", _id);
+ }
+ _widgetoptions.container = _id;
+ _this.player.loadWidget(_widgetoptions, function (_widget) {
+ if (_propname) {
+ _this[_propname] = _widget;
+ }
+ _this.__subwidgets[key] = _widget;
+ });
}
-
-};
-
-IriSP.Widgets.Widget.prototype.defaults = {};
-
-IriSP.Widgets.Widget.prototype.template = '';
-
-IriSP.Widgets.Widget.prototype.messages = {"en":{}};
-
-IriSP.Widgets.Widget.prototype.toString = function() {
- return "Widget " + this.type;
-};
-
-IriSP.Widgets.Widget.prototype.templateToHtml = function(_template) {
- return Mustache.to_html(_template, this);
-};
-
-IriSP.Widgets.Widget.prototype.renderTemplate = function() {
- this.$.append(this.templateToHtml(this.template));
-};
-
-IriSP.Widgets.Widget.prototype.functionWrapper = function(_name) {
- var _this = this,
- _function = this[_name];
- if (typeof _function !== "undefined") {
- return function() {
- return _function.apply(_this, Array.prototype.slice.call(arguments, 0));
- };
- } else {
- console.log("Error, Unknown function IriSP.Widgets." + this.type + "." + _name);
+ /*
+ * Position the player to the next/previous annotations based on current player position
+ *
+ * Parameter: offset: -1 for previous annotation, +1 for next annotation
+ */
+ navigate(offset) {
+ // offset is normally either -1 (previous slide) or +1 (next slide)
+ var _this = this;
+ var currentTime = _this.media.getCurrentTime();
+ var annotations = _this
+ .getWidgetAnnotations()
+ .sortBy(function (_annotation) {
+ return _annotation.begin;
+ });
+ for (var i = 0; i < annotations.length; i++) {
+ if (
+ annotations[i].begin <= currentTime &&
+ currentTime < annotations[i].end
+ ) {
+ // Found a current annotation - clamp i+offset value to [0, length - 1]
+ i = Math.min(annotations.length - 1, Math.max(0, i + offset));
+ _this.media.setCurrentTime(annotations[i].begin);
+ break;
+ }
+ }
}
-};
-IriSP.Widgets.Widget.prototype.getFunctionOrName = function(_functionOrName) {
- switch (typeof _functionOrName) {
- case "function":
- return _functionOrName;
- case "string":
- return this.functionWrapper(_functionOrName);
- default:
- return undefined;
- }
-};
-
-IriSP.Widgets.Widget.prototype.onMdpEvent = function(_eventName, _functionOrName) {
- this.player.on(_eventName, this.getFunctionOrName(_functionOrName));
-};
-
-IriSP.Widgets.Widget.prototype.onMediaEvent = function(_eventName, _functionOrName) {
- this.media.on(_eventName, this.getFunctionOrName(_functionOrName));
-};
+ /*
+ * Propose an export of the widget's annotations
+ *
+ * Parameter: a list of annotations. If not specified, the widget's annotations will be exported.
+ */
+ exportAnnotations(annotations) {
+ var widget = this;
+ if (annotations === undefined) annotations = this.getWidgetAnnotations();
+ var $ = jQuery;
-IriSP.Widgets.Widget.prototype.getWidgetAnnotations = function() {
- var result = null;
- if (typeof this.annotation_type === "undefined") {
- result = this.media.getAnnotations();
- } else if (this.annotation_type.elementType === "annotationType") {
- result = this.annotation_type.getAnnotations();
- } else {
- result = this.media.getAnnotationsByTypeTitle(this.annotation_type);
- }
- if (typeof this.annotation_filter !== "undefined") {
- return this.annotation_filter(result);
- } else {
- return result;
- }
-};
-
-IriSP.Widgets.Widget.prototype.getWidgetAnnotationsAtTime = function() {
- var _time = this.media.getCurrentTime();
- return this.getWidgetAnnotations().filter(function(_annotation) {
- return _annotation.begin <= _time && _annotation.end > _time;
- });
-};
-
-IriSP.Widgets.Widget.prototype.isLoaded = function() {
- var isloaded = !IriSP._(this.__subwidgets).any(function(w) {
- return !(w && w.isLoaded());
- });
- return isloaded;
-};
+ // FIXME: this should belong to a proper serialize/deserialize component?
+ var content =
+ Mustache.render("[video:{{url}}]\n", { url: widget.media.url }) +
+ annotations
+ .map(function (a) {
+ return Mustache.render(
+ "[{{ a.begin }}]{{ a.title }} {{ a.description }}[{{ a.end }}]",
+ { a: a }
+ );
+ })
+ .join("\n");
-IriSP.Widgets.Widget.prototype.insertSubwidget = function(_selector, _widgetoptions, _propname) {
- var _id = _selector.attr("id"),
- _this = this,
- _type = _widgetoptions.type,
- $L = $LAB,
- key = this.__subwidgets.length;
- this.__subwidgets.push(null);
- if (typeof _id == "undefined") {
- _id = IriSP._.uniqueId(this.container + '_sub_widget_' + _widgetoptions.type);
- _selector.attr("id", _id);
- }
- _widgetoptions.container = _id;
- if (typeof IriSP.widgetsRequirements[_type] !== "undefined" && typeof IriSP.widgetsRequirements[_type].requires !== "undefined" ) {
- for (var _j = 0; _j < IriSP.widgetsRequirements[_type].requires.length; _j++) {
- $L.script(IriSP.getLib(IriSP.widgetsRequirements[_type].requires[_j]));
- }
- }
- $L.wait(function() {
- _this.player.loadWidget(_widgetoptions, function(_widget) {
- if (_propname) {
- _this[_propname] = _widget;
+ var el = $("<pre>")
+ .addClass("exportContainer")
+ .text(content)
+ .dialog({
+ title: "Annotation export",
+ open: function (event, ui) {
+ // Select text
+ var range;
+ if (document.selection) {
+ range = document.body.createTextRange();
+ range.moveToElementText(this[0]);
+ range.select();
+ } else if (window.getSelection) {
+ range = document.createRange();
+ range.selectNode(this[0]);
+ window.getSelection().addRange(range);
}
- _this.__subwidgets[key] = _widget;
+ },
+ autoOpen: true,
+ width: "80%",
+ minHeight: "400",
+ height: 400,
+ buttons: [
+ {
+ text: "Close",
+ click: function () {
+ $(this).dialog("close");
+ },
+ },
+ {
+ text: "Download",
+ click: function () {
+ a = document.createElement("a");
+ a.setAttribute(
+ "href",
+ "data:text/plain;base64," + btoa(content)
+ );
+ a.setAttribute(
+ "download",
+ "Annotations - " +
+ widget.media.title.replace(/[^ \w]/g, "") +
+ ".txt"
+ );
+ a.click();
+ },
+ },
+ ],
});
- });
-};
-
-/*
- * Position the player to the next/previous annotations based on current player position
- *
- * Parameter: offset: -1 for previous annotation, +1 for next annotation
- */
-IriSP.Widgets.Widget.prototype.navigate = function(offset) {
- // offset is normally either -1 (previous slide) or +1 (next slide)
- var _this = this;
- var currentTime = _this.media.getCurrentTime();
- var annotations = _this.getWidgetAnnotations().sortBy(function(_annotation) {
- return _annotation.begin;
- });
- for (var i = 0; i < annotations.length; i++) {
- if (annotations[i].begin <= currentTime && currentTime < annotations[i].end) {
- // Found a current annotation - clamp i+offset value to [0, length - 1]
- i = Math.min(annotations.length - 1, Math.max(0, i + offset));
- _this.media.setCurrentTime(annotations[i].begin);
- break;
- }
- };
-};
+ }
-/*
- * Propose an export of the widget's annotations
- *
- * Parameter: a list of annotations. If not specified, the widget's annotations will be exported.
- */
-IriSP.Widgets.Widget.prototype.exportAnnotations = function(annotations) {
- var widget = this;
- if (annotations === undefined)
- annotations = this.getWidgetAnnotations();
- var $ = IriSP.jQuery;
-
- // FIXME: this should belong to a proper serialize/deserialize component?
- var content = Mustache.to_html("[video:{{url}}]\n", {url: widget.media.url}) + annotations.map( function(a) { return Mustache.to_html("[{{ a.begin }}]{{ a.title }} {{ a.description }}[{{ a.end }}]", { a: a }); }).join("\n");
+ /**
+ * This method responsible of drawing a widget on screen.
+ */
+ draw() {
+ /* implemented by "sub-classes" */
+ }
- var el = $("<pre>")
- .addClass("exportContainer")
- .text(content)
- .dialog({
- title: "Annotation export",
- open: function( event, ui ) {
- // Select text
- var range;
- if (document.selection) {
- range = document.body.createTextRange();
- range.moveToElementText(this[0]);
- range.select();
- } else if (window.getSelection) {
- range = document.createRange();
- range.selectNode(this[0]);
- window.getSelection().addRange(range);
- }
- },
- autoOpen: true,
- width: '80%',
- minHeight: '400',
- height: 400,
- buttons: [ { text: "Close", click: function() { $( this ).dialog( "close" ); } },
- { text: "Download", click: function () {
- a = document.createElement('a');
- a.setAttribute('href', 'data:text/plain;base64,' + btoa(content));
- a.setAttribute('download', 'Annotations - ' + widget.media.title.replace(/[^ \w]/g, '') + '.txt');
- a.click();
- } } ]
- });
-};
+ //Generates uid
+ //source : http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
+ generateUid() {
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
+ /[xy]/g,
+ function (c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === "x" ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ }
+ );
+ }
+ };
-/**
- * This method responsible of drawing a widget on screen.
- */
-IriSP.Widgets.Widget.prototype.draw = function() {
- /* implemented by "sub-classes" */
-};
+ return Widgets;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main.js Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,45 @@
+import style from "./main.module.css";
+
+import IriSP from "./js/init";
+
+if (typeof window.IriSP === "undefined") {
+ window.IriSP = IriSP;
+}
+
+import Model from "./js/model";
+
+IriSP.Model = Model(IriSP);
+
+import htmlPlayer from "./js/html-player";
+
+IriSP.htmlPlayer = htmlPlayer;
+
+import utils from "./js/utils";
+
+Object.assign(IriSP, utils(IriSP));
+
+import iFrameUpdater from "./js/iframe_embed/embedder";
+
+IriSP.iFrameUpdater = iFrameUpdater;
+
+import serializers from "./js/serializers";
+
+IriSP.serializers = serializers(IriSP);
+
+import defaults from "./js/widgets-container/defaults";
+
+Object.assign(IriSP, defaults(IriSP));
+
+import metadataplayer from "./js/widgets-container/metadataplayer";
+
+metadataplayer(IriSP);
+
+import widgetsBase from "./js/widgets-container/widget";
+
+IriSP.Widgets = widgetsBase(IriSP);
+
+import widgets from "./widgets";
+
+Object.assign(IriSP.Widgets, widgets(IriSP));
+
+export default { IriSP, style };
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,1 @@
+@import "css/LdtPlayer-core.css"
\ No newline at end of file
--- a/src/widgets/AdaptivePlayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/AdaptivePlayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,33 +1,38 @@
-IriSP.Widgets.AdaptivePlayer = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
-
-IriSP.Widgets.AdaptivePlayer.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.AdaptivePlayer.prototype.defaults = {
- mime_type: 'video/mp4; codecs="avc1.42E01E"',
- normal_player: "HtmlPlayer",
- fallback_player: "JwpPlayer"
-};
-
-IriSP.Widgets.AdaptivePlayer.prototype.draw = function() {
-
- if (typeof this.video === "undefined") {
- this.video = this.media.video;
- }
-
- var _props = [ "autostart", "video", "height", "width", "url_transform" ],
- _opts = {},
- _canPlayType = document.createElement('video').canPlayType(this.mime_type);
-
- _opts.type = (_canPlayType !== "no") ? this.normal_player : this.fallback_player;
-
- for (var i = 0; i < _props.length; i++) {
- if (typeof this[_props[i]] !== "undefined") {
- _opts[_props[i]] = this[_props[i]];
- }
+// Class AdaptivePlayer
+const AdaptivePlayer = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
}
- this.insertSubwidget(this.$, _opts);
-
-};
\ No newline at end of file
+ static defaults = {
+ mime_type: 'video/mp4; codecs="avc1.42E01E"',
+ normal_player: "HtmlPlayer",
+ fallback_player: "HtmlPlayer",
+ };
+
+ draw() {
+ if (typeof this.video === "undefined") {
+ this.video = this.media.video;
+ }
+
+ var _props = ["autostart", "video", "height", "width", "url_transform"],
+ _opts = {},
+ _canPlayType = document
+ .createElement("video")
+ .canPlayType(this.mime_type);
+
+ _opts.type =
+ _canPlayType !== "no" ? this.normal_player : this.fallback_player;
+
+ for (var i = 0; i < _props.length; i++) {
+ if (typeof this[_props[i]] !== "undefined") {
+ _opts[_props[i]] = this[_props[i]];
+ }
+ }
+
+ this.insertSubwidget(this.$, _opts);
+ }
+ };
+};
+export { AdaptivePlayer };
--- a/src/widgets/Annotation.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-.Ldt-Annotation-Widget {
- border-style: none solid solid;
- border-width: 1px;
- border-color: #b7b7b7;
- padding: 0 1px 1px;
- margin: 0;
-}
-
-.Ldt-Annotation-Widget.Ldt-Annotation-ShowTop {
- border-top-style: solid;
- padding-top: 1px;
-}
-
-.Ldt-Annotation-Inner {
- background: url(img/pinstripe.png);
- padding: 5px;
- margin: 0;
-}
-
-.Ldt-Annotation-Inner h3 {
- margin: 5px 0;
- font-size: 14px;
- font-weight: bold;
-}
-
-.Ldt-Annotation-Description {
- max-height: 150px;
- overflow: auto;
-}
-
-.Ldt-Annotation-Cleared {
- clear: both;
-}
-
-.Ldt-Annotation-MaxMinButton {
- float: right; margin: 5px 5px 0; width: 17px; height: 17px;
- background: url(img/widget-control.png); background-position: 0 -51px; cursor: pointer;
-}
-
-.Ldt-Annotation-Social {
- float: right;
-}
-
-.Ldt-Annotation-MaxMinButton:hover {
- background-position: -17px -51px;
-}
-
-.Ldt-Annotation-Minimized div.Ldt-Annotation-MaxMinButton {
- background-position: 0 -34px;
-}
-
-.Ldt-Annotation-Minimized div.Ldt-Annotation-MaxMinButton:hover {
- background-position: -17px -34px;
-}
-
-.Ldt-Annotation-Inner h3.Ldt-Annotation-MashupOrigin {
- font-size: 12px;
-}
-
-.Ldt-Annotation-Title, .Ldt-Annotation-MashupMedia {
- color: #0068c4;
- text-decoration: none;
-}
-
-.Ldt-Annotation-Type {
- color: #8080A0;
-}
-
-.Ldt-Annotation-Time {
- color: #ff3b77
-}
-
-.Ldt-Annotation-Inner p {
- font-size: 12px;
- line-height: 16px;
-}
-
-.Ldt-Annotation-Label {
- font-size: 12px; font-weight: bold; max-width: 90px; float: left; clear: left;
-}
-
-.Ldt-Annotation-Labelled {
- margin: 5px 0 0 90px; clear: right;
-}
-
-.Ldt-Annotation-Tags-Block {
- font-size: 12px;
-}
-
-ul.Ldt-Annotation-Tags {
- list-style: none; padding: 0;
-}
-
-li.Ldt-Annotation-TagLabel {
- display: inline-block; border: none; margin: 0 10px 5px 0; height: 23px; padding: 0 0 0 20px;
- background: url(img/tag.png) left top no-repeat;
- cursor: pointer;
-}
-
-.Ldt-Annotation-TagLabel span {
- display: inline-block; font-size: 12px; height: 19px; padding: 4px 5px 0 0; border: none; margin: 0;
- background: url(img/tag.png) right top no-repeat;
-}
-
-li.Ldt-Annotation-TagLabel:hover {
- background-position: left -23px;
-}
-
-.Ldt-Annotation-TagLabel:hover span {
- background-position: right -23px;
-}
-
-.Ldt-Annotation-MashupOrigin {
- display: none;
-}
-
-.Ldt-Annotation-isMashup .Ldt-Annotation-MashupOrigin {
- display: block;
-}
-
-.Ldt-Annotation-Empty .Ldt-Annotation-HiddenWhenEmpty {
- display: none;
-}
-
-.Ldt-Annotation-Minimized .Ldt-Annotation-HiddenWhenMinimized {
- display: none;
-}
-
-.Ldt-Annotation-EmptyBlock {
- display: none;
-}
-
--- a/src/widgets/Annotation.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Annotation.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,239 +1,316 @@
// TODO: Migrate Timeupdate functions to Extract
+import annotationStyles from "./Annotation.module.css";
-IriSP.Widgets.Annotation = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
- this.lastAnnotation = false;
- this.minimized = this.start_minimized || false;
- this.bounds = [ 0, 0 ];
-};
+// Annotation class
+const Annotation = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ this.lastAnnotation = false;
+ this.minimized = this.start_minimized || false;
+ this.bounds = [0, 0];
+ }
-IriSP.Widgets.Annotation.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.Annotation.prototype.messages = {
- fr: {
+ static messages = {
+ fr: {
watching: "Je regarde ",
on_site: " sur ",
tags_: "Mots-clés\u00a0:",
description_: "Description\u00a0:",
creator_: "Créé par\u00a0:",
excerpt_from: "Extrait de\u00a0:",
- untitled: "Segment sans titre"
- },
- en: {
+ untitled: "Segment sans titre",
+ },
+ en: {
watching: "I'm watching ",
on_site: " on ",
tags_: "Keywords:",
description_: "Description:",
creator_: "Created by\u00a0:",
excerpt_from: "Excerpt from:",
- untitled: "Untitled segment"
- }
-};
+ untitled: "Untitled segment",
+ },
+ };
-IriSP.Widgets.Annotation.prototype.template =
- '{{#show_arrow}}<div class="Ldt-Annotation-Arrow"></div>{{/show_arrow}}'
- + '<div class="Ldt-Annotation-Widget {{^show_arrow}}Ldt-Annotation-ShowTop{{/show_arrow}}">'
- + '<div class="Ldt-Annotation-Inner Ldt-Annotation-Empty{{#start_minimized}} Ldt-Annotation-Minimized{{/start_minimized}}">'
- + '<div class="Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-MaxMinButton"></div>'
- + '{{#show_social}}<div class="Ldt-Annotation-Social Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty"></div>{{/show_social}}'
- + '<h3 class="Ldt-Annotation-HiddenWhenEmpty">{{#show_annotation_type}}<span class="Ldt-Annotation-Type"></span> » {{/show_annotation_type}}<a class="Ldt-Annotation-Title" href="#"></a> <span class="Ldt-Annotation-Time Ldt-Annotation-HiddenWhenMinimized">'
- + '(<span class="Ldt-Annotation-Begin"></span> - <span class="Ldt-Annotation-End"></span>)</span></h3>'
- + '<h3 class="Ldt-Annotation-MashupOrigin Ldt-Annotation-HiddenWhenEmpty">{{l10n.excerpt_from}} <span class="Ldt-Annotation-MashupMedia"></span> <span class="Ldt-Annotation-Time Ldt-Annotation-HiddenWhenMinimized">'
- + '(<span class="Ldt-Annotation-MashupBegin"></span> - <span class="Ldt-Annotation-MashupEnd"></span>)</span></h3>'
- + '<div class="Ldt-Annotation-Cleared Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-Creator-Block"><div class="Ldt-Annotation-Label">{{l10n.creator_}}</div>'
- + '{{#show_creator}}<p class="Ldt-Annotation-Labelled Ldt-Annotation-Creator"></p></div>{{/show_creator}}'
- + '{{#show_description}}<div class="Ldt-Annotation-Cleared Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-Description-Block"><div class="Ldt-Annotation-Label">{{l10n.description_}}</div>'
- + '<p class="Ldt-Annotation-Labelled Ldt-Annotation-Description"></p></div>{{/show_description}}'
- + '<div class="Ldt-Annotation-Tags-Block Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-Cleared">'
- + '<div class="Ldt-Annotation-Label">{{l10n.tags_}}</div><ul class="Ldt-Annotation-Labelled Ldt-Annotation-Tags"></ul>'
- + '</div></div></div></div>';
+ static template =
+ '{{#show_arrow}}<div class="Ldt-Annotation-Arrow"></div>{{/show_arrow}}' +
+ '<div class="Ldt-Annotation-Widget {{^show_arrow}}Ldt-Annotation-ShowTop{{/show_arrow}}">' +
+ '<div class="Ldt-Annotation-Inner Ldt-Annotation-Empty{{#start_minimized}} Ldt-Annotation-Minimized{{/start_minimized}}">' +
+ '<div class="Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-MaxMinButton"></div>' +
+ '{{#show_social}}<div class="Ldt-Annotation-Social Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty"></div>{{/show_social}}' +
+ '<h3 class="Ldt-Annotation-HiddenWhenEmpty">{{#show_annotation_type}}<span class="Ldt-Annotation-Type"></span> » {{/show_annotation_type}}<a class="Ldt-Annotation-Title" href="#"></a> <span class="Ldt-Annotation-Time Ldt-Annotation-HiddenWhenMinimized">' +
+ '(<span class="Ldt-Annotation-Begin"></span> - <span class="Ldt-Annotation-End"></span>)</span></h3>' +
+ '<h3 class="Ldt-Annotation-MashupOrigin Ldt-Annotation-HiddenWhenEmpty">{{l10n.excerpt_from}} <span class="Ldt-Annotation-MashupMedia"></span> <span class="Ldt-Annotation-Time Ldt-Annotation-HiddenWhenMinimized">' +
+ '(<span class="Ldt-Annotation-MashupBegin"></span> - <span class="Ldt-Annotation-MashupEnd"></span>)</span></h3>' +
+ '<div class="Ldt-Annotation-Cleared Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-Creator-Block"><div class="Ldt-Annotation-Label">{{l10n.creator_}}</div>' +
+ '{{#show_creator}}<p class="Ldt-Annotation-Labelled Ldt-Annotation-Creator"></p></div>{{/show_creator}}' +
+ '{{#show_description}}<div class="Ldt-Annotation-Cleared Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-Description-Block"><div class="Ldt-Annotation-Label">{{l10n.description_}}</div>' +
+ '<p class="Ldt-Annotation-Labelled Ldt-Annotation-Description"></p></div>{{/show_description}}' +
+ '<div class="Ldt-Annotation-Tags-Block Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-Cleared">' +
+ '<div class="Ldt-Annotation-Label">{{l10n.tags_}}</div><ul class="Ldt-Annotation-Labelled Ldt-Annotation-Tags"></ul>' +
+ "</div></div></div></div>";
-IriSP.Widgets.Annotation.prototype.defaults = {
- annotation_type : "chap",
- start_minimized: false,
- show_arrow : true,
- show_creator: true,
- show_description: true,
- arrow_position: .5,
- site_name : "Lignes de Temps",
- search_on_tag_click: true,
- show_social: true,
- show_annotation_type: false
-};
+ static defaults = {
+ annotation_type: "chap",
+ start_minimized: false,
+ show_arrow: true,
+ show_creator: true,
+ show_description: true,
+ arrow_position: 0.5,
+ site_name: "Lignes de Temps",
+ search_on_tag_click: true,
+ show_social: true,
+ show_annotation_type: false,
+ };
-IriSP.Widgets.Annotation.prototype.draw = function() {
-
- var _this = this,
+ draw() {
+ var _this = this,
currentAnnotation;
-
- function timeupdate(_time) {
+
+ function timeupdate(_time) {
var _list = _this.getWidgetAnnotationsAtTime();
if (!_list.length) {
- _this.$.find(".Ldt-Annotation-Inner").addClass("Ldt-Annotation-Empty");
- if (_this.arrow) {
- _this.arrow.moveToTime(_time);
- }
- _this.bounds = [ _time, _time ];
- _this.sendBounds();
+ _this.$.find(".Ldt-Annotation-Inner").addClass(
+ "Ldt-Annotation-Empty"
+ );
+ if (_this.arrow) {
+ _this.arrow.moveToTime(_time);
+ }
+ _this.bounds = [_time, _time];
+ _this.sendBounds();
}
- }
-
- function highlightTitleAndDescription() {
+ }
+
+ function highlightTitleAndDescription() {
if (!currentAnnotation) {
- return;
+ return;
}
var title = currentAnnotation.title,
- description = currentAnnotation.description.replace(/(^\s+|\s+$)/g,''),
- rx = (currentAnnotation.found ? (_this.source.getAnnotations().regexp || false) : false);
- _this.$.find(".Ldt-Annotation-Title").html(IriSP.textFieldHtml(title,rx) || "(" + _this.l10n.untitled + ")");
+ description = currentAnnotation.description.replace(
+ /(^\s+|\s+$)/g,
+ ""
+ ),
+ rx = currentAnnotation.found
+ ? _this.source.getAnnotations().regexp || false
+ : false;
+ _this.$.find(".Ldt-Annotation-Title").html(
+ IriSP.textFieldHtml(title, rx) || "(" + _this.l10n.untitled + ")"
+ );
if (description) {
- _this.$.find(".Ldt-Annotation-Description-Block").removeClass("Ldt-Annotation-EmptyBlock");
- _this.$.find(".Ldt-Annotation-Description").html(IriSP.textFieldHtml(description,rx));
+ _this.$.find(".Ldt-Annotation-Description-Block").removeClass(
+ "Ldt-Annotation-EmptyBlock"
+ );
+ _this.$.find(".Ldt-Annotation-Description").html(
+ IriSP.textFieldHtml(description, rx)
+ );
} else {
- _this.$.find(".Ldt-Annotation-Description-Block").addClass("Ldt-Annotation-EmptyBlock");
+ _this.$.find(".Ldt-Annotation-Description-Block").addClass(
+ "Ldt-Annotation-EmptyBlock"
+ );
}
- }
-
- function drawAnnotation(_annotation) {
+ }
+
+ function drawAnnotation(_annotation) {
currentAnnotation = _annotation;
- var _url = (typeof _annotation.url !== "undefined"
- ? _annotation.url
- : (document.location.href.replace(/#.*$/,'') + '#id=' + _annotation.id)),
- _text = _this.l10n.watching + _annotation.title + (_this.site_name ? _this.l10n.on_site + _this.site_name : ''),
- _tags = _annotation.getTags(),
- _tagblock = _this.$.find(".Ldt-Annotation-Tags");
+ var _url =
+ typeof _annotation.url !== "undefined"
+ ? _annotation.url
+ : document.location.href.replace(/#.*$/, "") +
+ "#id=" +
+ _annotation.id,
+ _text =
+ _this.l10n.watching +
+ _annotation.title +
+ (_this.site_name ? _this.l10n.on_site + _this.site_name : ""),
+ _tags = _annotation.getTags(),
+ _tagblock = _this.$.find(".Ldt-Annotation-Tags");
_tagblock.empty();
if (_tags.length) {
- _this.$.find(".Ldt-Annotation-Tags-Block").removeClass("Ldt-Annotation-EmptyBlock");
- _tags.forEach(function(_tag) {
- var _trimmedTitle = _tag.title.replace(/(^\s+|\s+$)/g,'');
- if (_trimmedTitle) {
- var _el = IriSP.jQuery('<li class="Ldt-Annotation-TagLabel"></li>').append(IriSP.jQuery('<span>').text(_trimmedTitle));
- _el.click(function() {
- if (_this.search_on_tag_click) {
- _this.source.getAnnotations().search(_trimmedTitle);
- }
- _tag.trigger("click");
- });
- _tagblock.append(_el);
+ _this.$.find(".Ldt-Annotation-Tags-Block").removeClass(
+ "Ldt-Annotation-EmptyBlock"
+ );
+ _tags.forEach(function (_tag) {
+ var _trimmedTitle = _tag.title.replace(/(^\s+|\s+$)/g, "");
+ if (_trimmedTitle) {
+ var _el = IriSP.jQuery(
+ '<li class="Ldt-Annotation-TagLabel"></li>'
+ ).append(IriSP.jQuery("<span>").text(_trimmedTitle));
+ _el.click(function () {
+ if (_this.search_on_tag_click) {
+ _this.source.getAnnotations().search(_trimmedTitle);
}
- });
+ _tag.trigger("click");
+ });
+ _tagblock.append(_el);
+ }
+ });
} else {
- _this.$.find(".Ldt-Annotation-Tags-Block").addClass("Ldt-Annotation-EmptyBlock");
+ _this.$.find(".Ldt-Annotation-Tags-Block").addClass(
+ "Ldt-Annotation-EmptyBlock"
+ );
}
highlightTitleAndDescription();
if (_this.show_creator) {
- _this.$.find(".Ldt-Annotation-Creator").text(_annotation.creator);
+ _this.$.find(".Ldt-Annotation-Creator").text(_annotation.creator);
}
if (_this.show_annotation_type) {
- _this.$.find(".Ldt-Annotation-Type").text(_annotation.getAnnotationType().title);
- _this.$.find(".Ldt-Annotation-Type").attr("title", _annotation.getAnnotationType().description);
+ _this.$.find(".Ldt-Annotation-Type").text(
+ _annotation.getAnnotationType().title
+ );
+ _this.$.find(".Ldt-Annotation-Type").attr(
+ "title",
+ _annotation.getAnnotationType().description
+ );
}
- _this.$.find(".Ldt-Annotation-Begin").text(_annotation.begin.toString());
+ _this.$.find(".Ldt-Annotation-Begin").text(
+ _annotation.begin.toString()
+ );
_this.$.find(".Ldt-Annotation-End").text(_annotation.end.toString());
if (_annotation.elementType === "mashedAnnotation") {
- _this.$.find('.Ldt-Annotation-Inner').addClass("Ldt-Annotation-isMashup");
- _this.$.find(".Ldt-Annotation-MashupMedia").text(_annotation.getMedia().title);
- _this.$.find(".Ldt-Annotation-MashupBegin").text(_annotation.annotation.begin.toString());
- _this.$.find(".Ldt-Annotation-MashupEnd").text(_annotation.annotation.end.toString());
+ _this.$.find(".Ldt-Annotation-Inner").addClass(
+ "Ldt-Annotation-isMashup"
+ );
+ _this.$.find(".Ldt-Annotation-MashupMedia").text(
+ _annotation.getMedia().title
+ );
+ _this.$.find(".Ldt-Annotation-MashupBegin").text(
+ _annotation.annotation.begin.toString()
+ );
+ _this.$.find(".Ldt-Annotation-MashupEnd").text(
+ _annotation.annotation.end.toString()
+ );
} else {
- _this.$.find('.Ldt-Annotation-Inner').removeClass("Ldt-Annotation-isMashup");
+ _this.$.find(".Ldt-Annotation-Inner").removeClass(
+ "Ldt-Annotation-isMashup"
+ );
}
if (typeof _this.socialWidget !== "undefined") {
- _this.socialWidget.updateUrls(_url, _text);
+ _this.socialWidget.updateUrls(_url, _text);
} else {
- setTimeout(function() {
- if (typeof _this.socialWidget !== "undefined") {
- _this.socialWidget.updateUrls(_url, _text);
- }
- },800);
+ setTimeout(function () {
+ if (typeof _this.socialWidget !== "undefined") {
+ _this.socialWidget.updateUrls(_url, _text);
+ }
+ }, 800);
}
- _this.$.find(".Ldt-Annotation-Inner").removeClass("Ldt-Annotation-Empty");
- _this.bounds = [ _annotation.begin, _annotation.end ];
+ _this.$.find(".Ldt-Annotation-Inner").removeClass(
+ "Ldt-Annotation-Empty"
+ );
+ _this.bounds = [_annotation.begin, _annotation.end];
if (_this.arrow) {
- _this.arrow.moveToTime((1 - _this.arrow_position) * _annotation.begin + _this.arrow_position * _annotation.end);
+ _this.arrow.moveToTime(
+ (1 - _this.arrow_position) * _annotation.begin +
+ _this.arrow_position * _annotation.end
+ );
}
_this.sendBounds();
- }
-
- this.renderTemplate();
-
- this.$.find(".Ldt-Annotation-Title").click(function() {
+ }
+
+ this.renderTemplate();
+
+ this.$.find(".Ldt-Annotation-Title").click(function () {
if (currentAnnotation) {
- _this.media.setCurrentTime(currentAnnotation.begin);
+ _this.media.setCurrentTime(currentAnnotation.begin);
}
return false;
- });
-
- if (this.show_social) {
- this.insertSubwidget(this.$.find(".Ldt-Annotation-Social"), { type: "Social" }, "socialWidget");
- }
-
- if (this.show_arrow) {
- this.insertSubwidget(this.$.find(".Ldt-Annotation-Arrow"), { type: "Arrow", width: this.width }, "arrow");
- }
- this.onMediaEvent("timeupdate",timeupdate);
- this.onMdpEvent("Annotation.hide","hide");
- this.onMdpEvent("Annotation.show","show");
- this.onMdpEvent("Annotation.minimize","minimize");
- this.onMdpEvent("Annotation.maximize","maximize");
- this.onMdpEvent("Annotation.getBounds","sendBounds");
- this.$.find(".Ldt-Annotation-MaxMinButton").click(this.functionWrapper("toggleSize"));
- this.$.on("resize", function () { _this.width = _this.$.parent().width();
- _this.$.css({ width: _this.width });
- });
- this.getWidgetAnnotations().forEach(function(_a) {
- _a.on("enter", function() {
- drawAnnotation(_a);
+ });
+
+ if (this.show_social) {
+ this.insertSubwidget(
+ this.$.find(".Ldt-Annotation-Social"),
+ { type: "Social" },
+ "socialWidget"
+ );
+ }
+
+ if (this.show_arrow) {
+ this.insertSubwidget(
+ this.$.find(".Ldt-Annotation-Arrow"),
+ { type: "Arrow", width: this.width },
+ "arrow"
+ );
+ }
+ this.onMediaEvent("timeupdate", timeupdate);
+ this.onMdpEvent("Annotation.hide", "hide");
+ this.onMdpEvent("Annotation.show", "show");
+ this.onMdpEvent("Annotation.minimize", "minimize");
+ this.onMdpEvent("Annotation.maximize", "maximize");
+ this.onMdpEvent("Annotation.getBounds", "sendBounds");
+ this.$.find(".Ldt-Annotation-MaxMinButton").click(
+ this.functionWrapper("toggleSize")
+ );
+ this.$.on("resize", function () {
+ _this.width = _this.$.parent().width();
+ _this.$.css({ width: _this.width });
+ });
+ this.getWidgetAnnotations().forEach(function (_a) {
+ _a.on("enter", function () {
+ drawAnnotation(_a);
});
- });
- this.source.getAnnotations().on("found", highlightTitleAndDescription);
- this.source.getAnnotations().on("not-found", highlightTitleAndDescription);
- this.source.getAnnotations().on("search-cleared", highlightTitleAndDescription);
- IriSP.attachDndData(this.$.find("h3"), function() {
- return {
- title: currentAnnotation.title,
- description: currentAnnotation.description,
- image: currentAnnotation.thumbnail,
- uri: (typeof currentAnnotation.url !== "undefined"
- ? currentAnnotation.url
- : (document.location.href.replace(/#.*$/,'') + '#id=' + currentAnnotation.id)),
- text: '[' + currentAnnotation.begin.toString() + '] ' + currentAnnotation.title
- };
- });
-};
+ });
+ this.source.getAnnotations().on("found", highlightTitleAndDescription);
+ this.source
+ .getAnnotations()
+ .on("not-found", highlightTitleAndDescription);
+ this.source
+ .getAnnotations()
+ .on("search-cleared", highlightTitleAndDescription);
+ IriSP.attachDndData(this.$.find("h3"), function () {
+ return {
+ title: currentAnnotation.title,
+ description: currentAnnotation.description,
+ image: currentAnnotation.thumbnail,
+ uri:
+ typeof currentAnnotation.url !== "undefined"
+ ? currentAnnotation.url
+ : document.location.href.replace(/#.*$/, "") +
+ "#id=" +
+ currentAnnotation.id,
+ text:
+ "[" +
+ currentAnnotation.begin.toString() +
+ "] " +
+ currentAnnotation.title,
+ };
+ });
+ }
-IriSP.Widgets.Annotation.prototype.sendBounds = function() {
- this.player.trigger("Annotation.boundsChanged",this.bounds);
-};
-
-IriSP.Widgets.Annotation.prototype.drawAnnotation = function(_annotation) {
- this.lastAnnotation = _annotation.id;
-
-};
+ sendBounds() {
+ this.player.trigger("Annotation.boundsChanged", this.bounds);
+ }
-IriSP.Widgets.Annotation.prototype.hide = function() {
- this.$.slideUp();
-};
+ drawAnnotation(_annotation) {
+ this.lastAnnotation = _annotation.id;
+ }
+
+ hide() {
+ this.$.slideUp();
+ }
-IriSP.Widgets.Annotation.prototype.show = function() {
- this.$.slideDown();
-};
+ show() {
+ this.$.slideDown();
+ }
-IriSP.Widgets.Annotation.prototype.toggleSize = function() {
- if (this.minimized) {
+ toggleSize() {
+ if (this.minimized) {
this.maximize();
- } else {
+ } else {
this.minimize();
+ }
}
-};
+
+ minimize() {
+ this.minimized = true;
+ this.$.find(".Ldt-Annotation-Inner").addClass("Ldt-Annotation-Minimized");
+ }
-IriSP.Widgets.Annotation.prototype.minimize = function() {
- this.minimized = true;
- this.$.find('.Ldt-Annotation-Inner').addClass("Ldt-Annotation-Minimized");
-};
+ maximize() {
+ this.minimized = false;
+ this.$.find(".Ldt-Annotation-Inner").removeClass(
+ "Ldt-Annotation-Minimized"
+ );
+ }
+ };
+}
-IriSP.Widgets.Annotation.prototype.maximize = function() {
- this.minimized = false;
- this.$.find('.Ldt-Annotation-Inner').removeClass("Ldt-Annotation-Minimized");
-};
+export { Annotation , annotationStyles };
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Annotation.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,132 @@
+.Ldt-Annotation-Widget {
+ border-style: none solid solid;
+ border-width: 1px;
+ border-color: #b7b7b7;
+ padding: 0 1px 1px;
+ margin: 0;
+}
+
+.Ldt-Annotation-Widget.Ldt-Annotation-ShowTop {
+ border-top-style: solid;
+ padding-top: 1px;
+}
+
+.Ldt-Annotation-Inner {
+ background: url(img/pinstripe.png);
+ padding: 5px;
+ margin: 0;
+}
+
+.Ldt-Annotation-Inner h3 {
+ margin: 5px 0;
+ font-size: 14px;
+ font-weight: bold;
+}
+
+.Ldt-Annotation-Description {
+ max-height: 150px;
+ overflow: auto;
+}
+
+.Ldt-Annotation-Cleared {
+ clear: both;
+}
+
+.Ldt-Annotation-MaxMinButton {
+ float: right; margin: 5px 5px 0; width: 17px; height: 17px;
+ background: url(./img/widget-control.png); background-position: 0 -51px; cursor: pointer;
+}
+
+.Ldt-Annotation-Social {
+ float: right;
+}
+
+.Ldt-Annotation-MaxMinButton:hover {
+ background-position: -17px -51px;
+}
+
+.Ldt-Annotation-Minimized div.Ldt-Annotation-MaxMinButton {
+ background-position: 0 -34px;
+}
+
+.Ldt-Annotation-Minimized div.Ldt-Annotation-MaxMinButton:hover {
+ background-position: -17px -34px;
+}
+
+.Ldt-Annotation-Inner h3.Ldt-Annotation-MashupOrigin {
+ font-size: 12px;
+}
+
+.Ldt-Annotation-Title, .Ldt-Annotation-MashupMedia {
+ color: #0068c4;
+ text-decoration: none;
+}
+
+.Ldt-Annotation-Type {
+ color: #8080A0;
+}
+
+.Ldt-Annotation-Time {
+ color: #ff3b77
+}
+
+.Ldt-Annotation-Inner p {
+ font-size: 12px;
+ line-height: 16px;
+}
+
+.Ldt-Annotation-Label {
+ font-size: 12px; font-weight: bold; max-width: 90px; float: left; clear: left;
+}
+
+.Ldt-Annotation-Labelled {
+ margin: 5px 0 0 90px; clear: right;
+}
+
+.Ldt-Annotation-Tags-Block {
+ font-size: 12px;
+}
+
+ul.Ldt-Annotation-Tags {
+ list-style: none; padding: 0;
+}
+
+li.Ldt-Annotation-TagLabel {
+ display: inline-block; border: none; margin: 0 10px 5px 0; height: 23px; padding: 0 0 0 20px;
+ background: url(img/tag.png) left top no-repeat;
+ cursor: pointer;
+}
+
+.Ldt-Annotation-TagLabel span {
+ display: inline-block; font-size: 12px; height: 19px; padding: 4px 5px 0 0; border: none; margin: 0;
+ background: url(img/tag.png) right top no-repeat;
+}
+
+li.Ldt-Annotation-TagLabel:hover {
+ background-position: left -23px;
+}
+
+.Ldt-Annotation-TagLabel:hover span {
+ background-position: right -23px;
+}
+
+.Ldt-Annotation-MashupOrigin {
+ display: none;
+}
+
+.Ldt-Annotation-isMashup .Ldt-Annotation-MashupOrigin {
+ display: block;
+}
+
+.Ldt-Annotation-Empty .Ldt-Annotation-HiddenWhenEmpty {
+ display: none;
+}
+
+.Ldt-Annotation-Minimized .Ldt-Annotation-HiddenWhenMinimized {
+ display: none;
+}
+
+.Ldt-Annotation-EmptyBlock {
+ display: none;
+}
+
--- a/src/widgets/AnnotationsController.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-
-.Ldt-AnnotationsController{
- background: url(img/pinstripe.png);
- width: 535px;
- max-height: 280px;
- margin: 0px;
- margin-top: 4px;
- border-style: solid;
- border-width: 1px;
- border-color: #b7b7b7;
-}
-
-.Ldt-AnnotationsController-ButtonsContainer{
- width: 100%;
- min-height: 30px;
- text-align: center;
-}
-
-.Ldt-AnnotationsController-Button{
- display: inline-block;
- background-color: #d93c71;
- color: #ffffff;
- cursor: pointer;
- height: 25px;
- width: 150px;
- font-size: 14px;
- border: 1px solid;
- border-color: #eca3bc #631e34 #36101c #e16e93;
- cursor: pointer;
- margin-right: 10px;
- margin-left: 10px;
- margin-bottom: 5px;
- margin-top: 5px;
- padding: 4px;
- text-align: center;
- vertical-align: middle;
- line-height: 30px;
-}
-
-.Ldt-AnnotationsController-Button:hover{
- background-color: #e15581;
- border-color: #222222 #e87d9f #f0adc3 #68273c;
-}
\ No newline at end of file
--- a/src/widgets/AnnotationsController.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/AnnotationsController.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,219 +1,220 @@
-/*
+/*
* Widget that ties AnnotationList and CreateAnnotation together
* using buttons to hide/show AnnotationList and CreateAnnotation widgets.
- *
+ *
*/
+import annotationsControllerStyles from "./AnnotationsController.module.css";
+
+const AnnotationsController = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.AnnotationsController = function(player, config){
- IriSP.Widgets.Widget.call(this, player, config);
-};
-
-IriSP.Widgets.AnnotationsController.prototype = new IriSP.Widgets.Widget();
+ static defaults = {
+ // If true, displaying AnnotationList will hide CreateAnnotation and vice versa.
+ display_or_write: false,
+ toggle_widgets: false,
+ starts_hidden: false,
+ hide_without_segment: false,
+ hide_when_writing: true,
+ starting_widget: false,
+ always_show_widget: false,
+ segments_annotation_type: "chap",
+ custom_write_text: false,
+ custom_display_text: false,
+ };
-IriSP.Widgets.AnnotationsController.prototype.defaults = {
- // If true, displaying AnnotationList will hide CreateAnnotation and vice versa.
- display_or_write: false,
- toggle_widgets: false,
- starts_hidden: false,
- hide_without_segment: false,
- hide_when_writing: true,
- starting_widget: false,
- always_show_widget: false,
- segments_annotation_type: "chap",
- custom_write_text: false,
- custom_display_text: false,
-};
+ static template =
+ "<div class='Ldt-AnnotationsController'>" +
+ "<div class='Ldt-AnnotationsController-ButtonsContainer'>" +
+ " <div class='Ldt-AnnotationsController-Button Ldt-AnnotationsController-ShowCreateAnnotationButton'>{{#custom_write_text}}{{/custom_write_text}}{{custom_write_text}}{{^custom_write_text}}{{l10n.write}}{{/custom_write_text}}</div>" +
+ " <div class='Ldt-AnnotationsController-Button Ldt-AnnotationsController-ShowAnnotationsListButton'>{{#custom_display_text}}{{/custom_display_text}}{{custom_display_text}}{{^custom_display_text}}{{l10n.display}}{{/custom_display_text}}</div>" +
+ "</div>" +
+ "</div>";
-IriSP.Widgets.AnnotationsController.prototype.template =
- "<div class='Ldt-AnnotationsController'>"
- + "<div class='Ldt-AnnotationsController-ButtonsContainer'>"
- + " <div class='Ldt-AnnotationsController-Button Ldt-AnnotationsController-ShowCreateAnnotationButton'>{{#custom_write_text}}{{/custom_write_text}}{{custom_write_text}}{{^custom_write_text}}{{l10n.write}}{{/custom_write_text}}</div>"
- + " <div class='Ldt-AnnotationsController-Button Ldt-AnnotationsController-ShowAnnotationsListButton'>{{#custom_display_text}}{{/custom_display_text}}{{custom_display_text}}{{^custom_display_text}}{{l10n.display}}{{/custom_display_text}}</div>"
- + "</div>"
- + "</div>"
+ static messages = {
+ en: {
+ write: "Write",
+ display: "Display",
+ },
+ fr: {
+ write: "Ecrire",
+ display: "Voir",
+ },
+ };
-IriSP.Widgets.AnnotationsController.prototype.messages = {
- en : {
- write : "Write",
- display : "Display",
- },
- fr : {
- write : "Ecrire",
- display : "Voir"
- }
-};
+ draw() {
+ this.renderTemplate();
+ var _this = this;
+ this.element_$ = this.$.find(".Ldt-AnnotationsController");
-IriSP.Widgets.AnnotationsController.prototype.draw = function() {
- this.renderTemplate();
- var _this = this;
- this.element_$ = this.$.find(".Ldt-AnnotationsController")
-
- this.displayButton_$ = this.$.find(".Ldt-AnnotationsController-ShowAnnotationsListButton");
- this.writeButton_$ = this.$.find(".Ldt-AnnotationsController-ShowCreateAnnotationButton");
-
- this.writeButton_$.click(function(){
- if (!_this.writeButton_$.hasClass("selected")){
- _this.player.trigger("CreateAnnotation.show")
- if (_this.display_or_write){
- _this.player.trigger("AnnotationsList.hide");
- }
- }
- else {
- _this.player.trigger("CreateAnnotation.hide")
- if (_this.toggle_widgets){
- _this.player.trigger("AnnotationsList.show")
- }
- else if (_this.display_or_write){
- _this.player.trigger("AnnotationsList.hide");
- }
+ this.displayButton_$ = this.$.find(
+ ".Ldt-AnnotationsController-ShowAnnotationsListButton"
+ );
+ this.writeButton_$ = this.$.find(
+ ".Ldt-AnnotationsController-ShowCreateAnnotationButton"
+ );
+
+ this.writeButton_$.click(function () {
+ if (!_this.writeButton_$.hasClass("selected")) {
+ _this.player.trigger("CreateAnnotation.show");
+ if (_this.display_or_write) {
+ _this.player.trigger("AnnotationsList.hide");
+ }
+ } else {
+ _this.player.trigger("CreateAnnotation.hide");
+ if (_this.toggle_widgets) {
+ _this.player.trigger("AnnotationsList.show");
+ } else if (_this.display_or_write) {
+ _this.player.trigger("AnnotationsList.hide");
+ }
}
- });
- this.displayButton_$.click(function(){
- if (!_this.displayButton_$.hasClass("selected")){
- _this.player.trigger("AnnotationsList.show")
- if (_this.display_or_write){
- _this.player.trigger("CreateAnnotation.hide");
- }
- }
- else {
- _this.player.trigger("AnnotationsList.hide")
- if (_this.toggle_widgets){
- _this.player.trigger("CreateAnnotation.show")
- }
- else if (_this.display_or_write){
- _this.player.trigger("CreateAnnotation.hide");
- }
+ });
+ this.displayButton_$.click(function () {
+ if (!_this.displayButton_$.hasClass("selected")) {
+ _this.player.trigger("AnnotationsList.show");
+ if (_this.display_or_write) {
+ _this.player.trigger("CreateAnnotation.hide");
+ }
+ } else {
+ _this.player.trigger("AnnotationsList.hide");
+ if (_this.toggle_widgets) {
+ _this.player.trigger("CreateAnnotation.show");
+ } else if (_this.display_or_write) {
+ _this.player.trigger("CreateAnnotation.hide");
+ }
}
-
- })
-
- if(this.hide_without_segment){
- this.onMediaEvent("timeupdate", function(){
- _this.refresh();
- })
- this.onMediaEvent("settimerange", function(_timeRange){
- _this.refresh(_timeRange);
- })
- this.segments = this.source.getAnnotationsByTypeTitle(this.segments_annotation_type)
- this.currentSegment = false
- }
-
+ });
- this.createAnnotationEnabled = false;
- this.onMdpEvent("CreateAnnotation.hide", function(){
- if (_this.hide_when_writing){
- _this.show()
+ if (this.hide_without_segment) {
+ this.onMediaEvent("timeupdate", function () {
+ _this.refresh();
+ });
+ this.onMediaEvent("settimerange", function (_timeRange) {
+ _this.refresh(_timeRange);
+ });
+ this.segments = this.source.getAnnotationsByTypeTitle(
+ this.segments_annotation_type
+ );
+ this.currentSegment = false;
+ }
+
+ this.createAnnotationEnabled = false;
+ this.onMdpEvent("CreateAnnotation.hide", function () {
+ if (_this.hide_when_writing) {
+ _this.show();
}
_this.createAnnotationEnabled = false;
_this.writeButton_$.toggleClass("selected", false);
- })
- this.onMdpEvent("CreateAnnotation.show", function(){
- if (_this.hide_when_writing){
- _this.hide()
+ });
+ this.onMdpEvent("CreateAnnotation.show", function () {
+ if (_this.hide_when_writing) {
+ _this.hide();
}
_this.createAnnotationEnabled = true;
_this.writeButton_$.toggleClass("selected", true);
- })
- this.onMdpEvent("AnnotationsList.hide", function(){
+ });
+ this.onMdpEvent("AnnotationsList.hide", function () {
_this.displayButton_$.toggleClass("selected", false);
- })
- this.onMdpEvent("AnnotationsList.show", function(){
+ });
+ this.onMdpEvent("AnnotationsList.show", function () {
_this.displayButton_$.toggleClass("selected", true);
- })
-
- if (this.starts_hidden) {
- this.visible = true
+ });
+
+ if (this.starts_hidden) {
+ this.visible = true;
this.hide();
+ } else {
+ this.visible = false;
+ this.show();
+ }
+
+ if (this.starting_widget && this.visible) {
+ if (this.starting_widget == "AnnotationsList") {
+ this.player.trigger("AnnotationsList.show");
+ } else if (this.starting_widget == "CreateAnnotation") {
+ this.player.trigger("CreateAnnotation.show");
+ }
+ }
}
- else{
- this.visible = false
- this.show();
+
+ refresh(_timeRange) {
+ _timeRange = typeof _timeRange !== "undefined" ? _timeRange : false;
+
+ if (!_timeRange) {
+ if (this.media.getTimeRange()) {
+ _timeRange = this.media.getTimeRange();
+ }
+ }
+
+ if (this.hide_without_segment) {
+ if (!_timeRange && !this.media.getTimeRange()) {
+ _currentTime = this.media.getCurrentTime();
+ _currentSegments = this.segments.filter(function (_segment) {
+ return (
+ _currentTime >= _segment.begin && _currentTime <= _segment.end
+ );
+ });
+ if (_currentSegments.length > 0) {
+ currentSegment = true;
+ } else {
+ currentSegment = false;
+ }
+ } else {
+ var _timeRangeBegin = _timeRange[0],
+ _timeRangeEnd = _timeRange[1];
+ _currentSegments = this.segments.filter(function (_segment) {
+ return (
+ _timeRangeBegin == _segment.begin && _timeRangeEnd == _segment.end
+ );
+ });
+ if (_currentSegments.length > 0) {
+ currentSegment = true;
+ } else {
+ currentSegment = false;
+ }
+ }
+ if (!currentSegment && _currentSegments.length == 0) {
+ if (this.visible || this.hide_when_writing) {
+ this.writeButton_$.toggleClass("selected", false);
+ this.displayButton_$.toggleClass("selected", false);
+ this.player.trigger("CreateAnnotation.hide");
+ this.player.trigger("AnnotationsList.hide");
+ this.hide();
+ }
+ } else {
+ if (!this.visible) {
+ if (!this.createAnnotationEnabled) {
+ this.show();
+ }
+ this.writeButton_$.toggleClass("selected", false);
+ this.displayButton_$.toggleClass("selected", false);
+ if (this.starting_widget == "AnnotationsList") {
+ this.player.trigger("AnnotationsList.show");
+ }
+ if (this.starting_widget == "CreateAnnotation") {
+ this.player.trigger("CreateAnnotation.show");
+ }
+ }
+ }
+ }
}
-
- if (this.starting_widget && this.visible){
- if (this.starting_widget == "AnnotationsList"){
- this.player.trigger("AnnotationsList.show")
- }
- else if (this.starting_widget == "CreateAnnotation"){
- this.player.trigger("CreateAnnotation.show")
- }
+
+ hide() {
+ if (this.visible) {
+ this.visible = false;
+ this.element_$.hide();
+ }
}
-
+
+ show() {
+ if (!this.visible) {
+ this.visible = true;
+ this.element_$.show();
+ }
+ }
+ };
};
-IriSP.Widgets.AnnotationsController.prototype.refresh = function(_timeRange){
- _timeRange = typeof _timeRange !== 'undefined' ? _timeRange : false ;
-
- if(!_timeRange){
- if (this.media.getTimeRange()){
- _timeRange = this.media.getTimeRange();
- }
- }
-
- if (this.hide_without_segment){
- if (!_timeRange && !this.media.getTimeRange()){
- _currentTime = this.media.getCurrentTime()
- _currentSegments = this.segments.filter(function(_segment){
- return (_currentTime >= _segment.begin && _currentTime <= _segment.end)
- });
- if(_currentSegments.length > 0){
- currentSegment = true;
- }
- else {
- currentSegment = false;
- }
- }
- else {
- var _timeRangeBegin = _timeRange[0],
- _timeRangeEnd = _timeRange[1];
- _currentSegments = this.segments.filter(function(_segment){
- return (_timeRangeBegin == _segment.begin && _timeRangeEnd == _segment.end)
- });
- if(_currentSegments.length > 0){
- currentSegment = true;
- }
- else {
- currentSegment = false;
- }
- }
- if (!currentSegment && _currentSegments.length == 0){
- if (this.visible || this.hide_when_writing){
- this.writeButton_$.toggleClass("selected", false);
- this.displayButton_$.toggleClass("selected", false);
- this.player.trigger("CreateAnnotation.hide");
- this.player.trigger("AnnotationsList.hide");
- this.hide();
- }
- }
- else {
- if (!this.visible){
- if (!this.createAnnotationEnabled){
- this.show();
- }
- this.writeButton_$.toggleClass("selected", false);
- this.displayButton_$.toggleClass("selected", false);
- if (this.starting_widget == "AnnotationsList"){
- this.player.trigger("AnnotationsList.show")
- }
- if (this.starting_widget == "CreateAnnotation"){
- this.player.trigger("CreateAnnotation.show")
- }
- }
-
- }
- }
-}
-
-IriSP.Widgets.AnnotationsController.prototype.hide = function() {
- if (this.visible){
- this.visible = false;
- this.element_$.hide();
- }
-}
-
-IriSP.Widgets.AnnotationsController.prototype.show = function() {
- if(!this.visible){
- this.visible = true;
- this.element_$.show();
- }
-}
+export { AnnotationsController, annotationsControllerStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/AnnotationsController.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,43 @@
+
+.Ldt-AnnotationsController{
+ background: url(img/pinstripe.png);
+ width: 535px;
+ max-height: 280px;
+ margin: 0px;
+ margin-top: 4px;
+ border-style: solid;
+ border-width: 1px;
+ border-color: #b7b7b7;
+}
+
+.Ldt-AnnotationsController-ButtonsContainer{
+ width: 100%;
+ min-height: 30px;
+ text-align: center;
+}
+
+.Ldt-AnnotationsController-Button{
+ display: inline-block;
+ background-color: #d93c71;
+ color: #ffffff;
+ cursor: pointer;
+ height: 25px;
+ width: 150px;
+ font-size: 14px;
+ border: 1px solid;
+ border-color: #eca3bc #631e34 #36101c #e16e93;
+ cursor: pointer;
+ margin-right: 10px;
+ margin-left: 10px;
+ margin-bottom: 5px;
+ margin-top: 5px;
+ padding: 4px;
+ text-align: center;
+ vertical-align: middle;
+ line-height: 30px;
+}
+
+.Ldt-AnnotationsController-Button:hover{
+ background-color: #e15581;
+ border-color: #222222 #e87d9f #f0adc3 #68273c;
+}
\ No newline at end of file
--- a/src/widgets/AnnotationsList.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,254 +0,0 @@
-/* AnnotationsListWidget */
-
-#ui-datepicker-div
-{
- display: none;
-}
-
-.Ldt-AnnotationsListWidget {
- border: none;
- margin: 0;
- padding: 0;
- overflow: auto;
-}
-.Ldt-AnnotationsListWidget a {
- text-decoration: none;
-}
-
-.Ldt-AnnotationsList-Audio {
- width: 1px; height: 1px;
-}
-
-.Ldt-AnnotationsList-Filters {
- display: table-cell;
- width: 100%;
- height: 30px;
- vertical-align: middle;
- text-align: center;
-
-}
-
-.Ldt-AnnotationsList-filter-text {
- text-align: left;
- display: inline;
- margin: 4px 2px;
-}
-
-.Ldt-AnnotationsList-filter-dropdown {
- text-align: center;
- display: inline;
- margin: 4px 2px;
-}
-
-.Ldt-AnnotationsList-filter-checkbox {
- text-align: center;
- display: inline;
- margin: 4px 2px;
-}
-
-ul.Ldt-AnnotationsList-ul, ul.Ldt-AnnotationsList-ul-toDelete {
- list-style: none;
- padding: 0px;
- margin: 0px;
-}
-
-li.Ldt-AnnotationsList-li {
- width: 100%;
- clear: both;
- margin: 2px 0;
- padding: 2px 0;
- min-height: 3em;
- position: relative;
-}
-.Ldt-AnnotationsList-li.selected {
- background-image: url(img/pinstripe-grey.png);
- z-index: 1;
-}
-.Ldt-AnnotationsList-ThumbContainer {
- float: left;
- width: 80px;
- height: 50px;
- text-align: center;
- margin: 0px 2px 10px 2px;
- box-shadow: #808080 0px 0px 2px;
-}
-.Ldt-AnnotationsList-Thumbnail {
- border: none;
- max-width: 100%;
- max-height: 100%;
- margin: 0 auto;
-}
-
-.Ldt-AnnotationsList-External-Icon {
- background-image: url(img/external.png);
- z-index: 100;
- height: 15px;
- width: 15px;
- position: relative;
- bottom: 20px;
- left: 64px;
-}
-
-.Ldt-AnnotationsList-DeleteButton {
- margin: 0px;
- float: right;
- font-size: 20px;
- position: relative;
- top: -50px;
- left: -5px;
- color: #787878
-}
-.Ldt-AnnotationsList-DeleteButton:hover {
- color: #f7268e;
- cursor: pointer;
-}
-
-.Ldt-AnnotationsList-Duration {
- color: #f7268e;
- float: right;
- text-align: right;
- font-size: 12px;
- margin: 2px;
-}
-.Ldt-AnnotationsList-CreationDate {
- color: #f7268e;
- text-align: left;
- font-size: 12px;
- margin: 2px 2px 2px 89px;
-}
-h3.Ldt-AnnotationsList-Title span.Ldt-AnnotationsList-TitleContent{
- color: #0068c4;
- font-size: 13px;
- margin-left: 5px;
- font-weight: bold;
-}
-
-h3.Ldt-AnnotationsList-Title.Ldt-Annotation-Timecode{
- font-size: 13px;
-}
-
-.Ldt-AnnotationsList-Title a {
- color: #0068c4;
-}
-
-.Ldt-AnnotationsList-Creator {
- color: #4d90f4;
- margin-left: 5px;
- font-size: 13px;
-}
-
-p.Ldt-AnnotationsList-Description {
- margin: 2px 0 2px 89px;
- font-size: 12px;
- color: #333333;
-}
-
-.Ldt-AnnotationsList-Description a {
- color: #0068c4;
-}
-
-.Ldt-AnnotationsList-Description a:hover {
- text-decoration: underline; color: #800000;
-}
-
-ul.Ldt-AnnotationsList-Tags {
- list-style: none;
- padding: 0;
- margin: 2px 0 0 82px;
-}
-
-li.Ldt-AnnotationsList-Tag-Li {
- display: inline-block; border: none; margin: 0 10px 5px 0; height: 23px; padding: 0 0 0 20px;
- background: url(img/tag.png) left top no-repeat;
- cursor: pointer;
-}
-
-.Ldt-AnnotationsList-Tag-Li span {
- display: inline-block; font-size: 12px; height: 19px; padding: 4px 5px 0 0; border: none; margin: 0;
- background: url(img/tag.png) right top no-repeat;
-}
-
-li.Ldt-AnnotationsList-Tag-Li:hover {
- background-position: left -23px;
-}
-
-.Ldt-AnnotationsList-Tag-Li:hover span {
- background-position: right -23px;
-}
-
-.Ldt-AnnotationsList-Play {
- width: 125px; height: 20px; margin: 2px 0 2px 82px; text-align: center;
- padding: 3px 5px 0 20px; font-size: 12px; cursor: pointer;
- background: url(img/voiceannotation.png); color: #333333;
-}
-
-.Ldt-AnnotationsList-Play:hover {
- background-position: 0 bottom;
-}
-
-.Ldt-AnnotationsList-EditControls {
- opacity: 0;
- position: absolute;
- bottom: 2px;
- right: 8px;
-}
-
-.Ldt-AnnotationsList-li:hover .Ldt-AnnotationsList-EditControls {
- display: inline-block;
- opacity: .8;
- transition: opacity 1000ms ease-in-out;
-}
-
-.Ldt-AnnotationsList-EditControls > div {
- display: inline-block;
- width: 16px;
- height: 16px;
- cursor: pointer;
- margin-left: 8px;
-}
-
-.Ldt-AnnotationsList-Delete {
- background: url(img/delete.png);
-}
-
-.Ldt-AnnotationsList-Edit {
- background: url(img/edit.png);
-}
-
-.Ldt-AnnotationsList-PublishAnnotation {
- background: url(img/publish_annotation.png);
-}
-
-.published .Ldt-AnnotationsList-PublishAnnotation {
- background: url(img/published_annotation.png);
-}
-
-.Ldt-AnnotationsList .editing {
- display: none;
-}
-
-.Ldt-AnnotationsList .editableInput {
- width: 80%;
-}
-
-.Ldt-AnnotationsList-ScreenMain{
- margin: 0px;
- padding: 0px;
-}
-
-.Ldt-AnnotationsList-ScreenDelete, .Ldt-AnnotationsList-ScreenSending,
-.Ldt-AnnotationsList-ScreenError, .Ldt-AnnotationsList-ScreenSuccess{
- margin-top: 15px;
- width: 100%
- text-align: center;
- vertical-align: middle;
- font-size: 14px;
- font-weight: bold;
- color: #68273C;
-}
-
-a.Ldt-AnnotationsList-Close {
- position: absolute; right: 2px;
- display: inline-block; width: 17px; height: 17px; margin: 4px;
- background: url(img/widget-control.png);
-}
\ No newline at end of file
--- a/src/widgets/AnnotationsList.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/AnnotationsList.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,156 +1,173 @@
-IriSP.Widgets.AnnotationsList = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
- this.lastIds = [];
- var _this = this;
- this.throttledRefresh = IriSP._.throttle(function(full) {
+import annotationsListStyles from "./AnnotationsList.module.css";
+
+import Mustache from "mustache";
+import _ from "lodash";
+import jQuery from "jquery";
+
+const AnnotationsList = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ this.lastIds = [];
+ var _this = this;
+ this.throttledRefresh = _.throttle(function (full) {
_this.refresh(full);
- }, 800);
- this.searchString = false;
- this.lastSearch = false;
- this.localSource = undefined;
-};
+ }, 800);
+ this.searchString = false;
+ this.lastSearch = false;
+ this.localSource = undefined;
+ }
-IriSP.Widgets.AnnotationsList.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.AnnotationsList.prototype.defaults = {
- pre_draw_callback: function(){
+ static defaults = {
+ pre_draw_callback: function () {
return this.importUsers();
- },
- /*
- * URL when the annotations are to be reloaded from an LDT-like segment API
- * e.g.
- * http://ldt.iri.centrepompidou.fr/ldtplatform/api/ldt/segments/{{media}}/{{begin}}/{{end}}?callback=?
- */
- ajax_url : false,
- /*
- * number of milliseconds before/after the current timecode when calling the
- * segment API
- */
- ajax_granularity : 600000,
- default_thumbnail : "",
- custom_external_icon : "",
- /*
- * URL when the annotation is not in the current project, e.g.
- * http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/{{media}}/{{project}}/{{annotationType}}#id={{annotation}}
- */
- foreign_url : "",
- annotation_type : false,
- refresh_interval : 0,
- limit_count : 20,
- newest_first : false,
- show_title: true,
- show_audio: true,
- show_creator: true,
- show_controls: false,
- show_end_time: true,
- show_publish: false,
- show_twitter: false,
- twitter_hashtag: '',
- // Callback for Edit action. Leave undefined for default action.
- on_edit: undefined,
- publish_type: "PublicContribution",
- // Used to publish annotations
- api_endpoint_template: "",
- api_serializer: "ldt_annotate",
- api_method: "POST",
- editable: false,
- // Id that will be used as localStorage key
- editable_storage: "",
- widget_max_height: 680,
- always_visible : false,
- start_visible: true,
- show_audio : true,
- show_filters : false,
- keyword_filter: true,
- date_filter: true,
- user_filter: true,
- segment_filter: true,
- latest_contributions_filter: false,
- current_day_filter: true,
- show_header : false,
- custom_header : false,
- annotations_count_header : true,
- annotations_count_header_string: "annotations",
- show_creation_date : false,
- show_timecode : true,
- show_end_time : true,
- project_id: "",
- /*
- * Only annotation in the current segment will be displayed. Designed to work with the Segments Widget.
- */
- allow_annotations_deletion: false,
- /*
- * URL to call when deleting annotation. Expects a mustache template with {{annotation_id}}, ex /api/anotations/{{annotation_id}}/
- */
- api_delete_endpoint : "",
- api_delete_method: "DELETE",
- api_users_endpoint: "",
- api_users_method: "GET",
- make_name_string_function: function(params){
+ },
+ /*
+ * URL when the annotations are to be reloaded from an LDT-like segment API
+ * e.g.
+ * http://ldt.iri.centrepompidou.fr/ldtplatform/api/ldt/segments/{{media}}/{{begin}}/{{end}}?callback=?
+ */
+ ajax_url: false,
+ /*
+ * number of milliseconds before/after the current timecode when calling the
+ * segment API
+ */
+ ajax_granularity: 600000,
+ default_thumbnail: "",
+ custom_external_icon: "",
+ /*
+ * URL when the annotation is not in the current project, e.g.
+ * http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/{{media}}/{{project}}/{{annotationType}}#id={{annotation}}
+ */
+ foreign_url: "",
+ annotation_type: false,
+ refresh_interval: 0,
+ limit_count: 20,
+ newest_first: false,
+ show_title: true,
+ show_audio: true,
+ show_creator: true,
+ show_controls: false,
+ show_end_time: true,
+ show_publish: false,
+ show_twitter: false,
+ twitter_hashtag: "",
+ // Callback for Edit action. Leave undefined for default action.
+ on_edit: undefined,
+ publish_type: "PublicContribution",
+ // Used to publish annotations
+ api_endpoint_template: "",
+ api_serializer: "ldt_annotate",
+ api_method: "POST",
+ editable: false,
+ // Id that will be used as localStorage key
+ editable_storage: "",
+ widget_max_height: 680,
+ always_visible: false,
+ start_visible: true,
+ show_audio: true,
+ show_filters: false,
+ keyword_filter: true,
+ date_filter: true,
+ user_filter: true,
+ segment_filter: true,
+ latest_contributions_filter: false,
+ current_day_filter: true,
+ show_header: false,
+ custom_header: false,
+ annotations_count_header: true,
+ annotations_count_header_string: "annotations",
+ show_creation_date: false,
+ show_timecode: true,
+ show_end_time: true,
+ project_id: "",
+ /*
+ * Only annotation in the current segment will be displayed. Designed to work with the Segments Widget.
+ */
+ allow_annotations_deletion: false,
+ /*
+ * URL to call when deleting annotation. Expects a mustache template with {{annotation_id}}, ex /api/anotations/{{annotation_id}}/
+ */
+ api_delete_endpoint: "",
+ api_delete_method: "DELETE",
+ api_users_endpoint: "",
+ api_users_method: "GET",
+ make_name_string_function: function (params) {
return params.username ? params.username : "Anonymous";
- },
- filter_by_segments: false,
- segment_filter: true,
- segments_annotation_type: "chap",
- /*
- * Set to a username if you only want to display annotations from a given user
- */
- show_only_annotation_from_user: false,
- /*
- * Show a text field that filter annotations by username
- */
- tags : true,
+ },
+ filter_by_segments: false,
+ segment_filter: true,
+ segments_annotation_type: "chap",
+ /*
+ * Set to a username if you only want to display annotations from a given user
+ */
+ show_only_annotation_from_user: false,
+ /*
+ * Show a text field that filter annotations by username
+ */
+ tags: true,
- polemics : [{
- keyword: "++",
- background_color: "#c9ecc6"
- },{
- keyword: "--",
- background_color: "#f9c5c6"
- },{
- keyword: "??",
- background_color: "#cec5f9"
- },{
- keyword: "==",
- background_color: "#f9f4c6"
- }]
-};
+ polemics: [
+ {
+ keyword: "++",
+ background_color: "#c9ecc6",
+ },
+ {
+ keyword: "--",
+ background_color: "#f9c5c6",
+ },
+ {
+ keyword: "??",
+ background_color: "#cec5f9",
+ },
+ {
+ keyword: "==",
+ background_color: "#f9f4c6",
+ },
+ ],
+ };
-IriSP.Widgets.AnnotationsList.prototype.importUsers = function(){
- if (!this.source.users_data && this.api_users_endpoint){
+ importUsers() {
+ if (!this.source.users_data && this.api_users_endpoint) {
this.usernames = Array();
var _this = this,
- _list = this.getWidgetAnnotations(),
- usernames_list_string = "";
+ _list = this.getWidgetAnnotations(),
+ usernames_list_string = "";
- _list.forEach(function(_annotation){
- if(_this.usernames.indexOf(_annotation.creator) == -1){
- _this.usernames.push(_annotation.creator);
- }
+ _list.forEach(function (_annotation) {
+ if (_this.usernames.indexOf(_annotation.creator) == -1) {
+ _this.usernames.push(_annotation.creator);
+ }
+ });
+ this.usernames.forEach(function (_username) {
+ usernames_list_string += _username + ",";
+ });
+ usernames_list_string = usernames_list_string.substring(
+ 0,
+ usernames_list_string.length - 1
+ );
+ _url = Mustache.render(this.api_users_endpoint, {
+ usernames_list_string: encodeURIComponent(usernames_list_string),
+ usernames_list_length: this.usernames.length,
});
- this.usernames.forEach(function(_username){
- usernames_list_string+=_username+","
- })
- usernames_list_string = usernames_list_string.substring(0, usernames_list_string.length - 1);
- _url = Mustache.to_html(this.api_users_endpoint, {usernames_list_string: encodeURIComponent(usernames_list_string), usernames_list_length: this.usernames.length});
- return IriSP.jQuery.ajax({
- async: false,
- url: _url,
- type: "GET",
- success: function(_data) {
- _this.source.users_data = _data.objects
- },
- error: function(_xhr, _error, _thrown) {
- console.log(_xhr)
- console.log(_error)
- console.log(_thrown)
- }
- })
+ return jQuery.ajax({
+ async: false,
+ url: _url,
+ type: "GET",
+ success: function (_data) {
+ _this.source.users_data = _data.objects;
+ },
+ error: function (_xhr, _error, _thrown) {
+ console.log(_xhr);
+ console.log(_error);
+ console.log(_thrown);
+ },
+ });
+ }
}
-}
-IriSP.Widgets.AnnotationsList.prototype.messages = {
- en: {
+ static messages = {
+ en: {
voice_annotation: "Voice Annotation",
now_playing: "Now playing...",
previous: "Previous",
@@ -159,9 +176,12 @@
edit_annotation: "Edit note",
delete_annotation: "Delete note",
publish_annotation: "Make note public",
- import_annotations: "Paste or load notes in this field and press Import.",
- confirm_delete_message: "You are about to delete {{ annotation.title }}. Are you sure you want to delete it?",
- confirm_publish_message: "You are about to publish {{ annotation.title }}. Are you sure you want to make it public?",
+ import_annotations:
+ "Paste or load notes in this field and press Import.",
+ confirm_delete_message:
+ "You are about to delete {{ annotation.title }}. Are you sure you want to delete it?",
+ confirm_publish_message:
+ "You are about to publish {{ annotation.title }}. Are you sure you want to make it public?",
tweet_annotation: "Tweet annotation",
external_annotation: "This annotation was submitted to another project",
everyone: "Everyone",
@@ -174,9 +194,10 @@
annotation_deletion_delete: "You will delete this annotation",
annotation_deletion_sending: "Your deletion request is being sent ... ",
annotation_deletion_success: "The annotation has been deleted.",
- annotation_deletion_error: "There was an error contacting the server. The annotation has not been deleted."
- },
- fr: {
+ annotation_deletion_error:
+ "There was an error contacting the server. The annotation has not been deleted.",
+ },
+ fr: {
voice_annotation: "Annotation Vocale",
now_playing: "Lecture en cours...",
previous: "Précédent",
@@ -185,11 +206,15 @@
edit_annotation: "Éditer la note",
delete_annotation: "Supprimer la note",
publish_annotation: "Rendre la note publique",
- import_annotations: "Copiez ou chargez des notes dans ce champ et appuyez sur Import",
- confirm_delete_message: "Vous allez supprimer {{ annotation.title }}. Êtes-vous certain(e) ?",
- confirm_publish_message: "Vous allez publier {{ annotation.title }}. Êtes-vous certain(e) ?",
+ import_annotations:
+ "Copiez ou chargez des notes dans ce champ et appuyez sur Import",
+ confirm_delete_message:
+ "Vous allez supprimer {{ annotation.title }}. Êtes-vous certain(e) ?",
+ confirm_publish_message:
+ "Vous allez publier {{ annotation.title }}. Êtes-vous certain(e) ?",
tweet_annotation: "Tweeter l'annotation",
- external_annotation: "Cette annotation a été postée sur un autre projet",
+ external_annotation:
+ "Cette annotation a été postée sur un autre projet",
everyone: "Tous",
header: "Annotations sur ce contenu",
segment_filter: "Tous les segments",
@@ -198,1017 +223,1217 @@
confirm: "Confirmer",
cancel: "Annuler",
annotation_deletion_delete: "Vous allez supprimer cette annotation",
- annotation_deletion_sending: "Votre demande de suppression est en cours d'envoi ... ",
+ annotation_deletion_sending:
+ "Votre demande de suppression est en cours d'envoi ... ",
annotation_deletion_success: "L'annotation a été supprimée.",
- annotation_deletion_error: "Une erreur s'est produite en contactant le serveur. L'annotation n'a pas été supprimée."
- }
-};
+ annotation_deletion_error:
+ "Une erreur s'est produite en contactant le serveur. L'annotation n'a pas été supprimée.",
+ },
+ };
-IriSP.Widgets.AnnotationsList.prototype.template =
- '{{#show_header}}<p class="Ldt-AnnotationsList-header">'
- + '{{#custom_header}}{{custom_header}}{{/custom_header}}'
- + '{{^custom_header}}{{l10n.header}}{{/custom_header}}'
- + '</p>{{/show_header}}'
- + '<div class="Ldt-AnnotationsListWidget">'
- + '<div class="Ldt-AnnotationsList-ScreenMain">'
- + '{{#show_filters}}'
- + '<div class="Ldt-AnnotationsList-Filters">'
- + '{{#keyword_filter}}<input class="Ldt-AnnotationsList-filter-text" id="Ldt-AnnotationsList-keywordsFilter" type="text" value=""></input>{{/keyword_filter}}'
- + '{{#user_filter}}<select class="Ldt-AnnotationsList-filter-dropdown" id="Ldt-AnnotationsList-userFilter"><option selected value="">{{l10n.everyone}}</option></select>{{/user_filter}}'
- + '{{#date_filter}}<label class="Ldt-AnnotationsList-filter-date">Date: <input id="Ldt-AnnotationsList-dateFilter" type="text"></input></label>{{/date_filter}}'
- + '{{#segment_filter}}<label class="Ldt-AnnotationsList-filter-checkbox"><input type="checkbox" id="Ldt-AnnotationsList-ignoreSegmentsFilter">{{l10n.segment_filter}}</label>{{/segment_filter}}'
- + '{{#latest_contributions_filter}}<label class="Ldt-AnnotationsList-filter-checkbox"><input type="checkbox" id="Ldt-AnnotationsList-latestContributionsFilter">{{l10n.latest_contributions}}</label>{{/latest_contributions_filter}}'
- + '</div>'
- + '{{/show_filters}}'
- + '{{#show_controls}}<div class="Ldt-AnnotationsList-Controls"><span class="Ldt-AnnotationsList-Control-Prev">{{ l10n.previous }}</span> | <span class="Ldt-AnnotationsList-Control-Next">{{ l10n.next }}</span></div>{{/show_controls}}'
- + '{{#show_audio}}<div class="Ldt-AnnotationsList-Audio"></div>{{/show_audio}}'
- + '<ul class="Ldt-AnnotationsList-ul">'
- + '</ul>'
- + '</div>'
- + '{{#allow_annotations_deletion}}'
- + '<div data-annotation="{{id}}" class="Ldt-AnnotationsList-Screen Ldt-AnnotationsList-ScreenDelete">'
- + '<a title="{{l10n.close_widget}}" class="Ldt-AnnotationsList-Close" href="#"></a>'
- + '{{l10n.annotation_deletion_delete}}'
- + '<ul class="Ldt-AnnotationsList-ul-ToDelete"></ul>'
- + '<a class="Ldt-AnnotationsList-ConfirmDelete">{{l10n.confirm}}</a> <a class="Ldt-AnnotationsList-CancelDelete">{{l10n.cancel}}</a>'
- + '</div>'
- + '<div data-annotation="{{id}}" class="Ldt-AnnotationsList-Screen Ldt-AnnotationsList-ScreenSending">'
- + '<a title="{{l10n.close_widget}}" class="Ldt-AnnotationsList-Close" href="#"></a>'
- + '{{l10n.annotation_deletion_sending}}'
- + '</div>'
- + '<div data-annotation="{{id}}" class="Ldt-AnnotationsList-Screen Ldt-AnnotationsList-ScreenSuccess">'
- + '<a title="{{l10n.close_widget}}" class="Ldt-AnnotationsList-Close" href="#"></a>'
- + '{{l10n.annotation_deletion_success}}'
- + '</div>'
- + '<div data.annotation="{{id}}" class="Ldt-AnnotationsList-Screen Ldt-AnnotationsList-ScreenError">'
- + '<a title="{{l10n.close_widget}}" class="Ldt-AnnotationsList-Close" href="#"></a>'
- + '{{l10n.annotation_deletion_error}}'
- + '</div>'
- + '{{/allow_annotations_deletion}}'
- + '</div>';
+ static template =
+ '{{#show_header}}<p class="Ldt-AnnotationsList-header">' +
+ "{{#custom_header}}{{custom_header}}{{/custom_header}}" +
+ "{{^custom_header}}{{l10n.header}}{{/custom_header}}" +
+ "</p>{{/show_header}}" +
+ '<div class="Ldt-AnnotationsListWidget">' +
+ '<div class="Ldt-AnnotationsList-ScreenMain">' +
+ "{{#show_filters}}" +
+ '<div class="Ldt-AnnotationsList-Filters">' +
+ '{{#keyword_filter}}<input class="Ldt-AnnotationsList-filter-text" id="Ldt-AnnotationsList-keywordsFilter" type="text" value=""></input>{{/keyword_filter}}' +
+ '{{#user_filter}}<select class="Ldt-AnnotationsList-filter-dropdown" id="Ldt-AnnotationsList-userFilter"><option selected value="">{{l10n.everyone}}</option></select>{{/user_filter}}' +
+ '{{#date_filter}}<label class="Ldt-AnnotationsList-filter-date">Date: <input id="Ldt-AnnotationsList-dateFilter" type="text"></input></label>{{/date_filter}}' +
+ '{{#segment_filter}}<label class="Ldt-AnnotationsList-filter-checkbox"><input type="checkbox" id="Ldt-AnnotationsList-ignoreSegmentsFilter">{{l10n.segment_filter}}</label>{{/segment_filter}}' +
+ '{{#latest_contributions_filter}}<label class="Ldt-AnnotationsList-filter-checkbox"><input type="checkbox" id="Ldt-AnnotationsList-latestContributionsFilter">{{l10n.latest_contributions}}</label>{{/latest_contributions_filter}}' +
+ "</div>" +
+ "{{/show_filters}}" +
+ '{{#show_controls}}<div class="Ldt-AnnotationsList-Controls"><span class="Ldt-AnnotationsList-Control-Prev">{{ l10n.previous }}</span> | <span class="Ldt-AnnotationsList-Control-Next">{{ l10n.next }}</span></div>{{/show_controls}}' +
+ '{{#show_audio}}<div class="Ldt-AnnotationsList-Audio"></div>{{/show_audio}}' +
+ '<ul class="Ldt-AnnotationsList-ul">' +
+ "</ul>" +
+ "</div>" +
+ "{{#allow_annotations_deletion}}" +
+ '<div data-annotation="{{id}}" class="Ldt-AnnotationsList-Screen Ldt-AnnotationsList-ScreenDelete">' +
+ '<a title="{{l10n.close_widget}}" class="Ldt-AnnotationsList-Close" href="#"></a>' +
+ "{{l10n.annotation_deletion_delete}}" +
+ '<ul class="Ldt-AnnotationsList-ul-ToDelete"></ul>' +
+ '<a class="Ldt-AnnotationsList-ConfirmDelete">{{l10n.confirm}}</a> <a class="Ldt-AnnotationsList-CancelDelete">{{l10n.cancel}}</a>' +
+ "</div>" +
+ '<div data-annotation="{{id}}" class="Ldt-AnnotationsList-Screen Ldt-AnnotationsList-ScreenSending">' +
+ '<a title="{{l10n.close_widget}}" class="Ldt-AnnotationsList-Close" href="#"></a>' +
+ "{{l10n.annotation_deletion_sending}}" +
+ "</div>" +
+ '<div data-annotation="{{id}}" class="Ldt-AnnotationsList-Screen Ldt-AnnotationsList-ScreenSuccess">' +
+ '<a title="{{l10n.close_widget}}" class="Ldt-AnnotationsList-Close" href="#"></a>' +
+ "{{l10n.annotation_deletion_success}}" +
+ "</div>" +
+ '<div data.annotation="{{id}}" class="Ldt-AnnotationsList-Screen Ldt-AnnotationsList-ScreenError">' +
+ '<a title="{{l10n.close_widget}}" class="Ldt-AnnotationsList-Close" href="#"></a>' +
+ "{{l10n.annotation_deletion_error}}" +
+ "</div>" +
+ "{{/allow_annotations_deletion}}" +
+ "</div>";
-IriSP.Widgets.AnnotationsList.prototype.annotationTemplate =
- '<li class="Ldt-AnnotationsList-li Ldt-Highlighter-Annotation Ldt-TraceMe" data-annotation="{{ id }}" data-begin="{{ begin_ms }}" data-end="{{ end_ms }}" trace-info="annotation-id:{{id}}, media-id:{{media_id}}" style="{{specific_style}}">'
- + '<div data-annotation="{{ id }}" class="Ldt-AnnotationsList-ThumbContainer Ldt-AnnotationsList-Annotation-Screen Ldt-AnnotationsList-Annotation-ScreenMain">'
- + '<a {{#url}}href="{{url}}"{{/url}} draggable="true">'
- + '<img title="{{^external}}{{ begin }} - {{ end }}{{/external}}{{#external}}{{l10n.external_annotation}}{{/external}}" class="Ldt-AnnotationsList-Thumbnail" src="{{thumbnail}}" />'
- + '{{#external}}<div title="{{l10n.external_annotation}}" class="Ldt-AnnotationsList-External-Icon"></div>{{/external}}'
- + '</a>'
- + '</div>'
- + '{{#allow_annotations_deletion}}'
- + '<div data-annotation="{{ id }}" class="Ldt-AnnotationsList-DeleteButton">✖</div>'
- + '{{/allow_annotations_deletion}}'
- + '{{#show_timecode}}<div title="{{l10n.set_time}}" class="Ldt-AnnotationsList-Duration"><span class="Ldt-AnnotationsList-Begin Ldt-live-editable Ldt-AnnotationsList-TimeEdit" data-editable_value="{{begin}}" data-editable_id="{{id}}" data-editable_field="begin" data-editable_type="timestamp">{{begin}}</span>{{#show_end_time}} - <span class="Ldt-AnnotationsList-End Ldt-live-editable" data-editable_value="{{end}}" data-editable_id="{{id}}" data-editable_field="end" data-editable_type="timestamp">{{end}}</span>{{/show_end_time}}</div>{{/show_timecode}}'
- + '<h3 class="Ldt-AnnotationsList-Title Ldt-Annotation-Timecode" data-timecode="{{ begin_ms }}" draggable="true">'
- + '{{#show_title}}<span class="Ldt-AnnotationsList-TitleContent Ldt-live-editable" data-editable_value="{{title}}" data-editable_type="multiline" data-editable_id="{{id}}" data-editable_field="title">{{{htitle}}}</span>{{/show_title}}'
- + '{{#show_creator}}<span class="Ldt-AnnotationsList-Creator">{{ creator }}</span>{{/show_creator}}'
- + '</h3>'
- + '<p class="Ldt-AnnotationsList-Description Ldt-live-editable" data-editable_type="multiline" data-editable_value="{{description}}" data-editable_id="{{id}}" data-editable_field="description">{{{hdescription}}}</p>'
- + '{{#created}}'
- + '<div class="Ldt-AnnotationsList-CreationDate">{{{created}}}</div>'
- + '{{/created}}'
- + '{{#tags.length}}'
- + '<ul class="Ldt-AnnotationsList-Tags">'
- + '{{#tags}}'
- + '{{#.}}'
- + '<li class="Ldt-AnnotationsList-Tag-Li">'
- + '<span>{{.}}</span>'
- + '</li>'
- + '{{/.}}'
- + '{{/tags}}'
- + '</ul>'
- + '{{/tags.length}}'
- + '{{#audio}}<div class="Ldt-AnnotationsList-Play" data-annotation-id="{{id}}">{{l10n.voice_annotation}}</div>{{/audio}}'
- + '<div class="Ldt-AnnotationsList-EditControls">'
- + '{{#show_twitter}}<a title="{{l10n.tweet_annotation}}" target="_blank" href="https://twitter.com/intent/tweet?{{twitter_param}}"><img width="16" height="16" src="metadataplayer/img/twitter.svg"></a>{{/show_twitter}}'
- + '{{#show_publish}}<div title="{{l10n.publish_annotation}}" class="Ldt-AnnotationsList-PublishAnnotation" data-editable_id="{{id}}"></div>{{/show_publish}}'
- + '{{#editable}}<div title="{{l10n.edit_annotation}}" class="Ldt-AnnotationsList-Edit" data-editable_id="{{id}}"></div>'
- + '<div title="{{l10n.delete_annotation}}" class="Ldt-AnnotationsList-Delete" data-editable_id="{{id}}"></div>{{/editable}}'
- + '</div>'
- + '</li>';
+ static annotationTemplate =
+ '<li class="Ldt-AnnotationsList-li Ldt-Highlighter-Annotation Ldt-TraceMe" data-annotation="{{ id }}" data-begin="{{ begin_ms }}" data-end="{{ end_ms }}" trace-info="annotation-id:{{id}}, media-id:{{media_id}}" style="{{specific_style}}">' +
+ '<div data-annotation="{{ id }}" class="Ldt-AnnotationsList-ThumbContainer Ldt-AnnotationsList-Annotation-Screen Ldt-AnnotationsList-Annotation-ScreenMain">' +
+ '<a {{#url}}href="{{url}}"{{/url}} draggable="true">' +
+ '<img title="{{^external}}{{ begin }} - {{ end }}{{/external}}{{#external}}{{l10n.external_annotation}}{{/external}}" class="Ldt-AnnotationsList-Thumbnail" src="{{thumbnail}}" />' +
+ '{{#external}}<div title="{{l10n.external_annotation}}" class="Ldt-AnnotationsList-External-Icon"></div>{{/external}}' +
+ "</a>" +
+ "</div>" +
+ "{{#allow_annotations_deletion}}" +
+ '<div data-annotation="{{ id }}" class="Ldt-AnnotationsList-DeleteButton">✖</div>' +
+ "{{/allow_annotations_deletion}}" +
+ '{{#show_timecode}}<div title="{{l10n.set_time}}" class="Ldt-AnnotationsList-Duration"><span class="Ldt-AnnotationsList-Begin Ldt-live-editable Ldt-AnnotationsList-TimeEdit" data-editable_value="{{begin}}" data-editable_id="{{id}}" data-editable_field="begin" data-editable_type="timestamp">{{begin}}</span>{{#show_end_time}} - <span class="Ldt-AnnotationsList-End Ldt-live-editable" data-editable_value="{{end}}" data-editable_id="{{id}}" data-editable_field="end" data-editable_type="timestamp">{{end}}</span>{{/show_end_time}}</div>{{/show_timecode}}' +
+ '<h3 class="Ldt-AnnotationsList-Title Ldt-Annotation-Timecode" data-timecode="{{ begin_ms }}" draggable="true">' +
+ '{{#show_title}}<span class="Ldt-AnnotationsList-TitleContent Ldt-live-editable" data-editable_value="{{title}}" data-editable_type="multiline" data-editable_id="{{id}}" data-editable_field="title">{{{htitle}}}</span>{{/show_title}}' +
+ '{{#show_creator}}<span class="Ldt-AnnotationsList-Creator">{{ creator }}</span>{{/show_creator}}' +
+ "</h3>" +
+ '<p class="Ldt-AnnotationsList-Description Ldt-live-editable" data-editable_type="multiline" data-editable_value="{{description}}" data-editable_id="{{id}}" data-editable_field="description">{{{hdescription}}}</p>' +
+ "{{#created}}" +
+ '<div class="Ldt-AnnotationsList-CreationDate">{{{created}}}</div>' +
+ "{{/created}}" +
+ "{{#tags.length}}" +
+ '<ul class="Ldt-AnnotationsList-Tags">' +
+ "{{#tags}}" +
+ "{{#.}}" +
+ '<li class="Ldt-AnnotationsList-Tag-Li">' +
+ "<span>{{.}}</span>" +
+ "</li>" +
+ "{{/.}}" +
+ "{{/tags}}" +
+ "</ul>" +
+ "{{/tags.length}}" +
+ '{{#audio}}<div class="Ldt-AnnotationsList-Play" data-annotation-id="{{id}}">{{l10n.voice_annotation}}</div>{{/audio}}' +
+ '<div class="Ldt-AnnotationsList-EditControls">' +
+ '{{#show_twitter}}<a title="{{l10n.tweet_annotation}}" target="_blank" href="https://twitter.com/intent/tweet?{{twitter_param}}"><img width="16" height="16" src="metadataplayer/img/twitter.svg"></a>{{/show_twitter}}' +
+ '{{#show_publish}}<div title="{{l10n.publish_annotation}}" class="Ldt-AnnotationsList-PublishAnnotation" data-editable_id="{{id}}"></div>{{/show_publish}}' +
+ '{{#editable}}<div title="{{l10n.edit_annotation}}" class="Ldt-AnnotationsList-Edit" data-editable_id="{{id}}"></div>' +
+ '<div title="{{l10n.delete_annotation}}" class="Ldt-AnnotationsList-Delete" data-editable_id="{{id}}"></div>{{/editable}}' +
+ "</div>" +
+ "</li>";
-// obj.url = this.project_url + "/" + media + "/" + annotations[i].meta.project
-// + "/" + annotations[i].meta["id-ref"] + '#id=' + annotations[i].id;
+ // obj.url = this.project_url + "/" + media + "/" + annotations[i].meta.project
+ // + "/" + annotations[i].meta["id-ref"] + '#id=' + annotations[i].id;
-IriSP.Widgets.AnnotationsList.prototype.ajaxSource = function() {
- var _currentTime = this.media.getCurrentTime(),
+ ajaxSource() {
+ var _currentTime = this.media.getCurrentTime(),
_duration = this.media.duration;
- this.lastAjaxQuery = _currentTime;
- var _url = Mustache.to_html(this.ajax_url, {
- media : this.source.currentMedia.id,
- begin : Math.max(0, _currentTime - this.ajax_granularity),
- end : Math.min(_duration.milliseconds, _currentTime + this.ajax_granularity)
- });
- this.currentSource = this.player.loadMetadata(IriSP._.defaults({
- "url" : _url
- }, this.metadata));
-};
+ this.lastAjaxQuery = _currentTime;
+ var _url = Mustache.render(this.ajax_url, {
+ media: this.source.currentMedia.id,
+ begin: Math.max(0, _currentTime - this.ajax_granularity),
+ end: Math.min(
+ _duration.milliseconds,
+ _currentTime + this.ajax_granularity
+ ),
+ });
+ this.currentSource = this.player.loadMetadata(
+ _.defaults(
+ {
+ url: _url,
+ },
+ this.metadata
+ )
+ );
+ }
-IriSP.Widgets.AnnotationsList.prototype.showScreen = function(_screenName) {
- this.$.find('.Ldt-AnnotationsList-Screen' + _screenName).show()
- .siblings().hide();
-}
+ showScreen(_screenName) {
+ this.$.find(".Ldt-AnnotationsList-Screen" + _screenName)
+ .show()
+ .siblings()
+ .hide();
+ }
-IriSP.Widgets.AnnotationsList.prototype.ajaxMashup = function() {
- var _currentTime = this.media.getCurrentTime();
- var _currentAnnotation = this.source.currentMedia.getAnnotationAtTime(_currentTime);
- if (typeof _currentAnnotation !== "undefined" && _currentAnnotation.id !== this.lastMashupAnnotation) {
+ ajaxMashup() {
+ var _currentTime = this.media.getCurrentTime();
+ var _currentAnnotation =
+ this.source.currentMedia.getAnnotationAtTime(_currentTime);
+ if (
+ typeof _currentAnnotation !== "undefined" &&
+ _currentAnnotation.id !== this.lastMashupAnnotation
+ ) {
this.lastMashupAnnotation = _currentAnnotation.id;
var _currentMedia = _currentAnnotation.getMedia(),
- _url = Mustache.to_html(this.ajax_url, {
- media : _currentMedia.id,
- begin : Math.max(0, _currentAnnotation.annotation.begin.milliseconds - this.ajax_granularity),
- end : Math.min(_currentMedia.duration.milliseconds, _currentAnnotation.annotation.end.milliseconds + this.ajax_granularity)
- });
- this.currentSource = this.player.loadMetadata(IriSP._.defaults({
- "url" : _url
- }, this.metadata));
+ _url = Mustache.render(this.ajax_url, {
+ media: _currentMedia.id,
+ begin: Math.max(
+ 0,
+ _currentAnnotation.annotation.begin.milliseconds -
+ this.ajax_granularity
+ ),
+ end: Math.min(
+ _currentMedia.duration.milliseconds,
+ _currentAnnotation.annotation.end.milliseconds +
+ this.ajax_granularity
+ ),
+ });
+ this.currentSource = this.player.loadMetadata(
+ _.defaults(
+ {
+ url: _url,
+ },
+ this.metadata
+ )
+ );
+ }
}
-};
-/*
- * Import annotations
- */
-IriSP.Widgets.AnnotationsList.prototype.importAnnotations = function () {
- var widget = this;
- var $ = IriSP.jQuery;
- var textarea = $("<textarea>");
- var el = $("<div>")
- .append($("<span>")
- .addClass("importAnnotationsLabel")
- .text(widget.messages.import_annotations))
- .addClass("importContainer")
- .dialog({
- title: "Annotation import",
- autoOpen: true,
- width: '80%',
- minHeight: '400',
- height: 400,
- buttons: [ { text: "Close", click: function() { $( this ).dialog( "close" ); } },
- // { text: "Load", click: function () {
- // // TODO
- // // http://www.html5rocks.com/en/tutorials/file/dndfiles/?redirect_from_locale=fr
- // console.log("Load from a file");
- // } },
- { text: "Import", click: function () {
- // FIXME: this should be a model.Source method
- var time_regexp = /(\[[\d:]+\])/;
- console.log("Import data");
- // widget.localSource
- // Dummy parsing for the moment
- var data = textarea[0].value
- .split(time_regexp)
- .filter( function (s) { return ! s.match(/^\s*$/)});
- var begin = null,
- end = null,
- content = null,
- // Previous is either null, timestamp or text
- previous = null;
- for (var i = 0; i < data.length; i++) {
- var el = data[i];
- if (el.match(time_regexp)) {
- if (previous == 'text') {
- // Timestamp following text. Let's make it an annotation
- end = IriSP.timestamp2ms(el.slice(1, -1));
- TODO.createAnnotation(begin, end, content);
- // Preserve the end value, which may be the begin value of the next annotation.
- begin = end;
- end = null;
- content = null;
- } else {
- // (previous == 'timestamp' || previous == null)
- // 2 consecutive timestamps. Let's start a new annotation
- content = null;
- begin = IriSP.timestamp2ms(el.slice(1, -1));
- end = null;
- };
- previous = 'timestamp';
- } else {
- // Text content
- content = el;
- previous = 'text';
- }
- // Last textual value
- if (previous == 'text' && begin !== null) {
- TODO.createAnnotation(begin, begin, content);
- }
- }
- } } ]
- });
+ /*
+ * Import annotations
+ */
+ importAnnotations() {
+ var widget = this;
+ var $ = jQuery;
+ var textarea = $("<textarea>");
+ var el = $("<div>")
+ .append(
+ $("<span>")
+ .addClass("importAnnotationsLabel")
+ .text(widget.messages.import_annotations)
+ )
+ .addClass("importContainer")
+ .dialog({
+ title: "Annotation import",
+ autoOpen: true,
+ width: "80%",
+ minHeight: "400",
+ height: 400,
+ buttons: [
+ {
+ text: "Close",
+ click: function () {
+ $(this).dialog("close");
+ },
+ },
+ // { text: "Load", click: function () {
+ // // TODO
+ // // http://www.html5rocks.com/en/tutorials/file/dndfiles/?redirect_from_locale=fr
+ // console.log("Load from a file");
+ // } },
+ {
+ text: "Import",
+ click: function () {
+ // FIXME: this should be a model.Source method
+ var time_regexp = /(\[[\d:]+\])/;
+ // widget.localSource
+ // Dummy parsing for the moment
+ var data = textarea[0].value
+ .split(time_regexp)
+ .filter(function (s) {
+ return !s.match(/^\s*$/);
+ });
+ var begin = null,
+ end = null,
+ content = null,
+ // Previous is either null, timestamp or text
+ previous = null;
+ for (var i = 0; i < data.length; i++) {
+ var el = data[i];
+ if (el.match(time_regexp)) {
+ if (previous == "text") {
+ // Timestamp following text. Let's make it an annotation
+ end = ns.timestamp2ms(el.slice(1, -1));
+ TODO.createAnnotation(begin, end, content);
+ // Preserve the end value, which may be the begin value of the next annotation.
+ begin = end;
+ end = null;
+ content = null;
+ } else {
+ // (previous == 'timestamp' || previous == null)
+ // 2 consecutive timestamps. Let's start a new annotation
+ content = null;
+ begin = ns.timestamp2ms(el.slice(1, -1));
+ end = null;
+ }
+ previous = "timestamp";
+ } else {
+ // Text content
+ content = el;
+ previous = "text";
+ }
+ // Last textual value
+ if (previous == "text" && begin !== null) {
+ TODO.createAnnotation(begin, begin, content);
+ }
+ }
+ },
+ },
+ ],
+ });
+ }
-}
-
-IriSP.Widgets.AnnotationsList.prototype.refresh = function(_forceRedraw) {
- _forceRedraw = (typeof _forceRedraw !== "undefined" && _forceRedraw);
- if (this.currentSource.status !== IriSP.Model._SOURCE_STATUS_READY) {
+ refresh(_forceRedraw) {
+ _forceRedraw = typeof _forceRedraw !== "undefined" && _forceRedraw;
+ if (this.currentSource.status !== ns.Model._SOURCE_STATUS_READY) {
return 0;
- }
- var _this = this,
+ }
+ var _this = this,
_currentTime = this.media.getCurrentTime();
- var _list = this.annotation_type ? this.currentSource.getAnnotationsByTypeTitle(this.annotation_type) : this.currentSource.getAnnotations();
- if (this.mashupMode) {
- var _currentAnnotation = this.source.currentMedia.getAnnotationAtTime(_currentTime);
+ var _list = this.annotation_type
+ ? this.currentSource.getAnnotationsByTypeTitle(this.annotation_type)
+ : this.currentSource.getAnnotations();
+ if (this.mashupMode) {
+ var _currentAnnotation =
+ this.source.currentMedia.getAnnotationAtTime(_currentTime);
if (typeof _currentAnnotation !== "undefined") {
- _currentTime = _currentTime - _currentAnnotation.begin + _currentAnnotation.annotation.begin;
- var _mediaId = _currentAnnotation.getMedia().id;
- _list = _list.filter(function(_annotation) {
- return _annotation.getMedia().id === _mediaId;
- });
+ _currentTime =
+ _currentTime -
+ _currentAnnotation.begin +
+ _currentAnnotation.annotation.begin;
+ var _mediaId = _currentAnnotation.getMedia().id;
+ _list = _list.filter(function (_annotation) {
+ return _annotation.getMedia().id === _mediaId;
+ });
}
- }
- _list = _list.filter(function(_annotation) {
+ }
+ _list = _list.filter(function (_annotation) {
return _annotation.found !== false;
- });
-
- if ((this.filter_by_segments)&&(!(this.show_filters && this.segment_filter && this.ignoresegmentcheckbox_$[0].checked))) {
+ });
+
+ if (
+ this.filter_by_segments &&
+ !(
+ this.show_filters &&
+ this.segment_filter &&
+ this.ignoresegmentcheckbox_$[0].checked
+ )
+ ) {
/*
- * A given annotation is considered "in" segment if the middle of it is between the segment beginning and the segment end.
+ * A given annotation is considered "in" segment if the middle of it is between the segment beginning and the segment end.
* Note this is meant to be used for "markings" annotations (not segments)
*/
- _segmentsAnnotation = this.currentSource.getAnnotationsByTypeTitle(this.segments_annotation_type)
- if (this.media.getTimeRange()){
- _currentSegments = _segmentsAnnotation.filter(function(_segment){
- return (_this.media.getTimeRange()[0] == _segment.begin && _this.media.getTimeRange()[1] == _segment.end)
- });
- }
- else {
- _currentSegments = _segmentsAnnotation.filter(function(_segment){
- return (_currentTime >= _segment.begin && _currentTime <= _segment.end)
- });
+ _segmentsAnnotation = this.currentSource.getAnnotationsByTypeTitle(
+ this.segments_annotation_type
+ );
+ if (this.media.getTimeRange()) {
+ _currentSegments = _segmentsAnnotation.filter(function (_segment) {
+ return (
+ _this.media.getTimeRange()[0] == _segment.begin &&
+ _this.media.getTimeRange()[1] == _segment.end
+ );
+ });
+ } else {
+ _currentSegments = _segmentsAnnotation.filter(function (_segment) {
+ return (
+ _currentTime >= _segment.begin && _currentTime <= _segment.end
+ );
+ });
}
if (_currentSegments.length == 0) {
- _list = _list.filter(function(_annotation){
- return false;
- });
+ _list = _list.filter(function (_annotation) {
+ return false;
+ });
+ } else {
+ _list = _list.filter(function (_annotation) {
+ _annotation_time = (_annotation.begin + _annotation.end) / 2;
+ return (
+ _currentSegments[0].begin <= _annotation_time &&
+ _currentSegments[0].end >= _annotation_time
+ );
+ });
}
- else {
- _list = _list.filter(function(_annotation){
- _annotation_time = (_annotation.begin+_annotation.end)/2;
- return (_currentSegments[0].begin <= _annotation_time && _currentSegments[0].end >= _annotation_time)
- });
- }
- if(this.annotations_count_header && this.annotations_count != _list.length){
- this.annotations_count = _list.length;
- this.refreshHeader();
+ if (
+ this.annotations_count_header &&
+ this.annotations_count != _list.length
+ ) {
+ this.annotations_count = _list.length;
+ this.refreshHeader();
}
- }
- if (this.show_only_annotation_from_user){
- _list = _list.filter(function(_annotation){
- return _annotation.creator == _this.show_only_annotation_from_user;
+ }
+ if (this.show_only_annotation_from_user) {
+ _list = _list.filter(function (_annotation) {
+ return _annotation.creator == _this.show_only_annotation_from_user;
});
- }
- if (this.limit_count) {
+ }
+ if (this.limit_count) {
/* Get the n annotations closest to current timecode */
- _list = _list.sortBy(function(_annotation) {
- return Math.abs((_annotation.begin + _annotation.end) / 2 - _currentTime);
- }).slice(0, this.limit_count);
- }
-
- if (this.newest_first) {
- _list = _list.sortBy(function(_annotation) {
- return -_annotation.created.valueOf();
+ _list = _list
+ .sortBy(function (_annotation) {
+ return Math.abs(
+ (_annotation.begin + _annotation.end) / 2 - _currentTime
+ );
+ })
+ .slice(0, this.limit_count);
+ }
+
+ if (this.newest_first) {
+ _list = _list.sortBy(function (_annotation) {
+ return -_annotation.created.valueOf();
});
- } else {
- _list = _list.sortBy(function(_annotation) {
- return _annotation.begin;
+ } else {
+ _list = _list.sortBy(function (_annotation) {
+ return _annotation.begin;
});
- }
-
- if (this.show_filters){
- if (this.user_filter){
- _username = this.userselect_$[0].options[this.userselect_$[0].selectedIndex].value;
- if (_username != "false")
- {
- _list = _list.filter(function(_annotation){
- return _annotation.creator == _username
- })
- }
+ }
+
+ if (this.show_filters) {
+ if (this.user_filter) {
+ _username =
+ this.userselect_$[0].options[this.userselect_$[0].selectedIndex]
+ .value;
+ if (_username != "false") {
+ _list = _list.filter(function (_annotation) {
+ return _annotation.creator == _username;
+ });
+ }
}
- if (this.keyword_filter){
- _keyword = this.keywordinput_$[0].value;
- if (_keyword != ""){
- _list = _list.filter(function(_annotation){
- return _annotation.description.toLowerCase().match(_keyword.toLowerCase());
- });
- }
+ if (this.keyword_filter) {
+ _keyword = this.keywordinput_$[0].value;
+ if (_keyword != "") {
+ _list = _list.filter(function (_annotation) {
+ return _annotation.description
+ .toLowerCase()
+ .match(_keyword.toLowerCase());
+ });
+ }
}
- if (this.date_filter){
- if(this.datefilterinput_$[0].value != ""){
- _date = this.datefilterinput_$.datepicker("getDate");
- _list = _list.filter(function(_annotation){
- return ((_annotation.created.getDate() == _date.getDate())&&(_annotation.created.getMonth() == _date.getMonth())&&(_annotation.created.getFullYear() == _date.getFullYear()));
- });
- }
- }
- if (this.latest_contributions_filter && this.latestcontributionscheckbox_$[0].checked){
- _list = _list.sortBy(function(_annotation) {
- return -_annotation.created.valueOf();
+ if (this.date_filter) {
+ if (this.datefilterinput_$[0].value != "") {
+ _date = this.datefilterinput_$.datepicker("getDate");
+ _list = _list.filter(function (_annotation) {
+ return (
+ _annotation.created.getDate() == _date.getDate() &&
+ _annotation.created.getMonth() == _date.getMonth() &&
+ _annotation.created.getFullYear() == _date.getFullYear()
+ );
});
- this.usernames.forEach(function(_user){
-
- latest_ann = _list.filter(function(_annotation){
- return _annotation.creator == _user;
- })[0];
- _list = _list.filter(function(_annotation){
- return _annotation.id == (latest_ann ? latest_ann.id : false) || _annotation.creator != _user;
- });
+ }
+ }
+ if (
+ this.latest_contributions_filter &&
+ this.latestcontributionscheckbox_$[0].checked
+ ) {
+ _list = _list.sortBy(function (_annotation) {
+ return -_annotation.created.valueOf();
+ });
+ this.usernames.forEach(function (_user) {
+ latest_ann = _list.filter(function (_annotation) {
+ return _annotation.creator == _user;
+ })[0];
+ _list = _list.filter(function (_annotation) {
+ return (
+ _annotation.id == (latest_ann ? latest_ann.id : false) ||
+ _annotation.creator != _user
+ );
});
+ });
}
-
- }
-
- var _ids = _list.idIndex;
+ }
+
+ var _ids = _list.idIndex;
- if (_forceRedraw || !IriSP._.isEqual(_ids, this.lastIds) || this.searchString !== this.lastSearch) {
+ if (
+ _forceRedraw ||
+ !_.isEqual(_ids, this.lastIds) ||
+ this.searchString !== this.lastSearch
+ ) {
/* This part only gets executed if the list needs updating */
this.lastSearch = this.searchString;
this.lastIds = _ids;
this.list_$.html("");
- _list.forEach(function(_annotation) {
- var _url = (
- ( typeof _annotation.url !== "undefined" && _annotation.url)
+ _list.forEach(function (_annotation) {
+ var _url =
+ typeof _annotation.url !== "undefined" && _annotation.url
? _annotation.url
- : (
- ( typeof _this.source.projectId !== "undefined" && typeof _annotation.project !== "undefined" && _annotation.project && _this.source.projectId !== _annotation.project )
- ? Mustache.to_html(
- _this.foreign_url,
- {
- project : _annotation.project,
- media : _annotation.media.id,
- annotation : _annotation.id,
- annotationType : _annotation.annotationType.id
- }
- )
- : document.location.href.replace(/#.*$/,'') + '#id=' + _annotation.id + '&t=' + (_annotation.begin / 1000.0)
- )
- ),
- _external = _annotation.project != _this.source.projectId ? true : false,
- _title = "",
- _description = _annotation.description,
- _thumbnail = (typeof _annotation.thumbnail !== "undefined" && _annotation.thumbnail ? _annotation.thumbnail : _this.default_thumbnail);
- if (_this.show_creator){
- if (_annotation.creator) {
- var _users = [],
- _user = {},
- _creator = "";
- if (_this.source.users_data) {
- _users = _this.source.users_data.filter(function(_user_data){
- return _user_data.username == _annotation.creator;
- });
- }
- if (_users.length == 0){
- _user.username = _annotation.creator
- }
- else{
- _user = _users[0]
- }
- _creator = _this.make_name_string_function(_user);
- }
+ : typeof _this.source.projectId !== "undefined" &&
+ typeof _annotation.project !== "undefined" &&
+ _annotation.project &&
+ _this.source.projectId !== _annotation.project
+ ? Mustache.render(_this.foreign_url, {
+ project: _annotation.project,
+ media: _annotation.media.id,
+ annotation: _annotation.id,
+ annotationType: _annotation.annotationType.id,
+ })
+ : document.location.href.replace(/#.*$/, "") +
+ "#id=" +
+ _annotation.id +
+ "&t=" +
+ _annotation.begin / 1000.0,
+ _external =
+ _annotation.project != _this.source.projectId ? true : false,
+ _title = "",
+ _description = _annotation.description,
+ _thumbnail =
+ typeof _annotation.thumbnail !== "undefined" &&
+ _annotation.thumbnail
+ ? _annotation.thumbnail
+ : _this.default_thumbnail;
+ if (_this.show_creator) {
+ if (_annotation.creator) {
+ var _users = [],
+ _user = {},
+ _creator = "";
+ if (_this.source.users_data) {
+ _users = _this.source.users_data.filter(function (_user_data) {
+ return _user_data.username == _annotation.creator;
+ });
+ }
+ if (_users.length == 0) {
+ _user.username = _annotation.creator;
+ } else {
+ _user = _users[0];
+ }
+ _creator = _this.make_name_string_function(_user);
}
- if (_this.show_title && _annotation.title){
- var _title = _annotation.title;
- }
- var _bgcolor;
- IriSP._(_this.polemics).each(function(_polemic) {
- var _rgxp = IriSP.Model.regexpFromTextOrArray(_polemic.keyword, true);
- if (_rgxp.test(_title + " " + _description)) {
- _bgcolor = _polemic.background_color;
- }
- });
- var _created = false;
- if (_this.show_creation_date) {
- _created = _annotation.created.toLocaleDateString()+", "+_annotation.created.toLocaleTimeString().replace(/\u200E/g, '').replace(/^([^\d]*\d{1,2}:\d{1,2}):\d{1,2}([^\d]*)$/, '$1$2');;
- }
- if(this.tags == true){
- var _tags = _annotation.getTagTexts();
- }
- else {
- var _tags = false;
+ }
+ if (_this.show_title && _annotation.title) {
+ var _title = _annotation.title;
+ }
+ var _bgcolor;
+ _(_this.polemics).each(function (_polemic) {
+ var _rgxp = ns.Model.regexpFromTextOrArray(
+ _polemic.keyword,
+ true
+ );
+ if (_rgxp.test(_title + " " + _description)) {
+ _bgcolor = _polemic.background_color;
}
- var _data = {
- id : _annotation.id,
- media_id : _annotation.getMedia().id,
- htitle : IriSP.textFieldHtml(_title),
- title: _title,
- creator: _creator,
- hdescription : IriSP.textFieldHtml(_description),
- description: _description,
- begin : _annotation.begin.toString(),
- end : _annotation.end.toString(),
- created : _created,
- show_timecode : _this.show_timecode,
- show_end_time : _this.show_end_time,
- show_title : _this.show_title && _title,
- thumbnail : _thumbnail,
- url : _url,
- tags : _tags,
- specific_style : (typeof _bgcolor !== "undefined" ? "background-color: " + _bgcolor : ""),
- l10n: _this.l10n,
- editable: _this.editable,
- external: _external,
- show_publish: _this.show_publish,
- show_creator: _this.show_creator,
- show_twitter: _this.show_twitter,
- twitter_param: IriSP.jQuery.param({ url: _url, text: IriSP.textFieldHtml(_title) + (_this.twitter_hashtag ? ' #' + _this.twitter_hashtag : "") }),
- allow_annotations_deletion: _this.allow_annotations_deletion
+ });
+ var _created = false;
+ if (_this.show_creation_date) {
+ _created =
+ _annotation.created.toLocaleDateString() +
+ ", " +
+ _annotation.created
+ .toLocaleTimeString()
+ .replace(/\u200E/g, "")
+ .replace(/^([^\d]*\d{1,2}:\d{1,2}):\d{1,2}([^\d]*)$/, "$1$2");
+ }
+ if (_this.tags == true) {
+ var _tags = _annotation.getTagTexts();
+ } else {
+ var _tags = false;
+ }
+ var _data = {
+ id: _annotation.id,
+ media_id: _annotation.getMedia().id,
+ htitle: ns.textFieldHtml(_title),
+ title: _title,
+ creator: _creator,
+ hdescription: ns.textFieldHtml(_description),
+ description: _description,
+ begin: _annotation.begin.toString(),
+ end: _annotation.end.toString(),
+ created: _created,
+ show_timecode: _this.show_timecode,
+ show_end_time: _this.show_end_time,
+ show_title: _this.show_title && _title,
+ thumbnail: _thumbnail,
+ url: _url,
+ tags: _tags,
+ specific_style:
+ typeof _bgcolor !== "undefined"
+ ? "background-color: " + _bgcolor
+ : "",
+ l10n: _this.l10n,
+ editable: _this.editable,
+ external: _external,
+ show_publish: _this.show_publish,
+ show_creator: _this.show_creator,
+ show_twitter: _this.show_twitter,
+ twitter_param: jQuery.param({
+ url: _url,
+ text:
+ ns.textFieldHtml(_title) +
+ (_this.twitter_hashtag ? " #" + _this.twitter_hashtag : ""),
+ }),
+ allow_annotations_deletion: _this.allow_annotations_deletion,
+ };
+ // if (
+ // _this.show_audio &&
+ // _annotation.audio &&
+ // _annotation.audio.href &&
+ // _annotation.audio.href != "null"
+ // ) {
+ // _data.audio = true;
+ // if (!_this.jwplayers[_annotation.id]) {
+ // var _audiofile = _annotation.audio.href;
+ // if (_this.audio_url_transform) {
+ // _audiofile = _this.audio_url_transform(_annotation.audio.href);
+ // }
+ // var _tmpId = "jwplayer-" + ns.Model.getUID();
+ // _this.jwplayers[_annotation.id] = _tmpId;
+ // _this.$.find(".Ldt-AnnotationsList-Audio").append(
+ // jQuery("<div>").attr("id", _tmpId)
+ // );
+ // jwplayer(_tmpId).setup({
+ // //flashplayer: ns.getLib("jwPlayerSWF"),
+ // file: _audiofile,
+ // fallback: false,
+ // primary: "flash",
+ // controls: false,
+ // width: 1,
+ // height: 1,
+ // events: {
+ // onPause: function () {
+ // _this.$.find(
+ // ".Ldt-AnnotationsList-Play[data-annotation-id=" +
+ // _annotation.id +
+ // "]"
+ // ).text(_this.l10n.voice_annotation);
+ // },
+ // onPlay: function () {
+ // _this.$.find(
+ // ".Ldt-AnnotationsList-Play[data-annotation-id=" +
+ // _annotation.id +
+ // "]"
+ // ).text(_this.l10n.now_playing);
+ // },
+ // },
+ // });
+ // }
+ //}
+ var _html = Mustache.render(_this.constructor.annotationTemplate, _data),
+ _el = jQuery(_html),
+ _onselect = function () {
+ _this.$.find(".Ldt-AnnotationsList-li").removeClass("selected");
+ _el.addClass("selected");
+ },
+ _onunselect = function () {
+ _this.$.find(".Ldt-AnnotationsList-li").removeClass("selected");
};
- if (_this.show_audio && _annotation.audio && _annotation.audio.href && _annotation.audio.href != "null") {
- _data.audio = true;
- if (!_this.jwplayers[_annotation.id]) {
- var _audiofile = _annotation.audio.href;
- if (_this.audio_url_transform) {
- _audiofile = _this.audio_url_transform(_annotation.audio.href);
- }
- var _tmpId = "jwplayer-" + IriSP.Model.getUID();
- _this.jwplayers[_annotation.id] = _tmpId;
- _this.$.find(".Ldt-AnnotationsList-Audio").append(IriSP.jQuery("<div>").attr("id", _tmpId));
- jwplayer(_tmpId).setup({
- flashplayer: IriSP.getLib("jwPlayerSWF"),
- file: _audiofile,
- fallback: false,
- primary: "flash",
- controls: false,
- width: 1,
- height: 1,
- events: {
- onPause: function() {
- _this.$.find(".Ldt-AnnotationsList-Play[data-annotation-id=" + _annotation.id + "]").text(_this.l10n.voice_annotation);
- },
- onPlay: function() {
- _this.$.find(".Ldt-AnnotationsList-Play[data-annotation-id=" + _annotation.id + "]").text(_this.l10n.now_playing);
- }
- }
- });
+ _el
+ .mouseover(function () {
+ _annotation.trigger("select");
+ })
+ .mouseout(function () {
+ _annotation.trigger("unselect");
+ })
+ .click(function () {
+ if (_this.filter_by_segments && _this.media.getTimeRange()) {
+ _ann_time = (_annotation.begin + _annotation.end) / 2;
+ if (
+ _ann_time <= _this.media.getTimeRange()[0] ||
+ _ann_time >= _this.media.getTimeRange()[1]
+ ) {
+ _this.media.resetTimeRange();
}
- }
- var _html = Mustache.to_html(_this.annotationTemplate, _data),
- _el = IriSP.jQuery(_html),
- _onselect = function() {
- _this.$.find('.Ldt-AnnotationsList-li').removeClass("selected");
- _el.addClass("selected");
- },
- _onunselect = function() {
- _this.$.find('.Ldt-AnnotationsList-li').removeClass("selected");
- };
- _el.mouseover(function() {
- _annotation.trigger("select");
- })
- .mouseout(function() {
- _annotation.trigger("unselect");
- })
- .click(function() {
- if (_this.filter_by_segments && _this.media.getTimeRange()){
- _ann_time = ( _annotation.begin + _annotation.end ) / 2;
- if ((_ann_time <= _this.media.getTimeRange()[0]) || (_ann_time >= _this.media.getTimeRange()[1])){
- _this.media.resetTimeRange()
- }
- }
- _annotation.trigger("click");
- })
- .appendTo(_this.list_$);
- IriSP.attachDndData(_el.find("[draggable]"), {
- title: _title,
- description: _description,
- uri: _url,
- image: _annotation.thumbnail,
- text: '[' + _annotation.begin.toString() + '] ' + _title
- });
- _el.on("remove", function() {
- _annotation.off("select", _onselect);
- _annotation.off("unselect", _onunselect);
- });
- _annotation.on("select", _onselect);
- _annotation.on("unselect", _onunselect);
+ }
+ _annotation.trigger("click");
+ })
+ .appendTo(_this.list_$);
+ ns.attachDndData(_el.find("[draggable]"), {
+ title: _title,
+ description: _description,
+ uri: _url,
+ image: _annotation.thumbnail,
+ text: "[" + _annotation.begin.toString() + "] " + _title,
+ });
+ _el.on("remove", function () {
+ _annotation.off("select", _onselect);
+ _annotation.off("unselect", _onunselect);
+ });
+ _annotation.on("select", _onselect);
+ _annotation.on("unselect", _onunselect);
});
/* Correct the empty tag bug */
- this.$.find('.Ldt-AnnotationsList-Tag-Li').each(function() {
- var _el = IriSP.jQuery(this);
- if (!_el.text().replace(/(^\s+|\s+$)/g,'')) {
- _el.remove();
- }
+ this.$.find(".Ldt-AnnotationsList-Tag-Li").each(function () {
+ var _el = jQuery(this);
+ if (!_el.text().replace(/(^\s+|\s+$)/g, "")) {
+ _el.remove();
+ }
});
if (this.editable) {
- var widget = _this;
- var $ = IriSP.jQuery;
+ var widget = _this;
+ var $ = jQuery;
- var edit_element = function (_this, insertion_point) {
- var feedback_wrong = "#FF9999";
- var feedback_ok = "#99FF99";
+ var edit_element = function (_this, insertion_point) {
+ var feedback_wrong = "#FF9999";
+ var feedback_ok = "#99FF99";
- // insertion_point can be used to specify where to
- // insert the input field. Firefox is buggy wrt input
- // fields inside <a> or <h?> tags, it does not
- // propagate mouse clicks. If _this is a <a> then we
- // have to specify the ancestor before which we can
- // insert the input widget.
- if (insertion_point === undefined)
- insertion_point = _this;
+ // insertion_point can be used to specify where to
+ // insert the input field. Firefox is buggy wrt input
+ // fields inside <a> or <h?> tags, it does not
+ // propagate mouse clicks. If _this is a <a> then we
+ // have to specify the ancestor before which we can
+ // insert the input widget.
+ if (insertion_point === undefined) insertion_point = _this;
+
+ // Insert input element
+ var input_element = $(
+ _this.dataset.editable_type === "multiline"
+ ? "<textarea>"
+ : "<input>"
+ )
+ .addClass("editableInput")
+ .insertBefore($(insertion_point));
+ input_element[0].value = _this.dataset.editable_value;
+ $(input_element).show().focus();
+ $(_this).addClass("editing");
- // Insert input element
- var input_element = $(_this.dataset.editable_type === 'multiline' ? "<textarea>" : "<input>")
- .addClass("editableInput")
- .insertBefore($(insertion_point));
- input_element[0].value = _this.dataset.editable_value;
- $(input_element).show().focus();
- $(_this).addClass("editing");
+ function feedback(color) {
+ // Give some feedback
+ $(_this).removeClass("editing");
+ input_element.remove();
+ var previous_color = $(_this).css("background-color");
+ $(_this)
+ .stop()
+ .css("background-color", color)
+ .animate({ backgroundColor: previous_color }, 1000);
+ }
- function feedback(color) {
- // Give some feedback
- $(_this).removeClass("editing");
- input_element.remove();
- var previous_color = $(_this).css("background-color");
- $(_this).stop().css("background-color", color)
- .animate({ backgroundColor: previous_color}, 1000);
- }
-
- function cancelChanges(s) {
- feedback(feedback_wrong);
+ function cancelChanges(s) {
+ feedback(feedback_wrong);
+ }
+ function validateChanges() {
+ var n = input_element[0].value;
+ if (n == _this.dataset.editable_value) {
+ // No change
+ feedback(feedback_ok);
+ return;
+ }
+ if (n == "") {
+ // Delete annotation
+ delete_local_annotation(_this.dataset.editable_id);
+ widget.player.trigger(
+ "Annotation.delete",
+ _this.dataset.editable_id
+ );
+ return;
+ } else {
+ // Convert value if necessary.
+ var val = n;
+ if (_this.dataset.editable_type == "timestamp") {
+ val = ns.timestamp2ms(n);
+ if (Number.isNaN(val)) {
+ // Invalid value. Cancel changes
+ cancelChanges();
+ return;
+ }
}
- function validateChanges() {
- var n = input_element[0].value;
- if (n == _this.dataset.editable_value) {
- // No change
- feedback(feedback_ok);
- return;
- }
- if (n == '') {
- // Delete annotation
- delete_local_annotation(_this.dataset.editable_id);
- widget.player.trigger("Annotation.delete", _this.dataset.editable_id);
- return;
- } else {
- // Convert value if necessary.
- var val = n;
- if (_this.dataset.editable_type == 'timestamp') {
- val = IriSP.timestamp2ms(n);
- if (Number.isNaN(val)) {
- // Invalid value. Cancel changes
- cancelChanges();
- return;
- }
- }
- _this.dataset.editable_value = n;
- n = val;
- $(_this).text(val);
- }
+ _this.dataset.editable_value = n;
+ n = val;
+ $(_this).text(val);
+ }
- // We cannot use .getElement since it fetches
- // elements from the global Directory
- var an = get_local_annotation(_this.dataset.editable_id);
- if (an === undefined) {
- console.log("Strange error: cannot find edited annotation");
- feedback(feedback_wrong);
- } else {
- _this.dataset.editable_value = n;
- // Update annotation for storage
- if (_this.dataset.editable_field == 'begin')
- an.setBegin(n);
- else if (_this.dataset.editable_field == 'end')
- an.setEnd(n);
- else
- an[_this.dataset.editable_field] = n;
- an.modified = new Date();
- // FIXME: use user name, when available
- an.contributor = widget.player.config.username || "COCo User";
- widget.player.addLocalAnnotation(an);
- widget.player.trigger("Annotation.update", an);
- feedback(feedback_ok);
- }
+ // We cannot use .getElement since it fetches
+ // elements from the global Directory
+ var an = get_local_annotation(_this.dataset.editable_id);
+ if (an === undefined) {
+ console.log("Strange error: cannot find edited annotation");
+ feedback(feedback_wrong);
+ } else {
+ _this.dataset.editable_value = n;
+ // Update annotation for storage
+ if (_this.dataset.editable_field == "begin") an.setBegin(n);
+ else if (_this.dataset.editable_field == "end") an.setEnd(n);
+ else an[_this.dataset.editable_field] = n;
+ an.modified = new Date();
+ // FIXME: use user name, when available
+ an.contributor = widget.player.config.username || "COCo User";
+ widget.player.addLocalAnnotation(an);
+ widget.player.trigger("Annotation.update", an);
+ feedback(feedback_ok);
+ }
+ }
+ $(input_element)
+ .bind("keydown", function (e) {
+ if (e.which == 13) {
+ e.preventDefault();
+ validateChanges();
+ } else if (e.which == 27) {
+ e.preventDefault();
+ cancelChanges();
}
- $(input_element).bind('keydown', function(e) {
- if (e.which == 13) {
- e.preventDefault();
- validateChanges();
- } else if (e.which == 27) {
- e.preventDefault();
- cancelChanges();
- }
- }).bind("blur", function (e) {
- validateChanges();
- });
- };
+ })
+ .bind("blur", function (e) {
+ validateChanges();
+ });
+ };
+
+ var get_local_annotation = function (ident) {
+ return widget.player.getLocalAnnotation(ident);
+ };
- var get_local_annotation = function (ident) {
- return widget.player.getLocalAnnotation(ident);
- };
+ var save_local_annotations = function () {
+ widget.player.saveLocalAnnotations();
+ // Merge modifications into widget source
+ widget.source.merge(widget.player.localSource);
+ };
- var save_local_annotations = function() {
- widget.player.saveLocalAnnotations();
- // Merge modifications into widget source
- widget.source.merge(widget.player.localSource);
- };
+ var delete_local_annotation = function (ident) {
+ widget.source.getAnnotations().removeId(ident, true);
+ widget.player.deleteLocalAnnotation(ident);
+ widget.refresh(true);
+ };
- var delete_local_annotation = function(ident) {
- widget.source.getAnnotations().removeId(ident, true);
- widget.player.deleteLocalAnnotation(ident);
- widget.refresh(true);
- };
-
- this.$.find('.Ldt-AnnotationsList-Delete').click(function(e) {
- // Delete annotation
- var _annotation = get_local_annotation(this.dataset.editable_id);
- if (confirm(Mustache.to_html(widget.l10n.confirm_delete_message, { annotation: _annotation })))
- delete_local_annotation(this.dataset.editable_id);
- widget.refresh(true);
- });
- this.$.find('.Ldt-AnnotationsList-Edit').click(function(e) {
- if (widget.on_edit) {
- var _annotation = get_local_annotation(this.dataset.editable_id);
- widget.on_edit(_annotation);
- } else {
- // Edit annotation title. We have to specify the insertion point.
- var element = $(this).parents(".Ldt-AnnotationsList-li").find(".Ldt-AnnotationsList-TitleContent.Ldt-live-editable");
- edit_element(element[0]);
- }
+ this.$.find(".Ldt-AnnotationsList-Delete").click(function (e) {
+ // Delete annotation
+ var _annotation = get_local_annotation(this.dataset.editable_id);
+ if (
+ confirm(
+ Mustache.render(widget.l10n.confirm_delete_message, {
+ annotation: _annotation,
+ })
+ )
+ )
+ delete_local_annotation(this.dataset.editable_id);
+ widget.refresh(true);
+ });
+ this.$.find(".Ldt-AnnotationsList-Edit").click(function (e) {
+ if (widget.on_edit) {
+ var _annotation = get_local_annotation(this.dataset.editable_id);
+ widget.on_edit(_annotation);
+ } else {
+ // Edit annotation title. We have to specify the insertion point.
+ var element = $(this)
+ .parents(".Ldt-AnnotationsList-li")
+ .find(".Ldt-AnnotationsList-TitleContent.Ldt-live-editable");
+ edit_element(element[0]);
+ }
+ });
+ this.$.find(".Ldt-AnnotationsList-PublishAnnotation").click(function (
+ e
+ ) {
+ var _annotation = get_local_annotation(this.dataset.editable_id);
+ // Publish annotation to the server
+ if (
+ !confirm(
+ Mustache.render(widget.l10n.confirm_publish_message, {
+ annotation: _annotation,
+ })
+ )
+ )
+ return;
+ var _url = Mustache.render(widget.api_endpoint_template, {
+ id: widget.source.projectId,
});
- this.$.find('.Ldt-AnnotationsList-PublishAnnotation').click(function(e) {
- var _annotation = get_local_annotation(this.dataset.editable_id);
- // Publish annotation to the server
- if (!confirm(Mustache.to_html(widget.l10n.confirm_publish_message, { annotation: _annotation })))
- return;
- var _url = Mustache.to_html(widget.api_endpoint_template, {id: widget.source.projectId});
- if (_url !== "") {
- var _export = widget.player.sourceManager.newLocalSource({serializer: IriSP.serializers[widget.api_serializer]});
+ if (_url !== "") {
+ var _export = widget.player.sourceManager.newLocalSource({
+ serializer: ns.serializers[widget.api_serializer],
+ });
- if (widget.publish_type) {
- // If publish_type is specified, try to set the annotation type of the exported annotation
- var at = widget.source.getAnnotationTypes().filter(function(at) { return at.title == widget.publish_type; });
- if (at.length == 1) {
- _annotation.setAnnotationType(at[0].id);
- }
- }
- var _exportedAnnotations = new IriSP.Model.List(widget.player.sourceManager);
- _exportedAnnotations.push(_annotation);
- _export.addList("annotation", _exportedAnnotations);
- IriSP.jQuery.ajax({
- url: _url,
- type: widget.api_method,
- contentType: 'application/json',
- data: _export.serialize(),
- success: function(_data) {
- $(this).addClass("published");
- // Save the published information
- var an = get_local_annotation(_annotation.id);
- // FIXME: handle "published" tag
- an.setTags( [ "published" ]);
- save_local_annotations();
- widget.player.trigger("Annotation.publish", _annotation);
- },
- error: function(_xhr, _error, _thrown) {
- IriSP.log("Error when sending annotation", _thrown);
- }
- });
+ if (widget.publish_type) {
+ // If publish_type is specified, try to set the annotation type of the exported annotation
+ var at = widget.source
+ .getAnnotationTypes()
+ .filter(function (at) {
+ return at.title == widget.publish_type;
+ });
+ if (at.length == 1) {
+ _annotation.setAnnotationType(at[0].id);
}
- });
- this.$.find('.Ldt-AnnotationsList-TimeEdit').dblclick(function(e) {
- var _this = this;
- // Use current player time
- var an = get_local_annotation(_this.dataset.editable_id);
- if (an !== undefined) {
- // FIXME: implement Undo feature
- an.setBegin(widget.media.getCurrentTime().milliseconds);
- save_local_annotations();
- widget.player.trigger("Annotation.update", an);
- widget.refresh(true);
- }
- });
- };
+ }
+ var _exportedAnnotations = new ns.Model.List(
+ widget.player.sourceManager
+ );
+ _exportedAnnotations.push(_annotation);
+ _export.addList("annotation", _exportedAnnotations);
+ jQuery.ajax({
+ url: _url,
+ type: widget.api_method,
+ contentType: "application/json",
+ data: _export.serialize(),
+ success: function (_data) {
+ $(this).addClass("published");
+ // Save the published information
+ var an = get_local_annotation(_annotation.id);
+ // FIXME: handle "published" tag
+ an.setTags(["published"]);
+ save_local_annotations();
+ widget.player.trigger("Annotation.publish", _annotation);
+ },
+ error: function (_xhr, _error, _thrown) {
+ ns.log("Error when sending annotation", _thrown);
+ },
+ });
+ }
+ });
+ this.$.find(".Ldt-AnnotationsList-TimeEdit").dblclick(function (e) {
+ var _this = this;
+ // Use current player time
+ var an = get_local_annotation(_this.dataset.editable_id);
+ if (an !== undefined) {
+ // FIXME: implement Undo feature
+ an.setBegin(widget.media.getCurrentTime().milliseconds);
+ save_local_annotations();
+ widget.player.trigger("Annotation.update", an);
+ widget.refresh(true);
+ }
+ });
+ }
- this.$.find('.Ldt-AnnotationsList-Tag-Li').click(function() {
- _this.source.getAnnotations().search(IriSP.jQuery(this).text().replace(/(^\s+|\s+$)/g,''));
+ this.$.find(".Ldt-AnnotationsList-Tag-Li").click(function () {
+ _this.source.getAnnotations().search(
+ jQuery(this)
+ .text()
+ .replace(/(^\s+|\s+$)/g, "")
+ );
});
- this.$.find('.Ldt-Annotation-Timecode').click(function () {
- _this.media.setCurrentTime(Number(this.dataset.timecode));
+ this.$.find(".Ldt-Annotation-Timecode").click(function () {
+ _this.media.setCurrentTime(Number(this.dataset.timecode));
});
- this.$.find(".Ldt-AnnotationsList-Play").click(function() {
- var _el = IriSP.jQuery(this),
- _annid = _el.attr("data-annotation-id");
- if (_this.jwplayers[_annid]) {
- jwplayer(_this.jwplayers[_annid]).play();
- }
- _this.media.pause();
+ this.$.find(".Ldt-AnnotationsList-Play").click(function () {
+ var _el = jQuery(this),
+ _annid = _el.attr("data-annotation-id");
+ if (_this.jwplayers[_annid]) {
+ jwplayer(_this.jwplayers[_annid]).play();
+ }
+ _this.media.pause();
});
if (this.source.getAnnotations().searching) {
- var rx = _this.source.getAnnotations().regexp || false;
- this.$.find(".Ldt-AnnotationsList-Title a, .Ldt-AnnotationsList-Description").each(function() {
- var _$ = IriSP.jQuery(this);
- _$.html(IriSP.textFieldHtml(_$.text(), rx));
- });
+ var rx = _this.source.getAnnotations().regexp || false;
+ this.$.find(
+ ".Ldt-AnnotationsList-Title a, .Ldt-AnnotationsList-Description"
+ ).each(function () {
+ var _$ = jQuery(this);
+ _$.html(ns.textFieldHtml(_$.text(), rx));
+ });
}
- this.$.find(".Ldt-AnnotationsList-DeleteButton").click(_this.functionWrapper("onDeleteClick"))
+ this.$.find(".Ldt-AnnotationsList-DeleteButton").click(
+ _this.functionWrapper("onDeleteClick")
+ );
+ }
+
+ if (this.ajax_url) {
+ if (this.mashupMode) {
+ this.ajaxMashup();
+ } else {
+ if (
+ Math.abs(_currentTime - this.lastAjaxQuery) > this.ajax_granularity
+ ) {
+ this.ajaxSource();
+ }
+ }
+ }
+
+ return _list.length;
}
- if (this.ajax_url) {
- if (this.mashupMode) {
- this.ajaxMashup();
- } else {
- if (Math.abs(_currentTime - this.lastAjaxQuery) > (this.ajax_granularity)) {
- this.ajaxSource();
- }
- }
- }
-
- return _list.length;
-};
-
-IriSP.Widgets.AnnotationsList.prototype.onDeleteClick = function(event){
- _list = this.getWidgetAnnotations();
- ann_id = event.target.dataset.annotation;
- delete_preview_$ = this.$.find(".Ldt-AnnotationsList-ul-ToDelete");
- delete_preview_$.html("");
- _list = _list.filter(function(_annotation){
- return _annotation.id == ann_id
- })
- var _annotation = _list[0],
+ onDeleteClick(event) {
+ _list = this.getWidgetAnnotations();
+ ann_id = event.target.dataset.annotation;
+ delete_preview_$ = this.$.find(".Ldt-AnnotationsList-ul-ToDelete");
+ delete_preview_$.html("");
+ _list = _list.filter(function (_annotation) {
+ return _annotation.id == ann_id;
+ });
+ var _annotation = _list[0],
_title = "",
_creator = "",
_this = this;
- if (_annotation.creator) {
+ if (_annotation.creator) {
var _users = [],
- _user = {};
+ _user = {};
if (_this.source.users_data) {
- _users = _this.source.users_data.filter(function(_user_data){
- return _user_data.username == _annotation.creator;
- });
+ _users = _this.source.users_data.filter(function (_user_data) {
+ return _user_data.username == _annotation.creator;
+ });
}
- if (_users.length == 0){
- _user.username = _annotation.creator
- }
- else{
- _user = _users[0]
+ if (_users.length == 0) {
+ _user.username = _annotation.creator;
+ } else {
+ _user = _users[0];
}
_creator = _this.make_name_string_function(_user);
- }
- if (_annotation.title) {
+ }
+ if (_annotation.title) {
var tempTitle = _annotation.title;
- if( tempTitle.substr(0, _title.length + 1) == (_title + ":") ){
- _title = "";
+ if (tempTitle.substr(0, _title.length + 1) == _title + ":") {
+ _title = "";
}
- _title = _title + ( (_title=="") ? "" : ": ") + _annotation.title;
- }
- var _created = false;
- if (this.show_creation_date) {
- _created = _annotation.created.toLocaleDateString()+", "+_annotation.created.toLocaleTimeString();
+ _title = _title + (_title == "" ? "" : ": ") + _annotation.title;
+ }
+ var _created = false;
+ if (this.show_creation_date) {
+ _created =
+ _annotation.created.toLocaleDateString() +
+ ", " +
+ _annotation.created.toLocaleTimeString();
+ }
+ var _data = {
+ id: _annotation.id,
+ media_id: _annotation.getMedia().id,
+ htitle: ns.textFieldHtml(_title),
+ hdescription: ns.textFieldHtml(_annotation.description),
+ begin: _annotation.begin.toString(),
+ end: _annotation.end.toString(),
+ created: _created,
+ show_timecode: this.show_timecode,
+ show_creator: this.show_creator,
+ creator: _creator,
+ tags: false,
+ l10n: this.l10n,
+ allow_annotations_deletion: false,
+ };
+ _html = Mustache.render(this.constructor.annotationTemplate, _data);
+ delete_preview_$.html(_html);
+
+ this.$.find(".Ldt-AnnotationsList-ConfirmDelete").click(function () {
+ _this.sendDelete(ann_id);
+ });
+
+ this.showScreen("Delete");
}
- var _data = {
- id : _annotation.id,
- media_id : _annotation.getMedia().id,
- htitle : IriSP.textFieldHtml(_title),
- hdescription : IriSP.textFieldHtml(_annotation.description),
- begin : _annotation.begin.toString(),
- end : _annotation.end.toString(),
- created : _created,
- show_timecode : this.show_timecode,
- show_creator : this.show_creator,
- creator : _creator,
- tags : false,
- l10n: this.l10n,
- allow_annotations_deletion: false
- }
- _html = Mustache.to_html(this.annotationTemplate, _data)
- delete_preview_$.html(_html)
-
- this.$.find(".Ldt-AnnotationsList-ConfirmDelete").click(function(){
- _this.sendDelete(ann_id);
- });
-
- this.showScreen("Delete");
-}
-IriSP.Widgets.AnnotationsList.prototype.refreshHeader = function() {
- var annotation_count_string = " (" + this.annotations_count +" "+this.annotations_count_header_string+")";
- this.$.find('.Ldt-AnnotationsList-header').html("");
- this.$.find('.Ldt-AnnotationsList-header').html(
- this.custom_header && typeof this.custom_header == "string"? this.custom_header + annotation_count_string : this.l10n.header + annotation_count_string
- );
-}
+ refreshHeader() {
+ var annotation_count_string =
+ " (" +
+ this.annotations_count +
+ " " +
+ this.annotations_count_header_string +
+ ")";
+ this.$.find(".Ldt-AnnotationsList-header").html("");
+ this.$.find(".Ldt-AnnotationsList-header").html(
+ this.custom_header && typeof this.custom_header == "string"
+ ? this.custom_header + annotation_count_string
+ : this.l10n.header + annotation_count_string
+ );
+ }
-IriSP.Widgets.AnnotationsList.prototype.hide = function() {
- var _this = this;
- if (this.visible){
+ hide() {
+ var _this = this;
+ if (this.visible) {
this.visible = false;
- this.widget_$.slideUp(function(){
- _this.$.find('.Ldt-AnnotationsList-header').hide();
+ this.widget_$.slideUp(function () {
+ _this.$.find(".Ldt-AnnotationsList-header").hide();
});
- this.showScreen("Main")
+ this.showScreen("Main");
+ }
}
-}
-IriSP.Widgets.AnnotationsList.prototype.show = function() {
- if(!this.visible){
+ show() {
+ if (!this.visible) {
this.visible = true;
- this.$.find('.Ldt-AnnotationsList-header').show();
+ this.$.find(".Ldt-AnnotationsList-header").show();
this.widget_$.slideDown();
- this.showScreen("Main")
+ this.showScreen("Main");
+ }
}
-}
-
-IriSP.Widgets.AnnotationsList.prototype.toggle = function() {
- if (!this.always_visible) {
+ toggle() {
+ if (!this.always_visible) {
if (this.visible) {
- this.hide();
+ this.hide();
} else {
- this.show();
+ this.show();
}
+ }
}
-};
-IriSP.Widgets.AnnotationsList.prototype.revertToMainScreen = function(){
- if (this.$.find(".Ldt-AnnotationsList-ScreenMain").is(":hidden")){
+ revertToMainScreen() {
+ if (this.$.find(".Ldt-AnnotationsList-ScreenMain").is(":hidden")) {
this.showScreen("Main");
+ }
}
-}
-IriSP.Widgets.AnnotationsList.prototype.sendDelete = function(id){
- var _this = this,
- _url = Mustache.to_html(this.api_delete_endpoint, {annotation_id: id, project_id: this.project_id})
-
- IriSP.jQuery.ajax({
+ sendDelete(id) {
+ var _this = this,
+ _url = Mustache.render(this.api_delete_endpoint, {
+ annotation_id: id,
+ project_id: this.project_id,
+ });
+
+ jQuery.ajax({
url: _url,
type: this.api_delete_method,
- contentType: 'application/json',
- success: function(_data) {
- _this.showScreen('Success');
- window.setTimeout(_this.functionWrapper("revertToMainScreen"),(_this.after_send_timeout || 2000));
- _this.currentSource.getAnnotations().removeId(id);
- _this.player.trigger("AnnotationsList.refresh");
+ contentType: "application/json",
+ success: function (_data) {
+ _this.showScreen("Success");
+ window.setTimeout(
+ _this.functionWrapper("revertToMainScreen"),
+ _this.after_send_timeout || 2000
+ );
+ _this.currentSource.getAnnotations().removeId(id);
+ _this.player.trigger("AnnotationsList.refresh");
},
- error: function(_xhr, _error, _thrown) {
- IriSP.log("Error when sending annotation", _thrown);
- _this.showScreen('Error');
- window.setTimeout(_this.functionWrapper("revertToMainScreen"),(_this.after_send_timeout || 2000));
- }
- });
- this.showScreen('Sending');
-}
-
-IriSP.Widgets.AnnotationsList.prototype.draw = function() {
- this.jwplayers = {};
- this.mashupMode = (this.media.elementType === "mashup");
-
- this.renderTemplate();
-
- var _this = this;
- this.list_$ = this.$.find(".Ldt-AnnotationsList-ul");
- this.widget_$ = this.$.find(".Ldt-AnnotationsListWidget");
-
- if (this.widget_max_height){
- this.widget_$.css("max-height", this.widget_max_height)
+ error: function (_xhr, _error, _thrown) {
+ ns.log("Error when sending annotation", _thrown);
+ _this.showScreen("Error");
+ window.setTimeout(
+ _this.functionWrapper("revertToMainScreen"),
+ _this.after_send_timeout || 2000
+ );
+ },
+ });
+ this.showScreen("Sending");
}
-
- if (this.show_filters){
- if (this.user_filter){
- this.userselect_$ = this.$.find("#Ldt-AnnotationsList-userFilter");
- this.userselect_$.change(function(){
- _this.player.trigger("AnnotationsList.refresh");
- });
- this.userselect_$.html("<option selected value='false'>"+this.l10n.everyone+"</option>");
- this.usernames.forEach(function(_user){
- var _users = _this.source.users_data.filter(function(_user_data){
- return _user_data.username == _user;
- }),
- _user_data = {};
- if (_users.length == 0){
- _user_data.username = _user;
- }
- else{
- _user_data = _users[0];
- }
- _this.userselect_$.append("<option value='"+_user+"'>"+_this.make_name_string_function(_user_data)+"</option>");
- });
+
+ draw() {
+ this.jwplayers = {};
+ this.mashupMode = this.media.elementType === "mashup";
+
+ this.renderTemplate();
+
+ var _this = this;
+ this.list_$ = this.$.find(".Ldt-AnnotationsList-ul");
+ this.widget_$ = this.$.find(".Ldt-AnnotationsListWidget");
+
+ if (this.widget_max_height) {
+ this.widget_$.css("max-height", this.widget_max_height);
+ }
+
+ if (this.show_filters) {
+ if (this.user_filter) {
+ this.userselect_$ = this.$.find("#Ldt-AnnotationsList-userFilter");
+ this.userselect_$.change(function () {
+ _this.player.trigger("AnnotationsList.refresh");
+ });
+ this.userselect_$.html(
+ "<option selected value='false'>" + this.l10n.everyone + "</option>"
+ );
+ this.usernames.forEach(function (_user) {
+ var _users = _this.source.users_data.filter(function (_user_data) {
+ return _user_data.username == _user;
+ }),
+ _user_data = {};
+ if (_users.length == 0) {
+ _user_data.username = _user;
+ } else {
+ _user_data = _users[0];
+ }
+ _this.userselect_$.append(
+ "<option value='" +
+ _user +
+ "'>" +
+ _this.make_name_string_function(_user_data) +
+ "</option>"
+ );
+ });
}
- if (this.keyword_filter){
- this.keywordinput_$ = this.$.find("#Ldt-AnnotationsList-keywordsFilter");
- this.keywordinput_$.keyup(function(){
- _this.player.trigger("AnnotationsList.refresh");
- });
-
+ if (this.keyword_filter) {
+ this.keywordinput_$ = this.$.find(
+ "#Ldt-AnnotationsList-keywordsFilter"
+ );
+ this.keywordinput_$.keyup(function () {
+ _this.player.trigger("AnnotationsList.refresh");
+ });
}
- if (this.segment_filter){
- this.ignoresegmentcheckbox_$ = this.$.find("#Ldt-AnnotationsList-ignoreSegmentsFilter");
- this.ignoresegmentcheckbox_$.click(function(){
- _this.player.trigger("AnnotationsList.refresh");
- });
+ if (this.segment_filter) {
+ this.ignoresegmentcheckbox_$ = this.$.find(
+ "#Ldt-AnnotationsList-ignoreSegmentsFilter"
+ );
+ this.ignoresegmentcheckbox_$.click(function () {
+ _this.player.trigger("AnnotationsList.refresh");
+ });
}
- if(this.date_filter){
- this.datefilterinput_$ = this.$.find("#Ldt-AnnotationsList-dateFilter");
- this.datefilterinput_$.datepicker({ dateFormat: 'dd/mm/yy' });
- this.datefilterinput_$.change(function(){
- _this.player.trigger("AnnotationsList.refresh")
- })
- if (this.current_day_filter){
- currentDate = new Date();
- this.datefilterinput_$.datepicker("setDate",currentDate);
- }
+ if (this.date_filter) {
+ this.datefilterinput_$ = this.$.find(
+ "#Ldt-AnnotationsList-dateFilter"
+ );
+ this.datefilterinput_$.datepicker({ dateFormat: "dd/mm/yy" });
+ this.datefilterinput_$.change(function () {
+ _this.player.trigger("AnnotationsList.refresh");
+ });
+ if (this.current_day_filter) {
+ currentDate = new Date();
+ this.datefilterinput_$.datepicker("setDate", currentDate);
+ }
}
- if(this.latest_contributions_filter){
- this.latestcontributionscheckbox_$ = this.$.find("#Ldt-AnnotationsList-latestContributionsFilter");
- this.latestcontributionscheckbox_$.click(function(){
- _this.player.trigger("AnnotationsList.refresh");
- });
+ if (this.latest_contributions_filter) {
+ this.latestcontributionscheckbox_$ = this.$.find(
+ "#Ldt-AnnotationsList-latestContributionsFilter"
+ );
+ this.latestcontributionscheckbox_$.click(function () {
+ _this.player.trigger("AnnotationsList.refresh");
+ });
}
- }
-
- this.source.getAnnotations().on("search", function(_text) {
+ }
+
+ this.source.getAnnotations().on("search", function (_text) {
_this.searchString = _text;
if (_this.source !== _this.currentSource) {
- _this.currentSource.getAnnotations().search(_text);
- _this.throttledRefresh();
+ _this.currentSource.getAnnotations().search(_text);
+ _this.throttledRefresh();
}
- });
- this.source.getAnnotations().on("found", function() {
+ });
+ this.source.getAnnotations().on("found", function () {
_this.throttledRefresh();
- });
- this.source.getAnnotations().on("not-found", function() {
+ });
+ this.source.getAnnotations().on("not-found", function () {
_this.throttledRefresh();
- });
- this.source.getAnnotations().on("clear-search", function() {
+ });
+ this.source.getAnnotations().on("clear-search", function () {
_this.searchString = false;
if (_this.source !== _this.currentSource) {
- _this.currentSource.getAnnotations().trigger("clear-search");
+ _this.currentSource.getAnnotations().trigger("clear-search");
}
- });
-
- this.$.find(".Ldt-AnnotationsList-Close").click(function(){
+ });
+
+ this.$.find(".Ldt-AnnotationsList-Close").click(function () {
_this.showScreen("Main");
- })
-
- this.source.getAnnotations().on("search-cleared", function() {
+ });
+
+ this.source.getAnnotations().on("search-cleared", function () {
_this.throttledRefresh();
- });
+ });
- this.onMdpEvent("AnnotationsList.refresh", function() {
+ this.onMdpEvent("AnnotationsList.refresh", function () {
if (_this.ajax_url) {
- if (_this.mashupMode) {
- _this.ajaxMashup();
- } else {
- _this.ajaxSource();
- }
+ if (_this.mashupMode) {
+ _this.ajaxMashup();
+ } else {
+ _this.ajaxSource();
+ }
}
_this.throttledRefresh(false);
- });
+ });
- this.onMdpEvent("AnnotationsList.update", function() {
+ this.onMdpEvent("AnnotationsList.update", function () {
if (_this.ajax_url) {
- if (_this.mashupMode) {
- _this.ajaxMashup();
- } else {
- _this.ajaxSource();
- }
+ if (_this.mashupMode) {
+ _this.ajaxMashup();
+ } else {
+ _this.ajaxSource();
+ }
}
_this.throttledRefresh(true);
- });
+ });
- if (this.ajax_url) {
+ if (this.ajax_url) {
if (this.mashupMode) {
- this.ajaxMashup();
+ this.ajaxMashup();
} else {
- this.ajaxSource();
+ this.ajaxSource();
}
- } else {
+ } else {
this.currentSource = this.source;
- }
+ }
+
+ if (this.refresh_interval) {
+ window.setInterval(function () {
+ _this.currentSource.get();
+ }, this.refresh_interval);
+ }
+
+ if (this.annotations_count_header) {
+ this.annotations_count = false;
+ }
+
+ this.onMdpEvent("AnnotationsList.toggle", "toggle");
+ this.onMdpEvent("AnnotationsList.hide", "hide");
+ this.onMdpEvent("AnnotationsList.show", "show");
- if (this.refresh_interval) {
- window.setInterval(function() {
- _this.currentSource.get();
- }, this.refresh_interval);
- }
-
- if (this.annotations_count_header){
- this.annotations_count = false;
+ this.onMdpEvent(
+ "createAnnotationWidget.addedAnnotation",
+ this.throttledRefresh
+ );
+ var _events = ["timeupdate", "seeked", "loadedmetadata", "settimerange"];
+ for (var _i = 0; _i < _events.length; _i++) {
+ this.onMediaEvent(_events[_i], this.throttledRefresh);
+ }
+
+ this.throttledRefresh();
+
+ this.showScreen("Main");
+ this.$.find(".Ldt-AnnotationsList-CancelDelete").click(function () {
+ _this.showScreen("Main");
+ });
+
+ this.visible = true;
+ if (!this.start_visible) {
+ this.hide();
+ }
}
-
- this.onMdpEvent("AnnotationsList.toggle","toggle");
- this.onMdpEvent("AnnotationsList.hide", "hide");
- this.onMdpEvent("AnnotationsList.show", "show");
-
- this.onMdpEvent("createAnnotationWidget.addedAnnotation", this.throttledRefresh);
- var _events = [
- "timeupdate",
- "seeked",
- "loadedmetadata",
- "settimerange"
- ];
- for (var _i = 0; _i < _events.length; _i++) {
- this.onMediaEvent(_events[_i], this.throttledRefresh);
- }
+ };
+};
- this.throttledRefresh();
-
- this.showScreen("Main");
- this.$.find(".Ldt-AnnotationsList-CancelDelete").click(function(){
- _this.showScreen("Main")
- });
-
- this.visible = true;
- if (!this.start_visible){
- this.hide();
- }
-};
+export { AnnotationsList, annotationsListStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/AnnotationsList.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,254 @@
+/* AnnotationsListWidget */
+
+#ui-datepicker-div
+{
+ display: none;
+}
+
+.Ldt-AnnotationsListWidget {
+ border: none;
+ margin: 0;
+ padding: 0;
+ overflow: auto;
+}
+.Ldt-AnnotationsListWidget a {
+ text-decoration: none;
+}
+
+.Ldt-AnnotationsList-Audio {
+ width: 1px; height: 1px;
+}
+
+.Ldt-AnnotationsList-Filters {
+ display: table-cell;
+ width: 100%;
+ height: 30px;
+ vertical-align: middle;
+ text-align: center;
+
+}
+
+.Ldt-AnnotationsList-filter-text {
+ text-align: left;
+ display: inline;
+ margin: 4px 2px;
+}
+
+.Ldt-AnnotationsList-filter-dropdown {
+ text-align: center;
+ display: inline;
+ margin: 4px 2px;
+}
+
+.Ldt-AnnotationsList-filter-checkbox {
+ text-align: center;
+ display: inline;
+ margin: 4px 2px;
+}
+
+ul.Ldt-AnnotationsList-ul, ul.Ldt-AnnotationsList-ul-toDelete {
+ list-style: none;
+ padding: 0px;
+ margin: 0px;
+}
+
+li.Ldt-AnnotationsList-li {
+ width: 100%;
+ clear: both;
+ margin: 2px 0;
+ padding: 2px 0;
+ min-height: 3em;
+ position: relative;
+}
+.Ldt-AnnotationsList-li.selected {
+ background-image: url(img/pinstripe-grey.png);
+ z-index: 1;
+}
+.Ldt-AnnotationsList-ThumbContainer {
+ float: left;
+ width: 80px;
+ height: 50px;
+ text-align: center;
+ margin: 0px 2px 10px 2px;
+ box-shadow: #808080 0px 0px 2px;
+}
+.Ldt-AnnotationsList-Thumbnail {
+ border: none;
+ max-width: 100%;
+ max-height: 100%;
+ margin: 0 auto;
+}
+
+.Ldt-AnnotationsList-External-Icon {
+ background-image: url(img/external.png);
+ z-index: 100;
+ height: 15px;
+ width: 15px;
+ position: relative;
+ bottom: 20px;
+ left: 64px;
+}
+
+.Ldt-AnnotationsList-DeleteButton {
+ margin: 0px;
+ float: right;
+ font-size: 20px;
+ position: relative;
+ top: -50px;
+ left: -5px;
+ color: #787878
+}
+.Ldt-AnnotationsList-DeleteButton:hover {
+ color: #f7268e;
+ cursor: pointer;
+}
+
+.Ldt-AnnotationsList-Duration {
+ color: #f7268e;
+ float: right;
+ text-align: right;
+ font-size: 12px;
+ margin: 2px;
+}
+.Ldt-AnnotationsList-CreationDate {
+ color: #f7268e;
+ text-align: left;
+ font-size: 12px;
+ margin: 2px 2px 2px 89px;
+}
+h3.Ldt-AnnotationsList-Title span.Ldt-AnnotationsList-TitleContent{
+ color: #0068c4;
+ font-size: 13px;
+ margin-left: 5px;
+ font-weight: bold;
+}
+
+h3.Ldt-AnnotationsList-Title.Ldt-Annotation-Timecode{
+ font-size: 13px;
+}
+
+.Ldt-AnnotationsList-Title a {
+ color: #0068c4;
+}
+
+.Ldt-AnnotationsList-Creator {
+ color: #4d90f4;
+ margin-left: 5px;
+ font-size: 13px;
+}
+
+p.Ldt-AnnotationsList-Description {
+ margin: 2px 0 2px 89px;
+ font-size: 12px;
+ color: #333333;
+}
+
+.Ldt-AnnotationsList-Description a {
+ color: #0068c4;
+}
+
+.Ldt-AnnotationsList-Description a:hover {
+ text-decoration: underline; color: #800000;
+}
+
+ul.Ldt-AnnotationsList-Tags {
+ list-style: none;
+ padding: 0;
+ margin: 2px 0 0 82px;
+}
+
+li.Ldt-AnnotationsList-Tag-Li {
+ display: inline-block; border: none; margin: 0 10px 5px 0; height: 23px; padding: 0 0 0 20px;
+ background: url(img/tag.png) left top no-repeat;
+ cursor: pointer;
+}
+
+.Ldt-AnnotationsList-Tag-Li span {
+ display: inline-block; font-size: 12px; height: 19px; padding: 4px 5px 0 0; border: none; margin: 0;
+ background: url(img/tag.png) right top no-repeat;
+}
+
+li.Ldt-AnnotationsList-Tag-Li:hover {
+ background-position: left -23px;
+}
+
+.Ldt-AnnotationsList-Tag-Li:hover span {
+ background-position: right -23px;
+}
+
+.Ldt-AnnotationsList-Play {
+ width: 125px; height: 20px; margin: 2px 0 2px 82px; text-align: center;
+ padding: 3px 5px 0 20px; font-size: 12px; cursor: pointer;
+ background: url(img/voiceannotation.png); color: #333333;
+}
+
+.Ldt-AnnotationsList-Play:hover {
+ background-position: 0 bottom;
+}
+
+.Ldt-AnnotationsList-EditControls {
+ opacity: 0;
+ position: absolute;
+ bottom: 2px;
+ right: 8px;
+}
+
+.Ldt-AnnotationsList-li:hover .Ldt-AnnotationsList-EditControls {
+ display: inline-block;
+ opacity: .8;
+ transition: opacity 1000ms ease-in-out;
+}
+
+.Ldt-AnnotationsList-EditControls > div {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ cursor: pointer;
+ margin-left: 8px;
+}
+
+.Ldt-AnnotationsList-Delete {
+ background: url(img/delete.png);
+}
+
+.Ldt-AnnotationsList-Edit {
+ background: url(img/edit.png);
+}
+
+.Ldt-AnnotationsList-PublishAnnotation {
+ background: url(img/publish_annotation.png);
+}
+
+.published .Ldt-AnnotationsList-PublishAnnotation {
+ background: url(img/published_annotation.png);
+}
+
+.Ldt-AnnotationsList .editing {
+ display: none;
+}
+
+.Ldt-AnnotationsList .editableInput {
+ width: 80%;
+}
+
+.Ldt-AnnotationsList-ScreenMain{
+ margin: 0px;
+ padding: 0px;
+}
+
+.Ldt-AnnotationsList-ScreenDelete, .Ldt-AnnotationsList-ScreenSending,
+.Ldt-AnnotationsList-ScreenError, .Ldt-AnnotationsList-ScreenSuccess{
+ margin-top: 15px;
+ width: 100%;
+ text-align: center;
+ vertical-align: middle;
+ font-size: 14px;
+ font-weight: bold;
+ color: #68273C;
+}
+
+a.Ldt-AnnotationsList-Close {
+ position: absolute; right: 2px;
+ display: inline-block; width: 17px; height: 17px; margin: 4px;
+ background: url(img/widget-control.png);
+}
\ No newline at end of file
--- a/src/widgets/Arrow.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Arrow.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,88 +1,145 @@
-IriSP.Widgets.Arrow = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
- this.current_pilot_widget = this.pilot_widget
-};
+import Raphael from "raphael";
-IriSP.Widgets.Arrow.prototype = new IriSP.Widgets.Widget();
+// Arrow
+const Arrow = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ this.current_pilot_widget = this.pilot_widget;
+ }
-IriSP.Widgets.Arrow.prototype.defaults = {
- arrow_height : 12,
- arrow_width : 20,
- base_height : 0,
- base_curve : 0,
- fill_url: IriSP.widgetsDir + '/img/pinstripe.png',
- fill_color: "#ffffff", //Gradients can be used, e.g. "90-#000-#fff" for vertical white-to-black
- stroke_color: "#b7b7b7",
- stroke_width: 1.5,
- animation_speed: 20
-};
+ static defaults = {
+ arrow_height: 12,
+ arrow_width: 20,
+ base_height: 0,
+ base_curve: 0,
+ fill_url: ns.widgetsDir + "/img/pinstripe.png",
+ fill_color: "#ffffff", //Gradients can be used, e.g. "90-#000-#fff" for vertical white-to-black
+ stroke_color: "#b7b7b7",
+ stroke_width: 1.5,
+ animation_speed: 20,
+ };
-IriSP.Widgets.Arrow.prototype.draw = function() {
- this.height = this.arrow_height + this.base_height;
- this.$.addClass("Ldt-Arrow").css({
- height: (1+this.height) + "px",
+ draw() {
+ this.height = this.arrow_height + this.base_height;
+ this.$.addClass("Ldt-Arrow").css({
+ height: 1 + this.height + "px",
"margin-top": "1px",
- overflow: "hidden"
- });
- this.paper = new Raphael(this.container, this.width, 1+this.height );
- window.myArrow = this;
- this.svgArrow = this.paper.path('M0,' + this.height + 'L' + this.width + ',' + this.height);
- this.svgArrow.attr({
+ overflow: "hidden",
+ });
+ this.paper = new Raphael(this.container, this.width, 1 + this.height);
+ window.myArrow = this;
+ this.svgArrow = this.paper.path(
+ "M0," + this.height + "L" + this.width + "," + this.height
+ );
+ this.svgArrow.attr({
stroke: this.stroke_color,
"stroke-width": this.stroke_width,
- fill: this.fill_url ? ( 'url(' + this.fill_url + ')' ) : this.fill_color
- });
- this.moveToX(0);
+ fill: this.fill_url ? "url(" + this.fill_url + ")" : this.fill_color,
+ });
+ this.moveToX(0);
+ }
+
+ drawAt(_x) {
+ _x = Math.max(0, Math.min(_x, this.width));
+ var _d =
+ "M0," +
+ this.height +
+ "L0," +
+ Math.min(this.height, this.arrow_height + this.base_curve) +
+ "Q0," +
+ this.arrow_height +
+ " " +
+ Math.max(0, Math.min(this.base_curve, _x - this.arrow_width / 2)) +
+ "," +
+ this.arrow_height +
+ "L" +
+ Math.max(0, _x - this.arrow_width / 2) +
+ "," +
+ this.arrow_height +
+ "L" +
+ Math.max(0, _x - this.arrow_width / 2) +
+ "," +
+ Math.min(
+ this.arrow_height,
+ (2 * this.arrow_height * _x) / this.arrow_width
+ ) +
+ "L" +
+ _x +
+ ",0" +
+ "L" +
+ Math.min(this.width, _x + this.arrow_width / 2) +
+ "," +
+ Math.min(
+ this.arrow_height,
+ (2 * this.arrow_height * (this.width - _x)) / this.arrow_width
+ ) +
+ "L" +
+ Math.min(this.width, _x + this.arrow_width / 2) +
+ "," +
+ this.arrow_height +
+ "L" +
+ Math.min(
+ this.width,
+ Math.max(this.width - this.base_curve, _x + this.arrow_width / 2)
+ ) +
+ "," +
+ this.arrow_height +
+ "Q" +
+ this.width +
+ "," +
+ this.arrow_height +
+ " " +
+ this.width +
+ "," +
+ Math.min(this.height, this.arrow_height + this.base_curve) +
+ "L" +
+ this.width +
+ "," +
+ this.height;
+ this.svgArrow.attr({
+ path: _d,
+ });
+ }
+
+ moveToX(_x) {
+ this.targetX = Math.max(0, Math.min(_x, this.width));
+ if (typeof this.animInterval === "undefined") {
+ this.animInterval = window.setInterval(
+ this.functionWrapper("increment"),
+ 40
+ );
+ }
+ this.increment();
+ }
+
+ moveToTime(_t) {
+ this.moveToX((this.width * _t) / this.media.duration);
+ }
+
+ increment() {
+ if (typeof this.currentX === "undefined") {
+ this.currentX = this.targetX;
+ }
+ if (this.currentX < this.targetX) {
+ this.currentX = Math.min(
+ this.targetX,
+ this.currentX + this.animation_speed
+ );
+ }
+ if (this.currentX > this.targetX) {
+ this.currentX = Math.max(
+ this.targetX,
+ this.currentX - this.animation_speed
+ );
+ }
+ if (this.currentX === this.targetX) {
+ window.clearInterval(this.animInterval);
+ this.animInterval = undefined;
+ }
+ this.drawAt(this.currentX);
+ }
+ };
};
-IriSP.Widgets.Arrow.prototype.drawAt = function(_x) {
- _x = Math.max(0, Math.min(_x, this.width));
- var _d = 'M0,' + this.height
- + 'L0,' + Math.min( this.height, this.arrow_height + this.base_curve)
- + 'Q0,' + this.arrow_height
- + ' ' + Math.max(0, Math.min(this.base_curve, _x - this.arrow_width / 2)) + ',' + this.arrow_height
- + 'L' + Math.max(0, _x - this.arrow_width / 2) + ',' + this.arrow_height
- + 'L' + Math.max(0, _x - this.arrow_width / 2) + ',' + Math.min(this.arrow_height, 2 * this.arrow_height * _x / this.arrow_width)
- + 'L' + _x + ',0'
- + 'L' + Math.min(this.width, _x + this.arrow_width / 2) + ',' + Math.min(this.arrow_height, 2 * this.arrow_height * ( this.width - _x ) / this.arrow_width)
- + 'L' + Math.min(this.width, _x + this.arrow_width / 2) + ',' + this.arrow_height
- + 'L' + Math.min(this.width, Math.max(this.width - this.base_curve, _x + this.arrow_width / 2)) + ',' + this.arrow_height
- + 'Q' + this.width + ',' + this.arrow_height
- + ' ' + this.width + ',' + Math.min( this.height, this.arrow_height + this.base_curve)
- + 'L' + this.width + ',' + this.height;
- this.svgArrow.attr({
- path: _d
- });
-};
-
-IriSP.Widgets.Arrow.prototype.moveToX = function(_x) {
- this.targetX = Math.max(0, Math.min(_x, this.width));
- if (typeof this.animInterval === "undefined") {
- this.animInterval = window.setInterval(
- this.functionWrapper("increment"),
- 40
- );
- }
- this.increment();
-};
-
-IriSP.Widgets.Arrow.prototype.moveToTime = function(_t) {
- this.moveToX(this.width * _t / this.media.duration);
-};
-
-IriSP.Widgets.Arrow.prototype.increment = function() {
- if (typeof this.currentX === "undefined") {
- this.currentX = this.targetX;
- }
- if (this.currentX < this.targetX) {
- this.currentX = Math.min(this.targetX, this.currentX + this.animation_speed);
- }
- if (this.currentX > this.targetX) {
- this.currentX = Math.max(this.targetX, this.currentX - this.animation_speed);
- }
- if (this.currentX === this.targetX) {
- window.clearInterval(this.animInterval);
- this.animInterval = undefined;
- }
- this.drawAt(this.currentX);
-};
+export { Arrow };
--- a/src/widgets/AutoPlayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/AutoPlayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,76 +1,91 @@
-IriSP.Widgets.AutoPlayer = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
-
-IriSP.Widgets.AutoPlayer.prototype = new IriSP.Widgets.Widget();
+// AutoPlayer
-IriSP.Widgets.AutoPlayer.prototype.defaults = {
- default_type: "JwpPlayer"
-};
-
-IriSP.Widgets.AutoPlayer.prototype.draw = function() {
-
- if (typeof this.video === "undefined") {
- this.video = this.media.video;
+const AutoPlayer = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
}
- var _props = [ "live", "provider", "autostart", "streamer", "video", "height", "width", "url_transform" ],
+ static defaults = {
+ default_type: "HtmlPlayer",
+ };
+
+ draw() {
+ if (typeof this.video === "undefined") {
+ this.video = this.media.video;
+ }
+
+ var _props = [
+ "live",
+ "provider",
+ "autostart",
+ "streamer",
+ "video",
+ "height",
+ "width",
+ "url_transform",
+ ],
_opts = {},
_types = [
- {
- regexp: /^rtmp:\/\//,
- type: "JwpPlayer"
- },
- {
- regexp: /\.(mp4|m4v|mp3)$/,
- type: "AdaptivePlayer"
- },
- {
- regexp: /\.(ogg|ogv|webm)$/,
- type: "HtmlPlayer"
- },
- {
- regexp: /^(https?:\/\/)?(www\.)?youtube\.com/,
- type: "PopcornPlayer"
- },
- {
- regexp: /^(https?:\/\/)?(www\.)?vimeo\.com/,
- type: "PopcornPlayer"
- },
- {
- regexp: /^(https?:\/\/)?(www\.)?dailymotion\.com/,
- type: "DailymotionPlayer"
- }
+ {
+ regexp: /^rtmp:\/\//,
+ type: "JwpPlayer",
+ },
+ {
+ regexp: /\.(mp4|m4v|mp3)$/,
+ type: "AdaptivePlayer",
+ },
+ {
+ regexp: /\.(ogg|ogv|webm)$/,
+ type: "HtmlPlayer",
+ },
+ {
+ regexp: /^(https?:\/\/)?(www\.)?youtube\.com/,
+ type: "PopcornPlayer",
+ },
+ {
+ regexp: /^(https?:\/\/)?(www\.)?vimeo\.com/,
+ type: "PopcornPlayer",
+ },
+ {
+ regexp: /^(https?:\/\/)?(www\.)?dailymotion\.com/,
+ type: "DailymotionPlayer",
+ },
],
_rtmprgx = /^rtmp:\/\//;
- for (var i = 0; i < _types.length; i++) {
+ for (var i = 0; i < _types.length; i++) {
if (this.video && _types[i].regexp.test(this.video.toLowerCase())) {
- _opts.type = _types[i].type;
- break;
+ _opts.type = _types[i].type;
+ break;
}
- }
+ }
- if (typeof _opts.type === "undefined") {
+ if (typeof _opts.type === "undefined") {
_opts.type = this.default_type;
- }
+ }
- if (_opts.type === "AdaptivePlayer") {
- var _canPlayType = document.createElement('video').canPlayType('video/mp4; codecs="avc1.42E01E"');
- _opts.type = (_canPlayType !== "no") ? "HtmlPlayer" : "JwpPlayer";
- }
+ if (_opts.type === "AdaptivePlayer") {
+ var _canPlayType = document
+ .createElement("video")
+ .canPlayType('video/mp4; codecs="avc1.42E01E"');
+ _opts.type = _canPlayType !== "no" ? "HtmlPlayer" : "JwpPlayer";
+ }
- if (_rtmprgx.test(this.video)) {
+ if (_rtmprgx.test(this.video)) {
_opts.provider = "rtmp";
_opts.live = true;
- }
+ }
- for (var i = 0; i < _props.length; i++) {
+ for (var i = 0; i < _props.length; i++) {
if (typeof this[_props[i]] !== "undefined") {
- _opts[_props[i]] = this[_props[i]];
+ _opts[_props[i]] = this[_props[i]];
}
- }
+ }
- this.insertSubwidget(this.$, _opts);
+ this.insertSubwidget(this.$, _opts);
+ };
+ };
+};
-};
+export { AutoPlayer };
--- a/src/widgets/Controller.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,248 +0,0 @@
-/* Player Widget */
-
-.Ldt-Ctrl {
- font-size: 10px;
- background: url('img/player_gradient.png') repeat-x transparent ;
- height: 25px;
- border: 1px solid #b6b8b8;
- position: relative;
- overflow: hidden;
-}
-
-.Ldt-Ctrl-Left {
- float: left;
-}
-
-.Ldt-Ctrl-Right {
- float: right;
-}
-
-.Ldt-Ctrl-button {
- float: left;
- width: 30px;
- height: 25px;
- background: url('img/player-sprites.png');
- cursor: pointer;
-}
-
-.Ldt-Ctrl-spacer {
- float: left;
- width: 1px;
- height: 25px;
- background: #b6b8b8;
-}
-
-.Ldt-Ctrl-Play {
- margin: 100px 0;
- margin: 0 15px;
-}
-
-.Ldt-Ctrl-Play-PlayState {
- background-position: 0 0;
-}
-
-.Ldt-Ctrl-Play-PlayState:hover {
- background-position: 0 -25px;
-}
-
-.Ldt-Ctrl-Play-PlayState:active {
- background-position: 0 -50px;
-}
-
-.Ldt-Ctrl-Play-PauseState {
- background-position: -30px 0;
-}
-
-.Ldt-Ctrl-Play-PauseState:hover {
- background-position: -30px -25px;
-}
-
-.Ldt-Ctrl-Play-PauseState:active {
- background-position: -30px -50px;
-}
-
-.Ldt-Ctrl-Annotate {
- margin: 0 2px;
- background-position: -60px 0;
-}
-
-.Ldt-Ctrl-Annotate:hover {
- background-position: -60px -25px;
-}
-
-.Ldt-Ctrl-Annotate:active {
- background-position: -60px -50px;
-}
-
-.Ldt-Ctrl-SearchBtn {
- margin: 0 2px;
- background-position: -90px 0;
-}
-
-.Ldt-Ctrl-SearchBtn:hover {
- background-position: -90px -25px;
-}
-
-.Ldt-Ctrl-SearchBtn:active {
- background-position: -90px -50px;
-}
-
-.Ldt-Ctrl-Search {
- width: 0; float: left; overflow: hidden;
-}
-
-input.Ldt-Ctrl-SearchInput {
- -moz-box-sizing: border-box;
- width: 145px;
- height: 20px;
- margin: 2px;
- padding: 3px;
- border: 1px solid #8080a0;
- border-radius: 3px;
- font-size: 13px;
-}
-
-.Ldt-Ctrl-Time {
- float: left;
- margin: 5px;
- font-size: 12px;
- font-family: Arial, Verdana, sans-serif;
-}
-
-.Ldt-Ctrl-Time-Elapsed {
- float: left;
- color: #4a4a4a;
-}
-
-.Ldt-Ctrl-Time-Separator {
- margin: 0 4px;
- float: left;
-}
-
-.Ldt-Ctrl-Time-Total {
- float: left;
- color: #b2b2b2;
-}
-
-.Ldt-Ctrl-Sound {
- margin: 0 2px;
-}
-
-.Ldt-Ctrl-Sound-Full {
- background-position: -120px 0;
-}
-
-.Ldt-Ctrl-Sound-Full:hover {
- background-position: -120px -25px;
-}
-
-.Ldt-Ctrl-Sound-Full:active {
- background-position: -120px -50px;
-}
-
-.Ldt-Ctrl-Sound-Mute {
- background-position: -150px 0;
-}
-
-.Ldt-Ctrl-Sound-Mute:hover {
- background-position: -150px -25px;
-}
-
-.Ldt-Ctrl-Sound-Mute:active {
- background-position: -150px -50px;
-}
-
-.Ldt-Ctrl-Sound-Half {
- background-position: -180px 0;
-}
-
-.Ldt-Ctrl-Sound-Half:hover {
- background-position: -180px -25px;
-}
-
-.Ldt-Ctrl-Sound-Half:active {
- background-position: -180px -50px;
-}
-
-.Ldt-Ctrl-Volume-Control {
- display: none;
- position: absolute;
- background: url('img/player_gradient.png') repeat-x transparent ;
- height: 25px;
- width: 100px;
- top: 25px;
- right: -1px;
- z-index: 100;
- padding: 0 2px;
- border: 1px solid #b6b8b8;
-}
-
-.Ldt-Ctrl-Volume-Bar {
- height: 5px;
- margin: 9px 3px 0;
- background: #cccccc;
- border: 1px solid #999999;
- border-radius: 2px;
-}
-
-.Ldt-Ctrl-Volume-Control .ui-slider-handle {
- width: 6px;
- height: 19px;
- background: #a8a8a8;
- border: 1px solid #999999;
- border-radius: 2px;
- top: -8px;
- margin-left: -4px;
- cursor: pointer;
-}
-
-.Ldt-Ctrl-Volume-Control:hover .ui-slider-handle {
- background: #F7268E;
-}
-
-/* quiz */
-
-.Ldt-Ctrl-Quiz-Enable button, .Ldt-Ctrl-Quiz-Create button, .Ldt-Ctrl-Quiz-Disactivated button, .Ldt-Ctrl-Fullscreen-Button{
- border: none;
- background: transparent;
-}
-
-.Ldt-Ctrl-Quiz-Enable {
- background-image: url("img/quiz_off.svg");
- float: left;
- height: 22px;
- width: 22px;
- background-repeat: no-repeat;
-}
-.Ldt-Ctrl-Quiz-Enable.Ldt-Ctrl-Quiz-Toggle-Active {
- background-image: url("img/quiz_on.svg");
-}
-
-.Ldt-Ctrl-Quiz-Create {
- background-image: url("img/quiz_add_question.svg");
- float: left;
- height: 23px;
- width: 26px;
- background-repeat: no-repeat;
- margin-left: 4px;
- margin-top: 0px;
- display: none;
-}
-.Ldt-Ctrl-Quiz-Create.Ldt-Ctrl-Quiz-Toggle-Active {
- display: inline-block;
-}
-
-.Ldt-Ctrl-Fullscreen-Button {
- margin-top: 3px;
-}
-
-.Ldt-Ctrl-Fullscreen-Button {
- float: left;
- background-image: url("img/fullscreen.svg");
- background-position: right;
- margin-right: 6px;
- margin-top: 1px;
- height: 22px;
- width: 22px;
- border: none;
-}
--- a/src/widgets/Controller.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Controller.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,57 +1,62 @@
/* Displays Play and Pause buttons, Search Button and Form, Volume Control */
+// Controller
-IriSP.Widgets.Controller = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
- this.lastSearchValue = "";
-};
+import controllerStyles from "./Controller.module.css";
-IriSP.Widgets.Controller.prototype = new IriSP.Widgets.Widget();
+import jQuery from "jquery";
-IriSP.Widgets.Controller.prototype.defaults = {
- disable_annotate_btn: false,
- disable_search_btn: false,
- disable_ctrl_f: false,
- disable_fullscreen : true,
- always_show_search: false,
- enable_quiz_toggle: undefined
-};
+const Controller = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ this.lastSearchValue = "";
+ }
+
+ static defaults = {
+ disable_annotate_btn: false,
+ disable_search_btn: false,
+ disable_ctrl_f: false,
+ disable_fullscreen: true,
+ always_show_search: false,
+ enable_quiz_toggle: undefined,
+ };
-IriSP.Widgets.Controller.prototype.template =
- '<div class="Ldt-Ctrl">'
- + '<div class="Ldt-Ctrl-Left">'
- + '<div class="Ldt-Ctrl-button Ldt-Ctrl-Play Ldt-Ctrl-Play-PlayState Ldt-TraceMe" title="{{l10n.play_pause}}"></div>'
- + '<div class="Ldt-Ctrl-spacer"></div>'
- + '{{^disable_annotate_btn}}'
- + '<div class="Ldt-Ctrl-button Ldt-Ctrl-Annotate Ldt-TraceMe" title="{{l10n.annotate}}"></div>'
- + '<div class="Ldt-Ctrl-spacer"></div>'
- + '{{/disable_annotate_btn}}'
- + '{{^disable_search_btn}}'
- + '<div class="Ldt-Ctrl-button Ldt-Ctrl-SearchBtn Ldt-TraceMe" title="{{l10n.search}}"></div>'
- + '{{/disable_search_btn}}'
- + '<div class="Ldt-Ctrl-Search">'
- + '<input placeholder="{{ l10n.search }}" type="search" class="Ldt-Ctrl-SearchInput Ldt-TraceMe"></input>'
- + '</div>'
- + '<div class="Ldt-Ctrl-Quiz-Enable Ldt-TraceMe" title="Activer/Désactiver le quiz"></div>'
- + '<div class="Ldt-Ctrl-Quiz-Create Ldt-TraceMe" ></div>'
- + '</div>'
- + '<div class="Ldt-Ctrl-Right">'
- + '{{^disable_fullscreen}}<div class="Ldt-Ctrl-Fullscreen-Button Ldt-TraceMe" title="Passer le lecteur en plein-écran"></div{{/disable_fullscreen}}'
- + '<div class="Ldt-Ctrl-spacer"></div>'
- + '<div class="Ldt-Ctrl-Time">'
- + '<div class="Ldt-Ctrl-Time-Elapsed" title="{{l10n.elapsed_time}}">00:00</div>'
- + '<div class="Ldt-Ctrl-Time-Separator">/</div>'
- + '<div class="Ldt-Ctrl-Time-Total" title="{{l10n.total_time}}">00:00</div>'
- + '</div>'
- + '<div class="Ldt-Ctrl-spacer"></div>'
- + '<div class="Ldt-Ctrl-button Ldt-Ctrl-Sound Ldt-Ctrl-Sound-Full Ldt-TraceMe" title="{{l10n.mute_unmute}}"></div>'
- + '</div>'
- + '<div class="Ldt-Ctrl-Volume-Control" title="{{l10n.volume_control}}">'
- + '<div class="Ldt-Ctrl-Volume-Bar"></div>'
- + '</div>'
- + '</div>';
+ static template =
+ '<div class="Ldt-Ctrl">' +
+ '<div class="Ldt-Ctrl-Left">' +
+ '<div class="Ldt-Ctrl-button Ldt-Ctrl-Play Ldt-Ctrl-Play-PlayState Ldt-TraceMe" title="{{l10n.play_pause}}"></div>' +
+ '<div class="Ldt-Ctrl-spacer"></div>' +
+ "{{^disable_annotate_btn}}" +
+ '<div class="Ldt-Ctrl-button Ldt-Ctrl-Annotate Ldt-TraceMe" title="{{l10n.annotate}}"></div>' +
+ '<div class="Ldt-Ctrl-spacer"></div>' +
+ "{{/disable_annotate_btn}}" +
+ "{{^disable_search_btn}}" +
+ '<div class="Ldt-Ctrl-button Ldt-Ctrl-SearchBtn Ldt-TraceMe" title="{{l10n.search}}"></div>' +
+ "{{/disable_search_btn}}" +
+ '<div class="Ldt-Ctrl-Search">' +
+ '<input placeholder="{{ l10n.search }}" type="search" class="Ldt-Ctrl-SearchInput Ldt-TraceMe"></input>' +
+ "</div>" +
+ '<div class="Ldt-Ctrl-Quiz-Enable Ldt-TraceMe" title="Activer/Désactiver le quiz"></div>' +
+ '<div class="Ldt-Ctrl-Quiz-Create Ldt-TraceMe" ></div>' +
+ "</div>" +
+ '<div class="Ldt-Ctrl-Right">' +
+ '{{^disable_fullscreen}}<div class="Ldt-Ctrl-Fullscreen-Button Ldt-TraceMe" title="Passer le lecteur en plein-écran"></div{{/disable_fullscreen}}' +
+ '<div class="Ldt-Ctrl-spacer"></div>' +
+ '<div class="Ldt-Ctrl-Time">' +
+ '<div class="Ldt-Ctrl-Time-Elapsed" title="{{l10n.elapsed_time}}">00:00</div>' +
+ '<div class="Ldt-Ctrl-Time-Separator">/</div>' +
+ '<div class="Ldt-Ctrl-Time-Total" title="{{l10n.total_time}}">00:00</div>' +
+ "</div>" +
+ '<div class="Ldt-Ctrl-spacer"></div>' +
+ '<div class="Ldt-Ctrl-button Ldt-Ctrl-Sound Ldt-Ctrl-Sound-Full Ldt-TraceMe" title="{{l10n.mute_unmute}}"></div>' +
+ "</div>" +
+ '<div class="Ldt-Ctrl-Volume-Control" title="{{l10n.volume_control}}">' +
+ '<div class="Ldt-Ctrl-Volume-Bar"></div>' +
+ "</div>" +
+ "</div>";
-IriSP.Widgets.Controller.prototype.messages = {
- en: {
+ static messages = {
+ en: {
play_pause: "Play/Pause",
mute_unmute: "Mute/Unmute",
play: "Play",
@@ -64,9 +69,9 @@
total_time: "Total duration",
volume: "Volume",
volume_control: "Volume control",
- enable_quiz: "Enable quiz"
- },
- fr: {
+ enable_quiz: "Enable quiz",
+ },
+ fr: {
play_pause: "Lecture/Pause",
mute_unmute: "Couper/Activer le son",
play: "Lecture",
@@ -79,276 +84,301 @@
total_time: "Durée totale",
volume: "Niveau sonore",
volume_control: "Réglage du niveau sonore",
- enable_quiz: "Activer le quiz"
- }
-};
-
-IriSP.Widgets.Controller.prototype.draw = function() {
- var _this = this;
- this.renderTemplate();
-
- // Define blocks
- this.$playButton = this.$.find(".Ldt-Ctrl-Play");
- this.$searchBlock = this.$.find(".Ldt-Ctrl-Search");
- this.$searchInput = this.$.find(".Ldt-Ctrl-SearchInput");
- this.$volumeBar = this.$.find(".Ldt-Ctrl-Volume-Bar");
-
- // handle events
- this.onMediaEvent("play","playButtonUpdater");
- this.onMediaEvent("pause","playButtonUpdater");
- this.onMediaEvent("volumechange","volumeUpdater");
- this.onMediaEvent("timeupdate","timeDisplayUpdater");
- this.onMediaEvent("loadedmetadata","volumeUpdater");
-
- // handle clicks
- this.$playButton.click(this.functionWrapper("playHandler"));
-
- if (this.enable_quiz_toggle !== undefined) {
- if (this.enable_quiz_toggle) {
- this.$.find(".Ldt-Ctrl-Quiz-Enable").addClass("Ldt-Ctrl-Quiz-Toggle-Active");
- this.$.find(".Ldt-Ctrl-Quiz-Create").addClass("Ldt-Ctrl-Quiz-Toggle-Active");
- // this.player.trigger("QuizCreator.show");
- this.$.find("#QuizEditContainer").show();
- }
- else
- {
- this.$.find(".Ldt-Ctrl-Quiz-Enable").removeClass("Ldt-Ctrl-Quiz-Toggle-Active");
- this.$.find(".Ldt-Ctrl-Quiz-Create").removeClass("Ldt-Ctrl-Quiz-Toggle-Active");
- this.player.trigger("QuizCreator.hide");
- this.$.find("#QuizEditContainer").hide();
- }
- } else {
- this.$.find(".Ldt-Ctrl-Quiz-Enable").hide();
- }
-
- this.$.find(".Ldt-Ctrl-Annotate").click(function() {
- _this.player.trigger("CreateAnnotation.toggle");
- });
- this.$.find(".Ldt-Ctrl-SearchBtn").click(this.functionWrapper("searchButtonHandler"));
-
- this.$searchInput.keyup(this.functionWrapper("searchHandler"));
- this.$searchInput.on("search", this.functionWrapper("searchHandler"));
-
- // Fullscreen handling
- this.$.find(".Ldt-Ctrl-Fullscreen-Button").click(this.functionWrapper("toggleFullscreen"));
- var fullscreen_event_name = IriSP.getFullscreenEventname();
- if (fullscreen_event_name) {
- document.addEventListener(fullscreen_event_name, function() {
- if (IriSP.isFullscreen() && IriSP.getFullscreenElement() == _this.$[0]) {
- _this.$.addClass("Ldt-Fullscreen-Element");
- } else {
- _this.$.removeClass("Ldt-Fullscreen-Element");
- }
- });
+ enable_quiz: "Activer le quiz",
+ },
};
- // Quiz activation
- this.$.find(".Ldt-Ctrl-Quiz-Enable").click(this.functionWrapper("toggleQuiz"));
- this.$.find(".Ldt-Ctrl-Quiz-Create").click(this.functionWrapper("createQuiz"));
+ draw() {
+ var _this = this;
+ this.renderTemplate();
+
+ // Define blocks
+ this.$playButton = this.$.find(".Ldt-Ctrl-Play");
+ this.$searchBlock = this.$.find(".Ldt-Ctrl-Search");
+ this.$searchInput = this.$.find(".Ldt-Ctrl-SearchInput");
+ this.$volumeBar = this.$.find(".Ldt-Ctrl-Volume-Bar");
+
+ // handle events
+ this.onMediaEvent("play", "playButtonUpdater");
+ this.onMediaEvent("pause", "playButtonUpdater");
+ this.onMediaEvent("volumechange", "volumeUpdater");
+ this.onMediaEvent("timeupdate", "timeDisplayUpdater");
+ this.onMediaEvent("loadedmetadata", "volumeUpdater");
+
+ // handle clicks
+ this.$playButton.click(this.functionWrapper("playHandler"));
- var _volctrl = this.$.find(".Ldt-Ctrl-Volume-Control");
- this.$.find('.Ldt-Ctrl-Sound')
- .click(this.functionWrapper("muteHandler"))
- .mouseover(function() {
- _volctrl.show();
- })
- .mouseout(function() {
- _volctrl.hide();
+ if (this.enable_quiz_toggle !== undefined) {
+ if (this.enable_quiz_toggle) {
+ this.$.find(".Ldt-Ctrl-Quiz-Enable").addClass(
+ "Ldt-Ctrl-Quiz-Toggle-Active"
+ );
+ this.$.find(".Ldt-Ctrl-Quiz-Create").addClass(
+ "Ldt-Ctrl-Quiz-Toggle-Active"
+ );
+ // this.player.trigger("QuizCreator.show");
+ this.$.find("#QuizEditContainer").show();
+ } else {
+ this.$.find(".Ldt-Ctrl-Quiz-Enable").removeClass(
+ "Ldt-Ctrl-Quiz-Toggle-Active"
+ );
+ this.$.find(".Ldt-Ctrl-Quiz-Create").removeClass(
+ "Ldt-Ctrl-Quiz-Toggle-Active"
+ );
+ this.player.trigger("QuizCreator.hide");
+ this.$.find("#QuizEditContainer").hide();
+ }
+ } else {
+ this.$.find(".Ldt-Ctrl-Quiz-Enable").hide();
+ }
+
+ this.$.find(".Ldt-Ctrl-Annotate").click(function () {
+ _this.player.trigger("CreateAnnotation.toggle");
+ });
+ this.$.find(".Ldt-Ctrl-SearchBtn").click(
+ this.functionWrapper("searchButtonHandler")
+ );
+
+ this.$searchInput.keyup(this.functionWrapper("searchHandler"));
+ this.$searchInput.on("search", this.functionWrapper("searchHandler"));
+
+ // Fullscreen handling
+ this.$.find(".Ldt-Ctrl-Fullscreen-Button").click(
+ this.functionWrapper("toggleFullscreen")
+ );
+ var fullscreen_event_name = ns.getFullscreenEventname();
+ if (fullscreen_event_name) {
+ document.addEventListener(fullscreen_event_name, function () {
+ if (ns.isFullscreen() && ns.getFullscreenElement() == _this.$[0]) {
+ _this.$.addClass("Ldt-Fullscreen-Element");
+ } else {
+ _this.$.removeClass("Ldt-Fullscreen-Element");
+ }
});
- _volctrl.mouseover(function() {
- _volctrl.show();
- }).mouseout(function() {
- _volctrl.hide();
- });
+ }
+
+ // Quiz activation
+ this.$.find(".Ldt-Ctrl-Quiz-Enable").click(
+ this.functionWrapper("toggleQuiz")
+ );
+ this.$.find(".Ldt-Ctrl-Quiz-Create").click(
+ this.functionWrapper("createQuiz")
+ );
- // Handle CTRL-F
- if (!this.disable_ctrl_f) {
+ var _volctrl = this.$.find(".Ldt-Ctrl-Volume-Control");
+ this.$.find(".Ldt-Ctrl-Sound")
+ .click(this.functionWrapper("muteHandler"))
+ .mouseover(function () {
+ _volctrl.show();
+ })
+ .mouseout(function () {
+ _volctrl.hide();
+ });
+ _volctrl
+ .mouseover(function () {
+ _volctrl.show();
+ })
+ .mouseout(function () {
+ _volctrl.hide();
+ });
+
+ // Handle CTRL-F
+ if (!this.disable_ctrl_f) {
var _fKey = "F".charCodeAt(0),
- _lastCtrlFTime = 0;
- IriSP.jQuery(document).keydown(function(_event) {
- if (_event.keyCode === _fKey && (_event.ctrlKey || _event.metaKey)) {
- var _time = IriSP.jQuery.now();
- if (_time - _lastCtrlFTime > 2000) {
- _this.searchButtonHandler();
- }
- _lastCtrlFTime = _time;
- return false;
+ _lastCtrlFTime = 0;
+ jQuery(document).keydown(function (_event) {
+ if (_event.keyCode === _fKey && (_event.ctrlKey || _event.metaKey)) {
+ var _time = jQuery.now();
+ if (_time - _lastCtrlFTime > 2000) {
+ _this.searchButtonHandler();
}
+ _lastCtrlFTime = _time;
+ return false;
+ }
});
+ }
+
+ // Allow Volume Cursor Dragging
+ this.$volumeBar.slider({
+ slide: function (event, ui) {
+ _this.$volumeBar.attr(
+ "title",
+ _this.l10n.volume + ": " + ui.value + "%"
+ );
+ _this.media.setVolume(ui.value / 100);
+ },
+ stop: this.functionWrapper("volumeUpdater"),
+ });
+
+ // trigger an ns.Player.MouseOver to the widgets that are interested (i.e : sliderWidget)
+ this.$.hover(
+ function () {
+ _this.player.trigger("Player.MouseOver");
+ },
+ function () {
+ _this.player.trigger("Player.MouseOut");
+ }
+ );
+
+ this.timeDisplayUpdater(new ns.Model.Time(0));
+
+ var annotations = this.source.getAnnotations();
+ annotations.on("search", function (_text) {
+ _this.$searchInput.val(_text);
+ _this.showSearchBlock();
+ });
+ annotations.on("found", function (_text) {
+ _this.$searchInput.css("background-color", "#e1ffe1");
+ });
+ annotations.on("not-found", function (_text) {
+ _this.$searchInput.css("background-color", "#d62e3a");
+ });
+ annotations.on("search-cleared", function () {
+ _this.hideSearchBlock();
+ });
+ if (_this.always_show_search) {
+ _this.showSearchBlock();
+ }
}
- // Allow Volume Cursor Dragging
- this.$volumeBar.slider({
- slide: function(event, ui) {
- _this.$volumeBar.attr("title",_this.l10n.volume+': ' + ui.value + '%');
- _this.media.setVolume(ui.value / 100);
- },
- stop: this.functionWrapper("volumeUpdater")
- });
-
- // trigger an IriSP.Player.MouseOver to the widgets that are interested (i.e : sliderWidget)
- this.$.hover(
- function() {
- _this.player.trigger("Player.MouseOver");
- },
- function() {
- _this.player.trigger("Player.MouseOut");
- });
-
- this.timeDisplayUpdater(new IriSP.Model.Time(0));
+ /* Update the elasped time div */
+ timeDisplayUpdater(_time) {
+ // we get it at each call because it may change.
+ var _totalTime = this.media.duration;
+ this.$.find(".Ldt-Ctrl-Time-Elapsed").html(_time.toString());
+ this.$.find(".Ldt-Ctrl-Time-Total").html(_totalTime.toString());
+ }
- var annotations = this.source.getAnnotations();
- annotations.on("search", function(_text) {
- _this.$searchInput.val(_text);
- _this.showSearchBlock();
- });
- annotations.on("found", function(_text) {
- _this.$searchInput.css('background-color','#e1ffe1');
- });
- annotations.on("not-found", function(_text) {
- _this.$searchInput.css('background-color', "#d62e3a");
- });
- annotations.on("search-cleared", function() {
- _this.hideSearchBlock();
- });
- if (_this.always_show_search) {
- _this.showSearchBlock();
- }
-};
-
-/* Update the elasped time div */
-IriSP.Widgets.Controller.prototype.timeDisplayUpdater = function(_time) {
-
- // we get it at each call because it may change.
- var _totalTime = this.media.duration;
- this.$.find(".Ldt-Ctrl-Time-Elapsed").html(_time.toString());
- this.$.find(".Ldt-Ctrl-Time-Total").html(_totalTime.toString());
-};
-
-/* update the icon of the button - separate function from playHandler
+ /* update the icon of the button - separate function from playHandler
because in some cases (for instance, when the user directly clicks on
the jwplayer window) we have to change the icon without playing/pausing
*/
-IriSP.Widgets.Controller.prototype.playButtonUpdater = function() {
- if (this.media.getPaused()) {
- /* the background sprite is changed by adding/removing the correct classes */
+ playButtonUpdater() {
+ if (this.media.getPaused()) {
+ /* the background sprite is changed by adding/removing the correct classes */
this.$playButton
- .attr("title", this.l10n.play)
- .removeClass("Ldt-Ctrl-Play-PauseState")
- .addClass("Ldt-Ctrl-Play-PlayState");
- } else {
+ .attr("title", this.l10n.play)
+ .removeClass("Ldt-Ctrl-Play-PauseState")
+ .addClass("Ldt-Ctrl-Play-PlayState");
+ } else {
this.$playButton
- .attr("title", this.l10n.pause)
- .removeClass("Ldt-Ctrl-Play-PlayState")
- .addClass("Ldt-Ctrl-Play-PauseState");
+ .attr("title", this.l10n.pause)
+ .removeClass("Ldt-Ctrl-Play-PlayState")
+ .addClass("Ldt-Ctrl-Play-PauseState");
+ }
}
-};
-//FullScreen
-IriSP.Widgets.Controller.prototype.toggleFullscreen = function() {
- if (IriSP.isFullscreen()) {
- IriSP.setFullScreen(this.$[0], false);
- } else {
- IriSP.setFullScreen(this.$[0], true);
+ //FullScreen
+ toggleFullscreen() {
+ if (ns.isFullscreen()) {
+ ns.setFullScreen(this.$[0], false);
+ } else {
+ ns.setFullScreen(this.$[0], true);
+ }
}
-};
-//Quiz
-IriSP.Widgets.Controller.prototype.createQuiz = function() {
- this.player.trigger("Quiz.hide");
- this.media.pause();
- this.player.trigger("QuizCreator.create");
-};
+ //Quiz
+ createQuiz() {
+ this.player.trigger("Quiz.hide");
+ this.media.pause();
+ this.player.trigger("QuizCreator.create");
+ }
-IriSP.Widgets.Controller.prototype.toggleQuiz = function() {
- this.enable_quiz_toggle = !this.enable_quiz_toggle;
- if (this.enable_quiz_toggle) {
+ toggleQuiz() {
+ this.enable_quiz_toggle = !this.enable_quiz_toggle;
+ if (this.enable_quiz_toggle) {
$(".Ldt-Ctrl-Quiz-Enable").addClass("Ldt-Ctrl-Quiz-Toggle-Active");
$(".Ldt-Ctrl-Quiz-Create").addClass("Ldt-Ctrl-Quiz-Toggle-Active");
this.player.trigger("Quiz.activate");
- }
- else
- {
+ } else {
$(".Ldt-Ctrl-Quiz-Enable").removeClass("Ldt-Ctrl-Quiz-Toggle-Active");
$(".Ldt-Ctrl-Quiz-Create").removeClass("Ldt-Ctrl-Quiz-Toggle-Active");
this.player.trigger("Quiz.deactivate");
this.player.trigger("QuizCreator.hide");
- }
-};
-
-IriSP.Widgets.Controller.prototype.playHandler = function() {
- if (this.media.getPaused()) {
- this.media.play();
- } else {
- this.media.pause();
+ }
}
-};
-
-IriSP.Widgets.Controller.prototype.muteHandler = function() {
- this.media.setMuted(!this.media.getMuted());
-};
-IriSP.Widgets.Controller.prototype.volumeUpdater = function() {
- var _muted = this.media.getMuted(),
- _vol = this.media.getVolume();
- if (_vol === false) {
- _vol = .5;
+ playHandler() {
+ if (this.media.getPaused()) {
+ this.media.play();
+ } else {
+ this.media.pause();
+ }
+ }
+
+ muteHandler() {
+ this.media.setMuted(!this.media.getMuted());
}
- var _soundCtl = this.$.find(".Ldt-Ctrl-Sound");
- _soundCtl.removeClass("Ldt-Ctrl-Sound-Mute Ldt-Ctrl-Sound-Half Ldt-Ctrl-Sound-Full");
- if (_muted) {
- _soundCtl.attr("title", this.l10n.unmute)
- .addClass("Ldt-Ctrl-Sound-Mute");
- } else {
- _soundCtl.attr("title", this.l10n.mute)
- .addClass(_vol < .5 ? "Ldt-Ctrl-Sound-Half" : "Ldt-Ctrl-Sound-Full" );
- }
- this.$volumeBar.slider("value", _muted ? 0 : 100 * _vol);
-};
-IriSP.Widgets.Controller.prototype.showSearchBlock = function() {
- this.$searchBlock.animate({ width:"160px" }, 200);
- this.$searchInput.css('background-color','#fff');
- this.$searchInput.focus();
-};
+ volumeUpdater() {
+ var _muted = this.media.getMuted(),
+ _vol = this.media.getVolume();
+ if (_vol === false) {
+ _vol = 0.5;
+ }
+ var _soundCtl = this.$.find(".Ldt-Ctrl-Sound");
+ _soundCtl.removeClass(
+ "Ldt-Ctrl-Sound-Mute Ldt-Ctrl-Sound-Half Ldt-Ctrl-Sound-Full"
+ );
+ if (_muted) {
+ _soundCtl
+ .attr("title", this.l10n.unmute)
+ .addClass("Ldt-Ctrl-Sound-Mute");
+ } else {
+ _soundCtl
+ .attr("title", this.l10n.mute)
+ .addClass(_vol < 0.5 ? "Ldt-Ctrl-Sound-Half" : "Ldt-Ctrl-Sound-Full");
+ }
+ this.$volumeBar.slider("value", _muted ? 0 : 100 * _vol);
+ }
-IriSP.Widgets.Controller.prototype.hideSearchBlock = function() {
- if (! this.always_show_search) {
- this.$searchBlock.animate( { width: 0 }, 200);
+ showSearchBlock() {
+ this.$searchBlock.animate({ width: "160px" }, 200);
+ this.$searchInput.css("background-color", "#fff");
+ this.$searchInput.focus();
}
-};
-/** react to clicks on the search button */
-IriSP.Widgets.Controller.prototype.searchButtonHandler = function() {
- if ( !this.$searchBlock.width() ) {
+ hideSearchBlock() {
+ if (!this.always_show_search) {
+ this.$searchBlock.animate({ width: 0 }, 200);
+ }
+ }
+
+ /** react to clicks on the search button */
+ searchButtonHandler() {
+ if (!this.$searchBlock.width()) {
this.showSearchBlock();
var _val = this.$searchInput.val();
if (_val) {
- this.source.getAnnotations().search(_val);
+ this.source.getAnnotations().search(_val);
}
- } else {
+ } else {
this.hideSearchBlock();
+ }
}
+
+ /** this handler is called whenever the content of the search
+ field changes */
+ searchHandler() {
+ if (!this.$searchBlock.width()) {
+ this.$searchBlock.css({ width: "160px" });
+ this.$searchInput.css("background-color", "#fff");
+ }
+ var _val = this.$searchInput.val();
+ this._positiveMatch = false;
+
+ // do nothing if the search field is empty, instead of highlighting everything.
+ if (_val !== this.lastSearchValue) {
+ if (_val) {
+ this.source.getAnnotations().search(_val);
+ } else {
+ this.source.getAnnotations().trigger("clear-search");
+ this.$searchInput.css("background-color", "");
+ }
+ }
+ this.lastSearchValue = _val;
+ }
+ };
};
-/** this handler is called whenever the content of the search
- field changes */
-IriSP.Widgets.Controller.prototype.searchHandler = function() {
- if ( !this.$searchBlock.width() ) {
- this.$searchBlock.css({ width:"160px" });
- this.$searchInput.css('background-color','#fff');
- }
- var _val = this.$searchInput.val();
- this._positiveMatch = false;
-
- // do nothing if the search field is empty, instead of highlighting everything.
- if (_val !== this.lastSearchValue) {
- if (_val) {
- this.source.getAnnotations().search(_val);
- } else {
- this.source.getAnnotations().trigger("clear-search");
- this.$searchInput.css('background-color','');
- }
- }
- this.lastSearchValue = _val;
-};
+export { Controller, controllerStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Controller.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,249 @@
+/* Player Widget */
+
+.Ldt-Ctrl {
+ font-size: 10px;
+ background: url('img/player_gradient.png') repeat-x transparent ;
+ height: 25px;
+ border: 1px solid #b6b8b8;
+ position: relative;
+ overflow: hidden;
+}
+
+.Ldt-Ctrl-Left {
+ float: left;
+}
+
+.Ldt-Ctrl-Right {
+ float: right;
+}
+
+.Ldt-Ctrl-button {
+ float: left;
+ width: 30px;
+ height: 25px;
+ background: url('img/player-sprites.png');
+ cursor: pointer;
+}
+
+.Ldt-Ctrl-spacer {
+ float: left;
+ width: 1px;
+ height: 25px;
+ background: #b6b8b8;
+}
+
+.Ldt-Ctrl-Play {
+ margin: 100px 0;
+ margin: 0 15px;
+}
+
+.Ldt-Ctrl-Play-PlayState {
+ background-position: 0 0;
+}
+
+.Ldt-Ctrl-Play-PlayState:hover {
+ background-position: 0 -25px;
+}
+
+.Ldt-Ctrl-Play-PlayState:active {
+ background-position: 0 -50px;
+}
+
+.Ldt-Ctrl-Play-PauseState {
+ background-position: -30px 0;
+}
+
+.Ldt-Ctrl-Play-PauseState:hover {
+ background-position: -30px -25px;
+}
+
+.Ldt-Ctrl-Play-PauseState:active {
+ background-position: -30px -50px;
+}
+
+.Ldt-Ctrl-Annotate {
+ margin: 0 2px;
+ background-position: -60px 0;
+}
+
+.Ldt-Ctrl-Annotate:hover {
+ background-position: -60px -25px;
+}
+
+.Ldt-Ctrl-Annotate:active {
+ background-position: -60px -50px;
+}
+
+.Ldt-Ctrl-SearchBtn {
+ margin: 0 2px;
+ background-position: -90px 0;
+}
+
+.Ldt-Ctrl-SearchBtn:hover {
+ background-position: -90px -25px;
+}
+
+.Ldt-Ctrl-SearchBtn:active {
+ background-position: -90px -50px;
+}
+
+.Ldt-Ctrl-Search {
+ width: 0; float: left; overflow: hidden;
+}
+
+input.Ldt-Ctrl-SearchInput {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 145px;
+ height: 20px;
+ margin: 2px;
+ padding: 3px;
+ border: 1px solid #8080a0;
+ border-radius: 3px;
+ font-size: 13px;
+}
+
+.Ldt-Ctrl-Time {
+ float: left;
+ margin: 5px;
+ font-size: 12px;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.Ldt-Ctrl-Time-Elapsed {
+ float: left;
+ color: #4a4a4a;
+}
+
+.Ldt-Ctrl-Time-Separator {
+ margin: 0 4px;
+ float: left;
+}
+
+.Ldt-Ctrl-Time-Total {
+ float: left;
+ color: #b2b2b2;
+}
+
+.Ldt-Ctrl-Sound {
+ margin: 0 2px;
+}
+
+.Ldt-Ctrl-Sound-Full {
+ background-position: -120px 0;
+}
+
+.Ldt-Ctrl-Sound-Full:hover {
+ background-position: -120px -25px;
+}
+
+.Ldt-Ctrl-Sound-Full:active {
+ background-position: -120px -50px;
+}
+
+.Ldt-Ctrl-Sound-Mute {
+ background-position: -150px 0;
+}
+
+.Ldt-Ctrl-Sound-Mute:hover {
+ background-position: -150px -25px;
+}
+
+.Ldt-Ctrl-Sound-Mute:active {
+ background-position: -150px -50px;
+}
+
+.Ldt-Ctrl-Sound-Half {
+ background-position: -180px 0;
+}
+
+.Ldt-Ctrl-Sound-Half:hover {
+ background-position: -180px -25px;
+}
+
+.Ldt-Ctrl-Sound-Half:active {
+ background-position: -180px -50px;
+}
+
+.Ldt-Ctrl-Volume-Control {
+ display: none;
+ position: absolute;
+ background: url('img/player_gradient.png') repeat-x transparent ;
+ height: 25px;
+ width: 100px;
+ top: 25px;
+ right: -1px;
+ z-index: 100;
+ padding: 0 2px;
+ border: 1px solid #b6b8b8;
+}
+
+.Ldt-Ctrl-Volume-Bar {
+ height: 5px;
+ margin: 9px 3px 0;
+ background: #cccccc;
+ border: 1px solid #999999;
+ border-radius: 2px;
+}
+
+.Ldt-Ctrl-Volume-Control .ui-slider-handle {
+ width: 6px;
+ height: 19px;
+ background: #a8a8a8;
+ border: 1px solid #999999;
+ border-radius: 2px;
+ top: -8px;
+ margin-left: -4px;
+ cursor: pointer;
+}
+
+.Ldt-Ctrl-Volume-Control:hover .ui-slider-handle {
+ background: #F7268E;
+}
+
+/* quiz */
+
+.Ldt-Ctrl-Quiz-Enable button, .Ldt-Ctrl-Quiz-Create button, .Ldt-Ctrl-Quiz-Disactivated button, .Ldt-Ctrl-Fullscreen-Button{
+ border: none;
+ background: transparent;
+}
+
+.Ldt-Ctrl-Quiz-Enable {
+ background-image: url("img/quiz_off.svg");
+ float: left;
+ height: 22px;
+ width: 22px;
+ background-repeat: no-repeat;
+}
+.Ldt-Ctrl-Quiz-Enable.Ldt-Ctrl-Quiz-Toggle-Active {
+ background-image: url("img/quiz_on.svg");
+}
+
+.Ldt-Ctrl-Quiz-Create {
+ background-image: url("img/quiz_add_question.svg");
+ float: left;
+ height: 23px;
+ width: 26px;
+ background-repeat: no-repeat;
+ margin-left: 4px;
+ margin-top: 0px;
+ display: none;
+}
+.Ldt-Ctrl-Quiz-Create.Ldt-Ctrl-Quiz-Toggle-Active {
+ display: inline-block;
+}
+
+.Ldt-Ctrl-Fullscreen-Button {
+ margin-top: 3px;
+}
+
+.Ldt-Ctrl-Fullscreen-Button {
+ float: left;
+ background-image: url("img/fullscreen.svg");
+ background-position: right;
+ margin-right: 6px;
+ margin-top: 1px;
+ height: 22px;
+ width: 22px;
+ border: none;
+}
--- a/src/widgets/CreateAnnotation.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-/*
- *
- */
-
-.Ldt-CreateAnnotation {
- border-style: none solid solid;
- border-width: 1px;
- border-color: #b7b7b7;
- padding: 0 1px 1px;
- margin: 0;
-}
-
-.Ldt-CreateAnnotation-Inner {
- background: url(img/pinstripe.png); padding: 5px; margin: 0; position: relative;
-}
-
-.Ldt-CreateAnnotation-Inner h3 {
- margin: 5px 0; font-size: 14px; font-weight: bold; text-align: right; clear:both; color: #0068c4;
-}
-
-.Ldt-CreateAnnotation-h3Left {
- float: left;
-}
-
-.Ldt-CreateAnnotation-Main {
- min-height: 50px;
-}
-
-.Ldt-CreateAnnotation-Title, .Ldt-CreateAnnotation-Creator {
- font-size: 14px;
- font-weight: bold;
- color: #0068c4;
- border: 1px solid #666666;
- border-radius: 2px;
-}
-
-.Ldt-CreateAnnotation-Title.empty, .Ldt-CreateAnnotation-Creator.empty {
- font-style: italic;
- color: #90b0d0;
-}
-
-.Ldt-CreateAnnotation-Times {
- color: #ff3b77
-}
-
-.Ldt-CreateAnnotation-Submit,
-.Ldt-CreateAnnotation-Cancel,
-.Ldt-CreateAnnotation-PreviewSubmit{
- position: absolute;
- bottom: 7px;
- color: #ffffff;
- cursor: pointer;
- height: 50px;
- width: 50px;
- padding: 28px 0 0;
- font-size: 12px;
- border: none;
- text-align: center;
- cursor: pointer;
-}
-
-
-.Ldt-CreateAnnotation-Cancel{
- right: 7px;
- background: url('img/cancel_annotation.png');
-}
-
-.Ldt-CreateAnnotation-Submit{
- right: 67px;
- background: url('img/submit_annotation.png');
-}
-
-.Ldt-CreateAnnotation-Submit:hover,
-.Ldt-CreateAnnotation-Cancel:hover{
- background-position: -50px 0;
-}
-
-.Ldt-CreateAnnotation-Description {
- height: 3em;
- padding: 2px;
- resize: none;
- width: calc(100% - 122px);
- border: 1px solid #666666;
- border-radius: 2px;
-}
-
-.Ldt-CreateAnnotation-Description.empty {
- font-style: italic; color: #999999;
-}
-
-.Ldt-CreateAnnotation-Avatar {
- float: right;
- width: 48px;
- height: 48px;
- margin: 5px 0;
- padding: 0 0 0 15px;
- background: url('img/profile_arrow.png') left no-repeat;
-}
-
-.Ldt-CreateAnnotation-Avatar img {
- float: right;
- display: block;
- max-width: 100%;
- max-height: 100%;
- border: 1px solid #bbbbbb;
-}
-
-.Ldt-CreateAnnotation-RecBlock {
- width: 220px; float: left;
-}
-
-.Ldt-CreateAnnotation-TagTitle, .Ldt-CreateAnnotation-PolemicTitle, .Ldt-CreateAnnotation-RecLabel {
- display: block; margin: 5px 0 2px; font-size: 12px;
-}
-
-.Ldt-CreateAnnotation-TagList, .Ldt-CreateAnnotation-PolemicList {
- list-style: none;
- width: calc(100% - 122px);
- padding-left: 0px;
-}
-
-li.Ldt-CreateAnnotation-TagLi {
- display: inline-block; border: none; margin: 0 10px 5px 0; height: 23px; padding: 0 0 0 20px;
- background: url(img/tag.png) left top no-repeat;
- cursor: pointer;
-}
-
-.Ldt-CreateAnnotation-TagButton {
- display: inline-block; font-size: 12px; height: 19px; padding: 4px 5px 0 0; border: none; margin: 0;
- background: url(img/tag.png) right top no-repeat;
-}
-
-li.Ldt-CreateAnnotation-TagLi:hover {
- background-position: left -23px;
-}
-
-.Ldt-CreateAnnotation-TagLi:hover .Ldt-CreateAnnotation-TagButton {
- background-position: right -23px;
-}
-
-li.Ldt-CreateAnnotation-TagLi.selected {
- background-position: left -46px;
-}
-
-.Ldt-CreateAnnotation-TagLi.selected .Ldt-CreateAnnotation-TagButton {
- background-position: right -46px;
-}
-
-li.Ldt-CreateAnnotation-PolemicLi {
- display: inline-block; border: none; margin: 0 5px 0; height: 21px; width: 26px; padding: 2px 0 0;
- background: url(img/polemic.png) left top no-repeat; font-size: 14px; font-weight: bold; text-align: center;
- cursor: pointer;
-}
-
-li.Ldt-CreateAnnotation-PolemicLi:hover {
- background-position: 0 -23px;
-}
-
-li.Ldt-CreateAnnotation-PolemicLi.selected {
- background-position: 0 -46px;
-}
-
-.Ldt-CreateAnnotation-InnerBox {
- margin: 20px 50px;
- border: 1px solid #CCCCCC;
- padding: 20px;
- background: #FFFFFF;
- color: #FF3B77; text-align: center;
- font-size: 13px; font-weight: bold;
-}
-
-a.Ldt-CreateAnnotation-Close {
- position: absolute; top: 2px; right: 2px;
- display: inline-block; width: 17px; height: 17px; margin: 2px;
- background: url(img/widget-control.png);
-}
-
-a.Ldt-CreateAnnotation-Close:hover {
- background-position: -17px 0;
-}
\ No newline at end of file
--- a/src/widgets/CreateAnnotation.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/CreateAnnotation.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,75 +1,89 @@
/* TODO: Add Social Network Sharing */
+// CreateAnnotation
+
+import createAnnotationStyles from "./CreateAnnotation.module.css";
+import Mustache from "mustache";
+import _ from "lodash";
+import jQuery from "jquery";
-IriSP.Widgets.CreateAnnotation = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
- if (_this.editable_storage != '' && window.localStorage[_this.editable_storage]) {
+const CreateAnnotation = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ if (
+ this.editable_storage != "" &&
+ window.localStorage[this.editable_storage]
+ ) {
this.source.onLoad(function () {
- var _export = _this.player.sourceManager.newLocalSource({serializer: IriSP.serializers['ldt_localstorage']});
- _export.deSerialize(window.localStorage[_this.editable_storage]);
- _this.source.merge(_export);
+ var _export = this.player.sourceManager.newLocalSource({
+ serializer: ns.serializers["ldt_localstorage"],
+ });
+ _export.deSerialize(window.localStorage[this.editable_storage]);
+ _this.source.merge(_export);
});
- };
-};
-
-IriSP.Widgets.CreateAnnotation.prototype = new IriSP.Widgets.Widget();
+ }
+ }
-IriSP.Widgets.CreateAnnotation.prototype.defaults = {
- show_title_field : true,
- show_creator_field : true,
- creator_field_readonly : false,
- start_visible : true,
- always_visible : false,
- show_slice : true,
- show_arrow : true,
- show_mic_record: false,
- show_mic_play: false,
- show_time: true,
- minimize_annotation_widget : true,
- creator_name : "",
- creator_avatar : "",
- tags : false,
- tag_titles : false,
- pause_on_write : true,
- max_tags : 8,
- polemics : [{
- keyword: "++",
- background_color: "#00a000",
- text_color: "#ffffff"
- },{
- keyword: "--",
- background_color: "#c00000",
- text_color: "#ffffff"
- },{
- keyword: "??",
- background_color: "#0000e0",
- text_color: "#ffffff"
- },{
- keyword: "==",
- background_color: "#f0e000",
- text_color: "#000000"
- }],
- slice_annotation_type: "chap",
- annotation_type: "Contributions",
- post_at_segment_time: false,
- segment_annotation_type: "chap",
- api_serializer: "ldt_annotate",
- api_endpoint_template: "",
- api_method: "POST",
- // Id that will be used as localStorage key
- editable_storage: "",
- project_id: "",
- after_send_timeout: 0,
- close_after_send: false,
- tag_prefix: "#",
- pause_when_displaying: false,
- custom_send_button: false,
- custom_cancel_button: false,
- custom_description_placeholder: false,
- preview_mode: false,
-};
+ static defaults = {
+ show_title_field: true,
+ show_creator_field: true,
+ creator_field_readonly: false,
+ start_visible: true,
+ always_visible: false,
+ show_slice: true,
+ show_arrow: true,
+ show_time: true,
+ minimize_annotation_widget: true,
+ creator_name: "",
+ creator_avatar: "",
+ tags: false,
+ tag_titles: false,
+ pause_on_write: true,
+ max_tags: 8,
+ polemics: [
+ {
+ keyword: "++",
+ background_color: "#00a000",
+ text_color: "#ffffff",
+ },
+ {
+ keyword: "--",
+ background_color: "#c00000",
+ text_color: "#ffffff",
+ },
+ {
+ keyword: "??",
+ background_color: "#0000e0",
+ text_color: "#ffffff",
+ },
+ {
+ keyword: "==",
+ background_color: "#f0e000",
+ text_color: "#000000",
+ },
+ ],
+ slice_annotation_type: "chap",
+ annotation_type: "Contributions",
+ post_at_segment_time: false,
+ segment_annotation_type: "chap",
+ api_serializer: "ldt_annotate",
+ api_endpoint_template: "",
+ api_method: "POST",
+ // Id that will be used as localStorage key
+ editable_storage: "",
+ project_id: "",
+ after_send_timeout: 0,
+ close_after_send: false,
+ tag_prefix: "#",
+ pause_when_displaying: false,
+ custom_send_button: false,
+ custom_cancel_button: false,
+ custom_description_placeholder: false,
+ preview_mode: false,
+ };
-IriSP.Widgets.CreateAnnotation.prototype.messages = {
- en: {
+ static messages = {
+ en: {
from_time: "from",
to_time: "to",
at_time: "at",
@@ -82,8 +96,10 @@
annotate_video: "New note",
type_title: "Annotation title",
type_description: "Enter a new note...",
- wait_while_processing: "Please wait while your annotation is being processed...",
- error_while_contacting: "An error happened while contacting the server. Your annotation has not been saved.",
+ wait_while_processing:
+ "Please wait while your annotation is being processed...",
+ error_while_contacting:
+ "An error happened while contacting the server. Your annotation has not been saved.",
annotation_saved: "Thank you, your annotation has been saved.",
share_annotation: "Would you like to share it on social networks ?",
close_widget: "Hide the annotation form",
@@ -91,16 +107,17 @@
"polemic--": "Disagree",
"polemic??": "Question",
"polemic==": "Reference",
- "in_tooltip": "Set begin time to current player time",
- "out_tooltip": "Set begin time to current player time",
- "play_tooltip": "Play the fragment"
- },
- fr: {
+ in_tooltip: "Set begin time to current player time",
+ out_tooltip: "Set begin time to current player time",
+ play_tooltip: "Play the fragment",
+ },
+ fr: {
from_time: "de",
to_time: "à",
at_time: "à",
submit: "Envoyer",
- preview_submit: "Vous ne pouvez pas envoyer d'annotation en mode aperçu",
+ preview_submit:
+ "Vous ne pouvez pas envoyer d'annotation en mode aperçu",
cancel: "Annuler",
add_keywords_: "Ajouter des mots-clés\u00a0:",
add_polemic_keywords_: "Ajouter des attributs polémiques\u00a0:",
@@ -108,517 +125,580 @@
annotate_video: "Entrez une nouvelle note...",
type_title: "Titre de l'annotation",
type_description: "Prenez vos notes...",
- wait_while_processing: "Veuillez patienter pendant le traitement de votre annotation...",
- error_while_contacting: "Une erreur s'est produite en contactant le serveur. Votre annotation n'a pas été enregistrée.",
+ wait_while_processing:
+ "Veuillez patienter pendant le traitement de votre annotation...",
+ error_while_contacting:
+ "Une erreur s'est produite en contactant le serveur. Votre annotation n'a pas été enregistrée.",
annotation_saved: "Merci, votre annotation a été enregistrée.",
- share_annotation: "Souhaitez-vous la partager sur les réseaux sociaux ?",
+ share_annotation:
+ "Souhaitez-vous la partager sur les réseaux sociaux ?",
close_widget: "Cacher le formulaire de création d'annotations",
"polemic++": "Accord",
"polemic--": "Désaccord",
"polemic??": "Question",
"polemic==": "Référence",
- "in_tooltip": "Utiliser le temps courant comme début",
- "out_tooltip": "Utiliser le temps courant comme fin",
- "play_tooltip": "Jouer le fragment"
- }
-};
+ in_tooltip: "Utiliser le temps courant comme début",
+ out_tooltip: "Utiliser le temps courant comme fin",
+ play_tooltip: "Jouer le fragment",
+ },
+ };
-IriSP.Widgets.CreateAnnotation.prototype.template =
- '{{#show_slice}}<div class="Ldt-CreateAnnotation-Slice Ldt-TraceMe"></div>{{/show_slice}}'
- + '{{^show_slice}}{{#show_arrow}}<div class="Ldt-CreateAnnotation-Arrow"></div>{{/show_arrow}}{{/show_slice}}'
- + '<div class="Ldt-CreateAnnotation"><div class="Ldt-CreateAnnotation-Inner">'
- + '<form class="Ldt-CreateAnnotation-Screen Ldt-CreateAnnotation-Main">'
- + '<h3><span class="Ldt-CreateAnnotation-h3Left">{{l10n.annotate_video}}{{#show_title_field}}</span></h3>'
- + '<h3><span class="Ldt-CreateAnnotation-h3Left"><input class="Ldt-CreateAnnotation-Title empty" placeholder="{{l10n.type_title}}" />{{/show_title_field}}'
- + '{{#show_time}}<span class="Ldt-CreateAnnotation-Times"> {{#show_slice}}{{l10n.from_time}} {{/show_slice}}{{^show_slice}}{{l10n.at_time}} {{/show_slice}} <span class="Ldt-CreateAnnotation-Begin">00:00</span>{{/show_time}}'
- + '{{#show_slice}} {{l10n.to_time}} <span class="Ldt-CreateAnnotation-End">{{end}}</span>{{/show_slice}}</span></span>'
- + '{{#show_creator_field}}{{l10n.your_name_}} <input class="Ldt-CreateAnnotation-Creator empty" value="{{creator_name}}" {{#creator_field_readonly}}readonly{{/creator_field_readonly}}/>{{/show_creator_field}}</h3>'
- + '{{#show_controls}}<div class="Ldt-CreateAnnotation-Controls">'
- + '<span title="{{l10n.in_tooltip}}" class="Ldt-CreateAnnotation-Control-In">In</span>'
- + '<span title="{{l10n.out_tooltip}}" class="Ldt-CreateAnnotation-Control-Out">Out</span>'
- + '<span title="{{l10n.play_tooltip}}" class="Ldt-CreateAnnotation-Control-Play">Play</span>'
- + '</div>{{/show_controls}}'
- + '<textarea class="Ldt-CreateAnnotation-Description Ldt-TraceMe empty" placeholder="{{#custom_description_placeholder}}{{custom_description_placeholder}}{{/custom_description_placeholder}}{{^custom_description_placeholder}}{{l10n.type_description}}{{/custom_description_placeholder}}"></textarea>'
- + '{{#show_creator_field}}<div class="Ldt-CreateAnnotation-Avatar"><img src="{{creator_avatar}}" title="{{creator_name}}"></img></div>{{/show_creator_field}}'
- + '<div class="Ldt-CreateAnnotation-SubmitArea Ldt-TraceMe">'
- + '{{#preview_mode}}<input type="button" class="Ldt-CreateAnnotation-PreviewSubmit" title="{{l10n.preview_submit}}" value="{{#custom_send_button}}{{custom_send_button}}{{/custom_send_button}}{{^custom_send_button}}{{l10n.submit}}{{/custom_send_button}}" />{{/preview_mode}}'
- + '{{^preview_mode}}<input type="submit" class="Ldt-CreateAnnotation-Submit" value="{{#custom_send_button}}{{custom_send_button}}{{/custom_send_button}}{{^custom_send_button}}{{l10n.submit}}{{/custom_send_button}}" />{{/preview_mode}}'
- + '<input type="button" class="Ldt-CreateAnnotation-Cancel" value="{{#custom_cancel_button}}{{custom_cancel_button}}{{/custom_cancel_button}}{{^custom_cancel_button}}{{l10n.cancel}}{{/custom_cancel_button}}" />'
- + '<div class="Ldt-CreateAnnotation-Begin Ldt-CreateAnnotation-Times">00:00</div>'
- + '</div>'
- + '{{#show_mic_record}}<div class="Ldt-CreateAnnotation-RecBlock"><div class="Ldt-CreateAnnotation-RecLabel">Add voice annotation</div>'
- + ' <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="220" height="160">'
- + ' <param name="movie" value="{{record_swf}}" />'
- + ' <param name="quality" value="high" />'
- + ' <param name="bgcolor" value="#ffffff" />'
- + ' <param name="play" value="true" />'
- + ' <param name="loop" value="true" />'
- + ' <param name="wmode" value="transparent" />'
- + ' <param name="scale" value="showall" />'
- + ' <param name="menu" value="true" />'
- + ' <param name="devicefont" value="false" />'
- + ' <param name="salign" value="" />'
- + ' <param name="allowScriptAccess" value="always" />'
- + ' <param name="allowFullScreen" value="true" />'
- + ' <param name="flashvars" value="playVisible={{show_mic_play}}">'
- + ' <embed src="{{record_swf}}"" quality="high" bgcolor="#ffffff"'
- + ' width="220" height="160" name="ExternalInterfaceExample" align="middle"'
- + ' play="true" loop="false" quality="high" allowScriptAccess="always" '
- + ' type="application/x-shockwave-flash" allowFullScreen="true" wmode="transparent" '
- + ' flashvars="playVisible={{show_mic_play}}"'
- + ' pluginspage="http://www.macromedia.com/go/getflashplayer">'
- + ' </embed>'
- + ' </object>'
- + '</div>{{/show_mic_record}}'
- + '{{#tags.length}}<div class="Ldt-CreateAnnotation-Tags"><div class="Ldt-CreateAnnotation-TagTitle">{{l10n.add_keywords_}}</div><ul class="Ldt-CreateAnnotation-TagList">'
- + '{{#tags}}<li class="Ldt-CreateAnnotation-TagLi" tag-id="{{id}}" data-text="{{tag_prefix}}{{title}}"><span class="Ldt-CreateAnnotation-TagButton">{{title}}</span></li>{{/tags}}</ul></div>{{/tags.length}}'
- + '{{#polemics.length}}<div class="Ldt-CreateAnnotation-Polemics"><div class="Ldt-CreateAnnotation-PolemicTitle">{{l10n.add_polemic_keywords_}}</div><ul class="Ldt-CreateAnnotation-PolemicList">'
- + '{{#polemics}}<li class="Ldt-CreateAnnotation-PolemicLi" style="background-color: {{background_color}}; color: {{text_color}}" data-text="{{keyword}}">{{keyword}}</li>{{/polemics}}</ul></div>{{/polemics.length}}'
- + '<div style="clear: both;"></div></form>'
- + '<div class="Ldt-CreateAnnotation-Screen Ldt-CreateAnnotation-Wait"><div class="Ldt-CreateAnnotation-InnerBox">{{l10n.wait_while_processing}}</div></div>'
- + '<div class="Ldt-CreateAnnotation-Screen Ldt-CreateAnnotation-Error">{{^always_visible}}<a title="{{l10n.close_widget}}" class="Ldt-CreateAnnotation-Close" href="#"></a>{{/always_visible}}<div class="Ldt-CreateAnnotation-InnerBox">{{l10n.error_while_contacting}}</div></div>'
- + '<div class="Ldt-CreateAnnotation-Screen Ldt-CreateAnnotation-Saved">{{^always_visible}}<a title="{{l10n.close_widget}}" class="Ldt-CreateAnnotation-Close" href="#"></a>{{/always_visible}}<div class="Ldt-CreateAnnotation-InnerBox">{{l10n.annotation_saved}}</div></div>'
- + '</div></div>';
-
-IriSP.Widgets.CreateAnnotation.prototype.draw = function() {
- var _this = this;
-
- this.begin = new IriSP.Model.Time();
- this.end = this.source.getDuration();
-
- this.tag_prefix = this.tag_prefix || "";
-
- if (this.tag_titles && !this.tags) {
- if(!(this.tag_titles.length==1 && this.tag_titles[0]=="")){
- this.tags = IriSP._(this.tag_titles).map(function(_tag_title) {
- var _tag,
- _tags = _this.source.getTags().searchByTitle(_tag_title, true);
- if (_tags.length) {
- _tag = _tags[0];
- } else {
- _tag = new IriSP.Model.Tag(false, _this.source);
- _this.source.getTags().push(_tag);
- _tag.title = _tag_title;
- }
- return _tag;
- });
- }
- else{
- // we forced no tags if this.tag_titles = [''] (and not false)
- this.tags = true;
+ static template =
+ '{{#show_slice}}<div class="Ldt-CreateAnnotation-Slice Ldt-TraceMe"></div>{{/show_slice}}' +
+ '{{^show_slice}}{{#show_arrow}}<div class="Ldt-CreateAnnotation-Arrow"></div>{{/show_arrow}}{{/show_slice}}' +
+ '<div class="Ldt-CreateAnnotation"><div class="Ldt-CreateAnnotation-Inner">' +
+ '<form class="Ldt-CreateAnnotation-Screen Ldt-CreateAnnotation-Main">' +
+ '<h3><span class="Ldt-CreateAnnotation-h3Left">{{l10n.annotate_video}}{{#show_title_field}}</span></h3>' +
+ '<h3><span class="Ldt-CreateAnnotation-h3Left"><input class="Ldt-CreateAnnotation-Title empty" placeholder="{{l10n.type_title}}" />{{/show_title_field}}' +
+ '{{#show_time}}<span class="Ldt-CreateAnnotation-Times"> {{#show_slice}}{{l10n.from_time}} {{/show_slice}}{{^show_slice}}{{l10n.at_time}} {{/show_slice}} <span class="Ldt-CreateAnnotation-Begin">00:00</span>{{/show_time}}' +
+ '{{#show_slice}} {{l10n.to_time}} <span class="Ldt-CreateAnnotation-End">{{end}}</span>{{/show_slice}}</span></span>' +
+ '{{#show_creator_field}}{{l10n.your_name_}} <input class="Ldt-CreateAnnotation-Creator empty" value="{{creator_name}}" {{#creator_field_readonly}}readonly{{/creator_field_readonly}}/>{{/show_creator_field}}</h3>' +
+ '{{#show_controls}}<div class="Ldt-CreateAnnotation-Controls">' +
+ '<span title="{{l10n.in_tooltip}}" class="Ldt-CreateAnnotation-Control-In">In</span>' +
+ '<span title="{{l10n.out_tooltip}}" class="Ldt-CreateAnnotation-Control-Out">Out</span>' +
+ '<span title="{{l10n.play_tooltip}}" class="Ldt-CreateAnnotation-Control-Play">Play</span>' +
+ "</div>{{/show_controls}}" +
+ '<textarea class="Ldt-CreateAnnotation-Description Ldt-TraceMe empty" placeholder="{{#custom_description_placeholder}}{{custom_description_placeholder}}{{/custom_description_placeholder}}{{^custom_description_placeholder}}{{l10n.type_description}}{{/custom_description_placeholder}}"></textarea>' +
+ '{{#show_creator_field}}<div class="Ldt-CreateAnnotation-Avatar"><img src="{{creator_avatar}}" title="{{creator_name}}"></img></div>{{/show_creator_field}}' +
+ '<div class="Ldt-CreateAnnotation-SubmitArea Ldt-TraceMe">' +
+ '{{#preview_mode}}<input type="button" class="Ldt-CreateAnnotation-PreviewSubmit" title="{{l10n.preview_submit}}" value="{{#custom_send_button}}{{custom_send_button}}{{/custom_send_button}}{{^custom_send_button}}{{l10n.submit}}{{/custom_send_button}}" />{{/preview_mode}}' +
+ '{{^preview_mode}}<input type="submit" class="Ldt-CreateAnnotation-Submit" value="{{#custom_send_button}}{{custom_send_button}}{{/custom_send_button}}{{^custom_send_button}}{{l10n.submit}}{{/custom_send_button}}" />{{/preview_mode}}' +
+ '<input type="button" class="Ldt-CreateAnnotation-Cancel" value="{{#custom_cancel_button}}{{custom_cancel_button}}{{/custom_cancel_button}}{{^custom_cancel_button}}{{l10n.cancel}}{{/custom_cancel_button}}" />' +
+ '<div class="Ldt-CreateAnnotation-Begin Ldt-CreateAnnotation-Times">00:00</div>' +
+ "</div>" +
+ '{{#tags.length}}<div class="Ldt-CreateAnnotation-Tags"><div class="Ldt-CreateAnnotation-TagTitle">{{l10n.add_keywords_}}</div><ul class="Ldt-CreateAnnotation-TagList">' +
+ '{{#tags}}<li class="Ldt-CreateAnnotation-TagLi" tag-id="{{id}}" data-text="{{tag_prefix}}{{title}}"><span class="Ldt-CreateAnnotation-TagButton">{{title}}</span></li>{{/tags}}</ul></div>{{/tags.length}}' +
+ '{{#polemics.length}}<div class="Ldt-CreateAnnotation-Polemics"><div class="Ldt-CreateAnnotation-PolemicTitle">{{l10n.add_polemic_keywords_}}</div><ul class="Ldt-CreateAnnotation-PolemicList">' +
+ '{{#polemics}}<li class="Ldt-CreateAnnotation-PolemicLi" style="background-color: {{background_color}}; color: {{text_color}}" data-text="{{keyword}}">{{keyword}}</li>{{/polemics}}</ul></div>{{/polemics.length}}' +
+ '<div style="clear: both;"></div></form>' +
+ '<div class="Ldt-CreateAnnotation-Screen Ldt-CreateAnnotation-Wait"><div class="Ldt-CreateAnnotation-InnerBox">{{l10n.wait_while_processing}}</div></div>' +
+ '<div class="Ldt-CreateAnnotation-Screen Ldt-CreateAnnotation-Error">{{^always_visible}}<a title="{{l10n.close_widget}}" class="Ldt-CreateAnnotation-Close" href="#"></a>{{/always_visible}}<div class="Ldt-CreateAnnotation-InnerBox">{{l10n.error_while_contacting}}</div></div>' +
+ '<div class="Ldt-CreateAnnotation-Screen Ldt-CreateAnnotation-Saved">{{^always_visible}}<a title="{{l10n.close_widget}}" class="Ldt-CreateAnnotation-Close" href="#"></a>{{/always_visible}}<div class="Ldt-CreateAnnotation-InnerBox">{{l10n.annotation_saved}}</div></div>' +
+ "</div></div>";
+
+ draw() {
+ var _this = this;
+
+ this.begin = new ns.Model.Time();
+ this.end = this.source.getDuration();
+
+ this.tag_prefix = this.tag_prefix || "";
+
+ if (this.tag_titles && !this.tags) {
+ if (!(this.tag_titles.length == 1 && this.tag_titles[0] == "")) {
+ this.tags = _(this.tag_titles).map(function (_tag_title) {
+ var _tag,
+ _tags = _this.source.getTags().searchByTitle(_tag_title, true);
+ if (_tags.length) {
+ _tag = _tags[0];
+ } else {
+ _tag = new ns.Model.Tag(false, _this.source);
+ _this.source.getTags().push(_tag);
+ _tag.title = _tag_title;
+ }
+ return _tag;
+ }).value();
+ } else {
+ // we forced no tags if this.tag_titles = [''] (and not false)
+ this.tags = true;
}
- }
- if (!this.tags) {
- this.tags = this.source.getTags()
- .sortBy(function (_tag) {
- return -_tag.getAnnotations().length;
- })
- .slice(0, this.max_tags)
- .map(function(_tag) {
- return _tag;
- });
+ }
+ if (!this.tags) {
+ this.tags = this.source
+ .getTags()
+ .sortBy(function (_tag) {
+ return -_tag.getAnnotations().length;
+ })
+ .slice(0, this.max_tags)
+ .map(function (_tag) {
+ return _tag;
+ });
/* We have to use the map function because Mustache doesn't like our tags object */
- }
- this.record_swf = IriSP.getLib("recordMicSwf");
- this.renderTemplate();
- if (this.show_mic_record) {
- this.recorder = this.$.find("embed")[0];
-
- window.setAudioUrl = function(_url) {
- _this.audio_url = _url;
- }
- }
- if (this.show_slice) {
+ }
+ this.renderTemplate();
+ if (this.show_slice) {
this.insertSubwidget(
- this.$.find(".Ldt-CreateAnnotation-Slice"),
- {
- type: "Slice",
- show_arrow: this.show_arrow,
- annotation_type: this.slice_annotation_type,
- onBoundsChanged: function(_from, _to) {
- _this.setBeginEnd(_from, _to);
- }
+ this.$.find(".Ldt-CreateAnnotation-Slice"),
+ {
+ type: "Slice",
+ show_arrow: this.show_arrow,
+ annotation_type: this.slice_annotation_type,
+ onBoundsChanged: function (_from, _to) {
+ _this.setBeginEnd(_from, _to);
},
- "slice"
+ },
+ "slice"
);
- } else {
+ } else {
if (this.show_arrow) {
- this.insertSubwidget(this.$.find(".Ldt-CreateAnnotation-Arrow"), {type: "Arrow"},"arrow");
+ this.insertSubwidget(
+ this.$.find(".Ldt-CreateAnnotation-Arrow"),
+ { type: "Arrow" },
+ "arrow"
+ );
}
- this.onMediaEvent("timeupdate", function(_time) {
- // Do not update timecode if description is not empty
- if (_this.$.find(".Ldt-CreateAnnotation-Description").val().trim() == "") {
- _this.setBeginEnd(_time, _time);
- if (_this.arrow) {
- _this.arrow.moveToTime(_time);
- }
- };
+ this.onMediaEvent("timeupdate", function (_time) {
+ // Do not update timecode if description is not empty
+ if (
+ _this.$.find(".Ldt-CreateAnnotation-Description").val().trim() == ""
+ ) {
+ _this.setBeginEnd(_time, _time);
+ if (_this.arrow) {
+ _this.arrow.moveToTime(_time);
+ }
+ }
});
- }
- this.$.find(".Ldt-CreateAnnotation-Cancel").click(function() {
+ }
+ this.$.find(".Ldt-CreateAnnotation-Cancel").click(function () {
_this.player.trigger("CreateAnnotation.hide");
- });
- this.$.find(".Ldt-CreateAnnotation-Close").click(function() {
+ });
+ this.$.find(".Ldt-CreateAnnotation-Close").click(function () {
_this.close_after_send
- ? _this.player.trigger("CreateAnnotation.hide")
- : _this.showScreen("Main");
+ ? _this.player.trigger("CreateAnnotation.hide")
+ : _this.showScreen("Main");
return false;
- });
- this.$.find(".Ldt-CreateAnnotation-TagLi, .Ldt-CreateAnnotation-PolemicLi").click(function() {
- _this.addKeyword(IriSP.jQuery(this).attr("data-text"));
+ });
+ this.$.find(
+ ".Ldt-CreateAnnotation-TagLi, .Ldt-CreateAnnotation-PolemicLi"
+ ).click(function () {
+ _this.addKeyword(jQuery(this).attr("data-text"));
return false;
- });
- this.$.find(".Ldt-CreateAnnotation-PolemicLi").each(function() {
- var _el = IriSP.jQuery(this),
- _kw = _el.attr("data-text"),
- _msg = _this.l10n["polemic" + _kw];
+ });
+ this.$.find(".Ldt-CreateAnnotation-PolemicLi").each(function () {
+ var _el = jQuery(this),
+ _kw = _el.attr("data-text"),
+ _msg = _this.l10n["polemic" + _kw];
if (_msg) {
- _el.attr("title",_msg);
+ _el.attr("title", _msg);
}
- });
- this.$.find(".Ldt-CreateAnnotation-Description").bind("change keyup input paste", this.functionWrapper("onDescriptionChange"));
- if (this.show_title_field) {
- this.$.find(".Ldt-CreateAnnotation-Title").bind("change keyup input paste", this.functionWrapper("onTitleChange"));
- }
- if (this.show_creator_field) {
- this.$.find(".Ldt-CreateAnnotation-Creator").bind("change keyup input paste", this.functionWrapper("onCreatorChange"));
- }
- this.$.find("[class^='Ldt-CreateAnnotation-Control-']").click(function() {
- var action = this.className.replace('Ldt-CreateAnnotation-Control-', '');
- switch (action) {
+ });
+ this.$.find(".Ldt-CreateAnnotation-Description").bind(
+ "change keyup input paste",
+ this.functionWrapper("onDescriptionChange")
+ );
+ if (this.show_title_field) {
+ this.$.find(".Ldt-CreateAnnotation-Title").bind(
+ "change keyup input paste",
+ this.functionWrapper("onTitleChange")
+ );
+ }
+ if (this.show_creator_field) {
+ this.$.find(".Ldt-CreateAnnotation-Creator").bind(
+ "change keyup input paste",
+ this.functionWrapper("onCreatorChange")
+ );
+ }
+ this.$.find("[class^='Ldt-CreateAnnotation-Control-']").click(
+ function () {
+ var action = this.className.replace(
+ "Ldt-CreateAnnotation-Control-",
+ ""
+ );
+ switch (action) {
case "In":
- // Set In bound to current player time
- this.setBegin(_this.media.getCurrentTime());
- break;
+ // Set In bound to current player time
+ this.setBegin(_this.media.getCurrentTime());
+ break;
case "Out":
- // Set In bound to current player time
- this.setEnd(_this.media.getCurrentTime() || _this.media.duration);
- break;
+ // Set In bound to current player time
+ this.setEnd(_this.media.getCurrentTime() || _this.media.duration);
+ break;
case "Play":
- this.media.setCurrentTime(_this.begin);
- this.media.play();
- break;
+ this.media.setCurrentTime(_this.begin);
+ this.media.play();
+ break;
+ }
+ return false;
}
- return false;
- });
+ );
- if (this.start_visible) {
+ if (this.start_visible) {
this.show();
- } else {
+ } else {
this.$.hide();
this.hide();
+ }
+
+ this.onMdpEvent("CreateAnnotation.toggle", "toggle");
+ this.onMdpEvent("CreateAnnotation.hide", "hide");
+ this.onMdpEvent("CreateAnnotation.show", "show");
+ this.$.find("form").submit(this.functionWrapper("onSubmit"));
}
-
- this.onMdpEvent("CreateAnnotation.toggle","toggle");
- this.onMdpEvent("CreateAnnotation.hide", "hide");
- this.onMdpEvent("CreateAnnotation.show", "show");
- this.$.find("form").submit(this.functionWrapper("onSubmit"));
-};
-IriSP.Widgets.CreateAnnotation.prototype.setBegin = function (t) {
- this.begin = new IriSP.Model.Time(t || 0);
- this.$.find(".Ldt-CreateAnnotation-Begin").html(this.begin.toString());
-};
+ setBegin(t) {
+ this.begin = new ns.Model.Time(t || 0);
+ this.$.find(".Ldt-CreateAnnotation-Begin").html(this.begin.toString());
+ }
-IriSP.Widgets.CreateAnnotation.prototype.setEnd = function (t) {
- this.end = new IriSP.Model.Time(t || 0);
- this.$.find(".Ldt-CreateAnnotation-End").html(this.end.toString());
-};
+ setEnd(t) {
+ this.end = new ns.Model.Time(t || 0);
+ this.$.find(".Ldt-CreateAnnotation-End").html(this.end.toString());
+ }
+
+ setBeginEnd(begin, end) {
+ this.setBegin(begin);
+ this.setEnd(end);
+ }
-IriSP.Widgets.CreateAnnotation.prototype.setBeginEnd = function (begin, end) {
- this.setBegin(begin);
- this.setEnd(end);
-};
-
-IriSP.Widgets.CreateAnnotation.prototype.showScreen = function(_screenName) {
- this.$.find('.Ldt-CreateAnnotation-' + _screenName).show()
- .siblings().hide();
-};
+ showScreen(_screenName) {
+ this.$.find(".Ldt-CreateAnnotation-" + _screenName)
+ .show()
+ .siblings()
+ .hide();
+ }
-IriSP.Widgets.CreateAnnotation.prototype.show = function() {
- if (!this.visible){
+ show() {
+ if (!this.visible) {
this.visible = true;
- if (this.pause_when_displaying){
- this.media.pause();
+ if (this.pause_when_displaying) {
+ this.media.pause();
}
- this.showScreen('Main');
- this.$.find(".Ldt-CreateAnnotation-Description").val("").css("border-color", "#666666").addClass("empty");
+ this.showScreen("Main");
+ this.$.find(".Ldt-CreateAnnotation-Description")
+ .val("")
+ .css("border-color", "#666666")
+ .addClass("empty");
if (this.show_title_field) {
- this.$.find(".Ldt-CreateAnnotation-Title").val("").css("border-color", "#666666").addClass("empty");
+ this.$.find(".Ldt-CreateAnnotation-Title")
+ .val("")
+ .css("border-color", "#666666")
+ .addClass("empty");
}
if (this.show_creator_field) {
- this.$.find(".Ldt-CreateAnnotation-Creator").val(this.creator_name).css("border-color", "#666666");
- if (!this.creator_name) {
- this.$.find(".Ldt-CreateAnnotation-Creator").addClass("empty");
- }
+ this.$.find(".Ldt-CreateAnnotation-Creator")
+ .val(this.creator_name)
+ .css("border-color", "#666666");
+ if (!this.creator_name) {
+ this.$.find(".Ldt-CreateAnnotation-Creator").addClass("empty");
+ }
}
- this.$.find(".Ldt-CreateAnnotation-TagLi, .Ldt-CreateAnnotation-PolemicLi").removeClass("selected");
+ this.$.find(
+ ".Ldt-CreateAnnotation-TagLi, .Ldt-CreateAnnotation-PolemicLi"
+ ).removeClass("selected");
this.$.slideDown();
if (this.minimize_annotation_widget) {
- this.player.trigger("Annotation.minimize");
+ this.player.trigger("Annotation.minimize");
}
+ }
}
-};
-IriSP.Widgets.CreateAnnotation.prototype.hide = function() {
- if (this.visible){
- if (this.recorder) {
- this.recorder.stopRecord();
- }
+ hide() {
+ if (this.visible) {
if (!this.always_visible) {
- this.visible = false;
- this.$.slideUp();
- if (this.minimize_annotation_widget) {
- this.player.trigger("Annotation.maximize");
- }
+ this.visible = false;
+ this.$.slideUp();
+ if (this.minimize_annotation_widget) {
+ this.player.trigger("Annotation.maximize");
+ }
}
+ }
}
-};
-IriSP.Widgets.CreateAnnotation.prototype.toggle = function() {
- if (!this.always_visible) {
+ toggle() {
+ if (!this.always_visible) {
if (this.visible) {
- this.hide();
+ this.hide();
} else {
- var t = this.media.getCurrentTime() || 0;
- this.setBeginEnd(t, t);
- if (this.slice_widget) {
- this.slice_widget.setBounds(this.begin, this.end);
- }
- this.show();
- // Set focus on textarea
- this.$.find(".Ldt-CreateAnnotation-Description").focus();
+ var t = this.media.getCurrentTime() || 0;
+ this.setBeginEnd(t, t);
+ if (this.slice_widget) {
+ this.slice_widget.setBounds(this.begin, this.end);
+ }
+ this.show();
+ // Set focus on textarea
+ this.$.find(".Ldt-CreateAnnotation-Description").focus();
}
+ }
}
-};
-IriSP.Widgets.CreateAnnotation.prototype.addKeyword = function(_keyword) {
- var _field = this.$.find(".Ldt-CreateAnnotation-Description"),
- _rx = IriSP.Model.regexpFromTextOrArray(_keyword),
+ addKeyword(_keyword) {
+ var _field = this.$.find(".Ldt-CreateAnnotation-Description"),
+ _rx = ns.Model.regexpFromTextOrArray(_keyword),
_contents = _field.val();
- _contents = ( !!_contents.match(_rx)
- ? _contents.replace(_rx,"")
- : _contents + " " + _keyword
- );
- _field.val(_contents.replace(/\s{2,}/g,' ').replace(/(^\s+|\s+$)/g,''));
- this.onDescriptionChange();
-};
+ _contents = !!_contents.match(_rx)
+ ? _contents.replace(_rx, "")
+ : _contents + " " + _keyword;
+ _field.val(_contents.replace(/\s{2,}/g, " ").replace(/(^\s+|\s+$)/g, ""));
+ this.onDescriptionChange();
+ }
-IriSP.Widgets.CreateAnnotation.prototype.pauseOnWrite = function() {
- if (this.pause_on_write && !this.media.getPaused()) {
+ pauseOnWrite() {
+ if (this.pause_on_write && !this.media.getPaused()) {
this.media.pause();
+ }
}
-};
-IriSP.Widgets.CreateAnnotation.prototype.onDescriptionChange = function(e) {
- if (e !== undefined && e.keyCode == 13 && !e.shiftKey) {
+ onDescriptionChange(e) {
+ if (e !== undefined && e.keyCode == 13 && !e.shiftKey) {
// Return: submit. Use shift-Return to insert a LF
this.onSubmit();
return true;
- }
- var _field = this.$.find(".Ldt-CreateAnnotation-Description"),
+ }
+ var _field = this.$.find(".Ldt-CreateAnnotation-Description"),
_contents = _field.val();
- _field.css("border-color", !!_contents ? "#666666" : "#ff0000");
- if (!!_contents) {
+ _field.css("border-color", !!_contents ? "#666666" : "#ff0000");
+ if (!!_contents) {
_field.removeClass("empty");
- } else {
+ } else {
_field.addClass("empty");
- }
- this.$.find(".Ldt-CreateAnnotation-TagLi, .Ldt-CreateAnnotation-PolemicLi").each(function() {
- var _rx = IriSP.Model.regexpFromTextOrArray(IriSP.jQuery(this).attr("data-text"));
+ }
+ this.$.find(
+ ".Ldt-CreateAnnotation-TagLi, .Ldt-CreateAnnotation-PolemicLi"
+ ).each(function () {
+ var _rx = ns.Model.regexpFromTextOrArray(
+ jQuery(this).attr("data-text")
+ );
if (_contents.match(_rx)) {
- IriSP.jQuery(this).addClass("selected");
+ jQuery(this).addClass("selected");
} else {
- IriSP.jQuery(this).removeClass("selected");
+ jQuery(this).removeClass("selected");
}
- });
- this.pauseOnWrite();
- return !!_contents;
-};
+ });
+ this.pauseOnWrite();
+ return !!_contents;
+ }
-IriSP.Widgets.CreateAnnotation.prototype.onTitleChange = function() {
- var _field = this.$.find(".Ldt-CreateAnnotation-Title"),
+ onTitleChange() {
+ var _field = this.$.find(".Ldt-CreateAnnotation-Title"),
_contents = _field.val();
- _field.css("border-color", !!_contents ? "#666666" : "#ff0000");
- if (!!_contents) {
+ _field.css("border-color", !!_contents ? "#666666" : "#ff0000");
+ if (!!_contents) {
_field.removeClass("empty");
- } else {
+ } else {
_field.addClass("empty");
+ }
+ this.pauseOnWrite();
+ return !!_contents;
}
- this.pauseOnWrite();
- return !!_contents;
-};
-
-IriSP.Widgets.CreateAnnotation.prototype.onCreatorChange = function() {
- var _field = this.$.find(".Ldt-CreateAnnotation-Creator"),
+ onCreatorChange() {
+ var _field = this.$.find(".Ldt-CreateAnnotation-Creator"),
_contents = _field.val();
- _field.css("border-color", !!_contents ? "#666666" : "#ff0000");
- if (!!_contents) {
+ _field.css("border-color", !!_contents ? "#666666" : "#ff0000");
+ if (!!_contents) {
_field.removeClass("empty");
- } else {
+ } else {
_field.addClass("empty");
+ }
+ this.pauseOnWrite();
+ return !!_contents;
}
- this.pauseOnWrite();
- return !!_contents;
-};
-IriSP.Widgets.CreateAnnotation.prototype.onSubmit = function() {
- /* If mandatory fields are empty, we cancel the sending */
- if (!this.onDescriptionChange() || (this.show_title_field && !this.onTitleChange()) || (this.show_creator_field && !this.onCreatorChange())) {
+ onSubmit() {
+ /* If mandatory fields are empty, we cancel the sending */
+ if (
+ !this.onDescriptionChange() ||
+ (this.show_title_field && !this.onTitleChange()) ||
+ (this.show_creator_field && !this.onCreatorChange())
+ ) {
return false;
- }
-
- if (this.recorder) {
- this.recorder.stopRecord();
- }
-
- var _this = this,
- _exportedAnnotations = new IriSP.Model.List(this.player.sourceManager), /* We create a List to send to the server that will contains the annotation */
- _export = this.player.sourceManager.newLocalSource({serializer: IriSP.serializers[this.api_serializer]}), /* We create a source object using a specific serializer for export */
- _local_export = this.player.sourceManager.newLocalSource({serializer: IriSP.serializers['ldt_localstorage']}), /* Source object using a specific serializer for local export */
- _annotation = new IriSP.Model.Annotation(false, _export), /* We create an annotation in the source with a generated ID (param. false) */
- _annotationTypes = this.source.getAnnotationTypes().searchByTitle(this.annotation_type, true), /* We get the AnnotationType in which the annotation will be added */
- _annotationType = (_annotationTypes.length ? _annotationTypes[0] : new IriSP.Model.AnnotationType(false, _export)), /* If it doesn't already exists, we create it */
- _url = Mustache.to_html(this.api_endpoint_template, {id: this.source.projectId}); /* We make the url to send the request to, must include project id */
-
- /* If we created an AnnotationType on the spot ... */
- if (!_annotationTypes.length) {
+ }
+
+ var _this = this,
+ _exportedAnnotations = new ns.Model.List(
+ this.player.sourceManager
+ ) /* We create a List to send to the server that will contains the annotation */,
+ _export = this.player.sourceManager.newLocalSource({
+ serializer: ns.serializers[this.api_serializer],
+ }) /* We create a source object using a specific serializer for export */,
+ _local_export = this.player.sourceManager.newLocalSource({
+ serializer: ns.serializers["ldt_localstorage"],
+ }) /* Source object using a specific serializer for local export */,
+ _annotation = new ns.Model.Annotation(
+ false,
+ _export
+ ) /* We create an annotation in the source with a generated ID (param. false) */,
+ _annotationTypes = this.source
+ .getAnnotationTypes()
+ .searchByTitle(
+ this.annotation_type,
+ true
+ ) /* We get the AnnotationType in which the annotation will be added */,
+ _annotationType = _annotationTypes.length
+ ? _annotationTypes[0]
+ : new ns.Model.AnnotationType(
+ false,
+ _export
+ ) /* If it doesn't already exists, we create it */,
+ _url = Mustache.render(this.api_endpoint_template, {
+ id: this.source.projectId,
+ }); /* We make the url to send the request to, must include project id */
+
+ /* If we created an AnnotationType on the spot ... */
+ if (!_annotationTypes.length) {
/* ... We must not send its id to the server ... */
_annotationType.dont_send_id = true;
/* ... And we must include its title. */
_annotationType.title = this.annotation_type;
- }
-
- /*
- * Will fill the generated annotation object's data
- * WARNING: If we're on a MASHUP, these datas must refer the ORIGINAL MEDIA
- * */
- _annotation.setMedia(this.source.currentMedia.id); /* Annotated media ID */
-
- if (this.post_at_segment_time){
- var _currentTime = this.media.getCurrentTime()
- var _segmentsAnnotations = this.source.getAnnotationsByTypeTitle(this.segments_annotation_type)
- var _currentSegments = _segmentsAnnotations.filter(function(_segment){
- return (_currentTime >= _segment.begin && _currentTime <= _segment.end)
+ }
+
+ /*
+ * Will fill the generated annotation object's data
+ * WARNING: If we're on a MASHUP, these datas must refer the ORIGINAL MEDIA
+ * */
+ _annotation.setMedia(
+ this.source.currentMedia.id
+ ); /* Annotated media ID */
+
+ if (this.post_at_segment_time) {
+ var _currentTime = this.media.getCurrentTime();
+ var _segmentsAnnotations = this.source.getAnnotationsByTypeTitle(
+ this.segments_annotation_type
+ );
+ var _currentSegments = _segmentsAnnotations.filter(function (_segment) {
+ return _currentTime >= _segment.begin && _currentTime <= _segment.end;
});
- if (_currentSegments.length == 0){
- _annotation.setBegin(this.begin); /* Widget starting timecode */
- _annotation.setEnd(this.end); /* Widget end timecode */
+ if (_currentSegments.length == 0) {
+ _annotation.setBegin(this.begin); /* Widget starting timecode */
+ _annotation.setEnd(this.end); /* Widget end timecode */
+ } else {
+ _annotation.setBegin(
+ _currentSegments[0].begin
+ ); /* Segment starting timecode */
+ _annotation.setEnd(
+ _currentSegments[0].end
+ ); /* Segment end timecode */
}
- else {
- _annotation.setBegin(_currentSegments[0].begin); /* Segment starting timecode */
- _annotation.setEnd(_currentSegments[0].end); /* Segment end timecode */
- }
- }
- else {
- _annotation.setBeginEnd(this.begin, this.end); /* Widget end/start timecodes */
- }
- _annotation.setAnnotationType(_annotationType.id); /* Annotation type ID */
- if (this.show_title_field) {
+ } else {
+ _annotation.setBeginEnd(
+ this.begin,
+ this.end
+ ); /* Widget end/start timecodes */
+ }
+ _annotation.setAnnotationType(
+ _annotationType.id
+ ); /* Annotation type ID */
+ if (this.show_title_field) {
/* Title field, only if it's visible */
_annotation.title = this.$.find(".Ldt-CreateAnnotation-Title").val();
- }if (this.project_id != ""){
- /* Project id, only if it's been specifiec in the config */
- _annotation.project_id = this.project_id;
- }
- _annotation.created = new Date(); /* Annotation creation date */
- _annotation.description = this.$.find(".Ldt-CreateAnnotation-Description").val(); /* Description field */
-
- var tagIds = Array.prototype.map.call(
+ }
+ if (this.project_id != "") {
+ /* Project id, only if it's been specifiec in the config */
+ _annotation.project_id = this.project_id;
+ }
+ _annotation.created = new Date(); /* Annotation creation date */
+ _annotation.description = this.$.find(
+ ".Ldt-CreateAnnotation-Description"
+ ).val(); /* Description field */
+
+ var tagIds = Array.prototype.map.call(
this.$.find(".Ldt-CreateAnnotation-TagLi.selected"),
- function(el) { return IriSP.jQuery(el).attr("tag-id"); }
- );
-
- IriSP._(_annotation.description.match(/#[^\s#.,;]+/g)).each(function(_tt) {
+ function (el) {
+ return jQuery(el).attr("tag-id");
+ }
+ );
+
+ _(_annotation.description.match(/#[^\s#.,;]+/g)).each(function (_tt) {
var _tag,
- _tag_title = _tt.replace(/^#/,''),
- _tags = _this.source.getTags().searchByTitle(_tag_title, true);
+ _tag_title = _tt.replace(/^#/, ""),
+ _tags = _this.source.getTags().searchByTitle(_tag_title, true);
if (_tags.length) {
- _tag = _tags[0];
+ _tag = _tags[0];
} else {
- _tag = new IriSP.Model.Tag(false, _this.source);
- _this.source.getTags().push(_tag);
- _tag.title = _tag_title;
+ _tag = new ns.Model.Tag(false, _this.source);
+ _this.source.getTags().push(_tag);
+ _tag.title = _tag_title;
}
if (tagIds.indexOf(_tag.id) === -1) {
- tagIds.push(_tag.id);
+ tagIds.push(_tag.id);
}
- });
- _annotation.setTags(IriSP._(tagIds).uniq()); /* Tag ids list */
- if (this.audio_url) {
+ });
+ _annotation.setTags(_(tagIds).uniq()); /* Tag ids list */
+ if (this.audio_url) {
_annotation.audio = {
- src: "mic",
- mimetype: "audio/mp3",
- href: this.audio_url
+ src: "mic",
+ mimetype: "audio/mp3",
+ href: this.audio_url,
};
- }
- if (this.show_creator_field) {
- _annotation.creator = this.$.find(".Ldt-CreateAnnotation-Creator").val();
- } else {
+ }
+ if (this.show_creator_field) {
+ _annotation.creator = this.$.find(
+ ".Ldt-CreateAnnotation-Creator"
+ ).val();
+ } else {
_annotation.creator = this.creator_name;
- }
- _exportedAnnotations.push(_annotation); /* Ajout de l'annotation à la liste à exporter */
-
- if (this.editable_storage != '') {
+ }
+ _exportedAnnotations.push(
+ _annotation
+ ); /* Ajout de l'annotation à la liste à exporter */
+
+ if (this.editable_storage != "") {
// Append to localStorage annotations
// FIXME: handle movie ids
- _local_export.addList("annotation", _exportedAnnotations); /* Ajout de la liste à exporter à l'objet Source */
- _this.source.merge(_local_export); /* On ajoute la nouvelle annotation au recueil original */
+ _local_export.addList(
+ "annotation",
+ _exportedAnnotations
+ ); /* Ajout de la liste à exporter à l'objet Source */
+ _this.source.merge(
+ _local_export
+ ); /* On ajoute la nouvelle annotation au recueil original */
// Import previously saved local annotations
if (window.localStorage[this.editable_storage]) {
- _local_export.deSerialize(window.localStorage[this.editable_storage]);
+ _local_export.deSerialize(window.localStorage[this.editable_storage]);
}
// Save everything back
window.localStorage[_this.editable_storage] = _local_export.serialize();
- _this.player.trigger("AnnotationsList.refresh"); /* On force le rafraîchissement du widget AnnotationsList */
+ _this.player.trigger(
+ "AnnotationsList.refresh"
+ ); /* On force le rafraîchissement du widget AnnotationsList */
_this.player.trigger("Annotation.create", _annotation);
_this.$.find(".Ldt-CreateAnnotation-Description").val("");
- }
-
- if (_url !== "") {
- _exportedAnnotations.push(_annotation); /* We add the annotation in the list to export */
- _export.addList("annotation",_exportedAnnotations); /* We add the list to the source object */
+ }
+
+ if (_url !== "") {
+ _exportedAnnotations.push(
+ _annotation
+ ); /* We add the annotation in the list to export */
+ _export.addList(
+ "annotation",
+ _exportedAnnotations
+ ); /* We add the list to the source object */
var _this = this;
/* We send the AJAX request to the server ! */
- IriSP.jQuery.ajax({
- url: _url,
- type: this.api_method,
- contentType: 'application/json',
- data: _export.serialize(), /* Source is serialized */
- success: function(_data) {
- _this.showScreen('Saved');
- if (_this.after_send_timeout) {
- window.setTimeout(
- function() {
- _this.close_after_send
- ? _this.player.trigger("CreateAnnotation.hide")
- : _this.player.trigger("CreateAnnotation.show");
- },
- _this.after_send_timeout
- );
- }
- _export.getAnnotations().removeElement(_annotation, true); /* We delete the sent annotation to avoid redundancy */
- _export.deSerialize(_data); /* Data deserialization */
- _this.source.merge(_export); /* We merge the deserialized data with the current source data */
- if (_this.pause_on_write && _this.media.getPaused()) {
- _this.media.play();
- }
- _this.player.trigger("AnnotationsList.refresh");
- },
- error: function(_xhr, _error, _thrown) {
- IriSP.log("Error when sending annotation", _thrown);
- _export.getAnnotations().removeElement(_annotation, true);
- _this.showScreen('Error');
- window.setTimeout(function(){
- _this.showScreen("Main")
- },
- (_this.after_send_timeout || 5000));
+ jQuery.ajax({
+ url: _url,
+ type: this.api_method,
+ contentType: "application/json",
+ data: _export.serialize() /* Source is serialized */,
+ success: function (_data) {
+ _this.showScreen("Saved");
+ if (_this.after_send_timeout) {
+ window.setTimeout(function () {
+ _this.close_after_send
+ ? _this.player.trigger("CreateAnnotation.hide")
+ : _this.player.trigger("CreateAnnotation.show");
+ }, _this.after_send_timeout);
}
+ _export
+ .getAnnotations()
+ .removeElement(
+ _annotation,
+ true
+ ); /* We delete the sent annotation to avoid redundancy */
+ _export.deSerialize(_data); /* Data deserialization */
+ _this.source.merge(
+ _export
+ ); /* We merge the deserialized data with the current source data */
+ if (_this.pause_on_write && _this.media.getPaused()) {
+ _this.media.play();
+ }
+ _this.player.trigger("AnnotationsList.refresh");
+ },
+ error: function (_xhr, _error, _thrown) {
+ ns.log("Error when sending annotation", _thrown);
+ _export.getAnnotations().removeElement(_annotation, true);
+ _this.showScreen("Error");
+ window.setTimeout(function () {
+ _this.showScreen("Main");
+ }, _this.after_send_timeout || 5000);
+ },
});
- this.showScreen('Wait');
- };
- return false;
+ this.showScreen("Wait");
+ }
+ return false;
+ }
+ };
};
+export { CreateAnnotation, createAnnotationStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/CreateAnnotation.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,180 @@
+/*
+ *
+ */
+
+.Ldt-CreateAnnotation {
+ border-style: none solid solid;
+ border-width: 1px;
+ border-color: #b7b7b7;
+ padding: 0 1px 1px;
+ margin: 0;
+}
+
+.Ldt-CreateAnnotation-Inner {
+ background: url(img/pinstripe.png); padding: 5px; margin: 0; position: relative;
+}
+
+.Ldt-CreateAnnotation-Inner h3 {
+ margin: 5px 0; font-size: 14px; font-weight: bold; text-align: right; clear:both; color: #0068c4;
+}
+
+.Ldt-CreateAnnotation-h3Left {
+ float: left;
+}
+
+.Ldt-CreateAnnotation-Main {
+ min-height: 50px;
+}
+
+.Ldt-CreateAnnotation-Title, .Ldt-CreateAnnotation-Creator {
+ font-size: 14px;
+ font-weight: bold;
+ color: #0068c4;
+ border: 1px solid #666666;
+ border-radius: 2px;
+}
+
+.Ldt-CreateAnnotation-Title.empty, .Ldt-CreateAnnotation-Creator.empty {
+ font-style: italic;
+ color: #90b0d0;
+}
+
+.Ldt-CreateAnnotation-Times {
+ color: #ff3b77
+}
+
+.Ldt-CreateAnnotation-Submit,
+.Ldt-CreateAnnotation-Cancel,
+.Ldt-CreateAnnotation-PreviewSubmit{
+ position: absolute;
+ bottom: 7px;
+ color: #ffffff;
+ cursor: pointer;
+ height: 50px;
+ width: 50px;
+ padding: 28px 0 0;
+ font-size: 12px;
+ border: none;
+ text-align: center;
+ cursor: pointer;
+}
+
+
+.Ldt-CreateAnnotation-Cancel{
+ right: 7px;
+ background: url('img/cancel_annotation.png');
+}
+
+.Ldt-CreateAnnotation-Submit{
+ right: 67px;
+ background: url('img/submit_annotation.png');
+}
+
+.Ldt-CreateAnnotation-Submit:hover,
+.Ldt-CreateAnnotation-Cancel:hover{
+ background-position: -50px 0;
+}
+
+.Ldt-CreateAnnotation-Description {
+ height: 3em;
+ padding: 2px;
+ resize: none;
+ width: calc(100% - 122px);
+ border: 1px solid #666666;
+ border-radius: 2px;
+}
+
+.Ldt-CreateAnnotation-Description.empty {
+ font-style: italic; color: #999999;
+}
+
+.Ldt-CreateAnnotation-Avatar {
+ float: right;
+ width: 48px;
+ height: 48px;
+ margin: 5px 0;
+ padding: 0 0 0 15px;
+ background: url('img/profile_arrow.png') left no-repeat;
+}
+
+.Ldt-CreateAnnotation-Avatar img {
+ float: right;
+ display: block;
+ max-width: 100%;
+ max-height: 100%;
+ border: 1px solid #bbbbbb;
+}
+
+.Ldt-CreateAnnotation-RecBlock {
+ width: 220px; float: left;
+}
+
+.Ldt-CreateAnnotation-TagTitle, .Ldt-CreateAnnotation-PolemicTitle, .Ldt-CreateAnnotation-RecLabel {
+ display: block; margin: 5px 0 2px; font-size: 12px;
+}
+
+.Ldt-CreateAnnotation-TagList, .Ldt-CreateAnnotation-PolemicList {
+ list-style: none;
+ width: calc(100% - 122px);
+ padding-left: 0px;
+}
+
+li.Ldt-CreateAnnotation-TagLi {
+ display: inline-block; border: none; margin: 0 10px 5px 0; height: 23px; padding: 0 0 0 20px;
+ background: url(img/tag.png) left top no-repeat;
+ cursor: pointer;
+}
+
+.Ldt-CreateAnnotation-TagButton {
+ display: inline-block; font-size: 12px; height: 19px; padding: 4px 5px 0 0; border: none; margin: 0;
+ background: url(img/tag.png) right top no-repeat;
+}
+
+li.Ldt-CreateAnnotation-TagLi:hover {
+ background-position: left -23px;
+}
+
+.Ldt-CreateAnnotation-TagLi:hover .Ldt-CreateAnnotation-TagButton {
+ background-position: right -23px;
+}
+
+li.Ldt-CreateAnnotation-TagLi.selected {
+ background-position: left -46px;
+}
+
+.Ldt-CreateAnnotation-TagLi.selected .Ldt-CreateAnnotation-TagButton {
+ background-position: right -46px;
+}
+
+li.Ldt-CreateAnnotation-PolemicLi {
+ display: inline-block; border: none; margin: 0 5px 0; height: 21px; width: 26px; padding: 2px 0 0;
+ background: url(img/polemic.png) left top no-repeat; font-size: 14px; font-weight: bold; text-align: center;
+ cursor: pointer;
+}
+
+li.Ldt-CreateAnnotation-PolemicLi:hover {
+ background-position: 0 -23px;
+}
+
+li.Ldt-CreateAnnotation-PolemicLi.selected {
+ background-position: 0 -46px;
+}
+
+.Ldt-CreateAnnotation-InnerBox {
+ margin: 20px 50px;
+ border: 1px solid #CCCCCC;
+ padding: 20px;
+ background: #FFFFFF;
+ color: #FF3B77; text-align: center;
+ font-size: 13px; font-weight: bold;
+}
+
+a.Ldt-CreateAnnotation-Close {
+ position: absolute; top: 2px; right: 2px;
+ display: inline-block; width: 17px; height: 17px; margin: 2px;
+ background: url(img/widget-control.png);
+}
+
+a.Ldt-CreateAnnotation-Close:hover {
+ background-position: -17px 0;
+}
\ No newline at end of file
--- a/src/widgets/CurrentSegmentInfobox.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,192 +0,0 @@
-.Ldt-CurrentSegmentInfobox{
- background: url(img/pinstripe.png);
- width: 535px;
- max-height: 280px;
- margin: 0px;
- margin-top: 4px;
- border-style: solid;
- border-width: 1px;
- border-color: #b7b7b7;
-}
-
-.Ldt-CurrentSegmentInfobox-Element{
- margin: 5px;
- vertical-align: top;
-}
-
-.Ldt-CurrentSegmentInfobox-Tags-Ul{
- list-style: none;
- margin: 0px;
-}
-
-.Ldt-CurrentSegmentInfobox-Tags{
- margin: 0px;
-}
-
-.Ldt-CurrentSegmentInfobox-Tags-Li{
- display: inline-block;
- background-color: #ffffff;
- margin: 2px;
- padding: 2px;
- border: solid 1px;
- border-color: #aeaeae;
-}
-
-.Ldt-CurrentSegmentInfobox-Title{
- color: #0068c4;
- font-size: 15px;
- font-weight: bold;
-}
-
-.Ldt-CurrentSegmentInfobox-Description{
- font-size: 13px;
- font-weight: bold;
-}
-
-textarea.Ldt-CurrentSegmentInfobox-DescriptionInput.Ldt-CurrentSegmentInfobox-Description{
- display: inline-block;
- width: 95%;
-}
-
-.Ldt-CurrentSegmentInfobox-Tags{
-}
-
-.Ldt-CurrentSegmentInfobox-NoSegment{
- font-size: 15px;
- font-weight: bold;
-}
-
-.Ldt-CurrentSegmentInfobox-SubmitButton{
- display: inline-block;
- background-color: #d93c71;
- color: #ffffff;
- cursor: pointer;
- height: 14px;
- width: 100px;
- margin: 2px;
- margin-top: 5px;
- padding: 2px;
- font-size: 11px;
- border: 1px solid;
- border-color: #eca3bc #631e34 #36101c #e16e93;
- cursor: pointer;
- text-align: center;
- vertical-align: middle;
-}
-
-.Ldt-CurrentSegmentInfobox-CancelButton{
- display: inline-block;
- background-color: #d93c71;
- color: #ffffff;
- cursor: pointer;
- height: 14px;
- width: 100px;
- margin: 2px;
- margin-top: 5px;
- margin-right: 5px;
- padding: 2px;
- font-size: 11px;
- border: 1px solid;
- border-color: #eca3bc #631e34 #36101c #e16e93;
- cursor: pointer;
- text-align: center;
- vertical-align: middle;
-}
-
-.Ldt-CurrentSegmentInfobox-CreateTagButton{
- display: block;
- background-color: #d93c71;
- color: #ffffff;
- cursor: pointer;
- height: 14px;
- width: 75px;
- margin: 2px;
- padding: 2px;
- font-size: 11px;
- border: 1px solid;
- border-color: #eca3bc #631e34 #36101c #e16e93;
- cursor: pointer;
- text-align: center;
- vertical-align: middle;
-}
-
-.Ldt-CurrentSegmentInfobox-Tags-Li-Input{
- width: 80px;
-}
-
-.Ldt-CurrentSegmentInfobox-EditButton{
- float: right;
- display: inline-block;
- background-color: #d93c71;
- color: #ffffff;
- cursor: pointer;
- height: 18px;
- width: 95px;
- font-size: 14px;
- border: 1px solid;
- border-color: #eca3bc #631e34 #36101c #e16e93;
- cursor: pointer;
- margin-right: 5px;
- margin-left: 5px;
- margin-bottom: 5px;
- margin-top: 5px;
- padding: 4px;
- text-align: center;
- vertical-align: middle;
- line-height: 18px;
-}
-
-.Ldt-CurrentSegmentInfobox-EditButton:hover, .Ldt-CurrentSegmentInfobox-CreateTagInput-Add:hover{
- background-color: #e15581;
- border-color: #222222 #e87d9f #f0adc3 #68273c;
-}
-
-.Ldt-CurrentSegmentInfobox-CreateTagButton:hover, .Ldt-CurrentSegmentInfobox-CancelButton:hover,
-.Ldt-CurrentSegmentInfobox-SubmitButton:hover{
- background-color: #e15581;
- border-color: #222222 #e87d9f #f0adc3 #68273c;
-}
-
-.Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton{
- font-weight: bold;
- color: #d93c71
-}
-
-.Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton:hover{
- color: #e16e93
-}
-
-.Ldt-CurrentSegmentInfobox-FieldsHeader{
- margin: 5px;
-}
-
-.Ldt-CurrentSegmentInfobox-TagsHeader{
- margin-top: 10px;
- margin-left: 5px;
-}
-
-.Ldt-CurrentSegmentInfobox-CreateTagInput{
- border: 2px solid #848484;
- margin: 5px 2px;
- padding: 4px;
-}
-
-.Ldt-CurrentSegmentInfobox-CreateTagInput-Add{
- margin: 5px;
- padding: 4px;
- display: inline-block;
- background-color: #d93c71;
- color: #ffffff;
- cursor: pointer;
- height: 14px;
- width: 14px;
- font-size: 14px;
- font-style: bold;
- border: 1px solid;
- border-color: #eca3bc #631e34 #36101c #e16e93;
- cursor: pointer;
- padding: 4px;
- text-align: center;
- vertical-align: middle;
- line-height: 14px;
-}
\ No newline at end of file
--- a/src/widgets/CurrentSegmentInfobox.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/CurrentSegmentInfobox.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,334 +1,427 @@
/* Widget displays info on the current segment, with possibility of config for editing description and tags */
+// CurrentSegmentInfobox
+
+import currentSegmentInfoboxStyles from "./CurrentSegmentInfobox.module.css";
+import Mustache from "mustache";
+import _ from "lodash";
+
+const CurrentSegmentInfobox = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
+
+ static defaults = {
+ annotation_type: "chap",
+ editable_segments: false,
+ empty_message: false,
+ project_id: false,
+ api_serializer: "ldt_annotate",
+ api_method: "PUT",
+ api_endpoint_template: "",
+ new_tag_button: true,
+ show_headers: false,
+ custom_edit_text: false,
+ empty_description_placeholder: false,
+ };
+
+ static template =
+ '<div class="Ldt-CurrentSegmentInfobox">' +
+ '<div class="Ldt-CurrentSegmentInfobox-SelectedSegment">' +
+ '{{#editable_segments}}<div class="Ldt-CurrentSegmentInfobox-EditButton">{{edit}}</div>{{/editable_segments}}' +
+ '<div class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Title">{{title}}</div>' +
+ '<div class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Description">{{description}}</div>' +
+ '{{^description}}{{^tags.length}}{{#description_placeholder}}<div class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Description-placeholder">{{description_placeholder}}</div>{{/description_placeholder}}{{/tags.length}}{{/description}}' +
+ '<div class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Tags">' +
+ "{{#tags.length}}" +
+ '<ul class="Ldt-CurrentSegmentInfobox-Tags-Ul">' +
+ "{{#tags}}" +
+ "{{#.}}" +
+ '<li class="Ldt-CurrentSegmentInfobox-Tags-Li">' +
+ "<span>{{.}}</span>" +
+ "</li>" +
+ "{{/.}}" +
+ "{{/tags}}" +
+ "</ul>" +
+ "{{/tags.length}}" +
+ "</div>" +
+ "</div>" +
+ "</div>";
+
+ static editTemplate =
+ '<div class="Ldt-CurrentSegmentInfobox">' +
+ '<div class="Ldt-CurrentSegmentInfobox-SelectedSegment">' +
+ '{{#headers}}<div class="Ldt-CurrentSegmentInfobox-FieldsHeader">{{fields_header}}</div>{{/headers}}' +
+ '<input type="text" class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-TitleInput Ldt-CurrentSegmentInfobox-Title" value="{{title}}"></input>' +
+ '<textarea class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-DescriptionInput Ldt-CurrentSegmentInfobox-Description">{{description}}</textarea>' +
+ '<div class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Tags">' +
+ '{{#headers}}<div class="Ldt-CurrentSegmentInfobox-TagsHeader">{{tags_header}}</div>{{/headers}}' +
+ "{{#new_tag_button}}" +
+ '<div class="Ldt-CurrentSegmentInfobox-CreateTagButton">{{new_tag}}</div>' +
+ "{{/new_tag_button}}" +
+ "{{^new_tag_button}}" +
+ '<input class="Ldt-CurrentSegmentInfobox-CreateTagInput" placeholder="{{new_tag}}"></input>' +
+ '<div class="Ldt-CurrentSegmentInfobox-CreateTagInput-Add">+</div>' +
+ "{{/new_tag_button}}" +
+ '<ul class="Ldt-CurrentSegmentInfobox-Tags-Ul">' +
+ "{{#tags}}" +
+ "{{#.}}" +
+ '<li class="Ldt-CurrentSegmentInfobox-Tags-Li">' +
+ '<input type="text" class="Ldt-CurrentSegmentInfobox-Tags-Li-Input" value="{{.}}"></input>' +
+ '<div class="Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton">{{delete_tag}}</div>' +
+ "</li>" +
+ "{{/.}}" +
+ "{{/tags}}" +
+ "</ul>" +
+ "</div>" +
+ '<div class="Ldt-CurrentSegmentInfobox-SubmitButton">{{submit}}</div>' +
+ '<div class="Ldt-CurrentSegmentInfobox-CancelButton">{{cancel}}</div>' +
+ "</div>" +
+ "</div>";
-IriSP.Widgets.CurrentSegmentInfobox = function(player, config){
- IriSP.Widgets.Widget.call(this, player, config);
-};
+ static messages = {
+ fr: {
+ submit: "Soumettre",
+ cancel: "Annuler",
+ edit: "Editer",
+ new_tag: "Nouveau tag",
+ delete_tag: "Supprimer",
+ fields_header: "Commentaire associé à ce segment",
+ tags_header: "Mots-clés associés à ce segment",
+ empty: "Le player vidéo ne lit actuellement aucun segment",
+ },
+ en: {
+ submit: "Submit",
+ cancel: "Cancel",
+ edit: "Edit",
+ new_tag: "New tag",
+ delete_tag: "Delete tag",
+ fields_header: "Current segment content",
+ tags_header: "Current segment tags",
+ empty: "The player currently doesn't read any segment",
+ },
+ };
-IriSP.Widgets.CurrentSegmentInfobox.prototype = new IriSP.Widgets.Widget();
+ draw() {
+ var _this = this;
+ this.segments = this.getWidgetAnnotations();
+ this.renderTemplate();
+ this.currentSegment = false;
+ this.clearBox();
+ this.refresh();
+ this.onMediaEvent("timeupdate", "refresh");
+ this.onMediaEvent("settimerange", function (_timeRange) {
+ var _segmentBegin = _timeRange[0],
+ _segmentEnd = _timeRange[1],
+ _list = _this.segments.filter(function (_segment) {
+ return (
+ _segment.begin.milliseconds == _segmentBegin.milliseconds &&
+ _segment.end.milliseconds == _segmentEnd.milliseconds
+ );
+ });
+ if (_list.length > 0) {
+ _this.$.toggleClass("editing", false);
+ if (_this.currentSegment.id != _list[0].id) {
+ _this.currentSegment = _list[0];
+ _data = {
+ editable_segments: _this.editable_segments,
+ edit: _this.custom_edit_text
+ ? _this.custom_edit_text
+ : _this.l10n.edit,
+ title: _this.currentSegment.title,
+ description: _this.currentSegment.description,
+ description_placeholder: _this.empty_description_placeholder,
+ tags: _this.currentSegment.getTagTexts(),
+ };
+ _this.$.html(Mustache.render(_this.template, _data));
+ if (_this.editable_segments && _this.currentSegment) {
+ _this.$.find(".Ldt-CurrentSegmentInfobox").click(
+ _this.functionWrapper("enableEditMode")
+ );
+ }
+ }
+ }
+ });
+
+ if (this.editable_segments && this.currentSegment) {
+ this.$.find(".Ldt-CurrentSegmentInfobox").click(
+ _this.functionWrapper("enableEditMode")
+ );
+ }
+ }
+
+ enableEditMode() {
+ var _this = this;
+ if (this.currentSegment) {
+ _data = {
+ title: this.currentSegment.title,
+ description: this.currentSegment.description,
+ tags: this.currentSegment.getTagTexts(),
+ submit: this.l10n.submit,
+ cancel: this.l10n.cancel,
+ headers: this.show_headers,
+ tags_header: this.custom_tags_header
+ ? this.custom_tags_header
+ : this.l10n.tags_header,
+ fields_header: this.custom_fields_header
+ ? this.custom_fields_header
+ : this.l10n.fields_header,
+ new_tag: this.l10n.new_tag,
+ delete_tag: this.l10n.delete_tag,
+ new_tag_button: this.new_tag_button,
+ };
+ this.$.toggleClass("editing", true);
+ this.$.html(Mustache.render(this.editTemplate, _data));
+ this.$.find(".Ldt-CurrentSegmentInfobox-CancelButton").click(
+ this.functionWrapper("disableEditMode")
+ );
+ if (this.new_tag_button) {
+ this.$.find(".Ldt-CurrentSegmentInfobox-CreateTagButton").click(
+ this.functionWrapper("insertTagInput")
+ );
+ } else {
+ this.$.find(".Ldt-CurrentSegmentInfobox-CreateTagInput").keypress(
+ this.functionWrapper("insertTagInputKeypress")
+ );
+ this.$.find(".Ldt-CurrentSegmentInfobox-CreateTagInput-Add").click(
+ this.functionWrapper("insertTagInputKeypress")
+ );
+ }
+ this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton").click(
+ this.functionWrapper("deleteTagInput")
+ );
+ this.$.find(".Ldt-CurrentSegmentInfobox-SubmitButton").click(
+ this.functionWrapper("onSubmit")
+ );
+ }
+ }
-IriSP.Widgets.CurrentSegmentInfobox.prototype.defaults = {
- annotation_type: "chap",
- editable_segments: false,
- empty_message: false,
- project_id: false,
- api_serializer: "ldt_annotate",
- api_method: "PUT",
- api_endpoint_template: "",
- new_tag_button: true,
- show_headers: false,
- custom_edit_text: false,
- empty_description_placeholder: false,
+ disableEditMode() {
+ if (this.currentSegment) {
+ _data = {
+ editable_segments: this.editable_segments,
+ edit: this.custom_edit_text ? this.custom_edit_text : this.l10n.edit,
+ title: this.currentSegment.title,
+ description: this.currentSegment.description,
+ description_placeholder: this.empty_description_placeholder,
+ tags: this.currentSegment.getTagTexts(),
+ };
+ this.$.toggleClass("editing", false);
+ this.$.html(Mustache.render(this.template, _data));
+ this.$.find(".Ldt-CurrentSegmentInfobox").click(
+ this.functionWrapper("enableEditMode")
+ );
+ }
+ }
+
+ insertTagInput() {
+ if (
+ !this.currentSegment.getTagTexts().length &&
+ !this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Ul").length
+ ) {
+ this.$.find(".Ldt-CurrentSegmentInfobox-Tags").prepend(
+ '<ul class="Ldt-CurrentSegmentInfobox-Tags-Ul"></ul>'
+ );
+ }
+ this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Ul").append(
+ '<li class="Ldt-CurrentSegmentInfobox-Tags-Li">' +
+ '<input type="text" class="Ldt-CurrentSegmentInfobox-Tags-Li-Input" value=""></input>' +
+ '<div class="Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton">' +
+ this.l10n.delete_tag +
+ "</div>" +
+ "</li>"
+ );
+ this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton").click(
+ this.functionWrapper("deleteTagInput")
+ );
+ }
+
+ insertTagInputKeypress(event) {
+ var keycode = event.keyCode ? event.keyCode : event.which;
+ if (keycode == "13" || event.type == "click") {
+ if (
+ !this.currentSegment.getTagTexts().length &&
+ !this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Ul").length
+ ) {
+ this.$.find(".Ldt-CurrentSegmentInfobox-Tags").prepend(
+ '<ul class="Ldt-CurrentSegmentInfobox-Tags-Ul"></ul>'
+ );
+ }
+ this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Ul").append(
+ '<li class="Ldt-CurrentSegmentInfobox-Tags-Li">' +
+ '<input type="text" class="Ldt-CurrentSegmentInfobox-Tags-Li-Input" value="' +
+ this.$.find(".Ldt-CurrentSegmentInfobox-CreateTagInput").val() +
+ '"></input>' +
+ '<div class="Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton">' +
+ this.l10n.delete_tag +
+ "</div>" +
+ "</li>"
+ );
+ this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton").click(
+ this.functionWrapper("deleteTagInput")
+ );
+ this.$.find(".Ldt-CurrentSegmentInfobox-CreateTagInput").val("");
+ return false;
+ }
+ }
+
+ deleteTagInput(clickEvent) {
+ $(clickEvent.currentTarget).parent().remove();
+ }
+
+ onSubmit() {
+ new_tags_titles = this.$.find(
+ ".Ldt-CurrentSegmentInfobox-Tags-Li-Input"
+ ).map(function () {
+ if ($(this).val()) {
+ return $(this).val();
+ }
+ });
+ new_title = this.$.find(".Ldt-CurrentSegmentInfobox-TitleInput").val();
+ new_description = this.$.find(
+ ".Ldt-CurrentSegmentInfobox-DescriptionInput"
+ ).val();
+
+ var _this = this,
+ _exportedAnnotations = new ns.Model.List(
+ this.player.sourceManager
+ ) /* We create an Annotations List to send to the server */,
+ _export = this.player.sourceManager.newLocalSource({
+ serializer: ns.serializers[this.api_serializer],
+ }) /* We create a source object using a specific serializer for export */,
+ _annotation = new ns.Model.Annotation(
+ this.currentSegment.id,
+ _export
+ ); /* We create an annotation in the source with a generated ID (param. false) */
+
+ _annotation.setAnnotationType(this.currentSegment.getAnnotationType().id);
+ _annotation.setMedia(this.currentSegment.getMedia().id);
+ _annotation.setBegin(this.currentSegment.begin);
+ _annotation.setEnd(this.currentSegment.end);
+ _annotation.created = this.currentSegment.created;
+ _annotation.creator = this.currentSegment.creator;
+ _annotation.title = new_title; /* Title field */
+ _annotation.description = new_description; /* Description field */
+ var _tagIds = _(new_tags_titles).map(function (_title) {
+ var _tags = _this.source.getTags(true).searchByTitle(_title, true);
+ if (_tags.length) {
+ var _tag = _tags[0];
+ } else {
+ _tag = new ns.Model.Tag(_title.replace(/\W/g, "_"), _this.source);
+ _tag.title = _title;
+ _this.source.getTags().push(_tag);
+ }
+ return _tag.id;
+ }).value();
+ _annotation.setTags(_tagIds);
+ _annotation.project_id = this.project_id;
+
+ _exportedAnnotations.push(
+ _annotation
+ ); /* We add the annotation in the list to export */
+ _export.addList(
+ "annotation",
+ _exportedAnnotations
+ ); /* We add the list to the source object */
+
+ _url = Mustache.render(this.api_endpoint_template, {
+ annotation_id: this.currentSegment.id,
+ });
+
+ ns.jQuery.ajax({
+ url: _url,
+ type: this.api_method,
+ contentType: "application/json",
+ data: _export.serialize() /* Source is serialized */,
+ success: function (_data) {
+ _export
+ .getAnnotations()
+ .removeElement(
+ _annotation,
+ true
+ ); /* We delete the sent annotation to avoid redundancy */
+ _export.deSerialize(_data); /* Data deserialization */
+ _this.source.merge(
+ _export
+ ); /* We merge the deserialized data with the current source data */
+ _this.segments.forEach(function (_segment) {
+ if (_segment.id == _annotation.id) {
+ _this.segments.removeElement(_segment);
+ }
+ });
+ _this.segments.push(_annotation);
+ _this.currentSegment = _annotation;
+ _data = {
+ editable_segments: _this.editable_segments,
+ edit: _this.custom_edit_text
+ ? _this.custom_edit_text
+ : _this.l10n.edit,
+ title: _this.currentSegment.title,
+ description: _this.currentSegment.description,
+ description_placeholder: _this.empty_description_placeholder,
+ tags: _this.currentSegment.getTagTexts(),
+ };
+ _this.$.html(Mustache.render(_this.template, _data));
+ if (_this.editable_segments && _this.currentSegment) {
+ _this.$.find(".Ldt-CurrentSegmentInfobox").click(
+ _this.functionWrapper("enableEditMode")
+ );
+ }
+ _this.$.toggleClass("editing", false);
+ },
+ error: function (_xhr, _error, _thrown) {
+ ns.log("Error when sending annotation", _thrown);
+ _export.getAnnotations().removeElement(_annotation, true);
+ },
+ });
+ }
+
+ refresh() {
+ if (!this.media.getTimeRange()) {
+ var _currentTime = this.media.getCurrentTime();
+ var _list = this.segments.filter(function (_segment) {
+ return _segment.begin <= _currentTime && _segment.end >= _currentTime;
+ });
+
+ if (_list.length > 0) {
+ if (this.currentSegment.id != _list[0].id) {
+ this.currentSegment = _list[0];
+ _data = {
+ editable_segments: this.editable_segments,
+ edit: this.custom_edit_text
+ ? this.custom_edit_text
+ : this.l10n.edit,
+ title: this.currentSegment.title,
+ description: this.currentSegment.description,
+ description_placeholder: this.empty_description_placeholder,
+ tags: this.currentSegment.getTagTexts(),
+ };
+ this.$.html(Mustache.render(this.template, _data));
+ if (this.editable_segments && this.currentSegment) {
+ this.$.find(".Ldt-CurrentSegmentInfobox").click(
+ this.functionWrapper("enableEditMode")
+ );
+ }
+ }
+ } else {
+ this.currentSegment = false;
+ this.clearBox();
+ }
+ }
+ }
+
+ clearBox() {
+ var _empty_message = this.l10n.empty;
+ if (this.empty_message) {
+ _empty_message = this.empty_message;
+ }
+ this.$.find(".Ldt-CurrentSegmentInfobox").html(
+ "<div class='Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-NoSegment'>" +
+ _empty_message +
+ "</div>"
+ );
+ }
+ };
};
-IriSP.Widgets.CurrentSegmentInfobox.prototype.template =
- '<div class="Ldt-CurrentSegmentInfobox">'
- + '<div class="Ldt-CurrentSegmentInfobox-SelectedSegment">'
- + '{{#editable_segments}}<div class="Ldt-CurrentSegmentInfobox-EditButton">{{edit}}</div>{{/editable_segments}}'
- + '<div class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Title">{{title}}</div>'
- + '<div class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Description">{{description}}</div>'
- + '{{^description}}{{^tags.length}}{{#description_placeholder}}<div class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Description-placeholder">{{description_placeholder}}</div>{{/description_placeholder}}{{/tags.length}}{{/description}}'
- + '<div class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Tags">'
- + '{{#tags.length}}'
- + '<ul class="Ldt-CurrentSegmentInfobox-Tags-Ul">'
- + '{{#tags}}'
- + '{{#.}}'
- + '<li class="Ldt-CurrentSegmentInfobox-Tags-Li">'
- + '<span>{{.}}</span>'
- + '</li>'
- + '{{/.}}'
- + '{{/tags}}'
- + '</ul>'
- + '{{/tags.length}}'
- + '</div>'
- + '</div>'
- + '</div>'
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.editTemplate =
- '<div class="Ldt-CurrentSegmentInfobox">'
- + '<div class="Ldt-CurrentSegmentInfobox-SelectedSegment">'
- + '{{#headers}}<div class="Ldt-CurrentSegmentInfobox-FieldsHeader">{{fields_header}}</div>{{/headers}}'
- + '<input type="text" class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-TitleInput Ldt-CurrentSegmentInfobox-Title" value="{{title}}"></input>'
- + '<textarea class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-DescriptionInput Ldt-CurrentSegmentInfobox-Description">{{description}}</textarea>'
- + '<div class="Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Tags">'
- + '{{#headers}}<div class="Ldt-CurrentSegmentInfobox-TagsHeader">{{tags_header}}</div>{{/headers}}'
- + '{{#new_tag_button}}'
- + '<div class="Ldt-CurrentSegmentInfobox-CreateTagButton">{{new_tag}}</div>'
- + '{{/new_tag_button}}'
- + '{{^new_tag_button}}'
- + '<input class="Ldt-CurrentSegmentInfobox-CreateTagInput" placeholder="{{new_tag}}"></input>'
- + '<div class="Ldt-CurrentSegmentInfobox-CreateTagInput-Add">+</div>'
- + '{{/new_tag_button}}'
- + '<ul class="Ldt-CurrentSegmentInfobox-Tags-Ul">'
- + '{{#tags}}'
- + '{{#.}}'
- + '<li class="Ldt-CurrentSegmentInfobox-Tags-Li">'
- + '<input type="text" class="Ldt-CurrentSegmentInfobox-Tags-Li-Input" value="{{.}}"></input>'
- + '<div class="Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton">{{delete_tag}}</div>'
- + '</li>'
- + '{{/.}}'
- + '{{/tags}}'
- + '</ul>'
- + '</div>'
- + '<div class="Ldt-CurrentSegmentInfobox-SubmitButton">{{submit}}</div>'
- + '<div class="Ldt-CurrentSegmentInfobox-CancelButton">{{cancel}}</div>'
- + '</div>'
- + '</div>'
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.messages = {
- fr : {
- submit : "Soumettre",
- cancel : "Annuler",
- edit : "Editer",
- new_tag : "Nouveau tag",
- delete_tag : "Supprimer",
- fields_header : "Commentaire associé à ce segment",
- tags_header : "Mots-clés associés à ce segment",
- empty : "Le player vidéo ne lit actuellement aucun segment"
- },
- en: {
- submit : "Submit",
- cancel : "Cancel",
- edit : "Edit",
- new_tag : "New tag",
- delete_tag : "Delete tag",
- fields_header : "Current segment content",
- tags_header : "Current segment tags",
- empty : "The player currently doesn't read any segment"
- }
-}
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.draw = function() {
- var _this = this;
- this.segments = this.getWidgetAnnotations();
- this.renderTemplate();
- this.currentSegment = false;
- this.clearBox();
- this.refresh();
- this.onMediaEvent("timeupdate", "refresh");
- this.onMediaEvent("settimerange", function(_timeRange){
- var _segmentBegin = _timeRange[0],
- _segmentEnd = _timeRange[1],
- _list = _this.segments.filter(function(_segment){
- return _segment.begin.milliseconds == _segmentBegin.milliseconds && _segment.end.milliseconds == _segmentEnd.milliseconds
- });
- if (_list.length >0){
- _this.$.toggleClass("editing", false);
- if (_this.currentSegment.id != _list[0].id){
- _this.currentSegment = _list[0];
- _data = {
- editable_segments: _this.editable_segments,
- edit: _this.custom_edit_text ? _this.custom_edit_text : _this.l10n.edit,
- title: _this.currentSegment.title,
- description : _this.currentSegment.description,
- description_placeholder : _this.empty_description_placeholder,
- tags : _this.currentSegment.getTagTexts()
- }
- _this.$.html(Mustache.to_html(_this.template, _data))
- if(_this.editable_segments&&_this.currentSegment){
- _this.$.find(".Ldt-CurrentSegmentInfobox").click(_this.functionWrapper("enableEditMode"));
- }
- }
- }
- });
-
- if(this.editable_segments&&this.currentSegment){
- this.$.find(".Ldt-CurrentSegmentInfobox").click(_this.functionWrapper("enableEditMode"));
- }
-}
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.enableEditMode = function() {
- var _this = this;
- if(this.currentSegment){
- _data = {
- title: this.currentSegment.title,
- description : this.currentSegment.description,
- tags : this.currentSegment.getTagTexts(),
- submit : this.l10n.submit,
- cancel : this.l10n.cancel,
- headers : this.show_headers,
- tags_header : this.custom_tags_header ? this.custom_tags_header : this.l10n.tags_header,
- fields_header : this.custom_fields_header ? this.custom_fields_header : this.l10n.fields_header,
- new_tag : this.l10n.new_tag,
- delete_tag : this.l10n.delete_tag,
- new_tag_button : this.new_tag_button,
- }
- this.$.toggleClass("editing", true);
- this.$.html(Mustache.to_html(this.editTemplate, _data));
- this.$.find(".Ldt-CurrentSegmentInfobox-CancelButton").click(this.functionWrapper("disableEditMode"));
- if (this.new_tag_button){
- this.$.find(".Ldt-CurrentSegmentInfobox-CreateTagButton").click(this.functionWrapper("insertTagInput"));
- } else {
- this.$.find(".Ldt-CurrentSegmentInfobox-CreateTagInput").keypress(this.functionWrapper("insertTagInputKeypress"));
- this.$.find(".Ldt-CurrentSegmentInfobox-CreateTagInput-Add").click(this.functionWrapper("insertTagInputKeypress"));
- }
- this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton").click(this.functionWrapper("deleteTagInput"));
- this.$.find(".Ldt-CurrentSegmentInfobox-SubmitButton").click(this.functionWrapper("onSubmit"))
- }
-}
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.disableEditMode = function() {
- if(this.currentSegment){
- _data = {
- editable_segments: this.editable_segments,
- edit: this.custom_edit_text ? this.custom_edit_text : this.l10n.edit,
- title: this.currentSegment.title,
- description : this.currentSegment.description,
- description_placeholder : this.empty_description_placeholder,
- tags : this.currentSegment.getTagTexts()
- }
- this.$.toggleClass("editing", false);
- this.$.html(Mustache.to_html(this.template, _data));
- this.$.find(".Ldt-CurrentSegmentInfobox").click(this.functionWrapper("enableEditMode"));
- }
-}
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.insertTagInput = function() {
- if((!this.currentSegment.getTagTexts().length)&&(!this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Ul").length)){
- this.$.find(".Ldt-CurrentSegmentInfobox-Tags").prepend('<ul class="Ldt-CurrentSegmentInfobox-Tags-Ul"></ul>')
- }
- this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Ul").append(
- '<li class="Ldt-CurrentSegmentInfobox-Tags-Li">'
- +'<input type="text" class="Ldt-CurrentSegmentInfobox-Tags-Li-Input" value=""></input>'
- +'<div class="Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton">'+this.l10n.delete_tag+'</div>'
- +'</li>');
- this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton").click(this.functionWrapper("deleteTagInput"));
-}
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.insertTagInputKeypress = function(event) {
- var keycode = (event.keyCode ? event.keyCode : event.which);
- if(keycode == '13' || event.type == 'click'){
- if((!this.currentSegment.getTagTexts().length)&&(!this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Ul").length)){
- this.$.find(".Ldt-CurrentSegmentInfobox-Tags").prepend('<ul class="Ldt-CurrentSegmentInfobox-Tags-Ul"></ul>')
- }
- this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Ul").append(
- '<li class="Ldt-CurrentSegmentInfobox-Tags-Li">'
- +'<input type="text" class="Ldt-CurrentSegmentInfobox-Tags-Li-Input" value="'+ this.$.find(".Ldt-CurrentSegmentInfobox-CreateTagInput").val() +'"></input>'
- +'<div class="Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton">'+this.l10n.delete_tag+'</div>'
- +'</li>');
- this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton").click(this.functionWrapper("deleteTagInput"));
- this.$.find(".Ldt-CurrentSegmentInfobox-CreateTagInput").val("");
- return false;
- }
-}
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.deleteTagInput = function(clickEvent) {
- $(clickEvent.currentTarget).parent().remove();
-}
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.onSubmit = function() {
- new_tags_titles = this.$.find(".Ldt-CurrentSegmentInfobox-Tags-Li-Input").map(function(){
- if($(this).val()){
- return $(this).val()
- }
- });
- new_title = this.$.find(".Ldt-CurrentSegmentInfobox-TitleInput").val()
- new_description = this.$.find(".Ldt-CurrentSegmentInfobox-DescriptionInput").val()
-
- var _this = this,
- _exportedAnnotations = new IriSP.Model.List(this.player.sourceManager), /* We create an Annotations List to send to the server */
- _export = this.player.sourceManager.newLocalSource({serializer: IriSP.serializers[this.api_serializer]}), /* We create a source object using a specific serializer for export */
- _annotation = new IriSP.Model.Annotation(this.currentSegment.id, _export); /* We create an annotation in the source with a generated ID (param. false) */
-
- _annotation.setAnnotationType(this.currentSegment.getAnnotationType().id);
- _annotation.setMedia(this.currentSegment.getMedia().id);
- _annotation.setBegin(this.currentSegment.begin);
- _annotation.setEnd(this.currentSegment.end);
- _annotation.created = this.currentSegment.created;
- _annotation.creator = this.currentSegment.creator;
- _annotation.title = new_title /* Title field */
- _annotation.description = new_description /* Description field */
- var _tagIds = IriSP._(new_tags_titles).map(function(_title) {
- var _tags = _this.source.getTags(true).searchByTitle(_title, true);
- if (_tags.length) {
- var _tag = _tags[0];
- }
- else {
- _tag = new IriSP.Model.Tag(_title.replace(/\W/g,'_'), _this.source);
- _tag.title = _title;
- _this.source.getTags().push(_tag);
- }
- return _tag.id;
- });
- _annotation.setTags(_tagIds);
- _annotation.project_id = this.project_id;
-
- _exportedAnnotations.push(_annotation); /* We add the annotation in the list to export */
- _export.addList("annotation",_exportedAnnotations); /* We add the list to the source object */
-
- _url = Mustache.to_html(this.api_endpoint_template, {annotation_id: this.currentSegment.id});
-
- IriSP.jQuery.ajax({
- url: _url,
- type: this.api_method,
- contentType: 'application/json',
- data: _export.serialize(), /* Source is serialized */
- success: function(_data) {
- _export.getAnnotations().removeElement(_annotation, true); /* We delete the sent annotation to avoid redundancy */
- _export.deSerialize(_data); /* Data deserialization */
- _this.source.merge(_export); /* We merge the deserialized data with the current source data */
- _this.segments.forEach(function(_segment){
- if (_segment.id == _annotation.id){
- _this.segments.removeElement(_segment)
- }
- })
- _this.segments.push(_annotation)
- _this.currentSegment = _annotation
- _data = {
- editable_segments: _this.editable_segments,
- edit: _this.custom_edit_text ? _this.custom_edit_text : _this.l10n.edit,
- title: _this.currentSegment.title,
- description : _this.currentSegment.description,
- description_placeholder : _this.empty_description_placeholder,
- tags : _this.currentSegment.getTagTexts()
- }
- _this.$.html(Mustache.to_html(_this.template, _data))
- if(_this.editable_segments&&_this.currentSegment){
- _this.$.find(".Ldt-CurrentSegmentInfobox").click(_this.functionWrapper("enableEditMode"));
- }
- _this.$.toggleClass("editing", false);
- },
- error: function(_xhr, _error, _thrown) {
- IriSP.log("Error when sending annotation", _thrown);
- _export.getAnnotations().removeElement(_annotation, true);
- }
- });
-}
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.refresh = function() {
- if(!this.media.getTimeRange()){
- var _currentTime = this.media.getCurrentTime();
- var _list = this.segments.filter(function(_segment){
- return (_segment.begin <= _currentTime && _segment.end >= _currentTime);
- })
-
- if (_list.length > 0){
- if (this.currentSegment.id != _list[0].id){
- this.currentSegment = _list[0];
- _data = {
- editable_segments: this.editable_segments,
- edit: this.custom_edit_text ? this.custom_edit_text : this.l10n.edit,
- title: this.currentSegment.title,
- description : this.currentSegment.description,
- description_placeholder : this.empty_description_placeholder,
- tags : this.currentSegment.getTagTexts()
- }
- this.$.html(Mustache.to_html(this.template, _data))
- if(this.editable_segments&&this.currentSegment){
- this.$.find(".Ldt-CurrentSegmentInfobox").click(this.functionWrapper("enableEditMode"));
- }
- }
- }
- else {
- this.currentSegment = false;
- this.clearBox();
- }
- }
-}
-
-IriSP.Widgets.CurrentSegmentInfobox.prototype.clearBox = function(){
- var _empty_message = this.l10n.empty
- if (this.empty_message) {
- _empty_message = this.empty_message
- }
- this.$.find(".Ldt-CurrentSegmentInfobox").html("<div class='Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-NoSegment'>"+_empty_message+"</div>");
-}
\ No newline at end of file
+export { CurrentSegmentInfobox, currentSegmentInfoboxStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/CurrentSegmentInfobox.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,189 @@
+.Ldt-CurrentSegmentInfobox{
+ background: url(img/pinstripe.png);
+ width: 535px;
+ max-height: 280px;
+ margin: 0px;
+ margin-top: 4px;
+ border-style: solid;
+ border-width: 1px;
+ border-color: #b7b7b7;
+}
+
+.Ldt-CurrentSegmentInfobox-Element{
+ margin: 5px;
+ vertical-align: top;
+}
+
+.Ldt-CurrentSegmentInfobox-Tags-Ul{
+ list-style: none;
+ margin: 0px;
+}
+
+.Ldt-CurrentSegmentInfobox-Tags{
+ margin: 0px;
+}
+
+.Ldt-CurrentSegmentInfobox-Tags-Li{
+ display: inline-block;
+ background-color: #ffffff;
+ margin: 2px;
+ padding: 2px;
+ border: solid 1px;
+ border-color: #aeaeae;
+}
+
+.Ldt-CurrentSegmentInfobox-Title{
+ color: #0068c4;
+ font-size: 15px;
+ font-weight: bold;
+}
+
+.Ldt-CurrentSegmentInfobox-Description{
+ font-size: 13px;
+ font-weight: bold;
+}
+
+textarea.Ldt-CurrentSegmentInfobox-DescriptionInput.Ldt-CurrentSegmentInfobox-Description{
+ display: inline-block;
+ width: 95%;
+}
+
+.Ldt-CurrentSegmentInfobox-NoSegment{
+ font-size: 15px;
+ font-weight: bold;
+}
+
+.Ldt-CurrentSegmentInfobox-SubmitButton{
+ display: inline-block;
+ background-color: #d93c71;
+ color: #ffffff;
+ cursor: pointer;
+ height: 14px;
+ width: 100px;
+ margin: 2px;
+ margin-top: 5px;
+ padding: 2px;
+ font-size: 11px;
+ border: 1px solid;
+ border-color: #eca3bc #631e34 #36101c #e16e93;
+ cursor: pointer;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.Ldt-CurrentSegmentInfobox-CancelButton{
+ display: inline-block;
+ background-color: #d93c71;
+ color: #ffffff;
+ cursor: pointer;
+ height: 14px;
+ width: 100px;
+ margin: 2px;
+ margin-top: 5px;
+ margin-right: 5px;
+ padding: 2px;
+ font-size: 11px;
+ border: 1px solid;
+ border-color: #eca3bc #631e34 #36101c #e16e93;
+ cursor: pointer;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.Ldt-CurrentSegmentInfobox-CreateTagButton{
+ display: block;
+ background-color: #d93c71;
+ color: #ffffff;
+ cursor: pointer;
+ height: 14px;
+ width: 75px;
+ margin: 2px;
+ padding: 2px;
+ font-size: 11px;
+ border: 1px solid;
+ border-color: #eca3bc #631e34 #36101c #e16e93;
+ cursor: pointer;
+ text-align: center;
+/* vertical-align: middle; */
+}
+
+.Ldt-CurrentSegmentInfobox-Tags-Li-Input{
+ width: 80px;
+}
+
+.Ldt-CurrentSegmentInfobox-EditButton{
+ float: right;
+ display: inline-block;
+ background-color: #d93c71;
+ color: #ffffff;
+ cursor: pointer;
+ height: 18px;
+ width: 95px;
+ font-size: 14px;
+ border: 1px solid;
+ border-color: #eca3bc #631e34 #36101c #e16e93;
+ cursor: pointer;
+ margin-right: 5px;
+ margin-left: 5px;
+ margin-bottom: 5px;
+ margin-top: 5px;
+ padding: 4px;
+ text-align: center;
+ vertical-align: middle;
+ line-height: 18px;
+}
+
+.Ldt-CurrentSegmentInfobox-EditButton:hover, .Ldt-CurrentSegmentInfobox-CreateTagInput-Add:hover{
+ background-color: #e15581;
+ border-color: #222222 #e87d9f #f0adc3 #68273c;
+}
+
+.Ldt-CurrentSegmentInfobox-CreateTagButton:hover, .Ldt-CurrentSegmentInfobox-CancelButton:hover,
+.Ldt-CurrentSegmentInfobox-SubmitButton:hover{
+ background-color: #e15581;
+ border-color: #222222 #e87d9f #f0adc3 #68273c;
+}
+
+.Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton{
+ font-weight: bold;
+ color: #d93c71
+}
+
+.Ldt-CurrentSegmentInfobox-Tags-Li-DeleteTagButton:hover{
+ color: #e16e93
+}
+
+.Ldt-CurrentSegmentInfobox-FieldsHeader{
+ margin: 5px;
+}
+
+.Ldt-CurrentSegmentInfobox-TagsHeader{
+ margin-top: 10px;
+ margin-left: 5px;
+}
+
+.Ldt-CurrentSegmentInfobox-CreateTagInput{
+ border: 2px solid #848484;
+ margin: 5px 2px;
+ padding: 4px;
+}
+
+.Ldt-CurrentSegmentInfobox-CreateTagInput-Add{
+ margin: 5px;
+ padding: 4px;
+ display: inline-block;
+ background-color: #d93c71;
+ color: #ffffff;
+ cursor: pointer;
+ height: 14px;
+ width: 14px;
+ font-size: 14px;
+ font-style: bold;
+ border: 1px solid;
+ border-color: #eca3bc #631e34 #36101c #e16e93;
+ cursor: pointer;
+ padding: 4px;
+ text-align: center;
+ vertical-align: middle;
+ line-height: 14px;
+}
\ No newline at end of file
--- a/src/widgets/DailymotionPlayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/DailymotionPlayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,150 +1,182 @@
-IriSP.Widgets.DailymotionPlayer = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
-
-IriSP.Widgets.DailymotionPlayer.prototype = new IriSP.Widgets.Widget();
+// DailymotionPlayer
+import Mustache from "mustache";
-IriSP.Widgets.DailymotionPlayer.prototype.defaults = {
- aspect_ratio: 14/9
-};
-
-IriSP.Widgets.DailymotionPlayer.prototype.draw = function() {
-
- if (typeof this.video === "undefined") {
- this.video = this.media.video;
+const DailymotionPlayer = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
}
- this.height = this.height || Math.floor(this.width / this.aspect_ratio);
+ static defaults = {
+ aspect_ratio: 14 / 9,
+ };
- var _media = this.media,
+ draw = function () {
+ if (typeof this.video === "undefined") {
+ this.video = this.media.video;
+ }
+
+ this.height = this.height || Math.floor(this.width / this.aspect_ratio);
+
+ var _media = this.media,
videoid = null,
_this = this,
state = {
- pause: true,
- apiready: false,
- volume: 0,
- time: 0,
- duration: 0
+ pause: true,
+ apiready: false,
+ volume: 0,
+ time: 0,
+ duration: 0,
};
- var m = this.video.match(/www.dailymotion.com\/video\/(.+)/);
- if (m) {
+ var m = this.video.match(/www.dailymotion.com\/video\/(.+)/);
+ if (m) {
videoid = m[1];
- }
+ }
+
+ var player_url = Mustache.render(
+ "{{ protocol }}//www.dailymotion.com/embed/video/{{ videoid }}",
+ {
+ protocol:
+ document.location.protocol.search("http") == 0
+ ? document.location.protocol
+ : "http:",
+ videoid: videoid,
+ }
+ );
+ var params = {
+ api: "postMessage",
+ chromeless: 1,
+ id: "dm_player",
+ related: 0,
+ autoplay: 1,
+ };
- var player_url = Mustache.to_html('{{ protocol }}//www.dailymotion.com/embed/video/{{ videoid }}', {
- protocol: document.location.protocol.search('http') == 0 ? document.location.protocol : 'http:',
- videoid: videoid
- });
- var params = {
- 'api': 'postMessage',
- 'chromeless': 1,
- 'id': 'dm_player',
- 'related': 0,
- 'autoplay': 1
- };
+ _this.$.html(
+ Mustache.render(
+ '<iframe id="{{ id }}" src="{{ player_url }}?{{ params }}" width="{{ width }}" height="{{ height }}" frameborder="0"></iframe>',
+ {
+ player_url: player_url,
+ params: Object.keys(params)
+ .reduce(function (a, k) {
+ a.push(k + "=" + encodeURIComponent(params[k]));
+ return a;
+ }, [])
+ .join("&"),
+ width: this.width,
+ height: this.height,
+ id: params.id,
+ }
+ )
+ );
- _this.$.html(Mustache.to_html('<iframe id="{{ id }}" src="{{ player_url }}?{{ params }}" width="{{ width }}" height="{{ height }}" frameborder="0"></iframe>', {
- player_url: player_url,
- params: Object.keys(params).reduce(function(a,k){a.push(k+'='+encodeURIComponent(params[k]));return a;},[]).join('&'),
- width: this.width,
- height: this.height,
- id: params.id
- }));
-
- function setup_media_methods () {
+ function setup_media_methods() {
var dest = _this.$.find("#" + params.id)[0].contentWindow;
- var execute = function(c, v) {
- if (v !== undefined)
- c = c + "=" + v;
- dest.postMessage(c, "*");
+ var execute = function (c, v) {
+ if (v !== undefined) c = c + "=" + v;
+ dest.postMessage(c, "*");
};
- _media.getCurrentTime = function() {
- return state.time;
+ _media.getCurrentTime = function () {
+ return state.time;
};
- _media.getVolume = function() {
- return state.volume;
+ _media.getVolume = function () {
+ return state.volume;
};
- _media.getPaused = function() {
- return state.pause;
+ _media.getPaused = function () {
+ return state.pause;
};
- _media.getMuted = function() {
- return state.muted;
+ _media.getMuted = function () {
+ return state.muted;
+ };
+ _media.setCurrentTime = function (_milliseconds) {
+ execute("seek", _milliseconds / 1000);
};
- _media.setCurrentTime = function(_milliseconds) {
- execute("seek", _milliseconds / 1000);
+ _media.setVolume = function (_vol) {
+ execute("volume", _vol * 100);
};
- _media.setVolume = function(_vol) {
- execute("volume", _vol * 100);
+ _media.mute = function () {
+ execute("muted", 1);
};
- _media.mute = function() {
- execute("muted", 1);
+ _media.unmute = function () {
+ execute("muted", 0);
};
- _media.unmute = function() {
- execute("muted", 0);
+ _media.play = function () {
+ execute("play");
+ };
+ _media.pause = function () {
+ execute("pause");
};
- _media.play = function() {
- execute("play");
- };
- _media.pause = function() {
- execute("pause");
- };
- };
+ }
- window.addEventListener("message", function (event) {
- // Parse event.data (query-string for to object)
+ window.addEventListener(
+ "message",
+ function (event) {
+ // Parse event.data (query-string for to object)
+
+ // Duck-checking if event.data is a string
+ if (event.data.split === undefined) return;
- // Duck-checking if event.data is a string
- if (event.data.split === undefined)
- return;
-
- var info = event.data.split("&").map( function(s) { return s.split("="); }).reduce( function(o, v) { o[v[0]] = decodeURIComponent(v[1]); return o; }, {});
+ var info = event.data
+ .split("&")
+ .map(function (s) {
+ return s.split("=");
+ })
+ .reduce(function (o, v) {
+ o[v[0]] = decodeURIComponent(v[1]);
+ return o;
+ }, {});
- switch (info.event) {
- case "apiready":
- state.apiready = true;
- setup_media_methods();
- break;
- //case "canplay":
- // break;
- case "durationchange":
- if (info.duration.slice(-2) == "sc") {
+ switch (info.event) {
+ case "apiready":
+ state.apiready = true;
+ setup_media_methods();
+ break;
+ //case "canplay":
+ // break;
+ case "durationchange":
+ if (info.duration.slice(-2) == "sc") {
state.duration = 1000 * Number(info.duration.slice(0, -2));
_media.setDuration(state.duration);
- }
- break;
- case "ended":
- state.pause = true;
- break;
- case "loadedmetadata":
- _media.trigger("loadedmetadata");
- break;
- case "pause":
- state.pause = true;
- _media.trigger("pause");
- break;
- case "play":
- state.pause = false;
- _media.trigger("play");
- break;
+ }
+ break;
+ case "ended":
+ state.pause = true;
+ break;
+ case "loadedmetadata":
+ _media.trigger("loadedmetadata");
+ break;
+ case "pause":
+ state.pause = true;
+ _media.trigger("pause");
+ break;
+ case "play":
+ state.pause = false;
+ _media.trigger("play");
+ break;
//case "playing":
// break;
//case "progress":
// Loading progress
// break;
- case "seeked":
- state.time = new IriSP.Model.Time(1000 * Number(info.time));
- _media.trigger("seeked");
- break;
- case "timeupdate":
- state.time = new IriSP.Model.Time(1000 * Number(info.time));
- _media.trigger("timeupdate", state.time);
- break;
- case "volumechange":
- state.muted = (info.muted == "true");
- state.volume = Number(info.volume) / 100;
- break;
- }
- }, false);
+ case "seeked":
+ state.time = new ns.Model.Time(1000 * Number(info.time));
+ _media.trigger("seeked");
+ break;
+ case "timeupdate":
+ state.time = new ns.Model.Time(1000 * Number(info.time));
+ _media.trigger("timeupdate", state.time);
+ break;
+ case "volumechange":
+ state.muted = info.muted == "true";
+ state.volume = Number(info.volume) / 100;
+ break;
+ }
+ },
+ false
+ );
+ };
+ };
};
+
+export { DailymotionPlayer };
--- a/src/widgets/EnrichedPlan.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,207 +0,0 @@
-.Ldt-EnrichedPlan-Slide {
- border-bottom: 2px dotted #ccc;
- padding-top: 4px;
- cursor: pointer;
-}
-
-.Ldt-EnrichedPlan-SlideItem {
- max-height: 3000px;
- transition: max-height .6s;
-}
-
-.Ldt-EnrichedPlan-SlideItem.filtered_out {
- max-height: 0px;
- overflow: hidden;
-}
-
-.Ldt-EnrichedPlan-SlideTimecode {
- display: inline-block;
- width: 24px;
- color: #999 !important;
- font-size: 9px !important;
- width: 24px;
- vertical-align: top;
-}
-
-.Ldt-EnrichedPlan-SlideThumbnail {
- display: inline-block;
- width: 180px;
- height: 100px;
- padding-left: 10px;
- margin: 0;
- vertical-align: top;
-}
-
-.Ldt-EnrichedPlan-SlideThumbnail img {
- max-width: 180px;
- max-height: 100px;
- margin: auto;
- border: 1px solid #ccc;
-}
-
-.Ldt-EnrichedPlan-SlideContent {
- display: inline-block;
- width: calc(100% - 220px);
- transition: width .4s;
-}
-
-.Ldt-EnrichedPlan-SlideThumbnail.filtered_out + .Ldt-EnrichedPlan-SlideContent {
- width: calc(100% - 40px);
-}
-
-.Ldt-EnrichedPlan-SlideTitle {
- display: inline-block;
- font-size: 14px;
- width: 100%;
- height: 1em;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-
-.Ldt-EnrichedPlan-SlideTitle1 {
- text-transform: uppercase;
- font-size: 13px;
- font-weight: 600;
-}
-
-.Ldt-EnrichedPlan-Note {
- font-weight: normal;
- font-size: 14px;
- font-family: Roboto-italic;
-}
-.Ldt-EnrichedPlan-Note:hover {
- background-color: #eee;
-}
-
-.Ldt-EnrichedPlan-Note-Teacher {
- color: #e5007e;
- font-style: italic;
-}
-.Ldt-EnrichedPlan-Note-Own {
- color: #66ccff;
-}
-.Ldt-EnrichedPlan-Note-Other {
- color: #996633;
-}
-
-.Ldt-EnrichedPlan-Note-Text {
- line-height: 22px;
- word-wrap: break-word;
-}
-
-.Ldt-EnrichedPlan-Note-Author {
- text-transform: uppercase;
- font-size: 10px;
-}
-
-.Ldt-EnrichedPlan-Content {
- margin-top: 37px;
-}
-
-.Ldt-EnrichedPlan-Controls {
- height: 36px;
- padding: 9px 0px 6px 0px;
- border-bottom: 1px solid #000;
- overflow-y: hidden;
- overflow-x: hidden;
- position: absolute;
- top: 0px;
- left: 0px;
- right: 0px;
- z-index: 1;
- background-color: #fff;
-}
-
-.Ldt-EnrichedPlan-Control-Label {
- display: inline-block;
- text-transform: uppercase;
- line-height: 10px;
- font-family: Roboto;
- font-size: 10px;
- font-weight: 100;
- width: 80px;
- position: relative;
-}
-.Ldt-EnrichedPlan-Controls .Ldt-EnrichedPlan-Search-Input {
- float: right;
- font-family: Roboto;
- font-size: 16px;
- width: calc(100% - 340px);
-}
-
-.Ldt-EnrichedPlan-Note.non_matching {
- display: none;
-}
-
-.Ldt-EnrichedPlan-Control- {
- font-style: normal;
-}
- /**********************************************************/
-/* Base for label styling */
-.Ldt-EnrichedPlan-Control-Checkbox:not(:checked),
-.Ldt-EnrichedPlan-Control-Checkbox:checked {
- position: absolute;
- left: -9999px;
-}
-.Ldt-EnrichedPlan-Control-Checkbox:not(:checked) + label,
-.Ldt-EnrichedPlan-Control-Checkbox:checked + label {
- position: relative;
- padding-left: 20px;
- cursor: pointer;
-}
-
-/* checkbox aspect */
-.Ldt-EnrichedPlan-Control-Checkbox:not(:checked) + label:before,
-.Ldt-EnrichedPlan-Control-Checkbox:checked + label:before {
- content: '';
- position: absolute;
- left:0; top: 2px;
- width: 13px; height: 13px;
- border: 1px solid #aaa;
-}
-/* checked mark aspect */
-.Ldt-EnrichedPlan-Control-Checkbox:not(:checked) + label:after,
-.Ldt-EnrichedPlan-Control-Checkbox:checked + label:after {
- content: '\2a2f';
- font-style: normal;
- position: absolute;
- top: 3px; left: -1px;
- font-size: 20px;
- transition: all .2s;
-}
-/* checked mark aspect changes */
-.Ldt-EnrichedPlan-Control-Checkbox:not(:checked) + label:after {
- opacity: 0;
-}
-.Ldt-EnrichedPlan-Control-Checkbox:checked + label:after {
- opacity: 1;
-}
-/* disabled checkbox */
-.Ldt-EnrichedPlan-Control-Checkbox:disabled:not(:checked) + label:before,
-.Ldt-EnrichedPlan-Control-Checkbox:disabled:checked + label:before {
- box-shadow: none;
- border-color: #bbb;
- background-color: #ddd;
-}
-.Ldt-EnrichedPlan-Control-Checkbox:disabled:checked + label:after {
- color: #999;
-}
-.Ldt-EnrichedPlan-Control-Checkbox:disabled + label {
- color: #aaa;
-}
-/* accessibility */
-.Ldt-EnrichedPlan-Control-Checkbox:checked:focus + label:before,
-.Ldt-EnrichedPlan-Control-Checkbox:not(:checked):focus + label:before {
- border: 1px dotted blue;
-}
-
-/* hover style just for information */
-label:hover:before {
- border: 1px solid #4778d9!important;
-}
-
-/* hover style just for information */
-label:hover:before {
- background-color: #ededed;
-}
--- a/src/widgets/EnrichedPlan.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/EnrichedPlan.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,145 +1,171 @@
/* TODO
- add callbacks
*/
+// EnrichedPlan
+import Mustache from "mustache";
-IriSP.Widgets.EnrichedPlan = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-}
-
-IriSP.Widgets.EnrichedPlan.prototype = new IriSP.Widgets.Widget();
+import enrichedPlanStyles from "./EnrichedPlan.module.css";
-IriSP.Widgets.EnrichedPlan.prototype.defaults = {
- // Main type for slide segmentation
- annotation_type: "Slides",
- // If no annotation type list is specified, use all other types
- annotation_types: [],
- show_controls: true,
- show_slides: true,
- show_teacher_notes: true,
- show_other_notes: true,
- show_own_notes: true
-}
-
-IriSP.Widgets.EnrichedPlan.prototype.template =
- '<div class="Ldt-EnrichedPlan-Container">'
- + '{{#show_controls}}<form class="Ldt-EnrichedPlan-Controls">'
- + ' <input id="{{prefix}}teacher_note_checkbox" class="Ldt-EnrichedPlan-Control-Checkbox Ldt-EnrichedPlan-Note-Teacher" {{#show_teacher_notes}}checked{{/show_teacher_notes}} type="checkbox">'
- + ' <label for="{{prefix}}teacher_note_checkbox" class="Ldt-EnrichedPlan-Control-Label Ldt-EnrichedPlan-Note-Teacher">Notes Enseignant</label>'
- + ' <input id="{{prefix}}other_note_checkbox" class="Ldt-EnrichedPlan-Control-Checkbox Ldt-EnrichedPlan-Note-Other" {{#show_other_notes}}checked{{/show_other_notes}} type="checkbox">'
- + ' <label for="{{prefix}}other_note_checkbox" class="Ldt-EnrichedPlan-Control-Label Ldt-EnrichedPlan-Note-Other">Notes Autres</label>'
- + ' <input id="{{prefix}}simplified_plan_checkbox" class="Ldt-EnrichedPlan-Control-Checkbox Ldt-EnrichedPlan-Note-Own" {{#show_own_notes}}checked{{/show_own_notes}} type="checkbox">'
- + ' <label for="{{prefix}}simplified_plan_checkbox" class="Ldt-EnrichedPlan-Control-Label Ldt-EnrichedPlan-Note-Own">Notes perso.</label>'
- + ' <input id="{{prefix}}slide_display_checkbox" class="Ldt-EnrichedPlan-Control-Checkbox Ldt-EnrichedPlan-Slide-Display" {{#show_slides}}checked{{/show_slides}} type="checkbox">'
- + ' <label for="{{prefix}}slide_display_checkbox" class="Ldt-EnrichedPlan-Control-Label Ldt-EnrichedPlan-Slide-Display">Diapo<br/> </label>'
- + ' <input class="Ldt-EnrichedPlan-Search-Input" type="search" incremental placeholder="Recherchez"/>'
- + '</form>{{/show_controls}}'
- + '<div class="Ldt-EnrichedPlan-Content"></div>'
- + '</div>';
+const EnrichedPlan = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.EnrichedPlan.prototype.slideTemplate =
- '<div data-id="{{ id }}" class="Ldt-EnrichedPlan-Slide">'
- + ' <div class="Ldt-EnrichedPlan-SlideItem Ldt-EnrichedPlan-SlideTimecode">{{ begin }}</div>'
- + ' <div data-timecode="{{begintc}}" class="Ldt-EnrichedPlan-SlideItem {{^show_slides}}filtered_out{{/show_slides}} Ldt-EnrichedPlan-SlideThumbnail Ldt-EnrichedPlan-Slide-Display"><img title="{{ begin }} - {{ atitle }}" src="{{ thumbnail }}"></div>'
- + ' <div class="Ldt-EnrichedPlan-SlideContent">'
- + ' <div data-timecode="{{begintc}}" class="Ldt-EnrichedPlan-SlideTitle Ldt-EnrichedPlan-SlideTitle{{ level }}">{{ atitle }}</div>'
- + ' <div class="Ldt-EnrichedPlan-SlideNotes">{{{ notes }}}</div>'
- + ' </div>'
- + '</div>';
-
-IriSP.Widgets.EnrichedPlan.prototype.annotationTemplate = '<div title="{{ begin }} - {{ atitle }}" data-id="{{ id }}" data-timecode="{{begintc}}" class="Ldt-EnrichedPlan-SlideItem Ldt-EnrichedPlan-Note {{category}} {{filtered}}"><span class="Ldt-EnrichedPlan-Note-Text">{{{ text }}}</span> <span class="Ldt-EnrichedPlan-Note-Author">{{ author }}</span></div>';
-
-IriSP.Widgets.EnrichedPlan.prototype.draw = function() {
- var _this = this;
- // Generate a unique prefix, so that ids of input fields
- // (necessary for label association) are unique too.
- _this.prefix = "TODO";
- // slides content: title, level (for toc)
- var _slides = this.getWidgetAnnotations().sortBy(function(_annotation) {
- return _annotation.begin;
- });
- // All other annotations
- var _annotations = this.media.getAnnotations().filter( function (a) {
- return a.getAnnotationType().title != _this.annotation_type;
- }).sortBy(function(_annotation) {
- return _annotation.begin;
- });
-
- // Reference annotations in each slide: assume that end time is
- // correctly set.
- _slides.forEach( function (slide) {
- slide.annotations = _annotations.filter( function (a) {
- return a.begin >= slide.begin && a.begin <= slide.end;
- });
- });
-
- _this.renderTemplate();
- var container = _this.$.find('.Ldt-EnrichedPlan-Container');
- var content = _this.$.find('.Ldt-EnrichedPlan-Content');
-
- // Returns the note category: Own, Other, Teacher
- function note_category(a) {
- return a.title.indexOf('Anonyme') < 0 ? "Own" : "Other";
+ static defaults = {
+ // Main type for slide segmentation
+ annotation_type: "Slides",
+ // If no annotation type list is specified, use all other types
+ annotation_types: [],
+ show_controls: true,
+ show_slides: true,
+ show_teacher_notes: true,
+ show_other_notes: true,
+ show_own_notes: true,
};
- _slides.forEach(function(slide) {
- var _html = Mustache.to_html(_this.slideTemplate, {
- id : slide.id,
- atitle : IriSP.textFieldHtml(slide.title),
- level: slide.content.level || 1,
- begin : slide.begin.toString(),
- begintc: slide.begin.milliseconds,
- thumbnail: slide.thumbnail,
- show_slides: _this.show_slides,
- notes: slide.annotations.map( function (a) {
- return Mustache.to_html(_this.annotationTemplate, {
- id: a.id,
- text: IriSP.textFieldHtml(a.description || a.title),
- author: a.creator,
- begin: a.begin.toString(),
- begintc: a.begin.milliseconds,
- atitle: a.title.slice(0, 20),
- // FIXME: Temporary hack waiting for a proper metadata definition
- category: "Ldt-EnrichedPlan-Note-" + note_category(a),
- filtered: ( (note_category(a) == 'Own' && ! _this.show_own_notes)
- || (note_category(a) == 'Other' && ! _this.show_other_notes)
- || (note_category(a) == 'Teacher' && ! _this.show_teacher_notes) ) ? 'filtered_out' : ''
- });
- }).join("\n")
+ static template =
+ '<div class="Ldt-EnrichedPlan-Container">' +
+ '{{#show_controls}}<form class="Ldt-EnrichedPlan-Controls">' +
+ ' <input id="{{prefix}}teacher_note_checkbox" class="Ldt-EnrichedPlan-Control-Checkbox Ldt-EnrichedPlan-Note-Teacher" {{#show_teacher_notes}}checked{{/show_teacher_notes}} type="checkbox">' +
+ ' <label for="{{prefix}}teacher_note_checkbox" class="Ldt-EnrichedPlan-Control-Label Ldt-EnrichedPlan-Note-Teacher">Notes Enseignant</label>' +
+ ' <input id="{{prefix}}other_note_checkbox" class="Ldt-EnrichedPlan-Control-Checkbox Ldt-EnrichedPlan-Note-Other" {{#show_other_notes}}checked{{/show_other_notes}} type="checkbox">' +
+ ' <label for="{{prefix}}other_note_checkbox" class="Ldt-EnrichedPlan-Control-Label Ldt-EnrichedPlan-Note-Other">Notes Autres</label>' +
+ ' <input id="{{prefix}}simplified_plan_checkbox" class="Ldt-EnrichedPlan-Control-Checkbox Ldt-EnrichedPlan-Note-Own" {{#show_own_notes}}checked{{/show_own_notes}} type="checkbox">' +
+ ' <label for="{{prefix}}simplified_plan_checkbox" class="Ldt-EnrichedPlan-Control-Label Ldt-EnrichedPlan-Note-Own">Notes perso.</label>' +
+ ' <input id="{{prefix}}slide_display_checkbox" class="Ldt-EnrichedPlan-Control-Checkbox Ldt-EnrichedPlan-Slide-Display" {{#show_slides}}checked{{/show_slides}} type="checkbox">' +
+ ' <label for="{{prefix}}slide_display_checkbox" class="Ldt-EnrichedPlan-Control-Label Ldt-EnrichedPlan-Slide-Display">Diapo<br/> </label>' +
+ ' <input class="Ldt-EnrichedPlan-Search-Input" type="search" incremental placeholder="Recherchez"/>' +
+ "</form>{{/show_controls}}" +
+ '<div class="Ldt-EnrichedPlan-Content"></div>' +
+ "</div>";
+
+ static slideTemplate =
+ '<div data-id="{{ id }}" class="Ldt-EnrichedPlan-Slide">' +
+ ' <div class="Ldt-EnrichedPlan-SlideItem Ldt-EnrichedPlan-SlideTimecode">{{ begin }}</div>' +
+ ' <div data-timecode="{{begintc}}" class="Ldt-EnrichedPlan-SlideItem {{^show_slides}}filtered_out{{/show_slides}} Ldt-EnrichedPlan-SlideThumbnail Ldt-EnrichedPlan-Slide-Display"><img title="{{ begin }} - {{ atitle }}" src="{{ thumbnail }}"></div>' +
+ ' <div class="Ldt-EnrichedPlan-SlideContent">' +
+ ' <div data-timecode="{{begintc}}" class="Ldt-EnrichedPlan-SlideTitle Ldt-EnrichedPlan-SlideTitle{{ level }}">{{ atitle }}</div>' +
+ ' <div class="Ldt-EnrichedPlan-SlideNotes">{{{ notes }}}</div>' +
+ " </div>" +
+ "</div>";
+
+ annotationTemplate =
+ '<div title="{{ begin }} - {{ atitle }}" data-id="{{ id }}" data-timecode="{{begintc}}" class="Ldt-EnrichedPlan-SlideItem Ldt-EnrichedPlan-Note {{category}} {{filtered}}"><span class="Ldt-EnrichedPlan-Note-Text">{{{ text }}}</span> <span class="Ldt-EnrichedPlan-Note-Author">{{ author }}</span></div>';
+
+ draw() {
+ var _this = this;
+ // Generate a unique prefix, so that ids of input fields
+ // (necessary for label association) are unique too.
+ _this.prefix = "TODO";
+ // slides content: title, level (for toc)
+ var _slides = this.getWidgetAnnotations().sortBy(function (_annotation) {
+ return _annotation.begin;
+ });
+ // All other annotations
+ var _annotations = this.media
+ .getAnnotations()
+ .filter(function (a) {
+ return a.getAnnotationType().title != _this.annotation_type;
+ })
+ .sortBy(function (_annotation) {
+ return _annotation.begin;
+ });
+
+ // Reference annotations in each slide: assume that end time is
+ // correctly set.
+ _slides.forEach(function (slide) {
+ slide.annotations = _annotations.filter(function (a) {
+ return a.begin >= slide.begin && a.begin <= slide.end;
});
- var _el = IriSP.jQuery(_html);
- content.append(_el);
- });
+ });
+
+ _this.renderTemplate();
+ var container = _this.$.find(".Ldt-EnrichedPlan-Container");
+ var content = _this.$.find(".Ldt-EnrichedPlan-Content");
+
+ // Returns the note category: Own, Other, Teacher
+ function note_category(a) {
+ return a.title.indexOf("Anonyme") < 0 ? "Own" : "Other";
+ }
- container.on("click", "[data-timecode]", function () {
+ _slides.forEach(function (slide) {
+ var _html = Mustache.render(_this.slideTemplate, {
+ id: slide.id,
+ atitle: ns.textFieldHtml(slide.title),
+ level: slide.content.level || 1,
+ begin: slide.begin.toString(),
+ begintc: slide.begin.milliseconds,
+ thumbnail: slide.thumbnail,
+ show_slides: _this.show_slides,
+ notes: slide.annotations
+ .map(function (a) {
+ return Mustache.render(_this.annotationTemplate, {
+ id: a.id,
+ text: ns.textFieldHtml(a.description || a.title),
+ author: a.creator,
+ begin: a.begin.toString(),
+ begintc: a.begin.milliseconds,
+ atitle: a.title.slice(0, 20),
+ // FIXME: Temporary hack waiting for a proper metadata definition
+ category: "Ldt-EnrichedPlan-Note-" + note_category(a),
+ filtered:
+ (note_category(a) == "Own" && !_this.show_own_notes) ||
+ (note_category(a) == "Other" && !_this.show_other_notes) ||
+ (note_category(a) == "Teacher" && !_this.show_teacher_notes)
+ ? "filtered_out"
+ : "",
+ });
+ })
+ .join("\n"),
+ });
+ var _el = ns.jQuery(_html);
+ content.append(_el);
+ });
+
+ container.on("click", "[data-timecode]", function () {
_this.media.setCurrentTime(Number(this.dataset.timecode));
- });
+ });
- container.on("click", ".Ldt-EnrichedPlan-Control-Checkbox", function () {
- var classname = _.first(_.filter(this.classList, function (s) { return s != "Ldt-EnrichedPlan-Control-Checkbox"; }));
+ container.on("click", ".Ldt-EnrichedPlan-Control-Checkbox", function () {
+ var classname = _.first(
+ _.filter(this.classList, function (s) {
+ return s != "Ldt-EnrichedPlan-Control-Checkbox";
+ })
+ );
if (classname !== undefined) {
- if ($(this).is(':checked')) {
- content.find(".Ldt-EnrichedPlan-Slide ." + classname).removeClass("filtered_out");
- } else {
- content.find(".Ldt-EnrichedPlan-Slide ." + classname).addClass("filtered_out");
- }
+ if ($(this).is(":checked")) {
+ content
+ .find(".Ldt-EnrichedPlan-Slide ." + classname)
+ .removeClass("filtered_out");
+ } else {
+ content
+ .find(".Ldt-EnrichedPlan-Slide ." + classname)
+ .addClass("filtered_out");
+ }
}
-
- });
+ });
- container.find(".Ldt-EnrichedPlan-Search-Input").on("search", function () {
- var q = $(this).val().toLocaleLowerCase();
- if (q === "") {
+ container
+ .find(".Ldt-EnrichedPlan-Search-Input")
+ .on("search", function () {
+ var q = $(this).val().toLocaleLowerCase();
+ if (q === "") {
// Show all
content.find(".Ldt-EnrichedPlan-Note").removeClass("non_matching");
- } else {
- $(".Ldt-EnrichedPlan-Note").each( function () {
- var node = $(this);
- if (node.text().toLocaleLowerCase().indexOf(q) > -1) {
- node.removeClass("non_matching");
- } else {
- node.addClass("non_matching");
- }
+ } else {
+ $(".Ldt-EnrichedPlan-Note").each(function () {
+ var node = $(this);
+ if (node.text().toLocaleLowerCase().indexOf(q) > -1) {
+ node.removeClass("non_matching");
+ } else {
+ node.addClass("non_matching");
+ }
});
- }
- });
+ }
+ });
+ }
+ };
};
+
+export { EnrichedPlan, enrichedPlanStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/EnrichedPlan.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,207 @@
+.Ldt-EnrichedPlan-Slide {
+ border-bottom: 2px dotted #ccc;
+ padding-top: 4px;
+ cursor: pointer;
+}
+
+.Ldt-EnrichedPlan-SlideItem {
+ max-height: 3000px;
+ transition: max-height .6s;
+}
+
+.Ldt-EnrichedPlan-SlideItem.filtered_out {
+ max-height: 0px;
+ overflow: hidden;
+}
+
+.Ldt-EnrichedPlan-SlideTimecode {
+ display: inline-block;
+ width: 24px;
+ color: #999 !important;
+ font-size: 9px !important;
+ width: 24px;
+ vertical-align: top;
+}
+
+.Ldt-EnrichedPlan-SlideThumbnail {
+ display: inline-block;
+ width: 180px;
+ height: 100px;
+ padding-left: 10px;
+ margin: 0;
+ vertical-align: top;
+}
+
+.Ldt-EnrichedPlan-SlideThumbnail img {
+ max-width: 180px;
+ max-height: 100px;
+ margin: auto;
+ border: 1px solid #ccc;
+}
+
+.Ldt-EnrichedPlan-SlideContent {
+ display: inline-block;
+ width: calc(100% - 220px);
+ transition: width .4s;
+}
+
+.Ldt-EnrichedPlan-SlideThumbnail.filtered_out + .Ldt-EnrichedPlan-SlideContent {
+ width: calc(100% - 40px);
+}
+
+.Ldt-EnrichedPlan-SlideTitle {
+ display: inline-block;
+ font-size: 14px;
+ width: 100%;
+ height: 1em;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+.Ldt-EnrichedPlan-SlideTitle1 {
+ text-transform: uppercase;
+ font-size: 13px;
+ font-weight: 600;
+}
+
+.Ldt-EnrichedPlan-Note {
+ font-weight: normal;
+ font-size: 14px;
+ font-family: Roboto-italic;
+}
+.Ldt-EnrichedPlan-Note:hover {
+ background-color: #eee;
+}
+
+.Ldt-EnrichedPlan-Note-Teacher {
+ color: #e5007e;
+ font-style: italic;
+}
+.Ldt-EnrichedPlan-Note-Own {
+ color: #66ccff;
+}
+.Ldt-EnrichedPlan-Note-Other {
+ color: #996633;
+}
+
+.Ldt-EnrichedPlan-Note-Text {
+ line-height: 22px;
+ word-wrap: break-word;
+}
+
+.Ldt-EnrichedPlan-Note-Author {
+ text-transform: uppercase;
+ font-size: 10px;
+}
+
+.Ldt-EnrichedPlan-Content {
+ margin-top: 37px;
+}
+
+.Ldt-EnrichedPlan-Controls {
+ height: 36px;
+ padding: 9px 0px 6px 0px;
+ border-bottom: 1px solid #000;
+ overflow-y: hidden;
+ overflow-x: hidden;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ right: 0px;
+ z-index: 1;
+ background-color: #fff;
+}
+
+.Ldt-EnrichedPlan-Control-Label {
+ display: inline-block;
+ text-transform: uppercase;
+ line-height: 10px;
+ font-family: Roboto;
+ font-size: 10px;
+ font-weight: 100;
+ width: 80px;
+ position: relative;
+}
+.Ldt-EnrichedPlan-Controls .Ldt-EnrichedPlan-Search-Input {
+ float: right;
+ font-family: Roboto;
+ font-size: 16px;
+ width: calc(100% - 340px);
+}
+
+.Ldt-EnrichedPlan-Note.non_matching {
+ display: none;
+}
+
+.Ldt-EnrichedPlan-Control- {
+ font-style: normal;
+}
+ /**********************************************************/
+/* Base for label styling */
+.Ldt-EnrichedPlan-Control-Checkbox:not(:checked),
+.Ldt-EnrichedPlan-Control-Checkbox:checked {
+ position: absolute;
+ left: -9999px;
+}
+.Ldt-EnrichedPlan-Control-Checkbox:not(:checked) + label,
+.Ldt-EnrichedPlan-Control-Checkbox:checked + label {
+ position: relative;
+ padding-left: 20px;
+ cursor: pointer;
+}
+
+/* checkbox aspect */
+.Ldt-EnrichedPlan-Control-Checkbox:not(:checked) + label:before,
+.Ldt-EnrichedPlan-Control-Checkbox:checked + label:before {
+ content: '';
+ position: absolute;
+ left:0; top: 2px;
+ width: 13px; height: 13px;
+ border: 1px solid #aaa;
+}
+/* checked mark aspect */
+.Ldt-EnrichedPlan-Control-Checkbox:not(:checked) + label:after,
+.Ldt-EnrichedPlan-Control-Checkbox:checked + label:after {
+ content: '\2a2f';
+ font-style: normal;
+ position: absolute;
+ top: 3px; left: -1px;
+ font-size: 20px;
+ transition: all .2s;
+}
+/* checked mark aspect changes */
+.Ldt-EnrichedPlan-Control-Checkbox:not(:checked) + label:after {
+ opacity: 0;
+}
+.Ldt-EnrichedPlan-Control-Checkbox:checked + label:after {
+ opacity: 1;
+}
+/* disabled checkbox */
+.Ldt-EnrichedPlan-Control-Checkbox:disabled:not(:checked) + label:before,
+.Ldt-EnrichedPlan-Control-Checkbox:disabled:checked + label:before {
+ box-shadow: none;
+ border-color: #bbb;
+ background-color: #ddd;
+}
+.Ldt-EnrichedPlan-Control-Checkbox:disabled:checked + label:after {
+ color: #999;
+}
+.Ldt-EnrichedPlan-Control-Checkbox:disabled + label {
+ color: #aaa;
+}
+/* accessibility */
+.Ldt-EnrichedPlan-Control-Checkbox:checked:focus + label:before,
+.Ldt-EnrichedPlan-Control-Checkbox:not(:checked):focus + label:before {
+ border: 1px dotted blue;
+}
+
+/* hover style just for information */
+label:hover:before {
+ border: 1px solid #4778d9!important;
+}
+
+/* hover style just for information */
+label:hover:before {
+ background-color: #ededed;
+}
--- a/src/widgets/HelloWorld.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-.Ldt-HelloWorld p {
- text-align: center; font-size: 12px; margin: 2px 0;
-}
--- a/src/widgets/HelloWorld.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/HelloWorld.js Wed Sep 04 17:32:50 2024 +0200
@@ -4,30 +4,37 @@
* - Use of internationalization
*/
-IriSP.Widgets.HelloWorld = function(player, config) {
- console.log("Calling IriSP.Widget's constructor from IriSP.HelloWorldWidget");
- IriSP.Widgets.Widget.call(this, player, config);
-};
-
-IriSP.Widgets.HelloWorld.prototype = new IriSP.Widgets.Widget();
+import helloWorldStyles from "./HelloWorld.module.css";
-IriSP.Widgets.HelloWorld.prototype.defaults = {
- text: "world"
-};
+const HelloWorld = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player,config);
+ console.log(
+ "Calling IriSP.Widget's constructor from IriSP.HelloWorldWidget"
+ );
+ }
-IriSP.Widgets.HelloWorld.prototype.template =
- '<div class="Ldt-HelloWorld"><p>{{l10n.Hello}} {{text}}</p><p>Looks like we have {{source.contents.annotation.length}} annotations in this feed</p></div>';
+ static defaults = {
+ text: "world",
+ };
+
+ static template = `<div class="Ldt-HelloWorld"><p>{{l10n.Hello}} {{text}}</p><p>Looks like we have <span class="Ldt-HelloWorld-annotations">{{source.contents.annotation.length}} annotations</span> in this feed</p></div>`;
-IriSP.Widgets.HelloWorld.prototype.messages = {
- "fr": {
- "Hello" : "Bonjour,"
- },
- "en" : {
- "Hello" : "Hello,"
- }
-};
+ static messages = {
+ fr: {
+ Hello: "Bonjour,",
+ },
+ en: {
+ Hello: "Hello,",
+ },
+ };
-IriSP.Widgets.HelloWorld.prototype.draw = function() {
- this.renderTemplate();
- console.log("HelloWorldWidget was drawn");
-};
\ No newline at end of file
+ draw = function () {
+ this.renderTemplate();
+ console.log("HelloWorldWidget was drawn");
+ };
+ };
+}
+
+export { HelloWorld, helloWorldStyles};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/HelloWorld.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,8 @@
+.Ldt-HelloWorld p {
+ text-align: center; font-size: 12px; margin: 2px 0;
+}
+
+.Ldt-HelloWorld-annotations {
+ color: red;
+ font-weight: bold;
+}
--- a/src/widgets/Highlighter.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-.currentAnnotation {
- border: solid 3px red;
-}
--- a/src/widgets/Highlighter.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Highlighter.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,43 +1,55 @@
-IriSP.Widgets.Highlighter = function(player, config) {
- var _this = this;
- IriSP.Widgets.Widget.call(this, player, config);
- this.throttledRefresh = IriSP._.throttle(function() {
+// Highlighter
+
+import highlighterStyles from "./Highlighter.module.css";
+import _ from "lodash";
+
+const Highlighter = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ var _this = this;
+ this.throttledRefresh = _.throttle(function () {
console.log("highlighter Refresh");
_this.update();
- }, 800);
+ }, 800);
+ }
+
+ /**
+ * Highlighter widget
+ * This widgets highlights the current annotations by setting the
+ * .activeAnnotation class on appropriate .Ldt-Highlighter-Annotation
+ * elements. These elements *must* have data-begin and data-end properties specifying their bounds (in ms) (and data-media specifying the media-id)
+ */
+
+ static defaults = {};
+
+ update() {
+ var _this = this;
+ var _currentTime = _this.media.getCurrentTime();
+ _this.$.find(".Ldt-Highlighter-Annotation", document).toggleClass(
+ "currentAnnotation",
+ function () {
+ return (
+ this.dataset.media === _this.media.id &&
+ this.dataset.begin <= _currentTime &&
+ _currentTime < this.dataset.end
+ );
+ }
+ );
+ console.log(_this.$.find(".currentAnnotation"));
+ return false;
+ }
+
+ draw() {
+ var _this = this;
+
+ var _events = ["timeupdate", "seeked", "loadedmetadata"];
+ for (var _i = 0; _i < _events.length; _i++) {
+ _this.onMediaEvent(_events[_i], _this.throttledRefresh);
+ }
+ _this.throttledRefresh();
+ }
+ };
};
-/**
- * Highlighter widget
- * This widgets highlights the current annotations by setting the
- * .activeAnnotation class on appropriate .Ldt-Highlighter-Annotation
- * elements. These elements *must* have data-begin and data-end properties specifying their bounds (in ms) (and data-media specifying the media-id)
- */
-IriSP.Widgets.Highlighter.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.Highlighter.prototype.defaults = {
-}
-
-IriSP.Widgets.Highlighter.prototype.update = function() {
- var _this = this;
- var _currentTime = _this.media.getCurrentTime();
- _this.$.find(".Ldt-Highlighter-Annotation", document).toggleClass("currentAnnotation", function () {
- return (this.dataset.media === _this.media.id && this.dataset.begin <= _currentTime && _currentTime < this.dataset.end);
- });
- console.log(_this.$.find(".currentAnnotation"));
- return false;
-};
-
-IriSP.Widgets.Highlighter.prototype.draw = function() {
- var _this = this;
-
- var _events = [
- "timeupdate",
- "seeked",
- "loadedmetadata"
- ];
- for (var _i = 0; _i < _events.length; _i++) {
- _this.onMediaEvent(_events[_i], _this.throttledRefresh);
- }
- _this.throttledRefresh();
-};
+export { Highlighter, highlighterStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Highlighter.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,3 @@
+.currentAnnotation {
+ border: solid 3px red;
+}
--- a/src/widgets/HtmlMashupPlayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/HtmlMashupPlayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,42 +1,42 @@
-IriSP.Widgets.HtmlMashupPlayer = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+//HtmlMashupPlayer
-IriSP.Widgets.HtmlMashupPlayer.prototype = new IriSP.Widgets.Widget();
-
+const HtmlMashupPlayer = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.HtmlMashupPlayer.prototype.defaults = {
- aspect_ratio: 14/9,
- background: "#333333"
-};
+ static defaults = {
+ aspect_ratio: 14 / 9,
+ background: "#333333",
+ };
-IriSP.Widgets.HtmlMashupPlayer.prototype.draw = function() {
-
- if (!this.height && this.aspect_ratio) {
+ draw() {
+ if (!this.height && this.aspect_ratio) {
this.height = this.width / this.aspect_ratio;
this.$.css("height", this.height);
- }
-
- if (this.background) {
+ }
+
+ if (this.background) {
this.$.css("background", this.background);
- }
-
- var mashup = this.media,
+ }
+
+ var mashup = this.media,
sel = this.$,
width = this.width,
height = this.height,
url_transform = this.url_transform;
-
- mashup.currentMedia = null;
- mashup.currentAnnotation = null;
- mashup.seeking = false;
- var mashupSegmentBegin,
+
+ mashup.currentMedia = null;
+ mashup.currentAnnotation = null;
+ mashup.seeking = false;
+ var mashupSegmentBegin,
mashupSegmentEnd,
mashupTimecode = 0,
- // seekdiv = $(".video-wait"),
+ // seekdiv = $(".video-wait"),
mashupTimedelta;
-
-/*
+
+ /*
function showSeek() {
if (currentMedia.seeking) {
seekdiv.show();
@@ -44,302 +44,328 @@
}
*/
- function changeCurrentAnnotation() {
+ function changeCurrentAnnotation() {
if (mashupTimecode >= mashup.duration) {
- if (!mashup.paused) {
- mashup.paused = true;
- mashup.trigger("pause");
- }
- mashupTimecode = 0;
+ if (!mashup.paused) {
+ mashup.paused = true;
+ mashup.trigger("pause");
+ }
+ mashupTimecode = 0;
}
- var _annotation = mashup.getAnnotationAtTime( mashupTimecode );
+ var _annotation = mashup.getAnnotationAtTime(mashupTimecode);
if (typeof _annotation === "undefined") {
- if (mashup.currentMedia) {
- mashup.currentMedia.pause();
- if (!mashup.paused) {
- mashup.paused = true;
- mashup.trigger("pause");
- }
+ if (mashup.currentMedia) {
+ mashup.currentMedia.pause();
+ if (!mashup.paused) {
+ mashup.paused = true;
+ mashup.trigger("pause");
}
- return;
+ }
+ return;
}
mashup.currentAnnotation = _annotation;
- mashupSegmentBegin = mashup.currentAnnotation.annotation.begin.milliseconds;
+ mashupSegmentBegin =
+ mashup.currentAnnotation.annotation.begin.milliseconds;
mashupSegmentEnd = mashup.currentAnnotation.annotation.end.milliseconds;
- mashupTimedelta = mashupSegmentBegin - mashup.currentAnnotation.begin.milliseconds;
+ mashupTimedelta =
+ mashupSegmentBegin - mashup.currentAnnotation.begin.milliseconds;
mashup.currentMedia = mashup.currentAnnotation.getMedia();
- mashup.getMedias().forEach(function(_media) {
- if (_media !== mashup.currentMedia) {
- _media.hide();
- _media.pause();
- } else {
- _media.show();
- }
+ mashup.getMedias().forEach(function (_media) {
+ if (_media !== mashup.currentMedia) {
+ _media.hide();
+ _media.pause();
+ } else {
+ _media.show();
+ }
});
-
- mashup.currentMedia.setCurrentTime( mashupTimecode + mashupTimedelta);
+
+ mashup.currentMedia.setCurrentTime(mashupTimecode + mashupTimedelta);
mashup.currentMedia.seeking = true;
-
- if (!mashup.paused) {
- mashup.currentMedia.play();
- mashup.seeking = true;
-// setTimeout(showSeek,200);
- }
- mashup.trigger("timeupdate", new IriSP.Model.Time(mashupTimecode));
- }
-
- mashup.getMedias().forEach(addMedia);
- changeCurrentAnnotation();
- mashup.trigger("loadedmetadata");
-
- function addMedia(media) {
+ if (!mashup.paused) {
+ mashup.currentMedia.play();
+ mashup.seeking = true;
+ // setTimeout(showSeek,200);
+ }
+ mashup.trigger("timeupdate", new ns.Model.Time(mashupTimecode));
+ }
+
+ mashup.getMedias().forEach(addMedia);
+ changeCurrentAnnotation();
+ mashup.trigger("loadedmetadata");
+
+ function addMedia(media) {
if (media.has_player) {
- return;
+ return;
}
media.has_player = true;
var videourl = media.video;
if (typeof url_transform === "function") {
- videourl = url_transform(media.video);
+ videourl = url_transform(media.video);
}
var videoid = "video_" + media.id,
- videoElement;
-
- media.show = function() {
-
- if (document.getElementById(videoid)) {
- return;
- }
-
- media.loaded = false;
- media.paused = true;
- var videoSelector = $('<video>');
-
- videoSelector.attr({
- id : videoid,
- width : width,
- height : height
- }).css({
- width: width,
- height: height
- });
-
- if (typeof videourl === "string") {
- videoSelector.attr( "src", videourl );
- } else {
- for (var i = 0; i < videourl.length; i++) {
- var _srcNode = IriSP.jQuery('<source>');
- _srcNode.attr({
- src: videourl[i].src,
- type: videourl[i].type
- });
- videoSelector.append(_srcNode);
- }
- }
-
- sel.append(videoSelector);
-
- videoElement = videoSelector[0];
-
- // Binding DOM events to media
-
- function getVolume() {
- media.muted = videoElement.muted;
- media.volume = videoElement.volume;
- }
-
- videoSelector.on("loadedmetadata", function() {
- getVolume();
- media.loaded = true;
- media.trigger("loadedmetadata");
- media.trigger("volumechange");
- });
-
- videoSelector.on("timeupdate", function() {
- media.trigger("timeupdate", new IriSP.Model.Time(1000*videoElement.currentTime));
- });
-
- videoSelector.on("volumechange", function() {
- getVolume();
- media.trigger("volumechange");
+ videoElement;
+
+ media.show = function () {
+ if (document.getElementById(videoid)) {
+ return;
+ }
+
+ media.loaded = false;
+ media.paused = true;
+ var videoSelector = $("<video>");
+
+ videoSelector
+ .attr({
+ id: videoid,
+ width: width,
+ height: height,
+ })
+ .css({
+ width: width,
+ height: height,
});
-
- videoSelector.on("play", function() {
- media.trigger("play");
- });
-
- videoSelector.on("pause", function() {
- media.trigger("pause");
- });
-
- videoSelector.on("seeking", function() {
- media.trigger("seeking");
- });
-
- videoSelector.on("seeked", function() {
- media.trigger("seeked");
- });
+
+ if (typeof videourl === "string") {
+ videoSelector.attr("src", videourl);
+ } else {
+ for (var i = 0; i < videourl.length; i++) {
+ var _srcNode = ns.jQuery("<source>");
+ _srcNode.attr({
+ src: videourl[i].src,
+ type: videourl[i].type,
+ });
+ videoSelector.append(_srcNode);
+ }
+ }
+
+ sel.append(videoSelector);
+
+ videoElement = videoSelector[0];
+
+ // Binding DOM events to media
+
+ function getVolume() {
+ media.muted = videoElement.muted;
+ media.volume = videoElement.volume;
+ }
+
+ videoSelector.on("loadedmetadata", function () {
+ getVolume();
+ media.loaded = true;
+ media.trigger("loadedmetadata");
+ media.trigger("volumechange");
+ });
+
+ videoSelector.on("timeupdate", function () {
+ media.trigger(
+ "timeupdate",
+ new ns.Model.Time(1000 * videoElement.currentTime)
+ );
+ });
+
+ videoSelector.on("volumechange", function () {
+ getVolume();
+ media.trigger("volumechange");
+ });
+
+ videoSelector.on("play", function () {
+ media.trigger("play");
+ });
+
+ videoSelector.on("pause", function () {
+ media.trigger("pause");
+ });
+
+ videoSelector.on("seeking", function () {
+ media.trigger("seeking");
+ });
+
+ videoSelector.on("seeked", function () {
+ media.trigger("seeked");
+ });
};
-
- media.hide = function() {
- videoElement = undefined;
- sel.find("#" + videoid).remove();
+
+ media.hide = function () {
+ videoElement = undefined;
+ sel.find("#" + videoid).remove();
};
-
+
// Binding functions to Media Element Functions
-
+
var deferredTime = undefined,
- deferredPlayPause = undefined;
-
- media.on("setcurrenttime", function(_milliseconds) {
- if (videoElement && videoElement.readyState >= videoElement.HAVE_METADATA) {
- try {
- videoElement.currentTime = (_milliseconds / 1000);
- deferredTime = undefined;
- } catch(err) {
- deferredTime = _milliseconds;
- }
- } else {
- deferredTime = _milliseconds;
- }
- });
-
- media.on("setvolume", function(_vol) {
- if (videoElement && videoElement.readyState >= videoElement.HAVE_METADATA) {
- media.volume = _vol;
- videoElement.volume = _vol;
+ deferredPlayPause = undefined;
+
+ media.on("setcurrenttime", function (_milliseconds) {
+ if (
+ videoElement &&
+ videoElement.readyState >= videoElement.HAVE_METADATA
+ ) {
+ try {
+ videoElement.currentTime = _milliseconds / 1000;
+ deferredTime = undefined;
+ } catch (err) {
+ deferredTime = _milliseconds;
}
- });
-
- media.on("setmuted", function(_muted) {
- if (videoElement && videoElement.readyState >= videoElement.HAVE_METADATA) {
- media.muted = _muted;
- videoElement.muted = _muted;
- }
+ } else {
+ deferredTime = _milliseconds;
+ }
});
-
- media.on("setplay", function() {
- if (videoElement && videoElement.readyState >= videoElement.HAVE_METADATA) {
- try {
- videoElement.play();
- deferredPlayPause = undefined;
- } catch(err) {
- deferredPlayPause = true;
- }
- } else {
- deferredPlayPause = true;
- }
+
+ media.on("setvolume", function (_vol) {
+ if (
+ videoElement &&
+ videoElement.readyState >= videoElement.HAVE_METADATA
+ ) {
+ media.volume = _vol;
+ videoElement.volume = _vol;
+ }
+ });
+
+ media.on("setmuted", function (_muted) {
+ if (
+ videoElement &&
+ videoElement.readyState >= videoElement.HAVE_METADATA
+ ) {
+ media.muted = _muted;
+ videoElement.muted = _muted;
+ }
});
- media.on("setpause", function() {
- if (videoElement && videoElement.readyState >= videoElement.HAVE_METADATA) {
- try {
- videoElement.pause();
- deferredPlayPause = undefined;
- } catch(err) {
- deferredPlayPause = false;
- }
- } else {
- deferredPlayPause = false;
- }
- });
-
- media.on("loadedmetadata", function() {
- if (typeof deferredTime !== "undefined") {
- media.setCurrentTime(deferredTime);
+ media.on("setplay", function () {
+ if (
+ videoElement &&
+ videoElement.readyState >= videoElement.HAVE_METADATA
+ ) {
+ try {
+ videoElement.play();
+ deferredPlayPause = undefined;
+ } catch (err) {
+ deferredPlayPause = true;
}
- if (typeof deferredPlayPause !== "undefined") {
- if (deferredPlayPause) {
- media.play();
- } else {
- media.pause();
- }
- }
+ } else {
+ deferredPlayPause = true;
+ }
});
-
- // Binding UI Events and Mashup Playing to Media
-
- media.on("play", function() {
- if (media === mashup.currentMedia) {
- mashup.trigger("play");
+
+ media.on("setpause", function () {
+ if (
+ videoElement &&
+ videoElement.readyState >= videoElement.HAVE_METADATA
+ ) {
+ try {
+ videoElement.pause();
+ deferredPlayPause = undefined;
+ } catch (err) {
+ deferredPlayPause = false;
}
+ } else {
+ deferredPlayPause = false;
+ }
});
-
- media.on("pause", function() {
- if (media === mashup.currentMedia) {
- mashup.trigger("pause");
+
+ media.on("loadedmetadata", function () {
+ if (typeof deferredTime !== "undefined") {
+ media.setCurrentTime(deferredTime);
+ }
+ if (typeof deferredPlayPause !== "undefined") {
+ if (deferredPlayPause) {
+ media.play();
+ } else {
+ media.pause();
}
+ }
});
-
- media.on("timeupdate", function(_time) {
- if (!mashup.paused && media === mashup.currentMedia && !media.seeking) {
- if ( _time < mashupSegmentEnd ) {
- if ( _time >= mashupSegmentBegin ) {
- mashupTimecode = _time - mashupTimedelta;
- } else {
- mashupTimecode = mashupSegmentBegin - mashupTimedelta;
- media.setCurrentTime(mashupSegmentBegin);
- }
- } else {
- mashupTimecode = mashupSegmentEnd - mashupTimedelta;
- media.pause();
- changeCurrentAnnotation();
- }
- mashup.trigger("timeupdate", new IriSP.Model.Time(mashupTimecode));
- }
+
+ // Binding UI Events and Mashup Playing to Media
+
+ media.on("play", function () {
+ if (media === mashup.currentMedia) {
+ mashup.trigger("play");
+ }
+ });
+
+ media.on("pause", function () {
+ if (media === mashup.currentMedia) {
+ mashup.trigger("pause");
+ }
});
-
- media.on("seeked", function() {
- media.seeking = false;
- if (media === mashup.currentMedia && mashup.seeking) {
- mashup.seeking = false;
+
+ media.on("timeupdate", function (_time) {
+ if (
+ !mashup.paused &&
+ media === mashup.currentMedia &&
+ !media.seeking
+ ) {
+ if (_time < mashupSegmentEnd) {
+ if (_time >= mashupSegmentBegin) {
+ mashupTimecode = _time - mashupTimedelta;
+ } else {
+ mashupTimecode = mashupSegmentBegin - mashupTimedelta;
+ media.setCurrentTime(mashupSegmentBegin);
+ }
+ } else {
+ mashupTimecode = mashupSegmentEnd - mashupTimedelta;
+ media.pause();
+ changeCurrentAnnotation();
}
-// seekdiv.hide();
+ mashup.trigger("timeupdate", new ns.Model.Time(mashupTimecode));
+ }
});
-
- media.on("volumechange", function() {
- mashup.muted = media.muted;
- mashup.volume = media.volume;
- mashup.trigger("volumechange");
+
+ media.on("seeked", function () {
+ media.seeking = false;
+ if (media === mashup.currentMedia && mashup.seeking) {
+ mashup.seeking = false;
+ }
+ // seekdiv.hide();
});
-
- }
- // Mashup Events
-
- mashup.on("setcurrenttime", function(_milliseconds) {
+ media.on("volumechange", function () {
+ mashup.muted = media.muted;
+ mashup.volume = media.volume;
+ mashup.trigger("volumechange");
+ });
+ }
+
+ // Mashup Events
+
+ mashup.on("setcurrenttime", function (_milliseconds) {
mashupTimecode = _milliseconds;
changeCurrentAnnotation();
- });
-
- mashup.on("setvolume", function(_vol) {
- mashup.getMedias().forEach(function(_media) {
- _media.setVolume(_vol);
+ });
+
+ mashup.on("setvolume", function (_vol) {
+ mashup.getMedias().forEach(function (_media) {
+ _media.setVolume(_vol);
});
mashup.volume = _vol;
- });
-
- mashup.on("setmuted", function(_muted) {
- mashup.getMedias().forEach(function(_media) {
- _media.setMuted(_muted);
+ });
+
+ mashup.on("setmuted", function (_muted) {
+ mashup.getMedias().forEach(function (_media) {
+ _media.setMuted(_muted);
});
mashup.muted = _muted;
- });
-
- mashup.on("setplay", function() {
+ });
+
+ mashup.on("setplay", function () {
mashup.paused = false;
changeCurrentAnnotation();
- });
-
- mashup.on("setpause", function() {
+ });
+
+ mashup.on("setpause", function () {
mashup.paused = true;
if (mashup.currentMedia) {
- mashup.currentMedia.pause();
+ mashup.currentMedia.pause();
}
- });
-
- mashup.on("loadedmetadata", function() {
+ });
+
+ mashup.on("loadedmetadata", function () {
changeCurrentAnnotation();
- });
-
-};
\ No newline at end of file
+ });
+ }
+ };
+};
+
+export { HtmlMashupPlayer };
--- a/src/widgets/HtmlPlayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/HtmlPlayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,15 +1,17 @@
-IriSP.Widgets.HtmlPlayer = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
+//HtmlPlayer
+
+const HtmlPlayer = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
+
+ static defaults = {};
+
+ draw() {
+ ns.htmlPlayer(this.media, this.$, this);
+ }
+ };
};
-IriSP.Widgets.HtmlPlayer.prototype = new IriSP.Widgets.Widget();
-
-
-IriSP.Widgets.HtmlPlayer.prototype.defaults = {
-};
-
-IriSP.Widgets.HtmlPlayer.prototype.draw = function() {
-
- IriSP.htmlPlayer(this.media, this.$, this);
-
-};
\ No newline at end of file
+export { HtmlPlayer };
--- a/src/widgets/ImageDisplay.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-.Ldt-ImageDisplay-Container {
- width: 100%;
- height: 100%;
- background-color: white;
- background-repeat: no-repeat;
- background-position: center;
- background-size: contain;
-}
-
-.Ldt-ImageDisplay-Image {
- max-width: 100%;
- max-height: 100%;
-}
-
-.Ldt-ImageDisplay-Overlay {
- width: 30%;
- min-width: 20px;
- height: 100%;
- opacity: 0.1;
- position: absolute;
- top: 0px;
- bottom: 0px;
-}
-
-.Ldt-ImageDisplay-Overlay:hover {
-}
-
-.Ldt-ImageDisplay-Overlay-Left {
- left: 0px;
- cursor: url(img/left_arrow.svg) 20 20, pointer;
-}
-
-.Ldt-ImageDisplay-Overlay-Right {
- right: 0px;
- cursor: url(img/right_arrow.svg) 20 20, pointer;
-}
--- a/src/widgets/ImageDisplay.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/ImageDisplay.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,42 +1,57 @@
/* This widget displays the image associated to the annotation in the given container */
+// ImageDisplay
+import imageDisplayStyles from "./ImageDisplay.module.css";
+
+const ImageDisplay = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.ImageDisplay = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-}
+ static defaults = {
+ annotation_type: "Slides",
+ // container: "imageContainer"
+ };
-IriSP.Widgets.ImageDisplay.prototype = new IriSP.Widgets.Widget();
+ static template =
+ '<div class="Ldt-ImageDisplay-Container"><div class="Ldt-ImageDisplay-Overlay Ldt-ImageDisplay-Overlay-Left"></div><div class="Ldt-ImageDisplay-Overlay Ldt-ImageDisplay-Overlay-Right"></div></div>';
+
+ annotationTemplate = "";
-IriSP.Widgets.ImageDisplay.prototype.defaults = {
- annotation_type: "Slides"
- // container: "imageContainer"
-}
-
-IriSP.Widgets.ImageDisplay.prototype.template = '<div class="Ldt-ImageDisplay-Container"><div class="Ldt-ImageDisplay-Overlay Ldt-ImageDisplay-Overlay-Left"></div><div class="Ldt-ImageDisplay-Overlay Ldt-ImageDisplay-Overlay-Right"></div></div>';
+ update(annotation) {
+ // Update the widget with data corresponding to the annotation
+ this.image.css("background-image", "url(" + annotation.thumbnail + ")");
+ this.image.attr(
+ "title",
+ ns.textFieldHtml(annotation.title) + " - " + annotation.begin.toString()
+ );
+ }
-IriSP.Widgets.ImageDisplay.prototype.annotationTemplate = '';
+ draw() {
+ var _annotations = this.getWidgetAnnotations().sortBy(function (
+ _annotation
+ ) {
+ return _annotation.begin;
+ });
+ var _this = this;
+ _this.renderTemplate();
+ _this.image = _this.$.find(".Ldt-ImageDisplay-Container");
-IriSP.Widgets.ImageDisplay.prototype.update = function(annotation) {
- // Update the widget with data corresponding to the annotation
- this.image.css("background-image", "url(" + annotation.thumbnail + ")");
- this.image.attr("title", IriSP.textFieldHtml(annotation.title) + " - " + annotation.begin.toString());
+ _this.$.find(".Ldt-ImageDisplay-Overlay-Left").on("click", function () {
+ _this.navigate(-1);
+ });
+ _this.$.find(".Ldt-ImageDisplay-Overlay-Right").on("click", function () {
+ _this.navigate(+1);
+ });
+
+ _annotations.forEach(function (_a) {
+ _a.on("enter", function () {
+ _this.update(_a);
+ });
+ });
+ if (_annotations.length) _this.update(_annotations[0]);
+ }
+ };
};
-IriSP.Widgets.ImageDisplay.prototype.draw = function() {
- var _annotations = this.getWidgetAnnotations().sortBy(function(_annotation) {
- return _annotation.begin;
- });
- var _this = this;
- _this.renderTemplate();
- _this.image = _this.$.find(".Ldt-ImageDisplay-Container");
-
- _this.$.find(".Ldt-ImageDisplay-Overlay-Left").on("click", function () { _this.navigate(-1); });
- _this.$.find(".Ldt-ImageDisplay-Overlay-Right").on("click", function () { _this.navigate(+1); });
-
- _annotations.forEach(function(_a) {
- _a.on("enter", function() {
- _this.update(_a);
- });
- });
- if (_annotations.length)
- _this.update(_annotations[0]);
-}
+export { ImageDisplay, imageDisplayStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/ImageDisplay.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,36 @@
+.Ldt-ImageDisplay-Container {
+ width: 100%;
+ height: 100%;
+ background-color: white;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: contain;
+}
+
+.Ldt-ImageDisplay-Image {
+ max-width: 100%;
+ max-height: 100%;
+}
+
+.Ldt-ImageDisplay-Overlay {
+ width: 30%;
+ min-width: 20px;
+ height: 100%;
+ opacity: 0.1;
+ position: absolute;
+ top: 0px;
+ bottom: 0px;
+}
+
+.Ldt-ImageDisplay-Overlay:hover {
+}
+
+.Ldt-ImageDisplay-Overlay-Left {
+ left: 0px;
+ cursor: url(img/left_arrow.svg) 20 20, pointer;
+}
+
+.Ldt-ImageDisplay-Overlay-Right {
+ right: 0px;
+ cursor: url(img/right_arrow.svg) 20 20, pointer;
+}
--- a/src/widgets/JwpPlayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/JwpPlayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,122 +1,132 @@
-IriSP.Widgets.JwpPlayer = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+// JwpPlayer
-IriSP.Widgets.JwpPlayer.prototype = new IriSP.Widgets.Widget();
+import { Player } from "jwplayer";
-IriSP.Widgets.JwpPlayer.prototype.defaults = {
-};
+const JwpPlayerWidget = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.JwpPlayer.prototype.draw = function() {
-
- var _opts = {},
- _player = jwplayer(this.$[0]),
+ static defaults = {};
+
+ draw() {
+ var _opts = {},
+ _player = Player(this.$[0]),
_seekPause = false,
_pauseState = true;
-
- if (typeof this.video === "undefined") {
+
+ if (typeof this.video === "undefined") {
this.video = this.media.video;
- }
-
- _opts.file = this.video;
- _opts.flashplayer = IriSP.getLib("jwPlayerSWF");
- _opts.primary = "flash";
- _opts.fallback = false;
- _opts.controls = false;
- _opts.width = this.width;
- if (this.height) {
+ }
+
+ _opts.file = this.video;
+ _opts.primary = "flash";
+ _opts.fallback = false;
+ _opts.controls = false;
+ _opts.width = this.width;
+ if (this.height) {
_opts.height = this.height;
- }
-
- if (this.autostart) { // There seems to be an autostart bug
+ }
+
+ if (this.autostart) {
+ // There seems to be an autostart bug
//_opts.autostart = true;
//_pauseState = false;
//this.media.trigger("play");
- }
-
- if (this.url_transform) {
+ }
+
+ if (this.url_transform) {
_opts.file = this.url_transform(_opts.file);
- }
+ }
- // Binding functions to jwplayer
+ // Binding functions to jwplayer
- var _media = this.media;
-
- _media.on("setcurrenttime", function(_milliseconds) {
+ var _media = this.media;
+
+ _media.on("setcurrenttime", function (_milliseconds) {
_seekPause = _pauseState;
_player.seek(_milliseconds / 1000);
- });
-
- _media.on("setvolume", function(_vol) {
- _player.setVolume(Math.floor(_vol*100));
+ });
+
+ _media.on("setvolume", function (_vol) {
+ _player.setVolume(Math.floor(_vol * 100));
_media.volume = _vol;
- });
-
- _media.on("setmuted", function(_muted) {
+ });
+
+ _media.on("setmuted", function (_muted) {
_player.setMute(_muted);
_media.muted = _muted;
- });
-
- _media.on("setplay", function() {
+ });
+
+ _media.on("setplay", function () {
_player.play(true);
_media.paused = false;
- });
-
- _media.on("setpause", function() {
+ });
+
+ _media.on("setpause", function () {
_player.pause(true);
_media.paused = true;
- });
-
- // Binding jwplater events to media
-
- function getVolume() {
+ });
+
+ // Binding jwplater events to media
+
+ function getVolume() {
_media.muted = _player.getMute();
_media.volume = _player.getVolume() / 100;
- }
-
- _opts.events = {
- onReady: function() {
- getVolume();
- _media.currentTime = new IriSP.Model.Time(1000*_player.getPosition() || 0);
- _media.trigger("loadedmetadata");
+ }
+
+ _opts.events = {
+ onReady: function () {
+ getVolume();
+ _media.currentTime = new ns.Model.Time(
+ 1000 * _player.getPosition() || 0
+ );
+ _media.trigger("loadedmetadata");
},
- onTime: function(_progress) {
- if (_seekPause) {
- _player.pause(true);
- _seekPause = false;
- } else {
- if (_pauseState && _player.getState() === "PLAYING") {
- _pauseState = false;
- _media.trigger("play");
- }
+ onTime: function (_progress) {
+ if (_seekPause) {
+ _player.pause(true);
+ _seekPause = false;
+ } else {
+ if (_pauseState && _player.getState() === "PLAYING") {
+ _pauseState = false;
+ _media.trigger("play");
}
- _media.trigger("timeupdate", new IriSP.Model.Time(_progress.position * 1000));
+ }
+ _media.trigger(
+ "timeupdate",
+ new ns.Model.Time(_progress.position * 1000)
+ );
},
- onPlay: function() {
- if (!_seekPause) {
- _pauseState = false;
- _media.trigger("play");
- }
+ onPlay: function () {
+ if (!_seekPause) {
+ _pauseState = false;
+ _media.trigger("play");
+ }
},
- onPause: function() {
- _pauseState = true;
- _media.trigger("pause");
+ onPause: function () {
+ _pauseState = true;
+ _media.trigger("pause");
},
- onSeek: function() {
- _media.trigger("seeked");
+ onSeek: function () {
+ _media.trigger("seeked");
},
- onMute: function(_event) {
- _media.muted = _event.mute;
- _media.trigger("volumechange");
+ onMute: function (_event) {
+ _media.muted = _event.mute;
+ _media.trigger("volumechange");
+ },
+ onVolume: function (_event) {
+ _media.volume = _event.volume / 100;
+ _media.trigger("volumechange");
},
- onVolume: function(_event) {
- _media.volume = _event.volume / 100;
- _media.trigger("volumechange");
- }
- };
-
- _player = _player.setup(_opts);
-
- this.jwplayer = _player;
-
-};
\ No newline at end of file
+ };
+
+ _player = _player.setup(_opts);
+
+ this.jwplayer = _player;
+ }
+ };
+};
+
+export { JwpPlayerWidget as JwpPlayer };
--- a/src/widgets/KnowledgeConcierge.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-.Ldt-Kc-Slider {
- width: 100%; height: 8px; margin: 3px 0; font-size: 8px;
-}
-
-.Ldt-Kc-Canvas {
- border: 1px solid #999999;
-}
-
-.Ldt-Kc-Related {
- display: none;
-}
-
-.Ldt-Kc-Related-Empty {
- text-align: center; font-weight: bold; font-style: italic;
- font-size: 14px; color: #999999; margin: 5px 0;
-}
-
-.Ldt-Kc-Related h2 {
- border: none;
- color: #330099;
- font-size: 18px;
- margin: 8px 0 2px;
- padding: 0 5px;
-}
-
-h3.Ldt-Kc-For-Keywords {
- border-bottom: 1px solid #666666;
- color: #000000;
- font-size: 12px;
- margin: 2px 0 5px;
- padding: 0 5px 5px;
- text-align: right;
-}
-
-.Ldt-Kc-Keywords {
- color: #d000c0; font-weight: bold;
-}
-
-.Ldt-Kc-Related-Item {
- width: 235px; float: left; margin: 4px 0; padding: 4px 0;
-}
-
-.Ldt-Kc-Related-Item:hover {
- background: #e8e8e8;
-}
-
-.Ldt-Kc-Related-Item:nth-child(even) {
- margin-left: 10px;
-}
-
-.Ldt-Kc-Related-Item a {
- text-decoration: none;
-}
-
-.Ldt-Kc-Related-Item img {
- max-width: 80px; max-height: 60px; float: left;
-}
-
-.Ldt-Kc-Related-Item h3, .Ldt-Kc-Related-Item p {
- margin: 0 0 5px 85px;
-}
-
-.Ldt-Kc-Related-Item h3 {
- font-size: 14px; font-weight: 600;
-}
-
-.Ldt-Kc-Related-Item h3 a {
- color: #330099;
-}
-
-.Ldt-Kc-Related-Item h3 a:hover {
- text-decoration: underline;
-}
-
-.Ldt-Kc-Related-Item p {
- font-size: 12px;
-}
-
-.Ldt-Kc-Item-Duration {
- color: #c00000;
-}
-
-.Ldt-Kc-Row {
- border-bottom: 1px solid #CCCCCC;
- clear: both; float: left; width: 100%;
-}
-
-.Ldt-Kc-Clearer {
- clear: both;
-}
-
-.Ldt-Kc-Waiting {
- display: none;
- height: 128px;
- width: 100%;
- background:url(img/loader.gif) center no-repeat;
-}
--- a/src/widgets/KnowledgeConcierge.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/KnowledgeConcierge.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,333 +1,431 @@
-IriSP.Widgets.KnowledgeConcierge = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+// KnowledgeConcierge
+
+import knowledgeConciergeStyles from "./KnowledgeConcierge.module.css";
-IriSP.Widgets.KnowledgeConcierge.prototype = new IriSP.Widgets.Widget();
+import Processing from "processing";
+import Mustache from "mustache";
+
+const KnowledgeConcierge = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.KnowledgeConcierge.prototype.defaults = {
- width: 600,
- height: 500,
- sketch_path: "tmgraph",
- sketch_files: [ "tmgraph.pde", "physics.pde", "model.pde", "javascript.pde", "menu.pde", "event.pde", "constants.pde", "initialdata.pde"],
- kc_api_root: "/kn-concierge/",
- related_api_endpoint: "",
- use_word_boundaries: false,
- related_data_type: 'json', // SET TO "jsonp" FOR CROSS-DOMAIN OPERATION
- related_count: 8,
-};
+ static defaults = {
+ width: 600,
+ height: 500,
+ sketch_path: "tmgraph",
+ sketch_files: [
+ "tmgraph.pde",
+ "physics.pde",
+ "model.pde",
+ "javascript.pde",
+ "menu.pde",
+ "event.pde",
+ "constants.pde",
+ "initialdata.pde",
+ ],
+ kc_api_root: "/kn-concierge/",
+ related_api_endpoint: "",
+ use_word_boundaries: false,
+ related_data_type: "json", // SET TO "jsonp" FOR CROSS-DOMAIN OPERATION
+ related_count: 8,
+ };
-IriSP.Widgets.KnowledgeConcierge.prototype.messages = {
- "fr": {
+ static messages = {
+ fr: {
related_videos: "Vidéos liées",
duration_: "Durée\u00a0:",
for_keywords_: "pour le(s) mots-clé(s)\u00a0:",
- no_matching_videos: "Pas de vidéos correspondantes"
- },
- "en": {
+ no_matching_videos: "Pas de vidéos correspondantes",
+ },
+ en: {
related_videos: "Related Videos",
duration_: "Duration:",
for_keywords_: "for keyword(s):",
- no_matching_videos: "No matching videos"
- }
-};
+ no_matching_videos: "No matching videos",
+ },
+ };
-IriSP.Widgets.KnowledgeConcierge.prototype.template =
- '<div class="Ldt-Kc-Slider"></div><canvas class="Ldt-Kc-Canvas" />'
- + '<div class="Ldt-Kc-Related"><h2>{{ l10n.related_videos }}</h2>'
- + '<h3 class="Ldt-Kc-For-Keywords">{{l10n.for_keywords_}} <span class="Ldt-Kc-Keywords"></span></h3>'
- + '<div class="Ldt-Kc-Waiting"></div>'
- + '<div class="Ldt-Kc-Related-List"></div></div>';
+ template =
+ '<div class="Ldt-Kc-Slider"></div><canvas class="Ldt-Kc-Canvas" />' +
+ '<div class="Ldt-Kc-Related"><h2>{{ l10n.related_videos }}</h2>' +
+ '<h3 class="Ldt-Kc-For-Keywords">{{l10n.for_keywords_}} <span class="Ldt-Kc-Keywords"></span></h3>' +
+ '<div class="Ldt-Kc-Waiting"></div>' +
+ '<div class="Ldt-Kc-Related-List"></div></div>';
-IriSP.Widgets.KnowledgeConcierge.prototype.draw = function() {
- this.renderTemplate();
- var _canvasHeight = this.height - 16,
+ draw() {
+ this.renderTemplate();
+ var _canvasHeight = this.height - 16,
_canvasWidth = this.width - 2,
_canvas = this.$.find(".Ldt-Kc-Canvas"),
- _tmpId = IriSP._.uniqueId("Processing-"),
+ _tmpId = _.uniqueId("Processing-"),
_slider = this.$.find(".Ldt-Kc-Slider"),
- radius = .375 * Math.min(_canvasHeight, _canvasWidth);
- _canvas.attr({
- width: _canvasWidth,
- height: _canvasHeight,
- id: _tmpId
- }).css({
- width: _canvasWidth,
- height: _canvasHeight
- });
- var _this = this,
- _pjsfiles = IriSP._(this.sketch_files).map(function(_f) { return _this.sketch_path + "/" + _f; }),
+ radius = 0.375 * Math.min(_canvasHeight, _canvasWidth);
+ _canvas
+ .attr({
+ width: _canvasWidth,
+ height: _canvasHeight,
+ id: _tmpId,
+ })
+ .css({
+ width: _canvasWidth,
+ height: _canvasHeight,
+ });
+ var _this = this,
+ _pjsfiles = _(this.sketch_files).map(function (_f) {
+ return _this.sketch_path + "/" + _f;
+ }),
_selectedText = "",
currentNodesList = "",
relatedCache = {},
relatedRequests = {},
- relatedTemplate = '<div class="Ldt-Kc-Related-Item"><a href="{{ widget.video_url_base }}{{ media.iri_id }}#keyword={{ escaped_keyword }}"><img src="{{ media.image }}"></a>'
- + '<h3><a href="{{ widget.video_url_base }}{{ media.iri_id }}#keyword={{ escaped_keyword }}">{{ media.title }}</a></h3><p>{{ description }}</p>'
- + '<p>{{ widget.l10n.duration_ }} <span class="Ldt-Kc-Item-Duration">{{ duration }}</span></p>'
- + '</a><div class="Ldt-Kc-Clearer"></div></div>';
-
- Processing.loadSketchFromSources(_canvas[0],_pjsfiles);
-
- function renderRelated() {
+ relatedTemplate =
+ '<div class="Ldt-Kc-Related-Item"><a href="{{ widget.video_url_base }}{{ media.iri_id }}#keyword={{ escaped_keyword }}"><img src="{{ media.image }}"></a>' +
+ '<h3><a href="{{ widget.video_url_base }}{{ media.iri_id }}#keyword={{ escaped_keyword }}">{{ media.title }}</a></h3><p>{{ description }}</p>' +
+ '<p>{{ widget.l10n.duration_ }} <span class="Ldt-Kc-Item-Duration">{{ duration }}</span></p>' +
+ '</a><div class="Ldt-Kc-Clearer"></div></div>';
+
+ Processing.loadSketchFromSources(_canvas[0], _pjsfiles);
+
+ function renderRelated() {
var keywords = currentNodesList;
_this.$.find(".Ldt-Kc-Related").show();
if (typeof relatedCache[keywords] === "undefined") {
- return;
+ return;
}
_this.$.find(".Ldt-Kc-Waiting").hide();
if (relatedCache[keywords].length) {
- var _html = '<div class="Ldt-Kc-Row">';
- IriSP._(relatedCache[keywords]).each(function(media, i) {
- var _tmpldata = {
- widget: _this,
- media: media,
- description: media.description.replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{120,140})[\s].+$/m,'$1…'),
- duration: new IriSP.Model.Time(media.duration).toString(),
- escaped_keyword: encodeURIComponent(keywords.split(",")[0])
- };
- _html += Mustache.to_html(relatedTemplate, _tmpldata);
- if (i % 2) {
- _html += '</div><div class="Ldt-Kc-Row">';
- }
- });
- _html += '</div>';
- _this.$.find(".Ldt-Kc-Related-List").html(_html);
+ var _html = '<div class="Ldt-Kc-Row">';
+ _(relatedCache[keywords]).each(function (media, i) {
+ var _tmpldata = {
+ widget: _this,
+ media: media,
+ description: media.description
+ .replace(/(\n|\r|\r\n)/gm, " ")
+ .replace(/(^.{120,140})[\s].+$/m, "$1…"),
+ duration: new ns.Model.Time(media.duration).toString(),
+ escaped_keyword: encodeURIComponent(keywords.split(",")[0]),
+ };
+ _html += Mustache.render(relatedTemplate, _tmpldata);
+ if (i % 2) {
+ _html += '</div><div class="Ldt-Kc-Row">';
+ }
+ });
+ _html += "</div>";
+ _this.$.find(".Ldt-Kc-Related-List").html(_html);
} else {
- _this.$.find(".Ldt-Kc-Related-List").html("<p class='Ldt-Kc-Related-Empty'>" + _this.l10n.no_matching_videos + "</p>");
+ _this.$.find(".Ldt-Kc-Related-List").html(
+ "<p class='Ldt-Kc-Related-Empty'>" +
+ _this.l10n.no_matching_videos +
+ "</p>"
+ );
}
- }
+ }
- function triggerSearch(text) {
+ function triggerSearch(text) {
if (_selectedText !== text) {
- _selectedText = text;
- _this.source.getAnnotations().search(text);
+ _selectedText = text;
+ _this.source.getAnnotations().search(text);
}
- }
-
- function searchNodes(tags) {
- var _tlist = (_this.use_word_boundaries ? IriSP._(tags).map(function(t) { return "\\\\y" + t + "\\\\y" }) : tags),
- _q = "(?i)(" + _tlist.join("|") + ")";
+ }
+
+ function searchNodes(tags) {
+ var _tlist = _this.use_word_boundaries
+ ? _(tags).map(function (t) {
+ return "\\\\y" + t + "\\\\y";
+ })
+ : tags,
+ _q = "(?i)(" + _tlist.join("|") + ")";
jQuery.getJSON(
- _this.kc_api_root + "topics.jsp",
- {
- proj: _this.project_id,
- q: _q
- },
- function(data) {
- if (data && data.items && data.items.length) {
- for (var i=0, l=data.items.length; i<l; i++) {
- var node = data.items[i];
- if (i == 0) {
- _pjs.initNode(node.id, node.name, node.grp, node.uid, node.proj);
- var node = _pjs.findNode(node.id, node.proj);
- } else {
- var node = _pjs.newNode(node.id, node.name, node.grp, node.uid, node.proj);
- node.root = true;
- node.fix();
- }
- _fns.countassoc(node.id, node.proj);
- if (l > 1) {
- node.position(Math.floor(radius*Math.sin(2 * Math.PI * i / l)),Math.floor(radius*Math.cos(2 * Math.PI * i / l)));
- }
- }
+ _this.kc_api_root + "topics.jsp",
+ {
+ proj: _this.project_id,
+ q: _q,
+ },
+ function (data) {
+ if (data && data.items && data.items.length) {
+ for (var i = 0, l = data.items.length; i < l; i++) {
+ var node = data.items[i];
+ if (i == 0) {
+ _pjs.initNode(
+ node.id,
+ node.name,
+ node.grp,
+ node.uid,
+ node.proj
+ );
+ var node = _pjs.findNode(node.id, node.proj);
+ } else {
+ var node = _pjs.newNode(
+ node.id,
+ node.name,
+ node.grp,
+ node.uid,
+ node.proj
+ );
+ node.root = true;
+ node.fix();
}
+ _fns.countassoc(node.id, node.proj);
+ if (l > 1) {
+ node.position(
+ Math.floor(radius * Math.sin((2 * Math.PI * i) / l)),
+ Math.floor(radius * Math.cos((2 * Math.PI * i) / l))
+ );
+ }
+ }
}
+ }
);
- }
-
- function showRelated(nodetexts) {
+ }
+
+ function showRelated(nodetexts) {
currentNodesList = nodetexts;
_this.$.find(".Ldt-Kc-Related-List").html("");
- _this.$.find(".Ldt-Kc-Keywords").html(nodetexts.replace(/\,/g,", "));
+ _this.$.find(".Ldt-Kc-Keywords").html(nodetexts.replace(/\,/g, ", "));
if (typeof relatedCache[nodetexts] === "undefined") {
- _this.$.find(".Ldt-Kc-Waiting").show();
- if (relatedRequests[nodetexts]) {
- return;
+ _this.$.find(".Ldt-Kc-Waiting").show();
+ if (relatedRequests[nodetexts]) {
+ return;
+ }
+ relatedRequests[nodetexts] = true;
+ ns.jQuery.ajax({
+ url: _this.related_api_endpoint,
+ data: {
+ format: _this.related_data_type,
+ keywords: nodetexts,
+ },
+ dataType: _this.related_data_type,
+ success: function (data) {
+ relatedCache[nodetexts] = ns
+ ._(data.objects)
+ .chain()
+ .filter(function (o) {
+ return o.iri_id !== _this.media.id;
+ })
+ .sortBy(function (o) {
+ return -o.score;
+ })
+ .first(_this.related_count)
+ .value();
+ renderRelated();
+ },
+ });
+ } else {
+ renderRelated();
+ }
+ }
+
+ function rootNode(id, proj) {
+ jQuery.getJSON(
+ _this.kc_api_root + "topic.jsp",
+ {
+ id: id,
+ proj: proj,
+ },
+ function (response) {
+ if (response != null && response.items.length > 0) {
+ item = response.items[0];
+ _pjs.initNode(item.id, item.name, item.grp, item.uid, item.proj);
+ _fns.countassoc(item.id, item.proj);
}
- relatedRequests[nodetexts] = true;
- IriSP.jQuery.ajax({
- url: _this.related_api_endpoint,
- data: {
- format: _this.related_data_type,
- keywords: nodetexts
- },
- dataType: _this.related_data_type,
- success: function(data) {
- relatedCache[nodetexts] = IriSP._(data.objects)
- .chain()
- .filter(function(o) {
- return o.iri_id !== _this.media.id;
- })
- .sortBy(function(o) {
- return - o.score;
- })
- .first(_this.related_count)
- .value();
- renderRelated();
- }
- });
- } else {
- renderRelated();
- }
- }
-
- function rootNode(id, proj) {
- jQuery.getJSON(
- _this.kc_api_root + "topic.jsp",
- {
- id: id,
- proj: proj
- },
- function(response) {
- if (response != null && response.items.length > 0){
- item = response.items[0];
- _pjs.initNode(item.id, item.name, item.grp, item.uid, item.proj);
- _fns.countassoc(item.id, item.proj);
- }
- }
+ }
);
- }
-
- function bindJavascript() {
+ }
+
+ function bindJavascript() {
_pjs = Processing.getInstanceById(_tmpId);
if (_pjs && typeof _pjs.bindJavascript === "function") {
- setTimeout(function() {
- _pjs.bindJavascript(_fns);
- _pjs.setSize(_canvasWidth,_canvasHeight);
- var _edit = false,
- _teamMode = true;
- _pjs.saveMode("en",false,_teamMode,false,"both",_edit);
- rootNode(_this.topic_id, _this.project_id);
- _slider.slider({
- min: -20,
- max: 20,
- value: 0,
- range: "min",
- slide: function(event, ui) {
- _pjs.zoom(Math.exp(ui.value / 10));
- }
- });
- }, 1000);
+ setTimeout(function () {
+ _pjs.bindJavascript(_fns);
+ _pjs.setSize(_canvasWidth, _canvasHeight);
+ var _edit = false,
+ _teamMode = true;
+ _pjs.saveMode("en", false, _teamMode, false, "both", _edit);
+ rootNode(_this.topic_id, _this.project_id);
+ _slider.slider({
+ min: -20,
+ max: 20,
+ value: 0,
+ range: "min",
+ slide: function (event, ui) {
+ _pjs.zoom(Math.exp(ui.value / 10));
+ },
+ });
+ }, 1000);
} else {
- setTimeout(bindJavascript, 1000);
+ setTimeout(bindJavascript, 1000);
}
- }
- var currentSelection = null;
- var _fns = {
- adjacentnodes: function(id, proj, adj, both) {
- jQuery.ajax({
- url: _this.kc_api_root + "associations-bd.jsp",
- cache: false,
- data: {
- id: id,
- proj: proj,
- both: both,
- adj: adj
- },
- success: function(response) {
- if (response.items.length > 0){
- for(i = 0, end = response.items.length; i < end; i++) {
- item = response.items[i];
- _pjs.addEdge(item.asc_id, item.id, item.from_proj, item.to_id, item.to_proj,
- item.r_name, item.r_from, item.r_to, item.uid, item.proj);
- _pjs.setNodeName( item.id, item.from_proj,item.name);
- _pjs.setNodeValue(item.id, item.from_proj,item.name, item.grp, item.abst, item.from_uid);
- if (item.from_assoc!=null) {
- _pjs.setNodeAssoc(item.id, item.from_proj, item.from_assoc);
- }
- _pjs.setNodeName( item.to_id,item.to_proj, item.to_name);
- _pjs.setNodeValue(item.to_id,item.to_proj, item.to_name,item.to_grp,item.to_abst,item.to_uid);
- if (item.to_assoc!=null) {
- _pjs.setNodeAssoc(item.to_id, item.to_proj, item.to_assoc);
- }
- }
- return response;
- } else {
- //.debug('No such topic.');
- return null;
- }
+ }
+ var currentSelection = null;
+ var _fns = {
+ adjacentnodes: function (id, proj, adj, both) {
+ jQuery.ajax({
+ url: _this.kc_api_root + "associations-bd.jsp",
+ cache: false,
+ data: {
+ id: id,
+ proj: proj,
+ both: both,
+ adj: adj,
+ },
+ success: function (response) {
+ if (response.items.length > 0) {
+ for (i = 0, end = response.items.length; i < end; i++) {
+ item = response.items[i];
+ _pjs.addEdge(
+ item.asc_id,
+ item.id,
+ item.from_proj,
+ item.to_id,
+ item.to_proj,
+ item.r_name,
+ item.r_from,
+ item.r_to,
+ item.uid,
+ item.proj
+ );
+ _pjs.setNodeName(item.id, item.from_proj, item.name);
+ _pjs.setNodeValue(
+ item.id,
+ item.from_proj,
+ item.name,
+ item.grp,
+ item.abst,
+ item.from_uid
+ );
+ if (item.from_assoc != null) {
+ _pjs.setNodeAssoc(item.id, item.from_proj, item.from_assoc);
+ }
+ _pjs.setNodeName(item.to_id, item.to_proj, item.to_name);
+ _pjs.setNodeValue(
+ item.to_id,
+ item.to_proj,
+ item.to_name,
+ item.to_grp,
+ item.to_abst,
+ item.to_uid
+ );
+ if (item.to_assoc != null) {
+ _pjs.setNodeAssoc(item.to_id, item.to_proj, item.to_assoc);
+ }
}
- });
+ return response;
+ } else {
+ //.debug('No such topic.');
+ return null;
+ }
+ },
+ });
},
- setscale: function(scl){
- _slider.slider("value", 10*Math.log(scl));
+ setscale: function (scl) {
+ _slider.slider("value", 10 * Math.log(scl));
},
- countassoc: function(id, proj) {
- jQuery.ajax({
- url: _this.kc_api_root + "count-assoc.jsp",
- data: {
- id: id,
- proj: proj
- },
- success: function(response) {
- if (response.items.length > 0){
- for(i = 0, end = response.items.length; i < end; i++) {
- item = response.items[i];
- _pjs.setNodeValue(item.id, item.proj, item.name, item.grp, item.abst);
- if (item.assoc!=null) _pjs.setNodeAssoc(item.id, item.proj, item.assoc);
- if (item.mass!=null) _pjs.setNodeMass( item.id, item.proj, item.mass);
- }
- }
+ countassoc: function (id, proj) {
+ jQuery.ajax({
+ url: _this.kc_api_root + "count-assoc.jsp",
+ data: {
+ id: id,
+ proj: proj,
+ },
+ success: function (response) {
+ if (response.items.length > 0) {
+ for (i = 0, end = response.items.length; i < end; i++) {
+ item = response.items[i];
+ _pjs.setNodeValue(
+ item.id,
+ item.proj,
+ item.name,
+ item.grp,
+ item.abst
+ );
+ if (item.assoc != null)
+ _pjs.setNodeAssoc(item.id, item.proj, item.assoc);
+ if (item.mass != null)
+ _pjs.setNodeMass(item.id, item.proj, item.mass);
}
- });
+ }
+ },
+ });
},
- username: function() {
- var nodes = _pjs.getNodes().values().toArray(),
- nodetexts = IriSP._(nodes).chain().pluck("name").sortBy().value().join(",");
- showRelated(nodetexts);
+ username: function () {
+ var nodes = _pjs.getNodes().values().toArray(),
+ nodetexts = ns
+ ._(nodes)
+ .chain()
+ .map("name")
+ .sortBy()
+ .value()
+ .join(",");
+ showRelated(nodetexts);
},
- mousemove: function(selection) {
- if (selection !== currentSelection) {
- if (selection) {
- triggerSearch(selection.name);
- }
- currentSelection = selection;
- }
- },
- click: function(selection) {
+ mousemove: function (selection) {
+ if (selection !== currentSelection) {
if (selection) {
- triggerSearch(selection.name);
- showRelated(selection.name);
- } else {
- triggerSearch();
+ triggerSearch(selection.name);
}
- }
- };
- var uselessfuncts = [
- "selectnode", "selectedge", "topicnode","group_shapes",
- "allbackup", "allretrieve", "new_topic", "pedia", "set_mode",
- "new_relation", "startexpand", "endexpand", "new_select" //, "mouseover" //, "username"
- ];
-
- IriSP._(uselessfuncts).each(function(funcname) {
- _fns[funcname] = function() {
-// console.log("Function", funcname, "called with arguments", arguments);
- }
- });
-
- this.getWidgetAnnotations().forEach(function(annotation) {
- annotation.on("click", function() {
- var _tags = annotation.getTagTexts();
- if (_tags.length) {
- searchNodes(_tags);
- }
+ currentSelection = selection;
+ }
+ },
+ click: function (selection) {
+ if (selection) {
+ triggerSearch(selection.name);
+ showRelated(selection.name);
+ } else {
+ triggerSearch();
+ }
+ },
+ };
+ var uselessfuncts = [
+ "selectnode",
+ "selectedge",
+ "topicnode",
+ "group_shapes",
+ "allbackup",
+ "allretrieve",
+ "new_topic",
+ "pedia",
+ "set_mode",
+ "new_relation",
+ "startexpand",
+ "endexpand",
+ "new_select", //, "mouseover" //, "username"
+ ];
+
+ _(uselessfuncts).each(function (funcname) {
+ _fns[funcname] = function () {
+ // console.log("Function", funcname, "called with arguments", arguments);
+ };
+ });
+
+ this.getWidgetAnnotations().forEach(function (annotation) {
+ annotation.on("click", function () {
+ var _tags = annotation.getTagTexts();
+ if (_tags.length) {
+ searchNodes(_tags);
+ }
});
- });
-
- this.source.getTags().forEach(function(tag) {
- tag.on("click", function() {
- if (tag.title) {
- searchNodes([tag.title]);
- }
+ });
+
+ this.source.getTags().forEach(function (tag) {
+ tag.on("click", function () {
+ if (tag.title) {
+ searchNodes([tag.title]);
+ }
});
- });
-
- var keywmatch = document.location.hash.match(/keyword=([^#?&]+)/);
- if (keywmatch) {
- this.player.on("widgets-loaded", function() {
- triggerSearch(decodeURIComponent(keywmatch[1]));
+ });
+
+ var keywmatch = document.location.hash.match(/keyword=([^#?&]+)/);
+ if (keywmatch) {
+ this.player.on("widgets-loaded", function () {
+ triggerSearch(decodeURIComponent(keywmatch[1]));
});
+ }
+
+ bindJavascript();
}
-
- bindJavascript();
-
+ };
};
+
+export { KnowledgeConcierge, knowledgeConciergeStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/KnowledgeConcierge.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,97 @@
+.Ldt-Kc-Slider {
+ width: 100%; height: 8px; margin: 3px 0; font-size: 8px;
+}
+
+.Ldt-Kc-Canvas {
+ border: 1px solid #999999;
+}
+
+.Ldt-Kc-Related {
+ display: none;
+}
+
+.Ldt-Kc-Related-Empty {
+ text-align: center; font-weight: bold; font-style: italic;
+ font-size: 14px; color: #999999; margin: 5px 0;
+}
+
+.Ldt-Kc-Related h2 {
+ border: none;
+ color: #330099;
+ font-size: 18px;
+ margin: 8px 0 2px;
+ padding: 0 5px;
+}
+
+h3.Ldt-Kc-For-Keywords {
+ border-bottom: 1px solid #666666;
+ color: #000000;
+ font-size: 12px;
+ margin: 2px 0 5px;
+ padding: 0 5px 5px;
+ text-align: right;
+}
+
+.Ldt-Kc-Keywords {
+ color: #d000c0; font-weight: bold;
+}
+
+.Ldt-Kc-Related-Item {
+ width: 235px; float: left; margin: 4px 0; padding: 4px 0;
+}
+
+.Ldt-Kc-Related-Item:hover {
+ background: #e8e8e8;
+}
+
+.Ldt-Kc-Related-Item:nth-child(even) {
+ margin-left: 10px;
+}
+
+.Ldt-Kc-Related-Item a {
+ text-decoration: none;
+}
+
+.Ldt-Kc-Related-Item img {
+ max-width: 80px; max-height: 60px; float: left;
+}
+
+.Ldt-Kc-Related-Item h3, .Ldt-Kc-Related-Item p {
+ margin: 0 0 5px 85px;
+}
+
+.Ldt-Kc-Related-Item h3 {
+ font-size: 14px; font-weight: 600;
+}
+
+.Ldt-Kc-Related-Item h3 a {
+ color: #330099;
+}
+
+.Ldt-Kc-Related-Item h3 a:hover {
+ text-decoration: underline;
+}
+
+.Ldt-Kc-Related-Item p {
+ font-size: 12px;
+}
+
+.Ldt-Kc-Item-Duration {
+ color: #c00000;
+}
+
+.Ldt-Kc-Row {
+ border-bottom: 1px solid #CCCCCC;
+ clear: both; float: left; width: 100%;
+}
+
+.Ldt-Kc-Clearer {
+ clear: both;
+}
+
+.Ldt-Kc-Waiting {
+ display: none;
+ height: 128px;
+ width: 100%;
+ background:url(img/loader.gif) center no-repeat;
+}
--- a/src/widgets/LatestAnnotation.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-.Ldt-LatestAnnotation{
- background: url(img/pinstripe.png);
- width: 535px;
- max-height: 180px;
- margin: 0px;
- margin-top: 4px;
- border-style: solid;
- border-width: 1px;
- border-color: #b7b7b7;
-}
-
-.Ldt-LatestAnnotation-Element{
- margin: 5px;
- display: inline-block;
- vertical-align: top;
-}
-
-.Ldt-LatestAnnotation-Box{
- background-color: #ffffff;
- margin: 3px;
-}
-
-.Ldt-LatestAnnotation-CreationDate{
- color: #f7268e;
-}
-
-.Ldt-LatestAnnotation-Content{
- text-align: justify;
-}
-
-.Ldt-LatestAnnotation-Title{
- color: #0068c4;
- font-size: 14px;
- font-weight: bold;
-}
-
-.Ldt-LatestAnnotation-NoAnnotation{
- font-size: 14px;
- font-weight: bold;
-}
-
-.Ldt-LatestAnnotation-CopyEditButton{
- display: inline-block;
- background-color: #d93c71;
- color: #ffffff;
- float: right;
- cursor: pointer;
- height: 14px;
- width: 100px;
- margin: 2px;
- padding: 2px;
- font-size: 11px;
- border: 1px solid;
- border-color: #eca3bc #631e34 #36101c #e16e93;
- cursor: pointer;
- text-align: center;
- vertical-align: middle;
-}
-
-.Ldt-LatestAnnotation-CopyEditButton:hover{
- background-color: #e15581;
- border-color: #222222 #e87d9f #f0adc3 #68273c;
-}
\ No newline at end of file
--- a/src/widgets/LatestAnnotation.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/LatestAnnotation.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,303 +1,335 @@
/* Widget that displays the last annotation that was posted, optionally for current segment, optionally for a given username */
+import Mustache from "mustache";
+import jQuery from "jquery";
+
+import latestAnnotationStyles from "./LatestAnnotation.module.css";
-IriSP.Widgets.LatestAnnotation = function(player, config){
- IriSP.Widgets.Widget.call(this, player, config);
-};
+const LatestAnnotation = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.LatestAnnotation.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.LatestAnnotation.prototype.defaults = {
- pre_draw_callback: function(){
+ static defaults = {
+ pre_draw_callback: function () {
return this.importUsers();
- },
- from_user: false,
- filter_by_segment: false,
- segments_annotation_type: "chap",
- hide_without_segment: false,
- annotation_type: "contribution",
- /*
- * Set to a username if you only want to display annotations from a given user
- */
- show_only_annotation_from_user: false,
- /*
- * Displays a button that copy currently displayed annotation into CreateAnnotation input field
- */
- copy_and_edit_button: false,
- hide_annotations_list: false,
- /*
- * Allows clicks on an annotation from Annotations to display the annotation content into this widget
- */
- selectable_annotations: false,
- empty_message: false,
- starts_hidden: false,
- show_header: false,
- custom_header: false,
- make_name_string_function: function(params){
+ },
+ from_user: false,
+ filter_by_segment: false,
+ segments_annotation_type: "chap",
+ hide_without_segment: false,
+ annotation_type: "contribution",
+ /*
+ * Set to a username if you only want to display annotations from a given user
+ */
+ show_only_annotation_from_user: false,
+ /*
+ * Displays a button that copy currently displayed annotation into CreateAnnotation input field
+ */
+ copy_and_edit_button: false,
+ hide_annotations_list: false,
+ /*
+ * Allows clicks on an annotation from Annotations to display the annotation content into this widget
+ */
+ selectable_annotations: false,
+ empty_message: false,
+ starts_hidden: false,
+ show_header: false,
+ custom_header: false,
+ make_name_string_function: function (params) {
return params.username ? params.username : "Anonymous";
- },
-};
+ },
+ };
-IriSP.Widgets.LatestAnnotation.prototype.messages = {
- fr : {
+ static messages = {
+ fr: {
copy_and_edit: "Copier et Editer",
- empty : "Aucune annotation à afficher",
- header: "Dernière annotation"
- },
- en: {
+ empty: "Aucune annotation à afficher",
+ header: "Dernière annotation",
+ },
+ en: {
copy_and_edit: "Copy and Edit",
empty: "No annotation to display",
- header: "Last annotation"
- }
-}
-
-IriSP.Widgets.LatestAnnotation.prototype.template =
- "{{#show_header}}"
- + "<p class='Ldt-LatestAnnotation-header'>"
- + "{{#custom_header}}{{custom_header}}{{/custom_header}}"
- + "{{^custom_header}}{{l10n.header}}{{/custom_header}}"
- + "</p>"
- + "{{/show_header}}"
- + "<div class='Ldt-LatestAnnotation'>"
- + "</div>";
+ header: "Last annotation",
+ },
+ };
-IriSP.Widgets.LatestAnnotation.prototype.annotationTemplate =
- "<div class='Ldt-LatestAnnotation-Box'>"
- + "{{#copy_and_edit_button}}<div class='Ldt-LatestAnnotation-CopyEditButton'>{{button_text}}</div>{{/copy_and_edit_button}}"
- + "<div class='Ldt-LatestAnnotation-Element Ldt-LatestAnnotation-CreationDate'>{{{annotation_created}}}</div>"
- + "<div class='Ldt-LatestAnnotation-Element Ldt-LatestAnnotation-Title'>{{{annotation_creator}}}{{#annotation_title}}: {{{annotation_title}}}{{/annotation_title}}</div>"
- + "<div class='Ldt-LatestAnnotation-Element Ldt-LatestAnnotation-Content'>"
- + "{{{annotation_content}}}"
- + "</div>"
- + "</div>"
+ static template =
+ "{{#show_header}}" +
+ "<p class='Ldt-LatestAnnotation-header'>" +
+ "{{#custom_header}}{{custom_header}}{{/custom_header}}" +
+ "{{^custom_header}}{{l10n.header}}{{/custom_header}}" +
+ "</p>" +
+ "{{/show_header}}" +
+ "<div class='Ldt-LatestAnnotation'>" +
+ "</div>";
+ static annotationTemplate =
+ "<div class='Ldt-LatestAnnotation-Box'>" +
+ "{{#copy_and_edit_button}}<div class='Ldt-LatestAnnotation-CopyEditButton'>{{button_text}}</div>{{/copy_and_edit_button}}" +
+ "<div class='Ldt-LatestAnnotation-Element Ldt-LatestAnnotation-CreationDate'>{{{annotation_created}}}</div>" +
+ "<div class='Ldt-LatestAnnotation-Element Ldt-LatestAnnotation-Title'>{{{annotation_creator}}}{{#annotation_title}}: {{{annotation_title}}}{{/annotation_title}}</div>" +
+ "<div class='Ldt-LatestAnnotation-Element Ldt-LatestAnnotation-Content'>" +
+ "{{{annotation_content}}}" +
+ "</div>" +
+ "</div>";
-IriSP.Widgets.LatestAnnotation.prototype.importUsers = function(){
- if (!this.source.users_data){
+ importUsers() {
+ if (!this.source.users_data) {
this.usernames = Array();
var _this = this,
- _list = this.getWidgetAnnotations(),
- usernames_list_string = "";
-
- _list.forEach(function(_annotation){
- if(_this.usernames.indexOf(_annotation.creator) == -1){
- _this.usernames.push(_annotation.creator);
- }
+ _list = this.getWidgetAnnotations(),
+ usernames_list_string = "";
+
+ _list.forEach(function (_annotation) {
+ if (_this.usernames.indexOf(_annotation.creator) == -1) {
+ _this.usernames.push(_annotation.creator);
+ }
+ });
+ this.usernames.forEach(function (_username) {
+ usernames_list_string += _username + ",";
});
- this.usernames.forEach(function(_username){
- usernames_list_string+=_username+","
- })
- usernames_list_string = usernames_list_string.substring(0, usernames_list_string.length - 1);
- _url = Mustache.to_html(this.api_users_endpoint, {usernames_list_string: encodeURIComponent(usernames_list_string), usernames_list_length: this.usernames.length});
- return IriSP.jQuery.ajax({
- async: false,
- url: _url,
- type: "GET",
- success: function(_data) {
- _this.source.users_data = _data.objects
- },
- error: function(_xhr, _error, _thrown) {
- console.log(_xhr)
- console.log(_error)
- console.log(_thrown)
- }
- })
+ usernames_list_string = usernames_list_string.substring(
+ 0,
+ usernames_list_string.length - 1
+ );
+ _url = Mustache.render(this.api_users_endpoint, {
+ usernames_list_string: encodeURIComponent(usernames_list_string),
+ usernames_list_length: this.usernames.length,
+ });
+ return jQuery.ajax({
+ async: false,
+ url: _url,
+ type: "GET",
+ success: function (_data) {
+ _this.source.users_data = _data.objects;
+ },
+ error: function (_xhr, _error, _thrown) {
+ console.log(_xhr);
+ console.log(_error);
+ console.log(_thrown);
+ },
+ });
+ }
}
-}
-
-IriSP.Widgets.LatestAnnotation.prototype.draw = function(){
- var _this = this;
- this.renderTemplate();
-
- this.annotationContainer_$ = this.$.find('.Ldt-LatestAnnotation');
-
- if (this.selectable_annotations){
- this.onMdpEvent("AnnotationsList.refresh", function(){
- _this.getWidgetAnnotations().forEach(function(_annotation){
- _annotation.off("click");
- _annotation.on("click", function(){
- var _user = {},
- _user_display_string = "",
- _users = this.source.users_data.filter(function(_user_data){
- return _user_data.username == _annotation.creator
- });
- if (_users.length == 0){
- _user.username = _annotation.creator;
- }
- else {
- _user = _users[0];
- }
- _user_display_string = _this.make_name_string_function(_user)
- _html = Mustache.to_html(_this.annotationTemplate, {
- annotation_created: _annotation.created.toLocaleDateString()+", "+_annotation.created.toLocaleTimeString(),
- annotation_creator: _user_display_string,
- annotation_title: _annotation.title,
- annotation_content: _annotation.description,
- copy_and_edit_button: _this.copy_and_edit_button,
- button_text: _this.l10n.copy_and_edit,
- });
- _this.annotationContainer_$.html(_html);
- _this.selectedAnnotation = true;
+
+ draw() {
+ var _this = this;
+ this.renderTemplate();
+
+ this.annotationContainer_$ = this.$.find(".Ldt-LatestAnnotation");
+
+ if (this.selectable_annotations) {
+ this.onMdpEvent("AnnotationsList.refresh", function () {
+ _this.getWidgetAnnotations().forEach(function (_annotation) {
+ _annotation.off("click");
+ _annotation.on("click", function () {
+ var _user = {},
+ _user_display_string = "",
+ _users = this.source.users_data.filter(function (_user_data) {
+ return _user_data.username == _annotation.creator;
});
- });
+ if (_users.length == 0) {
+ _user.username = _annotation.creator;
+ } else {
+ _user = _users[0];
+ }
+ _user_display_string = _this.make_name_string_function(_user);
+ _html = Mustache.render(_this.annotationTemplate, {
+ annotation_created:
+ _annotation.created.toLocaleDateString() +
+ ", " +
+ _annotation.created.toLocaleTimeString(),
+ annotation_creator: _user_display_string,
+ annotation_title: _annotation.title,
+ annotation_content: _annotation.description,
+ copy_and_edit_button: _this.copy_and_edit_button,
+ button_text: _this.l10n.copy_and_edit,
+ });
+ _this.annotationContainer_$.html(_html);
+ _this.selectedAnnotation = true;
+ });
+ });
});
-
- this.segments = _this.source.getAnnotationsByTypeTitle(this.segments_annotation_type)
- this.segments.forEach(function(_segment){
- _segment.on("click", function(){
- _this.selectedAnnotation = false;
- })
- })
+
+ this.segments = _this.source.getAnnotationsByTypeTitle(
+ this.segments_annotation_type
+ );
+ this.segments.forEach(function (_segment) {
+ _segment.on("click", function () {
+ _this.selectedAnnotation = false;
+ });
+ });
this.currentSegment = false;
- }
-
- this.onMediaEvent("timeupdate", function(){
+ }
+
+ this.onMediaEvent("timeupdate", function () {
_this.refresh();
- });
- this.onMediaEvent("settimerange", function(_timeRange){
+ });
+ this.onMediaEvent("settimerange", function (_timeRange) {
_this.refresh(_timeRange);
- })
-
- if (this.starts_hidden){
+ });
+
+ if (this.starts_hidden) {
this.visible = true;
this.hide();
- }
- else{
+ } else {
this.visible = false;
this.show();
- }
-
- this.selectedAnnotation = false; // This flag tells the widget if it must display last annotation (false) or clicked annotation (true)
- this.player.trigger("AnnotationsList.refresh");
- this.refresh();
-}
-
+ }
-IriSP.Widgets.LatestAnnotation.prototype.refresh = function(_timeRange){
- _timeRange = typeof _timeRange !== 'undefined' ? _timeRange : false ;
- var _this = this;
- if (this.hide_without_segment){
- if (!_timeRange && !this.media.getTimeRange()){
- var _currentTime = this.media.getCurrentTime();
- var _currentSegments = this.segments.filter(function(_segment){
- return (_currentTime >= _segment.begin && _currentTime <= _segment.end)
- });
- if (_currentSegments.length == 0){
- this.currentSegment = false;
- this.selectedAnnotation = false;
- }
- else {
- this.currentSegment = _currentSegments[0]
- }
- }
- else {
- var _segmentBegin = _timeRange? _timeRange[0] : this.media.getTimeRange()[0],
- _segmentEnd = _timeRange? _timeRange[1] : this.media.getTimeRange()[1];
- if ((!this.currentSegment)||(this.currentSegment.begin != _segmentBegin || this.currentSegment.end != _segmentEnd)) {
- var _currentSegments = this.segments.filter(function(_segment){
- return _segment.begin == _segmentBegin && _segment.end == _segmentEnd
- });
- if (_currentSegments.length > 0){
- this.selectedAnnotation = false;
- this.currentSegment = _currentSegments[0];
- }
- }
- }
- if (!this.currentSegment){
- if (this.visible){
- this.hide();
- }
- }
- else {
- if (!this.visible){
- this.show();
- }
- }
- }
-
- if (this.visible && !this.selectedAnnotation){
- var _list = this.getWidgetAnnotations();
-
- if(this.filter_by_segment){
- if (!this.currentSegment) {
- _list = _list.filter(function(_annotation){
- return false;
- });
- }
- else {
- _list = _list.filter(function(_annotation){
- _annotationTime = (_annotation.begin+_annotation.end)/2;
- return (_this.currentSegment.begin <= _annotationTime && _this.currentSegment.end >= _annotationTime);
- });
- }
- }
- _list = _list.sortBy(function(_annotation){
- return _annotation.created;
- });
-
- var _latestAnnotation = false,
- _html="",
- _user_display_string = "",
- _user = {};
- if (_list.length != 0){
- _latestAnnotation = _list.pop();
- _users = this.source.users_data.filter(function(_user_data){
- return _user_data.username == _latestAnnotation.creator
- })
- if (_users.length == 0){
- _user.username = _latestAnnotation.creator;
- }
- else {
- _user = _users[0];
- }
- _user_display_string = this.make_name_string_function(_user)
- _html = Mustache.to_html(this.annotationTemplate, {
- annotation_created: _latestAnnotation.created.toLocaleDateString()+", "+_latestAnnotation.created.toLocaleTimeString(),
- annotation_creator: _user_display_string,
- annotation_title: _latestAnnotation.title,
- annotation_content: _latestAnnotation.description,
- copy_and_edit_button: this.copy_and_edit_button,
- button_text: this.l10n.copy_and_edit,
- });
- }
- else {
- var _empty_message = this.l10n.empty
- if (this.empty_message) {
- _empty_message = this.empty_message
- }
- _html = "<div class='Ldt-LatestAnnotation-Element Ldt-LatestAnnotation-NoAnnotation'>"+_empty_message+"</div>";
- }
- this.annotationContainer_$.html(_html);
+ this.selectedAnnotation = false; // This flag tells the widget if it must display last annotation (false) or clicked annotation (true)
+ this.player.trigger("AnnotationsList.refresh");
+ this.refresh();
}
- if(this.copy_and_edit_button){
- this.copyAndEditButton_$ = this.$.find('.Ldt-LatestAnnotation-CopyEditButton');
+ refresh(_timeRange) {
+ _timeRange = typeof _timeRange !== "undefined" ? _timeRange : false;
+ var _this = this;
+ if (this.hide_without_segment) {
+ if (!_timeRange && !this.media.getTimeRange()) {
+ var _currentTime = this.media.getCurrentTime();
+ var _currentSegments = this.segments.filter(function (_segment) {
+ return (
+ _currentTime >= _segment.begin && _currentTime <= _segment.end
+ );
+ });
+ if (_currentSegments.length == 0) {
+ this.currentSegment = false;
+ this.selectedAnnotation = false;
+ } else {
+ this.currentSegment = _currentSegments[0];
+ }
+ } else {
+ var _segmentBegin = _timeRange
+ ? _timeRange[0]
+ : this.media.getTimeRange()[0],
+ _segmentEnd = _timeRange
+ ? _timeRange[1]
+ : this.media.getTimeRange()[1];
+ if (
+ !this.currentSegment ||
+ this.currentSegment.begin != _segmentBegin ||
+ this.currentSegment.end != _segmentEnd
+ ) {
+ var _currentSegments = this.segments.filter(function (_segment) {
+ return (
+ _segment.begin == _segmentBegin && _segment.end == _segmentEnd
+ );
+ });
+ if (_currentSegments.length > 0) {
+ this.selectedAnnotation = false;
+ this.currentSegment = _currentSegments[0];
+ }
+ }
+ }
+ if (!this.currentSegment) {
+ if (this.visible) {
+ this.hide();
+ }
+ } else {
+ if (!this.visible) {
+ this.show();
+ }
+ }
+ }
+
+ if (this.visible && !this.selectedAnnotation) {
+ var _list = this.getWidgetAnnotations();
+
+ if (this.filter_by_segment) {
+ if (!this.currentSegment) {
+ _list = _list.filter(function (_annotation) {
+ return false;
+ });
+ } else {
+ _list = _list.filter(function (_annotation) {
+ _annotationTime = (_annotation.begin + _annotation.end) / 2;
+ return (
+ _this.currentSegment.begin <= _annotationTime &&
+ _this.currentSegment.end >= _annotationTime
+ );
+ });
+ }
+ }
+ _list = _list.sortBy(function (_annotation) {
+ return _annotation.created;
+ });
+
+ var _latestAnnotation = false,
+ _html = "",
+ _user_display_string = "",
+ _user = {};
+ if (_list.length != 0) {
+ _latestAnnotation = _list.pop();
+ _users = this.source.users_data.filter(function (_user_data) {
+ return _user_data.username == _latestAnnotation.creator;
+ });
+ if (_users.length == 0) {
+ _user.username = _latestAnnotation.creator;
+ } else {
+ _user = _users[0];
+ }
+ _user_display_string = this.make_name_string_function(_user);
+ _html = Mustache.render(this.annotationTemplate, {
+ annotation_created:
+ _latestAnnotation.created.toLocaleDateString() +
+ ", " +
+ _latestAnnotation.created.toLocaleTimeString(),
+ annotation_creator: _user_display_string,
+ annotation_title: _latestAnnotation.title,
+ annotation_content: _latestAnnotation.description,
+ copy_and_edit_button: this.copy_and_edit_button,
+ button_text: this.l10n.copy_and_edit,
+ });
+ } else {
+ var _empty_message = this.l10n.empty;
+ if (this.empty_message) {
+ _empty_message = this.empty_message;
+ }
+ _html =
+ "<div class='Ldt-LatestAnnotation-Element Ldt-LatestAnnotation-NoAnnotation'>" +
+ _empty_message +
+ "</div>";
+ }
+ this.annotationContainer_$.html(_html);
+ }
+
+ if (this.copy_and_edit_button) {
+ this.copyAndEditButton_$ = this.$.find(
+ ".Ldt-LatestAnnotation-CopyEditButton"
+ );
this.copyAndEditButton_$.click(this.functionWrapper("copy_and_edit"));
- }
-}
-
-IriSP.Widgets.LatestAnnotation.prototype.copy_and_edit = function(){
- this.player.trigger("CreateAnnotation.show");
- if (this.hide_annotations_list){
- this.player.trigger("AnnotationsList.hide");
+ }
}
- annotationText = $('.Ldt-LatestAnnotation-Content').get(0).innerHTML;
-
- $('.Ldt-CreateAnnotation-Description').removeClass('empty');
- $('.Ldt-CreateAnnotation-Description').val(annotationText);
-}
-IriSP.Widgets.LatestAnnotation.prototype.hide = function() {
- if (this.visible){
+ copy_and_edit() {
+ this.player.trigger("CreateAnnotation.show");
+ if (this.hide_annotations_list) {
+ this.player.trigger("AnnotationsList.hide");
+ }
+ annotationText = $(".Ldt-LatestAnnotation-Content").get(0).innerHTML;
+
+ $(".Ldt-CreateAnnotation-Description").removeClass("empty");
+ $(".Ldt-CreateAnnotation-Description").val(annotationText);
+ }
+
+ hide() {
+ if (this.visible) {
this.visible = false;
- this.$.find('.Ldt-LatestAnnotation-header').hide();
- this.annotationContainer_$.hide()
+ this.$.find(".Ldt-LatestAnnotation-header").hide();
+ this.annotationContainer_$.hide();
+ }
}
-}
-IriSP.Widgets.LatestAnnotation.prototype.show = function() {
- if(!this.visible){
+ show() {
+ if (!this.visible) {
this.visible = true;
- this.$.find('.Ldt-LatestAnnotation-header').show();
- this.annotationContainer_$.show()
+ this.$.find(".Ldt-LatestAnnotation-header").show();
+ this.annotationContainer_$.show();
+ }
}
-}
+ };
+};
+
+export { LatestAnnotation, latestAnnotationStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/LatestAnnotation.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,63 @@
+.Ldt-LatestAnnotation{
+ background: url(img/pinstripe.png);
+ width: 535px;
+ max-height: 180px;
+ margin: 0px;
+ margin-top: 4px;
+ border-style: solid;
+ border-width: 1px;
+ border-color: #b7b7b7;
+}
+
+.Ldt-LatestAnnotation-Element{
+ margin: 5px;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.Ldt-LatestAnnotation-Box{
+ background-color: #ffffff;
+ margin: 3px;
+}
+
+.Ldt-LatestAnnotation-CreationDate{
+ color: #f7268e;
+}
+
+.Ldt-LatestAnnotation-Content{
+ text-align: justify;
+}
+
+.Ldt-LatestAnnotation-Title{
+ color: #0068c4;
+ font-size: 14px;
+ font-weight: bold;
+}
+
+.Ldt-LatestAnnotation-NoAnnotation{
+ font-size: 14px;
+ font-weight: bold;
+}
+
+.Ldt-LatestAnnotation-CopyEditButton{
+ display: inline-block;
+ background-color: #d93c71;
+ color: #ffffff;
+ float: right;
+ cursor: pointer;
+ height: 14px;
+ width: 100px;
+ margin: 2px;
+ padding: 2px;
+ font-size: 11px;
+ border: 1px solid;
+ border-color: #eca3bc #631e34 #36101c #e16e93;
+ cursor: pointer;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.Ldt-LatestAnnotation-CopyEditButton:hover{
+ background-color: #e15581;
+ border-color: #222222 #e87d9f #f0adc3 #68273c;
+}
\ No newline at end of file
--- a/src/widgets/Markers.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,186 +0,0 @@
-
-.Ldt-Markers-Marker {
- position: absolute;
- margin-left: -1px;
- border: 1px solid #ffffff;
-}
-
-.Ldt-Markers-MarkerBall {
- background: #ffffff;
-}
-
-.Ldt-Markers-MarkerBall:hover {
- background: #bebebe;
-}
-
-.Ldt-Markers-List{
- overflow: hidden;
-}
-
-.Ldt-Markers-Position {
- background: #fc00ff;
- position: relative;
- left: 0;
- margin-left: -1px;
- width: 2px;
- bottom: -1px;
- z-index: 80000;
-}
-
-.Ldt-Markers-Inputs{
- background-color: #e0e0e0;
- margin-top: 1px;
-}
-
-.Ldt-Markers-RoundButton{
- display: inline-block;
- background-color: #d93c71;
- color: #ffffff;
- cursor: pointer;
- height: 20px;
- width: 20px;
- border-radius: 20px;
- font-size: 25px;
- font-style: bold;
- border: 1px solid;
- border-color: #eca3bc #631e34 #36101c #e16e93;
- cursor: pointer;
- margin-right: 0px;
- margin-left: 13px;
- margin-bottom: 10px;
- margin-top: 10px;
- padding: 4px;
- text-align: center;
- vertical-align: top;
- line-height: 20px;
-}
-
-.Ldt-Markers-RoundButton.Ldt-Markers-CannotCreate,
-.Ldt-Markers-RoundButton.Ldt-Markers-PreviewDelete{
- background-color: #999999;
- border-color: #797979 #444444 #222222 #696969;
-}
-
-.Ldt-Markers-RoundButton.Ldt-Markers-Delete{
- line-height: 23px;
- text-indent: 2px;
-}
-
-.Ldt-Markers-RoundButton.Ldt-Markers-PreviewDelete{
- line-height: 23px;
- text-indent: 2px;
-}
-
-.Ldt-Markers-Info{
- width: 90%;
- display: inline-block;
- margin: 0px;
-}
-
-.Ldt-Markers-Screen{
- margin: 0px;
-}
-
-.Ldt-Markers-ScreenSending, .Ldt-Markers-ScreenFailure, .Ldt-Markers-ScreenSuccess,
-.Ldt-Markers-ScreenConfirmDelete, .Ldt-Markers-ScreenDeleteSuccess{
- text-align: center;
- vertical-align: middle;
- line-height: 125px;
- font-size: 18px;
- font-weight: bold;
- color: #68273C;
-}
-
-.Ldt-Markers-Screen-InnerBox{
- border: 1px solid #CCCCCC;
- background: #FFFFFF;
- color: #FF3B77; text-align: center;
- font-size: 13px; font-weight: bold;
-}
-
-a.Ldt-Markers-Close {
- position: relative;
- float: right;
- right: 2px;
- top: 2px;
- display: inline-block; width: 17px; height: 17px; margin: 4px;
- background: url(img/widget-control.png);
-}
-
-a.Ldt-Markers-Screen-SubmitDelete, a.Ldt-Markers-Screen-CancelDelete {
- color: #3366BB;
- cursor: pointer;
-}
-
-a.Ldt-Markers-Screen-SubmitDelete:hover, a.Ldt-Markers-Screen-CancelDelete:hover {
- color: #3a75ff;
-}
-
-.Ldt-Markers-MarkerDescription{
- width: 90%;
- border: 1px solid #68273c;
- margin: 10px;
- padding: 10px;
- background: #ffffff;
- overflow: scroll;
-}
-
-.Ldt-Markers-MarkerDescription:hover{
- border: 2px solid #e87d9f;
-}
-
-.Ldt-Markers-MarkerEdit{
- width: 100%;
- margin: 10px;
-}
-
-.Ldt-Markers-MarkerTextArea{
- height: auto;
- width: auto;
- max-width: 82%;
- max-height: 100%;
- padding: 10px;
- background: #ffffff;
- border: 2px solid #e87d9f;
- margin: 0px;
-}
-
-.Ldt-Markers-Buttons{
- display: inline-block;
- width: 17%;
- vertical-align: top;
-}
-
-.Ldt-Markers-MarkerSend, .Ldt-Markers-MarkerPreviewSend, .Ldt-Markers-MarkerCancel{
- display: inline-block;
- background-color: #d93c71;
- color: #ffffff;
- cursor: pointer;
- height: 20px;
- width: 80px;
- font-size: 11;
- font-style: bold;
- border: 1px solid;
- border-color: #eca3bc #631e34 #36101c #e16e93;
- cursor: pointer;
- margin-right: 5px;
- margin-left: 5px;
- margin-bottom: 10px;
- margin-top: 0px;
- padding: 4px;
- text-align: center;
- vertical-align: top;
- line-height: 20px;
- vertical-align: top;
-}
-
-.Ldt-Markers-RoundButton:hover, .Ldt-Markers-MarkerSend:hover, .Ldt-Markers-MarkerPreviewSend:hover, .Ldt-Markers-MarkerCancel:hover{
- background-color: #e15581;
- border-color: #222222 #e87d9f #f0adc3 #68273c;
-}
-
-.Ldt-Markers-RoundButton.Ldt-Markers-CannotCreate:hover,
-.Ldt-Markers-RoundButton.Ldt-Markers-PreviewDelete:hover{
- background-color: #999999;
- border-color: #797979 #444444 #222222 #696969;
-}
\ No newline at end of file
--- a/src/widgets/Markers.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Markers.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,632 +1,789 @@
+import Mustache from "mustache";
+import jQuery from "jquery";
-IriSP.Widgets.Markers = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+import markersStyles from "./Markers.module.css";
-IriSP.Widgets.Markers.prototype = new IriSP.Widgets.Widget();
+const Markers = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.Markers.prototype.defaults = {
- pre_draw_callback: function(){
+ static defaults = {
+ pre_draw_callback: function () {
return this.importUsers();
- },
- annotation_type: "markers",
- line_height: 8,
- background: "#e0e0e0",
- marker_color: "#ff80fc",
- placeholder_color: "#ffffff",
- hover_color: "#e15581",
- selected_color: "#74d600",
- ball_radius: 4,
- pause_on_write: true,
- play_on_submit: true,
- api_serializer: "ldt_annotate",
- api_endpoint_template_create: "",
- api_endpoint_template_edit: "",
- api_endpoint_template_delete: "",
- api_method_create: "POST",
- api_method_edit: "PUT",
- api_method_delete: "DELETE",
- project_id: "",
- creator_name: "",
- after_send_timeout: 0,
- markers_gap: 2000,
- allow_empty_markers: false,
- close_after_send: false,
- custom_send_button: false,
- custom_cancel_button: false,
- preview_mode: false,
- filter_per_user: false,
- api_users_endpoint: "",
- make_username_string_function: function(params){
+ },
+ annotation_type: "markers",
+ line_height: 8,
+ background: "#e0e0e0",
+ marker_color: "#ff80fc",
+ placeholder_color: "#ffffff",
+ hover_color: "#e15581",
+ selected_color: "#74d600",
+ ball_radius: 4,
+ pause_on_write: true,
+ play_on_submit: true,
+ api_serializer: "ldt_annotate",
+ api_endpoint_template_create: "",
+ api_endpoint_template_edit: "",
+ api_endpoint_template_delete: "",
+ api_method_create: "POST",
+ api_method_edit: "PUT",
+ api_method_delete: "DELETE",
+ project_id: "",
+ creator_name: "",
+ after_send_timeout: 0,
+ markers_gap: 2000,
+ allow_empty_markers: false,
+ close_after_send: false,
+ custom_send_button: false,
+ custom_cancel_button: false,
+ preview_mode: false,
+ filter_per_user: false,
+ api_users_endpoint: "",
+ make_username_string_function: function (params) {
return params.username ? params.username : "Anonymous";
- },
- hide_if_empty: false,
-};
+ },
+ hide_if_empty: false,
+ };
-IriSP.Widgets.Markers.prototype.template =
- '<div class="Ldt-Markers-Display" style="height:{{line_height}}px;">'
- + '<div class="Ldt-Markers-List" style="height:{{line_height}}px; position: relative;"></div>'
- + '<div class="Ldt-Markers-Position" style="height: {{line_height}}px; top: -{{line_height}};"></div>'
- + '</div>'
- + '<div class="Ldt-Markers-Inputs">'
- + '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenMain">'
- + '<div class="Ldt-Markers-RoundButton Ldt-Markers-CannotCreate" title="{{#preview_mode}}{{l10n.preview_mode_submit}}{{/preview_mode}}{{^preview_mode}}{{l10n.cannot_create}}{{/preview_mode}}">+</div>'
- + '<div class="Ldt-Markers-RoundButton Ldt-Markers-Create">+</div>'
- + '{{^preview_mode}}<div class="Ldt-Markers-RoundButton Ldt-Markers-Delete">✖</div>{{/preview_mode}}'
- + '{{#preview_mode}}<div class="Ldt-Markers-RoundButton Ldt-Markers-PreviewDelete" title="{{l10n.preview_mode_delete}}">✖</div>{{/preview_mode}}'
- + '{{#filter_per_user}}{{#preview_mode}}<select class="Ldt-Markers-userFilter-dropdown" id="Ldt-Markers-userFilter"></select>{{/preview_mode}}{{/filter_per_user}}'
- + '<div class="Ldt-Markers-Info"></div>'
- + '</div>'
- + '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenSending">'
- + '<div class="Ldt-Markers-Screen-InnerBox">{{l10n.wait_while_processing}}</div>'
- + '</div>'
- + '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenSuccess">'
- + '<a title="{{l10n.close_widget}}" class="Ldt-Markers-Close" href="#"></a>'
- + '<div class="Ldt-Markers-Screen-InnerBox">{{l10n.annotation_saved}}</div>'
- + '</div>'
- + '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenDeleteSuccess">'
- + '<a title="{{l10n.close_widget}}" class="Ldt-Markers-Close" href="#"></a>'
- + '<div class="Ldt-Markers-Screen-InnerBox">{{l10n.delete_saved}}</div>'
- + '</div>'
- + '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenFailure">'
- + '<a title="{{l10n.close_widget}}" class="Ldt-Markers-Close" href="#"></a>'
- + '<div class="Ldt-Markers-Screen-InnerBox">{{l10n.error_while_contacting}}</div>'
- + '</div>'
- + '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenConfirmDelete">'
- + '<a title="{{l10n.close_widget}}" class="Ldt-Markers-Close" href="#"></a>'
- + '<div class="Ldt-Markers-Screen-InnerBox">'
- + '{{l10n.delete_text}} '
- + '<a class="Ldt-Markers-Screen-SubmitDelete">{{l10n.submit_delete}}</a> '
- + '<a class="Ldt-Markers-Screen-CancelDelete">{{l10n.cancel}}</a>'
- + '</div>'
- + '</div>'
- + '</div>';
+ static template =
+ '<div class="Ldt-Markers-Display" style="height:{{line_height}}px;">' +
+ '<div class="Ldt-Markers-List" style="height:{{line_height}}px; position: relative;"></div>' +
+ '<div class="Ldt-Markers-Position" style="height: {{line_height}}px; top: -{{line_height}};"></div>' +
+ "</div>" +
+ '<div class="Ldt-Markers-Inputs">' +
+ '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenMain">' +
+ '<div class="Ldt-Markers-RoundButton Ldt-Markers-CannotCreate" title="{{#preview_mode}}{{l10n.preview_mode_submit}}{{/preview_mode}}{{^preview_mode}}{{l10n.cannot_create}}{{/preview_mode}}">+</div>' +
+ '<div class="Ldt-Markers-RoundButton Ldt-Markers-Create">+</div>' +
+ '{{^preview_mode}}<div class="Ldt-Markers-RoundButton Ldt-Markers-Delete">✖</div>{{/preview_mode}}' +
+ '{{#preview_mode}}<div class="Ldt-Markers-RoundButton Ldt-Markers-PreviewDelete" title="{{l10n.preview_mode_delete}}">✖</div>{{/preview_mode}}' +
+ '{{#filter_per_user}}{{#preview_mode}}<select class="Ldt-Markers-userFilter-dropdown" id="Ldt-Markers-userFilter"></select>{{/preview_mode}}{{/filter_per_user}}' +
+ '<div class="Ldt-Markers-Info"></div>' +
+ "</div>" +
+ '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenSending">' +
+ '<div class="Ldt-Markers-Screen-InnerBox">{{l10n.wait_while_processing}}</div>' +
+ "</div>" +
+ '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenSuccess">' +
+ '<a title="{{l10n.close_widget}}" class="Ldt-Markers-Close" href="#"></a>' +
+ '<div class="Ldt-Markers-Screen-InnerBox">{{l10n.annotation_saved}}</div>' +
+ "</div>" +
+ '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenDeleteSuccess">' +
+ '<a title="{{l10n.close_widget}}" class="Ldt-Markers-Close" href="#"></a>' +
+ '<div class="Ldt-Markers-Screen-InnerBox">{{l10n.delete_saved}}</div>' +
+ "</div>" +
+ '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenFailure">' +
+ '<a title="{{l10n.close_widget}}" class="Ldt-Markers-Close" href="#"></a>' +
+ '<div class="Ldt-Markers-Screen-InnerBox">{{l10n.error_while_contacting}}</div>' +
+ "</div>" +
+ '<div class="Ldt-Markers-Screen Ldt-Markers-ScreenConfirmDelete">' +
+ '<a title="{{l10n.close_widget}}" class="Ldt-Markers-Close" href="#"></a>' +
+ '<div class="Ldt-Markers-Screen-InnerBox">' +
+ "{{l10n.delete_text}} " +
+ '<a class="Ldt-Markers-Screen-SubmitDelete">{{l10n.submit_delete}}</a> ' +
+ '<a class="Ldt-Markers-Screen-CancelDelete">{{l10n.cancel}}</a>' +
+ "</div>" +
+ "</div>" +
+ "</div>";
+ static markerTemplate =
+ '<div class="Ldt-Markers-Marker" style="height:{{height}}px; left:{{left}}px; width: 2px; background-color: black;">' +
+ '<div class="Ldt-Markers-MarkerBall" style="background-color: {{marker_color}}; position: relative; width: {{ball_diameter}}px; height: {{ball_diameter}}px; left: {{ball_left}}px; top: {{ball_top}}px; border: 1px solid; border-radius: {{ball_radius}}px"></div>' +
+ "</div>";
-IriSP.Widgets.Markers.prototype.markerTemplate =
- '<div class="Ldt-Markers-Marker" style="height:{{height}}px; left:{{left}}px; width: 2px; background-color: black;">' +
- '<div class="Ldt-Markers-MarkerBall" style="background-color: {{marker_color}}; position: relative; width: {{ball_diameter}}px; height: {{ball_diameter}}px; left: {{ball_left}}px; top: {{ball_top}}px; border: 1px solid; border-radius: {{ball_radius}}px"></div>' +
- '</div>';
-
-IriSP.Widgets.Markers.prototype.markerPlaceholderTemplate =
- '<div class="Ldt-Markers-Marker Ldt-Markers-PlaceholderMarker" style="height:{{height}}px; left:{{left}}px; width: 2px; background-color: black;">' +
- '<div class="Ldt-Markers-MarkerBall" style="background-color: {{marker_color}}; position: relative; width: {{ball_diameter}}px; height: {{ball_diameter}}px; left: {{ball_left}}px; top: {{ball_top}}px; border: 1px solid; border-radius: {{ball_radius}}px"></div>' +
- '</div>';
+ static markerPlaceholderTemplate =
+ '<div class="Ldt-Markers-Marker Ldt-Markers-PlaceholderMarker" style="height:{{height}}px; left:{{left}}px; width: 2px; background-color: black;">' +
+ '<div class="Ldt-Markers-MarkerBall" style="background-color: {{marker_color}}; position: relative; width: {{ball_diameter}}px; height: {{ball_diameter}}px; left: {{ball_left}}px; top: {{ball_top}}px; border: 1px solid; border-radius: {{ball_radius}}px"></div>' +
+ "</div>";
-IriSP.Widgets.Markers.prototype.infoTemplate =
- '{{^edit}}<div class="Ldt-Markers-MarkerDescription">{{marker_info}}</div>{{/edit}}' +
- '{{#edit}}<div class="Ldt-Markers-MarkerEdit">' +
- '<textarea class="Ldt-Markers-MarkerTextArea" cols="60" rows="4">{{marker_info}}</textarea>' +
- '<div class="Ldt-Markers-Buttons">' +
- '{{^preview_mode}}<div class="Ldt-Markers-MarkerSend">{{send}}</div>{{/preview_mode}}' +
- '{{#preview_mode}}<div class="Ldt-Markers-MarkerPreviewSend" title="{{preview_mode_text}}">{{send}}</div>{{/preview_mode}}' +
- '<div class="Ldt-Markers-MarkerCancel">{{cancel}}</div>' +
- '</div>' +
- '</div>{{/edit}}'
+ static infoTemplate =
+ '{{^edit}}<div class="Ldt-Markers-MarkerDescription">{{marker_info}}</div>{{/edit}}' +
+ '{{#edit}}<div class="Ldt-Markers-MarkerEdit">' +
+ '<textarea class="Ldt-Markers-MarkerTextArea" cols="60" rows="4">{{marker_info}}</textarea>' +
+ '<div class="Ldt-Markers-Buttons">' +
+ '{{^preview_mode}}<div class="Ldt-Markers-MarkerSend">{{send}}</div>{{/preview_mode}}' +
+ '{{#preview_mode}}<div class="Ldt-Markers-MarkerPreviewSend" title="{{preview_mode_text}}">{{send}}</div>{{/preview_mode}}' +
+ '<div class="Ldt-Markers-MarkerCancel">{{cancel}}</div>' +
+ "</div>" +
+ "</div>{{/edit}}";
-IriSP.Widgets.Markers.prototype.messages = {
- en : {
- send : "Send",
+ static messages = {
+ en: {
+ send: "Send",
submit_delete: "Delete",
- cancel : "Cancel",
+ cancel: "Cancel",
preview_mode_submit: "You cannot submit a marker in preview mode.",
preview_mode_delete: "You cannot delete a marker in preview mode",
- wait_while_processing: "Please wait while your annotation is being processed...",
+ wait_while_processing:
+ "Please wait while your annotation is being processed...",
delete_text: "The selected marker will be deleted. Continue?",
- error_while_contacting: "An error happened while contacting the server. Your annotation has not been saved.",
+ error_while_contacting:
+ "An error happened while contacting the server. Your annotation has not been saved.",
annotation_saved: "Thank you, your annotation has been saved.",
delete_saved: "Thank you, your annotation has been deleted",
close_widget: "Close",
- cannot_create: "Cannot create marker on this timecode"
- },
- fr : {
- send : "Envoyer",
+ cannot_create: "Cannot create marker on this timecode",
+ },
+ fr: {
+ send: "Envoyer",
submit_delete: "Supprimer",
- cancel : "Annuler",
- preview_mode_submit: "Vous ne pouvez pas créer ou éditer de marqueur en mode aperçu",
- preview_mode_delete: "Vous ne pouvez pas supprimer de marqueur en mode aperçu",
- wait_while_processing: "Veuillez patienter pendant le traitement de votre annotation...",
+ cancel: "Annuler",
+ preview_mode_submit:
+ "Vous ne pouvez pas créer ou éditer de marqueur en mode aperçu",
+ preview_mode_delete:
+ "Vous ne pouvez pas supprimer de marqueur en mode aperçu",
+ wait_while_processing:
+ "Veuillez patienter pendant le traitement de votre annotation...",
delete_text: "Le marqueur sélectionné sera supprimé. Continuer?",
- error_while_contacting: "Une erreur s'est produite en contactant le serveur. Votre annotation n'a pas été enregistrée.",
+ error_while_contacting:
+ "Une erreur s'est produite en contactant le serveur. Votre annotation n'a pas été enregistrée.",
annotation_saved: "Merci, votre annotation a été enregistrée.",
delete_saved: "Merci, votre annotation a été supprimée",
close_widget: "Fermer",
- cannot_create: "Impossible de créer un marqueur sur ce timecode"
- }
-}
+ cannot_create: "Impossible de créer un marqueur sur ce timecode",
+ },
+ };
-IriSP.Widgets.Markers.prototype.importUsers = function(){
- if (this.filter_per_user && this.preview_mode){
+ importUsers() {
+ if (this.filter_per_user && this.preview_mode) {
this.usernames = Array();
- if (!this.source.users_data && this.api_users_endpoint){
- var _this = this,
- _list = this.getWidgetAnnotations(),
- usernames_list_string = "";
+ if (!this.source.users_data && this.api_users_endpoint) {
+ var _this = this,
+ _list = this.getWidgetAnnotations(),
+ usernames_list_string = "";
- _list.forEach(function(_annotation){
- if(_this.usernames.indexOf(_annotation.creator) == -1){
- _this.usernames.push(_annotation.creator);
- }
- });
- this.usernames.forEach(function(_username){
- usernames_list_string+=_username+","
- })
- usernames_list_string = usernames_list_string.substring(0, usernames_list_string.length - 1);
- _url = Mustache.to_html(this.api_users_endpoint, {usernames_list_string: encodeURIComponent(usernames_list_string), usernames_list_length: this.usernames.length});
- return IriSP.jQuery.ajax({
- async: false,
- url: _url,
- type: "GET",
- success: function(_data) {
- _this.source.users_data = _data.objects
- },
- error: function(_xhr, _error, _thrown) {
- console.log(_xhr)
- console.log(_error)
- console.log(_thrown)
- }
- })
+ _list.forEach(function (_annotation) {
+ if (_this.usernames.indexOf(_annotation.creator) == -1) {
+ _this.usernames.push(_annotation.creator);
+ }
+ });
+ this.usernames.forEach(function (_username) {
+ usernames_list_string += _username + ",";
+ });
+ usernames_list_string = usernames_list_string.substring(
+ 0,
+ usernames_list_string.length - 1
+ );
+ _url = Mustache.render(this.api_users_endpoint, {
+ usernames_list_string: encodeURIComponent(usernames_list_string),
+ usernames_list_length: this.usernames.length,
+ });
+ return jQuery.ajax({
+ async: false,
+ url: _url,
+ type: "GET",
+ success: function (_data) {
+ _this.source.users_data = _data.objects;
+ },
+ error: function (_xhr, _error, _thrown) {
+ console.log(_xhr);
+ console.log(_error);
+ console.log(_thrown);
+ },
+ });
}
+ }
}
-}
-IriSP.Widgets.Markers.prototype.draw = function(){
- var _this = this;
- this.renderTemplate();
- if ((!this.filter_per_user) || (!this.preview_mode) || (this.usernames.length <= 1)){
+ draw() {
+ var _this = this;
+ this.renderTemplate();
+ if (
+ !this.filter_per_user ||
+ !this.preview_mode ||
+ this.usernames.length <= 1
+ ) {
this.$.find(".Ldt-Markers-userFilter-dropdown").hide();
- }
- else {
- this.usernames.forEach(function(_user){
- var _users = _this.source.users_data.filter(function(_user_data){
- return _user_data.username == _user;
+ } else {
+ this.usernames.forEach(function (_user) {
+ var _users = _this.source.users_data.filter(function (_user_data) {
+ return _user_data.username == _user;
}),
- _user_data = {};
- if (_users.length == 0){
- _user_data.username = _user;
- }
- else{
- _user_data = _users[0];
- }
- _this.$.find(".Ldt-Markers-userFilter-dropdown").append("<option value='"+_user+"'>"+_this.make_name_string_function(_user_data)+"</option>")
- });
- this.$.find(".Ldt-Markers-userFilter-dropdown").change(this.functionWrapper("drawMarkers"))
- this.$.find(".Ldt-Markers-userFilter-dropdown").change(this.functionWrapper("clearSelectedMarker"))
-
- }
-
- this.markers = this.getWidgetAnnotations().filter(function(_ann) {
- return ((_ann.getDuration() == 0) || (_ann.begin == _ann.end));
- });
- if (this.hide_if_empty && this.markers.length <= 0){
+ _user_data = {};
+ if (_users.length == 0) {
+ _user_data.username = _user;
+ } else {
+ _user_data = _users[0];
+ }
+ _this.$.find(".Ldt-Markers-userFilter-dropdown").append(
+ "<option value='" +
+ _user +
+ "'>" +
+ _this.make_name_string_function(_user_data) +
+ "</option>"
+ );
+ });
+ this.$.find(".Ldt-Markers-userFilter-dropdown").change(
+ this.functionWrapper("drawMarkers")
+ );
+ this.$.find(".Ldt-Markers-userFilter-dropdown").change(
+ this.functionWrapper("clearSelectedMarker")
+ );
+ }
+
+ this.markers = this.getWidgetAnnotations().filter(function (_ann) {
+ return _ann.getDuration() == 0 || _ann.begin == _ann.end;
+ });
+ if (this.hide_if_empty && this.markers.length <= 0) {
this.$.hide();
- }
- else {
+ } else {
this.drawMarkers();
-
- this.$.find(".Ldt-Markers-Create").click(this.functionWrapper("onCreateClick"));
- this.$.find(".Ldt-Markers-Delete").click(this.functionWrapper("onDeleteClick"));
- this.$.find(".Ldt-Markers-RoundButton").hide()
- this.updateCreateButtonState(this.media.getCurrentTime())
- this.$.find(".Ldt-Markers-Screen-SubmitDelete").click(this.functionWrapper("sendDelete"));
- this.$.find(".Ldt-Markers-Screen-CancelDelete").click(function(){
- _this.showScreen("Main");
- _this.cancelEdit();
- })
+
+ this.$.find(".Ldt-Markers-Create").click(
+ this.functionWrapper("onCreateClick")
+ );
+ this.$.find(".Ldt-Markers-Delete").click(
+ this.functionWrapper("onDeleteClick")
+ );
+ this.$.find(".Ldt-Markers-RoundButton").hide();
+ this.updateCreateButtonState(this.media.getCurrentTime());
+ this.$.find(".Ldt-Markers-Screen-SubmitDelete").click(
+ this.functionWrapper("sendDelete")
+ );
+ this.$.find(".Ldt-Markers-Screen-CancelDelete").click(function () {
+ _this.showScreen("Main");
+ _this.cancelEdit();
+ });
this.showScreen("Main");
this.$.css({
- margin: "1px 0",
- background: this.background
+ margin: "1px 0",
+ background: this.background,
});
-
- this.$.find(".Ldt-Markers-Close").click(this.functionWrapper("revertToMainScreen"));
-
+
+ this.$.find(".Ldt-Markers-Close").click(
+ this.functionWrapper("revertToMainScreen")
+ );
+
this.onMediaEvent("timeupdate", this.functionWrapper("updatePosition"));
- this.onMediaEvent("timeupdate", this.functionWrapper("updateCreateButtonState"));
+ this.onMediaEvent(
+ "timeupdate",
+ this.functionWrapper("updateCreateButtonState")
+ );
this.onMediaEvent("play", this.functionWrapper("clearSelectedMarker"));
this.onMdpEvent("Markers.refresh", this.functionWrapper("drawMarkers"));
-
+
this.newMarkerTimeCode = 0;
this.selectedMarker = false;
+ }
}
-}
-
-IriSP.Widgets.Markers.prototype.updatePosition = function(_time) {
- var _x = Math.floor( this.width * _time / this.media.duration);
- this.$.find('.Ldt-Markers-Position').css({
- left: _x + "px"
- });
-}
+ updatePosition(_time) {
+ var _x = Math.floor((this.width * _time) / this.media.duration);
+ this.$.find(".Ldt-Markers-Position").css({
+ left: _x + "px",
+ });
+ }
-IriSP.Widgets.Markers.prototype.updateCreateButtonState = function(_time){
- _this = this
- var can_create = this.preview_mode? false : this.markers.every(function(_marker){
- return ((_time < (_marker.begin-_this.markers_gap))||(_time > (_marker.begin+_this.markers_gap)))
- });
- if (can_create){
- if ((this.$.find(".Ldt-Markers-Create").is(":hidden"))&&(this.$.find(".Ldt-Markers-Delete").is(":hidden")||this.$.find(".Ldt-Markers-PreviewDelete").is(":hidden"))){
- this.$.find(".Ldt-Markers-RoundButton").hide();
- this.$.find(".Ldt-Markers-Create").show();
+ updateCreateButtonState(_time) {
+ _this = this;
+ var can_create = this.preview_mode
+ ? false
+ : this.markers.every(function (_marker) {
+ return (
+ _time < _marker.begin - _this.markers_gap ||
+ _time > _marker.begin + _this.markers_gap
+ );
+ });
+ if (can_create) {
+ if (
+ this.$.find(".Ldt-Markers-Create").is(":hidden") &&
+ (this.$.find(".Ldt-Markers-Delete").is(":hidden") ||
+ this.$.find(".Ldt-Markers-PreviewDelete").is(":hidden"))
+ ) {
+ this.$.find(".Ldt-Markers-RoundButton").hide();
+ this.$.find(".Ldt-Markers-Create").show();
}
+ } else {
+ if (
+ this.$.find(".Ldt-Markers-CannotCreate").is(":hidden") &&
+ (this.$.find(".Ldt-Markers-Delete").is(":hidden") ||
+ this.$.find(".Ldt-Markers-PreviewDelete").is(":hidden"))
+ ) {
+ this.$.find(".Ldt-Markers-RoundButton").hide();
+ this.$.find(".Ldt-Markers-CannotCreate").show();
+ }
+ }
}
- else {
- if ((this.$.find(".Ldt-Markers-CannotCreate").is(":hidden"))&&(this.$.find(".Ldt-Markers-Delete").is(":hidden")||this.$.find(".Ldt-Markers-PreviewDelete").is(":hidden"))){
- this.$.find(".Ldt-Markers-RoundButton").hide();
- this.$.find(".Ldt-Markers-CannotCreate").show();
- }
- }
-}
-IriSP.Widgets.Markers.prototype.onCreateClick = function(){
- this.pauseOnWrite();
- if (!this.selectedMarker){
+ onCreateClick() {
+ this.pauseOnWrite();
+ if (!this.selectedMarker) {
this.newMarkerCurrentTime = this.media.getCurrentTime();
this.showPlaceholder(this.media.getCurrentTime());
this.startEdit();
+ }
}
-}
-IriSP.Widgets.Markers.prototype.onDeleteClick = function(){
- _this = this;
- this.pauseOnWrite();
- if(this.selectedMarker){
+ onDeleteClick() {
+ _this = this;
+ this.pauseOnWrite();
+ if (this.selectedMarker) {
this.showScreen("ConfirmDelete");
- }
- else {
+ } else {
// Click on "x" without a selected marker: back to initial state
this.cancelEdit();
- }
-}
-
-IriSP.Widgets.Markers.prototype.startEdit = function(){
- if (this.selectedMarker){
- _divHtml = Mustache.to_html(this.infoTemplate, {
- edit: true,
- preview_mode: this.preview_mode,
- preview_mode_text: this.l10n.preview_mode_submit,
- marker_info: this.selectedMarker.description,
- send: this.custom_send_button? this.custom_send_button : this.l10n.send,
- cancel: this.custom_cancel_button? this.custom_cancel_button :this.l10n.cancel
- })
- }
- else {
- _divHtml = Mustache.to_html(this.infoTemplate, {
- edit: true,
- marker_info: "",
- preview_mode: this.preview_mode,
- preview_mode_text: this.l10n.preview_mode_submit,
- send: this.custom_send_button? this.custom_send_button : this.l10n.send,
- cancel: this.custom_cancel_button? this.custom_cancel_button :this.l10n.cancel
- })
+ }
}
- this.$.find(".Ldt-Markers-Info").html(_divHtml);
- this.$.find(".Ldt-Markers-MarkerSend").click(this.functionWrapper("onSubmit"));
- this.$.find(".Ldt-Markers-MarkerCancel").click(this.functionWrapper("cancelEdit"));
- this.$.find(".Ldt-Markers-MarkerTextArea").bind("change keyup input paste", this.functionWrapper("onDescriptionChange"));
- this.$.find(".Ldt-Markers-RoundButton").hide();
- if (this.preview_mode){
- this.$.find(".Ldt-Markers-PreviewDelete").show();
- }
- else {
- this.$.find(".Ldt-Markers-Delete").show();
- }
- this.editing = true;
-}
-IriSP.Widgets.Markers.prototype.cancelEdit = function(){
- if (this.selectedMarker){
+ startEdit() {
+ if (this.selectedMarker) {
+ _divHtml = Mustache.render(this.infoTemplate, {
+ edit: true,
+ preview_mode: this.preview_mode,
+ preview_mode_text: this.l10n.preview_mode_submit,
+ marker_info: this.selectedMarker.description,
+ send: this.custom_send_button
+ ? this.custom_send_button
+ : this.l10n.send,
+ cancel: this.custom_cancel_button
+ ? this.custom_cancel_button
+ : this.l10n.cancel,
+ });
+ } else {
+ _divHtml = Mustache.render(this.infoTemplate, {
+ edit: true,
+ marker_info: "",
+ preview_mode: this.preview_mode,
+ preview_mode_text: this.l10n.preview_mode_submit,
+ send: this.custom_send_button
+ ? this.custom_send_button
+ : this.l10n.send,
+ cancel: this.custom_cancel_button
+ ? this.custom_cancel_button
+ : this.l10n.cancel,
+ });
+ }
+ this.$.find(".Ldt-Markers-Info").html(_divHtml);
+ this.$.find(".Ldt-Markers-MarkerSend").click(
+ this.functionWrapper("onSubmit")
+ );
+ this.$.find(".Ldt-Markers-MarkerCancel").click(
+ this.functionWrapper("cancelEdit")
+ );
+ this.$.find(".Ldt-Markers-MarkerTextArea").bind(
+ "change keyup input paste",
+ this.functionWrapper("onDescriptionChange")
+ );
+ this.$.find(".Ldt-Markers-RoundButton").hide();
+ if (this.preview_mode) {
+ this.$.find(".Ldt-Markers-PreviewDelete").show();
+ } else {
+ this.$.find(".Ldt-Markers-Delete").show();
+ }
+ this.editing = true;
+ }
+
+ cancelEdit() {
+ if (this.selectedMarker) {
// Click on "cancel" while editing a marker: back to visualization state
- _divHtml = Mustache.to_html(this.infoTemplate, {
- edit: false,
- marker_info: this.selectedMarker.description,
- })
+ _divHtml = Mustache.render(this.infoTemplate, {
+ edit: false,
+ marker_info: this.selectedMarker.description,
+ });
this.$.find(".Ldt-Markers-Info").html(_divHtml);
- if (!this.preview_mode){
- this.$.find(".Ldt-Markers-MarkerDescription").click(this.functionWrapper("startEdit"));
+ if (!this.preview_mode) {
+ this.$.find(".Ldt-Markers-MarkerDescription").click(
+ this.functionWrapper("startEdit")
+ );
}
- }
- else {
+ } else {
// Click on "cancel" while editing a marker: back to initial state
this.hidePlaceholder();
this.$.find(".Ldt-Markers-Info").html("");
- this.$.find(".Ldt-Markers-RoundButton").hide()
- this.$.find(".Ldt-Markers-Create").show()
- this.updateCreateButtonState(this.media.getCurrentTime())
+ this.$.find(".Ldt-Markers-RoundButton").hide();
+ this.$.find(".Ldt-Markers-Create").show();
+ this.updateCreateButtonState(this.media.getCurrentTime());
+ }
+ this.editing = false;
}
- this.editing = false;
-}
-IriSP.Widgets.Markers.prototype.onDescriptionChange = function(){
- // Returns false if the textarea is empty, true if there is text in it
- if(!this.allow_empty_markers){
+ onDescriptionChange() {
+ // Returns false if the textarea is empty, true if there is text in it
+ if (!this.allow_empty_markers) {
var _field = this.$.find(".Ldt-Markers-MarkerTextArea"),
- _contents = _field.val();
+ _contents = _field.val();
_field.css("border-color", !!_contents ? "#e87d9f" : "#ff0000");
if (!!_contents) {
- _field.removeClass("empty");
+ _field.removeClass("empty");
} else {
- _field.addClass("empty");
+ _field.addClass("empty");
}
this.pauseOnWrite();
return !!_contents;
- }
- else {
+ } else {
// If the widget is configured to allow to post empty markers, it returns true
- return true
+ return true;
+ }
}
-};
-IriSP.Widgets.Markers.prototype.pauseOnWrite = function(){
- if (this.pause_on_write && !this.media.getPaused()) {
+ pauseOnWrite() {
+ if (this.pause_on_write && !this.media.getPaused()) {
this.media.pause();
+ }
}
-};
-IriSP.Widgets.Markers.prototype.showScreen = function(_screenName) {
- this.$.find('.Ldt-Markers-Screen' + _screenName).show()
- .siblings().hide();
-}
+ showScreen(_screenName) {
+ this.$.find(".Ldt-Markers-Screen" + _screenName)
+ .show()
+ .siblings()
+ .hide();
+ }
-IriSP.Widgets.Markers.prototype.revertToMainScreen = function(){
- if (this.$.find(".Ldt-Markers-ScreenMain").is(":hidden")){
+ revertToMainScreen() {
+ if (this.$.find(".Ldt-Markers-ScreenMain").is(":hidden")) {
this.showScreen("Main");
this.cancelEdit();
- if (this.selectedMarker){
- this.$.find(".Ldt-Markers-RoundButton").hide();
- if (this.preview_mode){
- this.$.find(".Ldt-Markers-PreviewDelete").show();
- }
- else {
- this.$.find(".Ldt-Markers-Delete").show();
- }
+ if (this.selectedMarker) {
+ this.$.find(".Ldt-Markers-RoundButton").hide();
+ if (this.preview_mode) {
+ this.$.find(".Ldt-Markers-PreviewDelete").show();
+ } else {
+ this.$.find(".Ldt-Markers-Delete").show();
+ }
+ } else {
+ this.$.find(".Ldt-Markers-RoundButton").hide();
+ this.$.find(".Ldt-Markers-Create").show();
+ this.updateCreateButtonState();
}
- else {
- this.$.find(".Ldt-Markers-RoundButton").hide();
- this.$.find(".Ldt-Markers-Create").show();
- this.updateCreateButtonState();
- }
+ }
}
-}
-IriSP.Widgets.Markers.prototype.hidePlaceholder = function(){
- this.$.find(".Ldt-Markers-PlaceholderMarker").remove();
-}
+ hidePlaceholder() {
+ this.$.find(".Ldt-Markers-PlaceholderMarker").remove();
+ }
-IriSP.Widgets.Markers.prototype.showPlaceholder = function(_time){
- var _scale = this.width / this.source.getDuration(),
- _left = _time * _scale -1,
+ showPlaceholder(_time) {
+ var _scale = this.width / this.source.getDuration(),
+ _left = _time * _scale - 1,
_data = {
- left: _left,
- height: this.line_height-1,
- ball_top: (this.ball_radius*2 > this.line_height) ? 0 : ((this.line_height - this.ball_radius*2)/2)-1,
- ball_radius: (this.ball_radius*2 > this.line_height) ? this.line_height/2 : this.ball_radius,
- ball_diameter: (this.ball_radius*2 > this.line_height) ? this.line_height/2 : this.ball_radius*2,
- ball_left: -this.ball_radius,
- marker_color: this.placeholder_color
+ left: _left,
+ height: this.line_height - 1,
+ ball_top:
+ this.ball_radius * 2 > this.line_height
+ ? 0
+ : (this.line_height - this.ball_radius * 2) / 2 - 1,
+ ball_radius:
+ this.ball_radius * 2 > this.line_height
+ ? this.line_height / 2
+ : this.ball_radius,
+ ball_diameter:
+ this.ball_radius * 2 > this.line_height
+ ? this.line_height / 2
+ : this.ball_radius * 2,
+ ball_left: -this.ball_radius,
+ marker_color: this.placeholder_color,
},
- _html = Mustache.to_html(this.markerPlaceholderTemplate, _data),
- _el = IriSP.jQuery(_html);
-
- list_$ = this.$.find(".Ldt-Markers-List");
- _el.appendTo(list_$);
-}
+ _html = Mustache.render(this.markerPlaceholderTemplate, _data),
+ _el = jQuery(_html);
-IriSP.Widgets.Markers.prototype.clearSelectedMarker = function(){
- if (this.selectedMarker){
+ list_$ = this.$.find(".Ldt-Markers-List");
+ _el.appendTo(list_$);
+ }
+
+ clearSelectedMarker() {
+ if (this.selectedMarker) {
var _divHtml = "";
-
+
this.selectedMarker = false;
this.$.find(".Ldt-Markers-Info").html(_divHtml);
this.$.find(".Ldt-Markers-RoundButton").hide();
this.$.find(".Ldt-Markers-Create").show();
this.$.find(".Ldt-Markers-MarkerBall").toggleClass("selected", false);
- this.updateCreateButtonState(this.media.getCurrentTime())
+ this.updateCreateButtonState(this.media.getCurrentTime());
+ }
}
-}
-IriSP.Widgets.Markers.prototype.drawMarkers = function(){
- var _this = this,
+ drawMarkers() {
+ var _this = this,
_scale = this.width / this.source.getDuration(),
- list_$ = this.$.find('.Ldt-Markers-List'),
+ list_$ = this.$.find(".Ldt-Markers-List"),
_displayed_markers = this.markers;
- this.$.remove("Ldt-Markers-Marker");
- list_$.html("");
-
- if (this.filter_per_user && this.usernames.length > 1){
- var _username = this.$.find(".Ldt-Markers-userFilter-dropdown")[0].options[this.$.find(".Ldt-Markers-userFilter-dropdown")[0].selectedIndex].value;
- _displayed_markers = _displayed_markers.filter(function(_marker){
- return _marker.creator == _username;
- })
- }
-
- _displayed_markers.forEach(function(_marker){
- var _left = _marker.begin * _scale -1,
- _data = {
- left: _left,
- height: _this.line_height-1,
- ball_top: (_this.ball_radius*2 > _this.line_height) ? 0 : ((_this.line_height - _this.ball_radius*2)/2)-1,
- ball_radius: (_this.ball_radius*2 > _this.line_height) ? _this.line_height/2 : _this.ball_radius,
- ball_diameter: (_this.ball_radius*2 > _this.line_height) ? _this.line_height/2 : _this.ball_radius*2,
- ball_left: -_this.ball_radius,
- marker_color: ((_this.selectedMarker)&&(_this.selectedMarker.id == _marker.id))? _this.selected_color : _this.marker_color
- },
- _html = Mustache.to_html(_this.markerTemplate, _data),
- _el = IriSP.jQuery(_html);
-
- if ((_this.selectedMarker)&&(_this.selectedMarker.id == _marker.id)){
- _el.children().toggleClass("selected", true);
+ this.$.remove("Ldt-Markers-Marker");
+ list_$.html("");
+
+ if (this.filter_per_user && this.usernames.length > 1) {
+ var _username = this.$.find(".Ldt-Markers-userFilter-dropdown")[0]
+ .options[
+ this.$.find(".Ldt-Markers-userFilter-dropdown")[0].selectedIndex
+ ].value;
+ _displayed_markers = _displayed_markers.filter(function (_marker) {
+ return _marker.creator == _username;
+ });
+ }
+
+ _displayed_markers.forEach(function (_marker) {
+ var _left = _marker.begin * _scale - 1,
+ _data = {
+ left: _left,
+ height: _this.line_height - 1,
+ ball_top:
+ _this.ball_radius * 2 > _this.line_height
+ ? 0
+ : (_this.line_height - _this.ball_radius * 2) / 2 - 1,
+ ball_radius:
+ _this.ball_radius * 2 > _this.line_height
+ ? _this.line_height / 2
+ : _this.ball_radius,
+ ball_diameter:
+ _this.ball_radius * 2 > _this.line_height
+ ? _this.line_height / 2
+ : _this.ball_radius * 2,
+ ball_left: -_this.ball_radius,
+ marker_color:
+ _this.selectedMarker && _this.selectedMarker.id == _marker.id
+ ? _this.selected_color
+ : _this.marker_color,
+ },
+ _html = Mustache.render(_this.markerTemplate, _data),
+ _el = jQuery(_html);
+
+ if (_this.selectedMarker && _this.selectedMarker.id == _marker.id) {
+ _el.children().toggleClass("selected", true);
}
-
- _el.mouseover(function(){
- if (!((_this.selectedMarker)&&(_this.selectedMarker.id == _marker.id))){
- _el.children().css("background-color", _this.hover_color);
- };
- })
- .mouseout(function(){
- if (!((_this.selectedMarker)&&(_this.selectedMarker.id == _marker.id))){
- _el.children().css("background-color", _this.marker_color);
- };
- })
- .click(function(){
- _this.showScreen("Main");
- _this.cancelEdit();
- _this.hidePlaceholder();
- if (!((_this.selectedMarker)&&(_this.selectedMarker.id == _marker.id))){
- // if there either is no marker selected or we click a different marker
- list_$.find(".Ldt-Markers-MarkerBall").css("background-color", _this.marker_color)
- list_$.find(".Ldt-Markers-MarkerBall").toggleClass("selected", false);
- _el.children().toggleClass("selected", true);
- _el.children().css("background-color", _this.selected_color)
- _this.selectedMarker = _marker;
-
- _divHtml = Mustache.to_html(_this.infoTemplate, {
- edit: false,
- marker_info: _marker.description,
- })
-
- _this.$.find(".Ldt-Markers-Info").html(_divHtml);
- if (!_this.preview_mode){
- _this.$.find(".Ldt-Markers-MarkerDescription").click(_this.functionWrapper("startEdit"));
- }
- _this.$.find(".Ldt-Markers-RoundButton").hide();
- if (_this.preview_mode){
- _this.$.find(".Ldt-Markers-PreviewDelete").show();
- }
- else {
- _this.$.find(".Ldt-Markers-Delete").show();
- }
+
+ _el
+ .mouseover(function () {
+ if (
+ !(_this.selectedMarker && _this.selectedMarker.id == _marker.id)
+ ) {
+ _el.children().css("background-color", _this.hover_color);
+ }
+ })
+ .mouseout(function () {
+ if (
+ !(_this.selectedMarker && _this.selectedMarker.id == _marker.id)
+ ) {
+ _el.children().css("background-color", _this.marker_color);
+ }
+ })
+ .click(function () {
+ _this.showScreen("Main");
+ _this.cancelEdit();
+ _this.hidePlaceholder();
+ if (
+ !(_this.selectedMarker && _this.selectedMarker.id == _marker.id)
+ ) {
+ // if there either is no marker selected or we click a different marker
+ list_$
+ .find(".Ldt-Markers-MarkerBall")
+ .css("background-color", _this.marker_color);
+ list_$
+ .find(".Ldt-Markers-MarkerBall")
+ .toggleClass("selected", false);
+ _el.children().toggleClass("selected", true);
+ _el.children().css("background-color", _this.selected_color);
+ _this.selectedMarker = _marker;
+
+ _divHtml = Mustache.render(_this.infoTemplate, {
+ edit: false,
+ marker_info: _marker.description,
+ });
- }
- else {
- // if we click the currently selected marker, we unselect it
- _el.children().css("background-color", _this.hover_color);
- _this.clearSelectedMarker();
- }
-
- if (_this.selectedMarker) {
- // Only if we select a new marker do we pause video and time jump
- _this.media.pause();
- _marker.trigger("click");
- }
- })
- .appendTo(list_$);
- })
-}
+ _this.$.find(".Ldt-Markers-Info").html(_divHtml);
+ if (!_this.preview_mode) {
+ _this.$.find(".Ldt-Markers-MarkerDescription").click(
+ _this.functionWrapper("startEdit")
+ );
+ }
+ _this.$.find(".Ldt-Markers-RoundButton").hide();
+ if (_this.preview_mode) {
+ _this.$.find(".Ldt-Markers-PreviewDelete").show();
+ } else {
+ _this.$.find(".Ldt-Markers-Delete").show();
+ }
+ } else {
+ // if we click the currently selected marker, we unselect it
+ _el.children().css("background-color", _this.hover_color);
+ _this.clearSelectedMarker();
+ }
+ if (_this.selectedMarker) {
+ // Only if we select a new marker do we pause video and time jump
+ _this.media.pause();
+ _marker.trigger("click");
+ }
+ })
+ .appendTo(list_$);
+ });
+ }
-IriSP.Widgets.Markers.prototype.onSubmit = function(){
-
- /* If mandatory fields are empty, we cancel the sending */
- if (!this.allow_empty_markers && !this.onDescriptionChange()){
+ onSubmit() {
+ /* If mandatory fields are empty, we cancel the sending */
+ if (!this.allow_empty_markers && !this.onDescriptionChange()) {
return false;
- }
-
- /* We pause the video if it's still playing */
- if (!this.media.getPaused()){
+ }
+
+ /* We pause the video if it's still playing */
+ if (!this.media.getPaused()) {
this.media.pause();
- }
-
- var _this = this,
- _exportedAnnotations = new IriSP.Model.List(this.player.sourceManager), /* We create a List to send to the server that will contains the annotation */
- _export = this.player.sourceManager.newLocalSource({serializer: IriSP.serializers[this.api_serializer]}), /* We create a source object using a specific serializer for export */
- _annotationTypes = this.source.getAnnotationTypes().searchByTitle(this.annotation_type, true), /* We get the AnnotationType in which the annotation will be added */
- _annotationType = (_annotationTypes.length ? _annotationTypes[0] : new IriSP.Model.AnnotationType(false, _export)); /* If it doesn't already exists, we create it */
- if (this.selectedMarker){
+ }
+
+ var _this = this,
+ _exportedAnnotations = new ns.Model.List(
+ this.player.sourceManager
+ ) /* We create a List to send to the server that will contains the annotation */,
+ _export = this.player.sourceManager.newLocalSource({
+ serializer: ns.serializers[this.api_serializer],
+ }) /* We create a source object using a specific serializer for export */,
+ _annotationTypes = this.source
+ .getAnnotationTypes()
+ .searchByTitle(
+ this.annotation_type,
+ true
+ ) /* We get the AnnotationType in which the annotation will be added */,
+ _annotationType = _annotationTypes.length
+ ? _annotationTypes[0]
+ : new ns.Model.AnnotationType(
+ false,
+ _export
+ ); /* If it doesn't already exists, we create it */
+ if (this.selectedMarker) {
var _annotation = this.selectedMarker,
- _url = Mustache.to_html(this.api_endpoint_template_edit, {annotation_id: this.selectedMarker ? this.selectedMarker.id : ""});
- _annotation.source = _export
- _annotation.description = this.$.find(".Ldt-Markers-MarkerTextArea").val(); /* Description field */
- }
- else {
- var _annotation = new IriSP.Model.Annotation(false, _export),
- _url = Mustache.to_html(this.api_endpoint_template_create);
-
+ _url = Mustache.render(this.api_endpoint_template_edit, {
+ annotation_id: this.selectedMarker ? this.selectedMarker.id : "",
+ });
+ _annotation.source = _export;
+ _annotation.description = this.$.find(
+ ".Ldt-Markers-MarkerTextArea"
+ ).val(); /* Description field */
+ } else {
+ var _annotation = new ns.Model.Annotation(false, _export),
+ _url = Mustache.render(this.api_endpoint_template_create);
+
/* If we created an AnnotationType on the spot ... */
if (!_annotationTypes.length) {
- /* ... We must not send its id to the server ... */
- _annotationType.dont_send_id = true;
- /* ... And we must include its title. */
- _annotationType.title = this.annotation_type;
+ /* ... We must not send its id to the server ... */
+ _annotationType.dont_send_id = true;
+ /* ... And we must include its title. */
+ _annotationType.title = this.annotation_type;
}
-
- _annotation.setMedia(this.source.currentMedia.id); /* Annotated media ID */
- if (!this.selectedMarker){
- _annotation.setBegin(this.newMarkerCurrentTime);
- _annotation.setEnd(this.newMarkerCurrentTime);
+
+ _annotation.setMedia(
+ this.source.currentMedia.id
+ ); /* Annotated media ID */
+ if (!this.selectedMarker) {
+ _annotation.setBegin(this.newMarkerCurrentTime);
+ _annotation.setEnd(this.newMarkerCurrentTime);
}
- _annotation.setAnnotationType(_annotationType.id); /* AnnotationType ID */
- if (this.project_id != ""){
- /* Project id, only if it's been specifiec in the config */
- _annotation.project_id = this.project_id;
+ _annotation.setAnnotationType(
+ _annotationType.id
+ ); /* AnnotationType ID */
+ if (this.project_id != "") {
+ /* Project id, only if it's been specifiec in the config */
+ _annotation.project_id = this.project_id;
}
_annotation.created = new Date(); /* Creation date */
- _annotation.description = this.$.find(".Ldt-Markers-MarkerTextArea").val(); /* Description field */
+ _annotation.description = this.$.find(
+ ".Ldt-Markers-MarkerTextArea"
+ ).val(); /* Description field */
_annotation.creator = this.creator_name;
- }
- _annotation.project_id = this.project_id;
-
- _exportedAnnotations.push(_annotation); /* We add the annotation in the list to export */
- _export.addList("annotation",_exportedAnnotations); /* We add the list to the source object */
-
- /* We send the AJAX request to the server ! */
- IriSP.jQuery.ajax({
+ }
+ _annotation.project_id = this.project_id;
+
+ _exportedAnnotations.push(
+ _annotation
+ ); /* We add the annotation in the list to export */
+ _export.addList(
+ "annotation",
+ _exportedAnnotations
+ ); /* We add the list to the source object */
+
+ /* We send the AJAX request to the server ! */
+ jQuery.ajax({
url: _url,
- type: this.selectedMarker ? this.api_method_edit : this.api_method_create,
- contentType: 'application/json',
+ type: this.selectedMarker
+ ? this.api_method_edit
+ : this.api_method_create,
+ contentType: "application/json",
data: _export.serialize(),
- success: function(_data) {
- _this.showScreen('Success');
- window.setTimeout(_this.functionWrapper("revertToMainScreen"),(_this.after_send_timeout || 5000));
- _export.getAnnotations().removeElement(_annotation, true); /* We delete the sent annotation to avoid redundancy */
- _export.deSerialize(_data); /* Data deserialization */
- _annotation.id = _data.id;
- _this.source.merge(_export); /* We merge the deserialized data with the current source data */
- if (_this.pause_on_write && _this.media.getPaused() && _this.play_on_submit) {
- _this.media.play();
- }
- _this.markers.push(_annotation);
- _this.selectedMarker = _annotation;
- _this.drawMarkers();
- _this.player.trigger("AnnotationsList.refresh");
- _this.player.trigger("Markers.refresh");
+ success: function (_data) {
+ _this.showScreen("Success");
+ window.setTimeout(
+ _this.functionWrapper("revertToMainScreen"),
+ _this.after_send_timeout || 5000
+ );
+ _export
+ .getAnnotations()
+ .removeElement(
+ _annotation,
+ true
+ ); /* We delete the sent annotation to avoid redundancy */
+ _export.deSerialize(_data); /* Data deserialization */
+ _annotation.id = _data.id;
+ _this.source.merge(
+ _export
+ ); /* We merge the deserialized data with the current source data */
+ if (
+ _this.pause_on_write &&
+ _this.media.getPaused() &&
+ _this.play_on_submit
+ ) {
+ _this.media.play();
+ }
+ _this.markers.push(_annotation);
+ _this.selectedMarker = _annotation;
+ _this.drawMarkers();
+ _this.player.trigger("AnnotationsList.refresh");
+ _this.player.trigger("Markers.refresh");
+ },
+ error: function (_xhr, _error, _thrown) {
+ ns.log("Error when sending annotation", _thrown);
+ _export.getAnnotations().removeElement(_annotation, true);
+ _this.showScreen("Failure");
+ window.setTimeout(
+ _this.functionWrapper("revertToMainScreen"),
+ _this.after_send_timeout || 5000
+ );
},
- error: function(_xhr, _error, _thrown) {
- IriSP.log("Error when sending annotation", _thrown);
- _export.getAnnotations().removeElement(_annotation, true);
- _this.showScreen('Failure');
- window.setTimeout(_this.functionWrapper("revertToMainScreen"),(_this.after_send_timeout || 5000));
- }
- });
- this.showScreen('Sending');
-
- return false;
+ });
+ this.showScreen("Sending");
+
+ return false;
+ }
+
+ sendDelete() {
+ _this = this;
+ _url = Mustache.render(this.api_endpoint_template_delete, {
+ annotation_id: this.selectedMarker ? this.selectedMarker.id : "",
+ project_id: this.selectedMarker.project_id
+ ? this.selectedMarker.project_id
+ : this.project_id,
+ });
+ jQuery.ajax({
+ url: _url,
+ type: this.api_method_delete,
+ contentType: "application/json",
+ success: function (_data) {
+ _this.showScreen("DeleteSuccess");
+ window.setTimeout(
+ _this.functionWrapper("revertToMainScreen"),
+ _this.after_send_timeout || 5000
+ );
+ if (
+ _this.pause_on_write &&
+ _this.media.getPaused() &&
+ _this.play_on_submit
+ ) {
+ _this.media.play();
+ }
+ _this.markers.removeElement(_this.selectedMarker);
+ _this.selectedMarker = false;
+ _this.player.trigger("AnnotationsList.refresh");
+ _this.player.trigger("Markers.refresh");
+ },
+ error: function (_xhr, _error, _thrown) {
+ ns.log("Error when sending annotation", _thrown);
+ _this.showScreen("Failure");
+ window.setTimeout(
+ _this.functionWrapper("revertToMainScreen"),
+ _this.after_send_timeout || 5000
+ );
+ },
+ });
+ this.showScreen("Sending");
+ }
+ };
};
-IriSP.Widgets.Markers.prototype.sendDelete = function(){
- _this = this;
- _url = Mustache.to_html(this.api_endpoint_template_delete, {annotation_id: this.selectedMarker ? this.selectedMarker.id : "", project_id: this.selectedMarker.project_id? this.selectedMarker.project_id : this.project_id});
- IriSP.jQuery.ajax({
- url: _url,
- type: this.api_method_delete,
- contentType: 'application/json',
- success: function(_data) {
- _this.showScreen('DeleteSuccess');
- window.setTimeout(_this.functionWrapper("revertToMainScreen"),(_this.after_send_timeout || 5000));
- if (_this.pause_on_write && _this.media.getPaused() && _this.play_on_submit) {
- _this.media.play();
- }
- _this.markers.removeElement(_this.selectedMarker);
- _this.selectedMarker = false
- _this.player.trigger("AnnotationsList.refresh");
- _this.player.trigger("Markers.refresh");
- },
- error: function(_xhr, _error, _thrown) {
- IriSP.log("Error when sending annotation", _thrown);
- _this.showScreen('Failure');
- window.setTimeout(_this.functionWrapper("revertToMainScreen"),(_this.after_send_timeout || 5000));
- }
- });
- this.showScreen("Sending")
-}
\ No newline at end of file
+export { Markers, markersStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Markers.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,186 @@
+
+.Ldt-Markers-Marker {
+ position: absolute;
+ margin-left: -1px;
+ border: 1px solid #ffffff;
+}
+
+.Ldt-Markers-MarkerBall {
+ background: #ffffff;
+}
+
+.Ldt-Markers-MarkerBall:hover {
+ background: #bebebe;
+}
+
+.Ldt-Markers-List{
+ overflow: hidden;
+}
+
+.Ldt-Markers-Position {
+ background: #fc00ff;
+ position: relative;
+ left: 0;
+ margin-left: -1px;
+ width: 2px;
+ bottom: -1px;
+ z-index: 80000;
+}
+
+.Ldt-Markers-Inputs{
+ background-color: #e0e0e0;
+ margin-top: 1px;
+}
+
+.Ldt-Markers-RoundButton{
+ display: inline-block;
+ background-color: #d93c71;
+ color: #ffffff;
+ cursor: pointer;
+ height: 20px;
+ width: 20px;
+ border-radius: 20px;
+ font-size: 25px;
+ font-style: bold;
+ border: 1px solid;
+ border-color: #eca3bc #631e34 #36101c #e16e93;
+ cursor: pointer;
+ margin-right: 0px;
+ margin-left: 13px;
+ margin-bottom: 10px;
+ margin-top: 10px;
+ padding: 4px;
+ text-align: center;
+ vertical-align: top;
+ line-height: 20px;
+}
+
+.Ldt-Markers-RoundButton.Ldt-Markers-CannotCreate,
+.Ldt-Markers-RoundButton.Ldt-Markers-PreviewDelete{
+ background-color: #999999;
+ border-color: #797979 #444444 #222222 #696969;
+}
+
+.Ldt-Markers-RoundButton.Ldt-Markers-Delete{
+ line-height: 23px;
+ text-indent: 2px;
+}
+
+.Ldt-Markers-RoundButton.Ldt-Markers-PreviewDelete{
+ line-height: 23px;
+ text-indent: 2px;
+}
+
+.Ldt-Markers-Info{
+ width: 90%;
+ display: inline-block;
+ margin: 0px;
+}
+
+.Ldt-Markers-Screen{
+ margin: 0px;
+}
+
+.Ldt-Markers-ScreenSending, .Ldt-Markers-ScreenFailure, .Ldt-Markers-ScreenSuccess,
+.Ldt-Markers-ScreenConfirmDelete, .Ldt-Markers-ScreenDeleteSuccess{
+ text-align: center;
+ vertical-align: middle;
+ line-height: 125px;
+ font-size: 18px;
+ font-weight: bold;
+ color: #68273C;
+}
+
+.Ldt-Markers-Screen-InnerBox{
+ border: 1px solid #CCCCCC;
+ background: #FFFFFF;
+ color: #FF3B77; text-align: center;
+ font-size: 13px; font-weight: bold;
+}
+
+a.Ldt-Markers-Close {
+ position: relative;
+ float: right;
+ right: 2px;
+ top: 2px;
+ display: inline-block; width: 17px; height: 17px; margin: 4px;
+ background: url(img/widget-control.png);
+}
+
+a.Ldt-Markers-Screen-SubmitDelete, a.Ldt-Markers-Screen-CancelDelete {
+ color: #3366BB;
+ cursor: pointer;
+}
+
+a.Ldt-Markers-Screen-SubmitDelete:hover, a.Ldt-Markers-Screen-CancelDelete:hover {
+ color: #3a75ff;
+}
+
+.Ldt-Markers-MarkerDescription{
+ width: 90%;
+ border: 1px solid #68273c;
+ margin: 10px;
+ padding: 10px;
+ background: #ffffff;
+ overflow: scroll;
+}
+
+.Ldt-Markers-MarkerDescription:hover{
+ border: 2px solid #e87d9f;
+}
+
+.Ldt-Markers-MarkerEdit{
+ width: 100%;
+ margin: 10px;
+}
+
+.Ldt-Markers-MarkerTextArea{
+ height: auto;
+ width: auto;
+ max-width: 82%;
+ max-height: 100%;
+ padding: 10px;
+ background: #ffffff;
+ border: 2px solid #e87d9f;
+ margin: 0px;
+}
+
+.Ldt-Markers-Buttons{
+ display: inline-block;
+ width: 17%;
+ vertical-align: top;
+}
+
+.Ldt-Markers-MarkerSend, .Ldt-Markers-MarkerPreviewSend, .Ldt-Markers-MarkerCancel{
+ display: inline-block;
+ background-color: #d93c71;
+ color: #ffffff;
+ cursor: pointer;
+ height: 20px;
+ width: 80px;
+ font-size: 11;
+ font-style: bold;
+ border: 1px solid;
+ border-color: #eca3bc #631e34 #36101c #e16e93;
+ cursor: pointer;
+ margin-right: 5px;
+ margin-left: 5px;
+ margin-bottom: 10px;
+ margin-top: 0px;
+ padding: 4px;
+ text-align: center;
+ vertical-align: top;
+ line-height: 20px;
+ vertical-align: top;
+}
+
+.Ldt-Markers-RoundButton:hover, .Ldt-Markers-MarkerSend:hover, .Ldt-Markers-MarkerPreviewSend:hover, .Ldt-Markers-MarkerCancel:hover{
+ background-color: #e15581;
+ border-color: #222222 #e87d9f #f0adc3 #68273c;
+}
+
+.Ldt-Markers-RoundButton.Ldt-Markers-CannotCreate:hover,
+.Ldt-Markers-RoundButton.Ldt-Markers-PreviewDelete:hover{
+ background-color: #999999;
+ border-color: #797979 #444444 #222222 #696969;
+}
\ No newline at end of file
--- a/src/widgets/MashupPlayer.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-.Ldt-MashupPlayer-Media {
- position: absolute;
-}
-
-.Ldt-MashupPlayer-Waiting {
- position: absolute; left: 0; top: 0; width: 100%; height: 100%;
- background-color: rgba(120, 120, 140, .6);
- background-image: url(img/reel.gif);
- background-position: center;
- background-repeat: no-repeat;
-}
--- a/src/widgets/MashupPlayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/MashupPlayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,19 +1,23 @@
-IriSP.Widgets.MashupPlayer = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
- this.is_mashup = true;
-};
-
-IriSP.Widgets.MashupPlayer.prototype = new IriSP.Widgets.Widget();
+import _ from "lodash";
+import jQuery from "jquery";
+import mashupPlayerStyles from "./MashupPlayer.module.css";
-IriSP.Widgets.MashupPlayer.prototype.defaults = {
- aspect_ratio: 14/9,
- split_screen: false,
- player_type: "PopcornPlayer",
- background: "#000000"
-};
+const MashupPlayer = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ this.is_mashup = true;
+ }
-IriSP.Widgets.MashupPlayer.prototype.draw = function() {
- var _this = this,
+ static defaults = {
+ aspect_ratio: 14 / 9,
+ split_screen: false,
+ player_type: "PopcornPlayer",
+ background: "#000000",
+ };
+
+ draw() {
+ var _this = this,
_mashup = this.media,
_currentMedia = null,
_currentAnnotation = null,
@@ -24,233 +28,240 @@
_seekdiv,
_timedelta,
medialist = _mashup.getMedias();
-
- _mashup.paused = (!this.autostart && !this.autoplay);
-
- function changeCurrentAnnotation() {
+
+ _mashup.paused = !this.autostart && !this.autoplay;
+
+ function changeCurrentAnnotation() {
if (_timecode >= _mashup.duration) {
- if (!_mashup.paused) {
- _mashup.paused = true;
- _mashup.trigger("pause");
- }
- _timecode = 0;
+ if (!_mashup.paused) {
+ _mashup.paused = true;
+ _mashup.trigger("pause");
+ }
+ _timecode = 0;
}
- var _annotation = _mashup.getAnnotationAtTime( _timecode );
+ var _annotation = _mashup.getAnnotationAtTime(_timecode);
if (typeof _annotation === "undefined") {
- if (_currentMedia) {
- _currentMedia.pause();
- if (!_mashup.paused) {
- _mashup.paused = true;
- _mashup.trigger("pause");
- }
+ if (_currentMedia) {
+ _currentMedia.pause();
+ if (!_mashup.paused) {
+ _mashup.paused = true;
+ _mashup.trigger("pause");
}
- return;
+ }
+ return;
}
if (_annotation !== _currentAnnotation) {
- _currentAnnotation = _annotation;
- _segmentBegin = _currentAnnotation.annotation.begin.milliseconds;
- _segmentEnd = _currentAnnotation.annotation.end.milliseconds;
- _timedelta = _segmentBegin - _currentAnnotation.begin.milliseconds;
- _currentMedia = _currentAnnotation.getMedia();
-
- for (var _i = 0; _i < medialist.length; _i++) {
- if (medialist[_i].id !== _currentMedia.id) {
- if (!_this.split_screen) {
- medialist[_i].hide();
- }
- medialist[_i].pause();
- } else {
- medialist[_i].show();
- }
+ _currentAnnotation = _annotation;
+ _segmentBegin = _currentAnnotation.annotation.begin.milliseconds;
+ _segmentEnd = _currentAnnotation.annotation.end.milliseconds;
+ _timedelta = _segmentBegin - _currentAnnotation.begin.milliseconds;
+ _currentMedia = _currentAnnotation.getMedia();
+
+ for (var _i = 0; _i < medialist.length; _i++) {
+ if (medialist[_i].id !== _currentMedia.id) {
+ if (!_this.split_screen) {
+ medialist[_i].hide();
+ }
+ medialist[_i].pause();
+ } else {
+ medialist[_i].show();
}
-
- /* PRELOADING */
- var _preloadedMedias = [],
- _toPreload = _mashup.getAnnotations().filter(function(_a) {
- return (_a.begin >= _currentAnnotation.end && _a.getMedia() !== _currentMedia);
+ }
+
+ /* PRELOADING */
+ var _preloadedMedias = [],
+ _toPreload = _mashup.getAnnotations().filter(function (_a) {
+ return (
+ _a.begin >= _currentAnnotation.end &&
+ _a.getMedia() !== _currentMedia
+ );
});
- IriSP._(_toPreload).each(function(_a) {
- var _media = _a.getMedia();
- if (IriSP._(_preloadedMedias).indexOf(_media.id) === -1) {
- _preloadedMedias.push(_media.id);
- _media.setCurrentTime(_a.annotation.begin.getSeconds());
- _media.seeking = true;
-/*
+ _(_toPreload).each(function (_a) {
+ var _media = _a.getMedia();
+ if (_(_preloadedMedias).indexOf(_media.id) === -1) {
+ _preloadedMedias.push(_media.id);
+ _media.setCurrentTime(_a.annotation.begin.getSeconds());
+ _media.seeking = true;
+ /*
console.log("Preloading ", _media.id, " at t=", _a.annotation.begin.getSeconds());
*/
- }
- });
-
- // console.log("Changed segment: media="+ this.currentMedia.id + ", from=" + this.segmentBegin + " to=" + this.segmentEnd +", timedelta = ", this.timedelta)
- // } else {
- // console.log("changeCurrentAnnotation called, but segment hasn't changed");
+ }
+ });
+
+ // console.log("Changed segment: media="+ this.currentMedia.id + ", from=" + this.segmentBegin + " to=" + this.segmentEnd +", timedelta = ", this.timedelta)
+ // } else {
+ // console.log("changeCurrentAnnotation called, but segment hasn't changed");
}
-
- _currentMedia.setCurrentTime( _timecode + _timedelta);
+
+ _currentMedia.setCurrentTime(_timecode + _timedelta);
_currentMedia.seeking = true;
-
+
if (!_mashup.paused) {
- _currentMedia.play();
- _seeking = true;
- _seekdiv.show();
+ _currentMedia.play();
+ _seeking = true;
+ _seekdiv.show();
}
-/*
+ /*
console.log("Setting time of media", _currentMedia.id, "to", _timecode + _timedelta)
*/
- _mashup.trigger("timeupdate", new IriSP.Model.Time(_timecode));
+ _mashup.trigger("timeupdate", new ns.Model.Time(_timecode));
+ }
- }
-
- if (!this.height) {
- this.height = Math.floor(this.width/this.aspect_ratio);
+ if (!this.height) {
+ this.height = Math.floor(this.width / this.aspect_ratio);
this.$.css({
- height: this.height
+ height: this.height,
});
- }
-
- this.$.css({
- background: this.background
- });
-
- var _grid = Math.ceil(Math.sqrt(medialist.length)),
- _width = (this.split_screen ? this.width / _grid : this.width),
- _height = (this.split_screen ? this.height / _grid : this.height);
+ }
+
+ this.$.css({
+ background: this.background,
+ });
+
+ var _grid = Math.ceil(Math.sqrt(medialist.length)),
+ _width = this.split_screen ? this.width / _grid : this.width,
+ _height = this.split_screen ? this.height / _grid : this.height;
- IriSP._(medialist).each(function(_media, _key) {
- var _el = IriSP.jQuery('<div class="Ldt-MashupPlayer-Media"><div class="Ldt-MashupPlayer-Subwidget"></div></div>');
+ _(medialist).each(function (_media, _key) {
+ var _el = jQuery(
+ '<div class="Ldt-MashupPlayer-Media"><div class="Ldt-MashupPlayer-Subwidget"></div></div>'
+ );
_el.css({
- top: (_this.split_screen ? _height * Math.floor(_key / _grid) : 0),
- left: (_this.split_screen ? _width * (_key % _grid) : 0),
- height: _height,
- width: _width,
- display: (_this.split_screen ? "block" : "none")
+ top: _this.split_screen ? _height * Math.floor(_key / _grid) : 0,
+ left: _this.split_screen ? _width * (_key % _grid) : 0,
+ height: _height,
+ width: _width,
+ display: _this.split_screen ? "block" : "none",
});
_this.$.append(_el);
-
+
_this.insertSubwidget(
- _el.find(".Ldt-MashupPlayer-Subwidget"),
- IriSP._({
- type: _this.player_type,
- media_id: _media.id,
- height: _height,
- width: _width,
- url_transform: _this.url_transform
- }).extend(_this.player_options)
+ _el.find(".Ldt-MashupPlayer-Subwidget"),
+ _({
+ type: _this.player_type,
+ media_id: _media.id,
+ height: _height,
+ width: _width,
+ url_transform: _this.url_transform,
+ }).extend(_this.player_options)
);
-
+
_media.loadedMetadata = false;
- _media.show = function() {
- _el.show();
+ _media.show = function () {
+ _el.show();
};
- _media.hide = function() {
- _el.hide();
+ _media.hide = function () {
+ _el.hide();
};
- _media.on("loadedmetadata", function() {
- _media.loadedMetadata = true;
- var _allLoaded = true;
- for (var _i = 0; _i < medialist.length; _i++) {
- _allLoaded = _allLoaded && medialist[_i].loadedMetadata;
- }
- if (_allLoaded) {
- _seekdiv.fadeOut();
- changeCurrentAnnotation();
- _mashup.trigger("loadedmetadata");
- }
+ _media.on("loadedmetadata", function () {
+ _media.loadedMetadata = true;
+ var _allLoaded = true;
+ for (var _i = 0; _i < medialist.length; _i++) {
+ _allLoaded = _allLoaded && medialist[_i].loadedMetadata;
+ }
+ if (_allLoaded) {
+ _seekdiv.fadeOut();
+ changeCurrentAnnotation();
+ _mashup.trigger("loadedmetadata");
+ }
});
- _media.on("timeupdate", function(_time) {
- if (!_mashup.paused && _media === _currentMedia && !_media.seeking) {
-/*
+ _media.on("timeupdate", function (_time) {
+ if (!_mashup.paused && _media === _currentMedia && !_media.seeking) {
+ /*
var _status = "Timeupdate from " + _media.id + " at time " + _time;
*/
- if ( _time < _segmentEnd ) {
- if ( _time >= _segmentBegin ) {
- _timecode = _time - _timedelta;
-/*
+ if (_time < _segmentEnd) {
+ if (_time >= _segmentBegin) {
+ _timecode = _time - _timedelta;
+ /*
_status += " within segment";
*/
- } else {
- _timecode = _segmentBegin - _timedelta;
- _media.setCurrentTime(_segmentBegin);
-/*
+ } else {
+ _timecode = _segmentBegin - _timedelta;
+ _media.setCurrentTime(_segmentBegin);
+ /*
_status += " before segment";
*/
- }
- } else {
- _timecode = _segmentEnd - _timedelta;
- _media.pause();
- changeCurrentAnnotation();
-/*
+ }
+ } else {
+ _timecode = _segmentEnd - _timedelta;
+ _media.pause();
+ changeCurrentAnnotation();
+ /*
_status += " after segment";
*/
- }
-/*
+ }
+ /*
_status += " (" + _segmentBegin + " to " + _segmentEnd + ")" + ", translated to " + _timecode;
console.log(_status);
*/
- _mashup.trigger("timeupdate", new IriSP.Model.Time(_timecode));
- }
+ _mashup.trigger("timeupdate", new ns.Model.Time(_timecode));
+ }
});
- _media.on("seeked", function() {
- _media.seeking = false;
- if (_media === _currentMedia && _seeking) {
- _seeking = false;
- _seekdiv.hide();
- }
+ _media.on("seeked", function () {
+ _media.seeking = false;
+ if (_media === _currentMedia && _seeking) {
+ _seeking = false;
+ _seekdiv.hide();
+ }
});
- _media.on("play", function() {
- if (_media === _currentMedia) {
- _mashup.trigger("play");
- }
+ _media.on("play", function () {
+ if (_media === _currentMedia) {
+ _mashup.trigger("play");
+ }
});
- _media.on("pause", function() {
- if (_media === _currentMedia) {
- _mashup.trigger("pause");
- }
+ _media.on("pause", function () {
+ if (_media === _currentMedia) {
+ _mashup.trigger("pause");
+ }
});
- _media.on("volumechange", function() {
- _mashup.muted = _media.muted;
- _mashup.volume = _media.volume;
- _mashup.trigger("volumechange");
+ _media.on("volumechange", function () {
+ _mashup.muted = _media.muted;
+ _mashup.volume = _media.volume;
+ _mashup.trigger("volumechange");
});
- });
-
- _seekdiv = IriSP.jQuery('<div class="Ldt-MashupPlayer-Waiting"></div>');
-
- this.$.append(_seekdiv);
+ });
+
+ _seekdiv = jQuery('<div class="Ldt-MashupPlayer-Waiting"></div>');
- // Binding functions to Popcorn
-
- _mashup.on("setcurrenttime", function(_milliseconds) {
+ this.$.append(_seekdiv);
+
+ // Binding functions to Popcorn
+
+ _mashup.on("setcurrenttime", function (_milliseconds) {
_timecode = _milliseconds;
changeCurrentAnnotation();
- });
-
- _mashup.on("setvolume", function(_vol) {
+ });
+
+ _mashup.on("setvolume", function (_vol) {
for (var _i = 0; _i < medialist.length; _i++) {
- medialist[_i].setVolume(_vol);
+ medialist[_i].setVolume(_vol);
}
_mashup.volume = _vol;
- });
-
- _mashup.on("setmuted", function(_muted) {
+ });
+
+ _mashup.on("setmuted", function (_muted) {
for (var _i = 0; _i < medialist.length; _i++) {
- medialist[_i].setMuted(_muted);
+ medialist[_i].setMuted(_muted);
}
_mashup.muted = _muted;
- });
-
- _mashup.on("setplay", function() {
+ });
+
+ _mashup.on("setplay", function () {
_mashup.paused = false;
changeCurrentAnnotation();
- });
-
- _mashup.on("setpause", function() {
+ });
+
+ _mashup.on("setpause", function () {
_mashup.paused = true;
if (_currentMedia) {
- _currentMedia.pause();
+ _currentMedia.pause();
}
- });
-
- _mashup.on("loadedmetadata", changeCurrentAnnotation);
-
-};
\ No newline at end of file
+ });
+
+ _mashup.on("loadedmetadata", changeCurrentAnnotation);
+ }
+ };
+};
+
+export { MashupPlayer, mashupPlayerStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/MashupPlayer.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,11 @@
+.Ldt-MashupPlayer-Media {
+ position: absolute;
+}
+
+.Ldt-MashupPlayer-Waiting {
+ position: absolute; left: 0; top: 0; width: 100%; height: 100%;
+ background-color: rgba(120, 120, 140, .6);
+ background-image: url(img/reel.gif);
+ background-position: center;
+ background-repeat: no-repeat;
+}
--- a/src/widgets/MediaList.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-.Ldt-MediaListWidget a {
- text-decoration: none;
-}
-
-.Ldt-MediaListWidget h2 {
- clear: both;
-}
-
-.Ldt-MediaList-NowContainer {
- min-height: 60px;
- margin: 2px 0;
-}
-
-h3.Ldt-MediaList-Now-Title {
- font-size: 13px;
- margin: 2px 2px 0 82px;
- font-weight: bold;
-}
-
-.Ldt-MediaListWidget h3 a {
- color: #0068c4;
-}
-
-p.Ldt-MediaList-Now-Description {
- margin: 2px 0 2px 82px;
- font-size: 12px;
- color: #666666;
-}
-
-ul.Ldt-MediaList-OtherList {
- list-style: none;
- padding: 2px;
- margin: 0;
-}
-
-li.Ldt-MediaList-OtherList-li {
- width: 100%;
- clear: both;
- margin: 2px 0;
- padding: 2px 0;
- min-height: 48px;
-}
-
-.Ldt-MediaList-OtherList-li:hover, .Ldt-MediaList-NowContainer:hover {
- background: url(img/pinstripe-grey.png);
-}
-
-.Ldt-MediaList-Now-ThumbContainer, .Ldt-MediaList-Other-ThumbContainer {
- float: left;
- width: 80px;
- height: 50px;
- text-align: center;
- margin: 2px 0;
-}
-
-.Ldt-MediaList-Now-ThumbContainer {
- float: left;
- width: 80px;
- height: 50px;
- text-align: center;
- margin: 2px 0;
-}
-
-.Ldt-MediaList-Other-ThumbContainer {
- width: 60px;
- height: 38px;
-}
-
-.Ldt-MediaList-Now-Thumbnail, .Ldt-MediaList-Other-Thumbnail {
- border: none;
- max-width: 100%;
- max-height: 100%;
- margin: 0 auto;
-}
-
-h3.Ldt-MediaList-Other-Title {
- font-size: 12px;
- margin: 2px 2px 0 62px;
- font-weight: bold;
-}
-
-p.Ldt-MediaList-Other-Description {
- margin: 2px 0 2px 62px;
- font-size: 10px;
- color: #666666;
-}
-
-.Ldt-MediaList-Now-MediaView {
- clear: both; width: 100%; height: 12px; margin: 5px 0 0; overflow: hidden; position: relative;
-}
-
-.Ldt-MediaList-Other-MediaView {
- clear: both; width: 100%; height: 6px; margin: 5px 0 0; overflow: hidden; position: relative;
-}
-
-.Ldt-MediaList-MediaView-Background {
- position: absolute; top: 0; left: 0; width: 100%; height: 100%; filter: alpha(opacity=50); opacity: 0.5; background: #999999;
-}
-
-.Ldt-MediaList-Segment {
- position: absolute; top: 0; height: 100%; border-style: none solid; margin-left: -1px; border-color: #ffffff; border-width: 1px;
-}
--- a/src/widgets/MediaList.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/MediaList.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,130 +1,150 @@
-IriSP.Widgets.MediaList = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
- this.lastMedia = false;
-};
+import Mustache from "mustache";
+import mediaListStyles from "./MediaList.module.css";
-IriSP.Widgets.MediaList.prototype = new IriSP.Widgets.Widget();
+const MediaList = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ this.lastMedia = false;
+ }
-IriSP.Widgets.MediaList.prototype.messages = {
- "fr": {
+ static messages = {
+ fr: {
now_playing: "Vidéo en cours",
all_media: "Toutes les vidéos",
- other_media: "Autres vidéos"
- },
- "en": {
+ other_media: "Autres vidéos",
+ },
+ en: {
now_playing: "Now playing",
all_media: "All videos",
- other_media: "Other videos"
- }
-};
+ other_media: "Other videos",
+ },
+ };
+
+ static defaults = {
+ default_thumbnail:
+ "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
+ media_url_template:
+ "http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/{{media}}/",
+ default_color: "#000080",
+ };
+
+ static template =
+ '<div class="Ldt-MediaList-NowPlaying"><h2>{{l10n.now_playing}}</h2><hr />' +
+ '<div class="Ldt-MediaList-NowContainer">' +
+ '<div class="Ldt-MediaList-Now-ThumbContainer"><a href="" target="_blank">' +
+ '<img class="Ldt-MediaList-Now-Thumbnail" src="" /></a></div>' +
+ '<h3 class="Ldt-MediaList-Now-Title"><a href="" target="_blank"></a></h3>' +
+ '<p class="Ldt-MediaList-Now-Description"></p><div class="Ldt-MediaList-Now-MediaView"></div></div></div>' +
+ '<div class="Ldt-MediaList-Other"><h2></h2><hr /><ul class="Ldt-MediaList-OtherList"></ul></div>';
+
+ static mediaViewTemplate =
+ '<div class="Ldt-MediaList-MediaView-Background"></div>{{#segments}}<div class="Ldt-MediaList-Segment" style="background: {{color}}; left: {{left}}px; width: {{width}}px;"></div>{{/segments}}';
-IriSP.Widgets.MediaList.prototype.defaults = {
- default_thumbnail : "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
- media_url_template : "http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/{{media}}/",
- default_color : "#000080"
-};
+ static mediaTemplate =
+ '<li class="Ldt-MediaList-OtherList-li"><div class="Ldt-MediaList-Other-ThumbContainer"><a href="{{url}}" target="_blank">' +
+ '<img class="Ldt-MediaList-Other-Thumbnail" src="{{thumbnail}}" /></a></div>' +
+ '<h3 class="Ldt-MediaList-Other-Title"><a href="{{url}}" target="_blank">{{title}}</a></h3>' +
+ '<p class="Ldt-MediaList-Other-Description">{{description}}</p><div class="Ldt-MediaList-Other-MediaView">' +
+ MediaList.mediaViewTemplate +
+ "</div></li>";
-IriSP.Widgets.MediaList.prototype.template =
- '<div class="Ldt-MediaList-NowPlaying"><h2>{{l10n.now_playing}}</h2><hr />'
- + '<div class="Ldt-MediaList-NowContainer">'
- + '<div class="Ldt-MediaList-Now-ThumbContainer"><a href="" target="_blank">'
- + '<img class="Ldt-MediaList-Now-Thumbnail" src="" /></a></div>'
- + '<h3 class="Ldt-MediaList-Now-Title"><a href="" target="_blank"></a></h3>'
- + '<p class="Ldt-MediaList-Now-Description"></p><div class="Ldt-MediaList-Now-MediaView"></div></div></div>'
- + '<div class="Ldt-MediaList-Other"><h2></h2><hr /><ul class="Ldt-MediaList-OtherList"></ul></div>';
+ onSearch(searchString) {
+ this.searchString =
+ typeof searchString !== "undefined" ? searchString : "";
+ var _n = this.refresh(true);
+ if (this.searchString) {
+ if (_n) {
+ this.player.trigger("search.matchFound");
+ } else {
+ this.player.trigger("search.noMatchFound");
+ }
+ }
+ }
+
+ draw() {
+ this.$.addClass("Ldt-MediaListWidget");
+ this.renderTemplate();
+ var _this = this;
+ if (typeof this.media.getMedias === "function") {
+ this.media.on("enter-annotation", function (_a) {
+ _this.redraw(_a.getMedia());
+ });
+ }
+ this.redraw();
+ }
-IriSP.Widgets.MediaList.prototype.mediaViewTemplate =
- '<div class="Ldt-MediaList-MediaView-Background"></div>{{#segments}}<div class="Ldt-MediaList-Segment" style="background: {{color}}; left: {{left}}px; width: {{width}}px;"></div>{{/segments}}';
-
-IriSP.Widgets.MediaList.prototype.mediaTemplate =
- '<li class="Ldt-MediaList-OtherList-li"><div class="Ldt-MediaList-Other-ThumbContainer"><a href="{{url}}" target="_blank">'
- + '<img class="Ldt-MediaList-Other-Thumbnail" src="{{thumbnail}}" /></a></div>'
- + '<h3 class="Ldt-MediaList-Other-Title"><a href="{{url}}" target="_blank">{{title}}</a></h3>'
- + '<p class="Ldt-MediaList-Other-Description">{{description}}</p><div class="Ldt-MediaList-Other-MediaView">'
- + IriSP.Widgets.MediaList.prototype.mediaViewTemplate + '</div></li>';
-
+ getSegments(_media) {
+ var _this = this,
+ _scale = this.$.width() / _media.duration.milliseconds;
+ return this.getWidgetAnnotations()
+ .filter(function (_annotation) {
+ return _annotation.getMedia().id == _media.id;
+ })
+ .map(function (_a) {
+ var _annotation = (_a.type = "mashedAnnotation" ? _a.annotation : _a);
+ return {
+ left: _scale * _annotation.begin,
+ width: _scale * (_annotation.end - _annotation.begin),
+ color:
+ typeof _annotation.color !== "undefined" && _annotation.color
+ ? _annotation.color
+ : _this.default_color,
+ };
+ });
+ }
-IriSP.Widgets.MediaList.prototype.onSearch = function(searchString) {
- this.searchString = typeof searchString !== "undefined" ? searchString : '';
- var _n = this.refresh(true);
- if (this.searchString) {
- if (_n) {
- this.player.trigger("search.matchFound");
- } else {
- this.player.trigger("search.noMatchFound");
- }
+ redraw(_media) {
+ if (typeof _media !== "undefined") {
+ this.$.find(".Ldt-MediaList-Other h2").html(this.l10n.other_media);
+ this.$.find(".Ldt-MediaList-NowPlaying").show();
+ this.$.find(".Ldt-MediaList-Now-Thumbnail").attr(
+ "src",
+ _media.thumbnail || this.default_thumbnail
+ );
+ this.$.find(".Ldt-MediaList-Now-Title a").html(_media.title);
+ this.$.find(".Ldt-MediaList-Now-Description").html(_media.description);
+ var _url =
+ _media.url ||
+ Mustache.render(this.media_url_template, {
+ media: _media.id,
+ });
+ this.$.find(".Ldt-MediaList-NowContainer a").attr("href", _url);
+ var _mediaView = Mustache.render(this.mediaViewTemplate, {
+ segments: this.getSegments(_media),
+ });
+ this.$.find(".Ldt-MediaList-Now-MediaView").html(_mediaView);
+ } else {
+ this.$.find(".Ldt-MediaList-Other h2").html(this.l10n.all_media);
+ this.$.find(".Ldt-MediaList-NowPlaying").hide();
+ }
+ var _this = this,
+ _otherlist = this.source.getMedias().filter(function (_m) {
+ return _m.id !== _this.lastMedia;
+ });
+ if (_otherlist.length) {
+ this.$.find(".Ldt-MediaList-Other").show();
+ var _html = _otherlist
+ .map(function (_media) {
+ return Mustache.render(_this.mediaTemplate, {
+ thumbnail: _media.thumbnail || _this.default_thumbnail,
+ url:
+ _media.url ||
+ Mustache.render(_this.media_url_template, {
+ media: _media.id,
+ }),
+ title: _media.title,
+ description: _media.description,
+ segments: _this.getSegments(_media),
+ });
+ })
+ .join("");
+ this.$.find(".Ldt-MediaList-OtherList").html(_html);
+ } else {
+ this.$.find(".Ldt-MediaList-Other").hide();
+ }
}
+ };
};
-IriSP.Widgets.MediaList.prototype.draw = function() {
- this.$.addClass("Ldt-MediaListWidget")
- this.renderTemplate();
- var _this = this;
- if (typeof this.media.getMedias === "function") {
- this.media.on("enter-annotation", function(_a) {
- _this.redraw(_a.getMedia());
- });
- }
- this.redraw();
-};
-
-IriSP.Widgets.MediaList.prototype.getSegments = function(_media) {
- var _this = this,
- _scale = this.$.width()/_media.duration.milliseconds;
- return this.getWidgetAnnotations()
- .filter(function(_annotation) {
- return _annotation.getMedia().id == _media.id;
- })
- .map(function(_a) {
- var _annotation = ( _a.type = "mashedAnnotation" ? _a.annotation : _a );
- return {
- left: _scale * _annotation.begin,
- width: _scale * (_annotation.end - _annotation.begin),
- color: ( typeof _annotation.color !== "undefined" && _annotation.color ? _annotation.color : _this.default_color )
- };
- });
-};
-
-IriSP.Widgets.MediaList.prototype.redraw = function(_media) {
- if (typeof _media !== "undefined") {
- this.$.find('.Ldt-MediaList-Other h2').html(this.l10n.other_media);
- this.$.find('.Ldt-MediaList-NowPlaying').show();
- this.$.find('.Ldt-MediaList-Now-Thumbnail').attr("src", _media.thumbnail || this.default_thumbnail);
- this.$.find('.Ldt-MediaList-Now-Title a').html(_media.title);
- this.$.find('.Ldt-MediaList-Now-Description').html(_media.description);
- var _url = _media.url || Mustache.to_html(
- this.media_url_template, {
- media: _media.id
- });
- this.$.find('.Ldt-MediaList-NowContainer a').attr("href", _url);
- var _mediaView = Mustache.to_html( this.mediaViewTemplate, {
- segments: this.getSegments(_media)
- });
- this.$.find('.Ldt-MediaList-Now-MediaView').html(_mediaView);
- } else {
- this.$.find('.Ldt-MediaList-Other h2').html(this.l10n.all_media);
- this.$.find('.Ldt-MediaList-NowPlaying').hide();
- }
- var _this = this,
- _otherlist = this.source.getMedias().filter(function(_m) {
- return (_m.id !== _this.lastMedia)
- });
- if (_otherlist.length) {
- this.$.find('.Ldt-MediaList-Other').show();
- var _html = _otherlist.map(function(_media) {
- return Mustache.to_html(_this.mediaTemplate, {
- thumbnail: _media.thumbnail || _this.default_thumbnail,
- url: _media.url || Mustache.to_html(
- _this.media_url_template, {
- media: _media.id
- }),
- title: _media.title,
- description: _media.description,
- segments: _this.getSegments(_media)
- });
- }).join("");
- this.$.find('.Ldt-MediaList-OtherList').html(_html);
- } else {
- this.$.find('.Ldt-MediaList-Other').hide();
- }
-};
+export { MediaList, mediaListStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/MediaList.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,102 @@
+.Ldt-MediaListWidget a {
+ text-decoration: none;
+}
+
+.Ldt-MediaListWidget h2 {
+ clear: both;
+}
+
+.Ldt-MediaList-NowContainer {
+ min-height: 60px;
+ margin: 2px 0;
+}
+
+h3.Ldt-MediaList-Now-Title {
+ font-size: 13px;
+ margin: 2px 2px 0 82px;
+ font-weight: bold;
+}
+
+.Ldt-MediaListWidget h3 a {
+ color: #0068c4;
+}
+
+p.Ldt-MediaList-Now-Description {
+ margin: 2px 0 2px 82px;
+ font-size: 12px;
+ color: #666666;
+}
+
+ul.Ldt-MediaList-OtherList {
+ list-style: none;
+ padding: 2px;
+ margin: 0;
+}
+
+li.Ldt-MediaList-OtherList-li {
+ width: 100%;
+ clear: both;
+ margin: 2px 0;
+ padding: 2px 0;
+ min-height: 48px;
+}
+
+.Ldt-MediaList-OtherList-li:hover, .Ldt-MediaList-NowContainer:hover {
+ background: url(img/pinstripe-grey.png);
+}
+
+.Ldt-MediaList-Now-ThumbContainer, .Ldt-MediaList-Other-ThumbContainer {
+ float: left;
+ width: 80px;
+ height: 50px;
+ text-align: center;
+ margin: 2px 0;
+}
+
+.Ldt-MediaList-Now-ThumbContainer {
+ float: left;
+ width: 80px;
+ height: 50px;
+ text-align: center;
+ margin: 2px 0;
+}
+
+.Ldt-MediaList-Other-ThumbContainer {
+ width: 60px;
+ height: 38px;
+}
+
+.Ldt-MediaList-Now-Thumbnail, .Ldt-MediaList-Other-Thumbnail {
+ border: none;
+ max-width: 100%;
+ max-height: 100%;
+ margin: 0 auto;
+}
+
+h3.Ldt-MediaList-Other-Title {
+ font-size: 12px;
+ margin: 2px 2px 0 62px;
+ font-weight: bold;
+}
+
+p.Ldt-MediaList-Other-Description {
+ margin: 2px 0 2px 62px;
+ font-size: 10px;
+ color: #666666;
+}
+
+.Ldt-MediaList-Now-MediaView {
+ clear: both; width: 100%; height: 12px; margin: 5px 0 0; overflow: hidden; position: relative;
+}
+
+.Ldt-MediaList-Other-MediaView {
+ clear: both; width: 100%; height: 6px; margin: 5px 0 0; overflow: hidden; position: relative;
+}
+
+.Ldt-MediaList-MediaView-Background {
+ position: absolute; top: 0; left: 0; width: 100%; height: 100%; filter: alpha(opacity=50); opacity: 0.5; background: #999999;
+}
+
+.Ldt-MediaList-Segment {
+ position: absolute; top: 0; height: 100%; border-style: none solid; margin-left: -1px; border-color: #ffffff; border-width: 1px;
+}
--- a/src/widgets/Mediafragment.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Mediafragment.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,98 +1,109 @@
-IriSP.Widgets.Mediafragment = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
- this.last_hash_key = "";
- this.last_hash_value = "";
- this.last_extra_key = "";
- this.last_extra_value = "";
+import _ from "lodash";
- window.onhashchange = this.functionWrapper("goToHash");
- if (typeof window.addEventListener !== "undefined") {
- var _this = this;
- window.addEventListener('message', function(_msg) {
- if (/^#/.test(_msg.data)) {
- _this.setWindowHash(_msg.data);
- }
- });
- };
- this.onMdpEvent("Mediafragment.setHashToAnnotation","setHashToAnnotation");
- this.blocked = false;
-};
-
-IriSP.Widgets.Mediafragment.prototype = new IriSP.Widgets.Widget();
+const Mediafragment = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ this.last_hash_key = "";
+ this.last_hash_value = "";
+ this.last_extra_key = "";
+ this.last_extra_value = "";
-IriSP.Widgets.Mediafragment.prototype.draw = function() {
- this.onMediaEvent("setpause","setHashToTime");
- var _this = this;
- this.getWidgetAnnotations().forEach(function(_annotation) {
- _annotation.on("click", function() {
- _this.setHashToAnnotation(_annotation);
+ window.onhashchange = this.functionWrapper("goToHash");
+ if (typeof window.addEventListener !== "undefined") {
+ var _this = this;
+ window.addEventListener("message", function (_msg) {
+ if (/^#/.test(_msg.data)) {
+ _this.setWindowHash(_msg.data);
+ }
});
- });
- if (this.media.loadedMetadata) {
+ }
+ this.onMdpEvent(
+ "Mediafragment.setHashToAnnotation",
+ "setHashToAnnotation"
+ );
+ this.blocked = false;
+ }
+
+ draw() {
+ this.onMediaEvent("setpause", "setHashToTime");
+ var _this = this;
+ this.getWidgetAnnotations().forEach(function (_annotation) {
+ _annotation.on("click", function () {
+ _this.setHashToAnnotation(_annotation);
+ });
+ });
+ if (this.media.loadedMetadata) {
this.goToHash();
- } else {
- this.onMediaEvent("loadedmetadata","goToHash");
+ } else {
+ this.onMediaEvent("loadedmetadata", "goToHash");
+ }
}
-};
-IriSP.Widgets.Mediafragment.prototype.setWindowHash = function(_hash) {
- if (typeof window.history !== "undefined" && typeof window.history.replaceState !== "undefined") {
+ setWindowHash(_hash) {
+ if (
+ typeof window.history !== "undefined" &&
+ typeof window.history.replaceState !== "undefined"
+ ) {
window.history.replaceState({}, "", _hash);
- } else {
+ } else {
document.location.hash = _hash;
+ }
}
-};
-IriSP.Widgets.Mediafragment.prototype.getLastHash = function() {
- var _tab = document.location.hash.replace(/^#/,'').split('&');
- _tab = IriSP._(_tab).filter(function(_el) {
+ getLastHash() {
+ var _tab = document.location.hash.replace(/^#/, "").split("&");
+ _tab = _(_tab).filter(function (_el) {
return _el && !/^(id|t)=/.test(_el);
- });
- if (this.last_hash_key) {
- _tab.push(this.last_hash_key + '=' + this.last_hash_value);
+ });
+ if (this.last_hash_key) {
+ _tab.push(this.last_hash_key + "=" + this.last_hash_value);
+ }
+ if (this.last_extra_key) {
+ _tab.push(this.last_extra_key + "=" + this.last_extra_value);
+ }
+ return "#" + _tab.join("&");
}
- if (this.last_extra_key) {
- _tab.push(this.last_extra_key + '=' + this.last_extra_value);
- }
- return '#' + _tab.join('&');
-};
-IriSP.Widgets.Mediafragment.prototype.goToHash = function() {
- if (document.location.hash !== this.getLastHash()) {
- var _tab = document.location.hash.replace(/^#/,'').split('&');
+ goToHash() {
+ if (document.location.hash !== this.getLastHash()) {
+ var _tab = document.location.hash.replace(/^#/, "").split("&");
for (var _i = 0; _i < _tab.length; _i++) {
- var _subtab = _tab[_i].split("=");
- if (_subtab[0] == "id" || _subtab[0] == "t") {
- this.last_hash_key = _subtab[0];
- this.last_hash_value = _subtab[1];
- if (this.last_hash_key == "id") {
- var _annotation = this.source.getElement(this.last_hash_value);
- if (typeof _annotation !== "undefined") {
- this.media.setCurrentTime(_annotation.begin);
- } else {
- /* Proceed parsing elements, maybe a t was specified */
- continue;
- }
- }
- if (this.last_hash_key == "t") {
- this.media.setCurrentTime(1000 * this.last_hash_value);
- }
- break;
+ var _subtab = _tab[_i].split("=");
+ if (_subtab[0] == "id" || _subtab[0] == "t") {
+ this.last_hash_key = _subtab[0];
+ this.last_hash_value = _subtab[1];
+ if (this.last_hash_key == "id") {
+ var _annotation = this.source.getElement(this.last_hash_value);
+ if (typeof _annotation !== "undefined") {
+ this.media.setCurrentTime(_annotation.begin);
+ } else {
+ /* Proceed parsing elements, maybe a t was specified */
+ continue;
+ }
+ }
+ if (this.last_hash_key == "t") {
+ this.media.setCurrentTime(1000 * this.last_hash_value);
}
+ break;
+ }
}
+ }
}
-};
+
+ setHashToAnnotation(_annotation) {
+ this.setHash("id", _annotation.id, "t", _annotation.begin / 1000.0);
+ }
-IriSP.Widgets.Mediafragment.prototype.setHashToAnnotation = function(_annotation) {
- this.setHash( 'id', _annotation.id, 't', _annotation.begin / 1000.0 );
-};
+ setHashToTime() {
+ this.setHash("t", this.media.getCurrentTime().getSeconds());
+ }
-IriSP.Widgets.Mediafragment.prototype.setHashToTime = function() {
- this.setHash( 't', this.media.getCurrentTime().getSeconds() );
-};
-
-IriSP.Widgets.Mediafragment.prototype.setHash = function(_key, _value, _key2, _value2) {
- if (!this.blocked && (this.last_hash_key !== _key || this.last_hash_value !== _value)) {
+ setHash(_key, _value, _key2, _value2) {
+ if (
+ !this.blocked &&
+ (this.last_hash_key !== _key || this.last_hash_value !== _value)
+ ) {
this.last_hash_key = _key;
this.last_hash_value = _value;
this.last_extra_key = _key2;
@@ -101,24 +112,31 @@
var _hash = this.getLastHash();
this.setWindowHash(_hash);
if (window.parent !== window) {
- window.parent.postMessage(_hash,"*");
+ window.parent.postMessage(_hash, "*");
}
this.block();
+ }
}
+
+ unblock() {
+ if (typeof this.blockTimeout !== "undefined") {
+ window.clearTimeout(this.blockTimeout);
+ }
+ this.blockTimeout = undefined;
+ this.blocked = false;
+ }
+
+ block() {
+ if (typeof this.blockTimeout !== "undefined") {
+ window.clearTimeout(this.blockTimeout);
+ }
+ this.blocked = true;
+ this.blockTimeout = window.setTimeout(
+ this.functionWrapper("unblock"),
+ 1500
+ );
+ }
+ };
};
-IriSP.Widgets.Mediafragment.prototype.unblock = function() {
- if (typeof this.blockTimeout !== "undefined") {
- window.clearTimeout(this.blockTimeout);
- }
- this.blockTimeout = undefined;
- this.blocked = false;
-};
-
-IriSP.Widgets.Mediafragment.prototype.block = function() {
- if (typeof this.blockTimeout !== "undefined") {
- window.clearTimeout(this.blockTimeout);
- }
- this.blocked = true;
- this.blockTimeout = window.setTimeout(this.functionWrapper("unblock"), 1500);
-};
+export { Mediafragment };
--- a/src/widgets/MultiSegments.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/MultiSegments.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,124 +1,127 @@
-IriSP.Widgets.MultiSegments = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+import _ from "lodash";
+import jQuery from "jquery";
-IriSP.Widgets.MultiSegments.prototype = new IriSP.Widgets.Widget();
+const MultiSegments = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.MultiSegments.prototype.defaults = {
- annotation_show_arrow: true,
- annotation_start_minimized: false,
- annotation_show_annotation_type: true,
- show_all: false
-};
+ static defaults = {
+ annotation_show_arrow: true,
+ annotation_start_minimized: false,
+ annotation_show_annotation_type: true,
+ show_all: false,
+ };
-IriSP.Widgets.MultiSegments.prototype.draw = function() {
- var _this = this,
+ draw() {
+ var _this = this,
lines = [],
currentLine = null,
segmentsopts = {},
annotationopts = {};
- IriSP._(this).each(function(_v,_k) {
+ _(this).each(function (_v, _k) {
if (/^segments_/.test(_k)) {
- segmentsopts[_k.replace(/^segments_/,"")] = _v;
+ segmentsopts[_k.replace(/^segments_/, "")] = _v;
}
if (/^annotation_/.test(_k)) {
- annotationopts[_k.replace(/^annotation_/,"")] = _v;
+ annotationopts[_k.replace(/^annotation_/, "")] = _v;
}
- });
- this.source.getAnnotationTypes().forEach(function(_anntype) {
- var segments = _anntype.getAnnotations().filter(function(_ann) {
- return _ann.getDuration() > 0 && _ann.getMedia().id == _this.media.id;
+ });
+ this.source.getAnnotationTypes().forEach(function (_anntype) {
+ var segments = _anntype.getAnnotations().filter(function (_ann) {
+ return _ann.getDuration() > 0 && _ann.getMedia().id == _this.media.id;
});
if (segments.length) {
-
- var visible = false;
-
- var line = {
- segmentWidget: IriSP.jQuery("<div>"),
- annotationWidget: IriSP.jQuery("<div>"),
- hasSegmentsNow: function() {
- var _time = _this.media.getCurrentTime();
- return !!segments.filter(function(_annotation) {
- return _annotation.begin <= _time && _annotation.end > _time;
- }).length;
- },
- hide: function() {
- if (visible) {
- visible = false;
- this.annotationWidget.slideUp();
- }
- },
- show: function() {
- if (!visible) {
- visible = true;
- this.annotationWidget.slideDown();
- }
- }
- };
-
-
- line.segmentWidget
- .addClass("Ldt-MultiSegments-Segment")
- .appendTo(_this.$);
-
- if (!_this.show_all) {
- line.segmentWidget.mouseenter(function() {
- if (line.hasSegmentsNow()) {
- currentLine = line;
- checkVisibilities();
- }
- });
- }
-
- line.annotationWidget
- .addClass("Ldt-MultiSegments-Annotation")
- .appendTo(_this.$)
- .hide();
-
- _this.insertSubwidget(
- line.segmentWidget,
- IriSP._({
- type: "Segments",
- annotation_type: _anntype,
- width: '100%'
- }).extend(segmentsopts)
- );
-
- _this.insertSubwidget(
- line.annotationWidget,
- IriSP._({
- type: "Annotation",
- annotation_type: _anntype,
- width: '100%'
- }).extend(annotationopts)
- );
-
- lines.push(line);
+ var visible = false;
+
+ var line = {
+ segmentWidget: jQuery("<div>"),
+ annotationWidget: jQuery("<div>"),
+ hasSegmentsNow: function () {
+ var _time = _this.media.getCurrentTime();
+ return !!segments.filter(function (_annotation) {
+ return _annotation.begin <= _time && _annotation.end > _time;
+ }).length;
+ },
+ hide: function () {
+ if (visible) {
+ visible = false;
+ this.annotationWidget.slideUp();
+ }
+ },
+ show: function () {
+ if (!visible) {
+ visible = true;
+ this.annotationWidget.slideDown();
+ }
+ },
+ };
+
+ line.segmentWidget
+ .addClass("Ldt-MultiSegments-Segment")
+ .appendTo(_this.$);
+
+ if (!_this.show_all) {
+ line.segmentWidget.on("mouseenter", function () {
+ if (line.hasSegmentsNow()) {
+ currentLine = line;
+ checkVisibilities();
+ }
+ });
+ }
+
+ line.annotationWidget
+ .addClass("Ldt-MultiSegments-Annotation")
+ .appendTo(_this.$)
+ .hide();
+
+ _this.insertSubwidget(
+ line.segmentWidget,
+ _({
+ type: "Segments",
+ annotation_type: _anntype,
+ width: "100%",
+ }).extend(segmentsopts).value()
+ );
+
+ _this.insertSubwidget(
+ line.annotationWidget,
+ _({
+ type: "Annotation",
+ annotation_type: _anntype,
+ width: "100%",
+ }).extend(annotationopts).value()
+ );
+
+ lines.push(line);
}
- });
-
- // open line on segment click
- IriSP.jQuery(document).on("click",".Ldt-Segments-Segment",function(e){
- if (!_this.show_all && currentLine && !currentLine.hasSegmentsNow()) {
- currentLine = undefined;
+ });
+
+ // open line on segment click
+ jQuery(document).on("click", ".Ldt-Segments-Segment", function (e) {
+ if (!_this.show_all && currentLine && !currentLine.hasSegmentsNow()) {
+ currentLine = undefined;
}
- IriSP._(lines).each(function(line) {
- if(IriSP.jQuery(e.target).parent().parent()[0]==line.segmentWidget[0]){
- currentLine = line;
- line.show();
- } else {
- line.hide();
- }
+ _(lines).each(function (line) {
+ if (
+ jQuery(e.target).parent().parent()[0] == line.segmentWidget[0]
+ ) {
+ currentLine = line;
+ line.show();
+ } else {
+ line.hide();
+ }
});
- });
-
- //var _annotationWidgets = _this.$.find(".Ldt-MultiSegments-Annotation");
-
- function checkVisibilities(_time) {
+ });
+
+ //var _annotationWidgets = _this.$.find(".Ldt-MultiSegments-Annotation");
+
+ function checkVisibilities(_time) {
/*if (!_this.show_all && currentLine && !currentLine.hasSegmentsNow()) {
currentLine = undefined;
}
- IriSP._(lines).each(function(line) {
+ _(lines).each(function(line) {
if (line.hasSegmentsNow()) {
if (!_this.show_all && !currentLine) {
currentLine = line;
@@ -132,5 +135,9 @@
line.hide();
}
});*/
+ }
}
+ };
};
+
+export { MultiSegments };
--- a/src/widgets/NoteTaking.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-/* NoteTaking widget */
-.Ldt-NoteTaking-Text {
- width: 100%;
- min-height: 360px;
-}
--- a/src/widgets/NoteTaking.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/NoteTaking.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,91 +1,105 @@
/* This widget displays a note-taking view, that can be saved to localStorage */
-
-IriSP.Widgets.NoteTaking = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-}
-
-IriSP.Widgets.NoteTaking.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.NoteTaking.prototype.defaults = {
- // Id that will be used as localStorage key
- editable_storage: ""
-}
+import noteTakingStyles from "./NoteTaking.module.css";
+import jQuery from "jquery";
-IriSP.Widgets.NoteTaking.prototype.template = '<textarea class="Ldt-NoteTaking-Text"></textarea>';
-
-IriSP.Widgets.NoteTaking.prototype.draw = function() {
- var widget = this;
- var content;
- var $ = IriSP.jQuery;
-
- widget.renderTemplate();
- content = widget.$.find('.Ldt-NoteTaking-Text');
-
- function load_content() {
- $(content).val(window.localStorage[widget.editable_storage]);
- }
- function save_content() {
- window.localStorage[widget.editable_storage] = $(content).val();
+const NoteTaking = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
}
- // Load current transcript
- if (window.localStorage[widget.editable_storage]) {
- load_content();
- }
-
- // Thanks to http://stackoverflow.com/questions/4456545/how-to-insert-text-at-the-current-caret-position-in-a-textarea
- $.fn.insertAtCaret = function(text) {
- return this.each(function() {
- if (this.selectionStart !== undefined) {
- // mozilla/netscape support
- var startPos = this.selectionStart,
- endPos = this.selectionEnd,
- scrollTop = this.scrollTop;
- this.value = this.value.substring(0, startPos) + text + this.value.substring(endPos, this.value.length);
- this.focus();
- this.selectionStart = startPos + text.length;
- this.selectionEnd = startPos + text.length;
- this.scrollTop = scrollTop;
- } else {
- // IE input[type=text] and other browsers
- this.value += text;
- this.focus();
- this.value = this.value; // forces cursor to end
- }
- });
+ static defaults = {
+ // Id that will be used as localStorage key
+ editable_storage: "",
};
- function getAroundCaret(el, length) {
+ static template = '<textarea class="Ldt-NoteTaking-Text"></textarea>';
+
+ draw() {
+ var widget = this;
+ var content;
+ var $ = jQuery;
+
+ widget.renderTemplate();
+ content = widget.$.find(".Ldt-NoteTaking-Text");
+
+ function load_content() {
+ $(content).val(window.localStorage[widget.editable_storage]);
+ }
+ function save_content() {
+ window.localStorage[widget.editable_storage] = $(content).val();
+ }
+
+ // Load current transcript
+ if (window.localStorage[widget.editable_storage]) {
+ load_content();
+ }
+
+ // Thanks to http://stackoverflow.com/questions/4456545/how-to-insert-text-at-the-current-caret-position-in-a-textarea
+ $.fn.insertAtCaret = function (text) {
+ return this.each(function () {
+ if (this.selectionStart !== undefined) {
+ // mozilla/netscape support
+ var startPos = this.selectionStart,
+ endPos = this.selectionEnd,
+ scrollTop = this.scrollTop;
+ this.value =
+ this.value.substring(0, startPos) +
+ text +
+ this.value.substring(endPos, this.value.length);
+ this.focus();
+ this.selectionStart = startPos + text.length;
+ this.selectionEnd = startPos + text.length;
+ this.scrollTop = scrollTop;
+ } else {
+ // IE input[type=text] and other browsers
+ this.value += text;
+ this.focus();
+ this.value = this.value; // forces cursor to end
+ }
+ });
+ };
+
+ function getAroundCaret(el, length) {
// Return a selection of 2 * length characters around the caret
var startPos = el.selectionStart;
return el.value.substring(startPos - length, startPos + length);
- };
-
+ }
- $(content).keydown(function (_event) {
- if (_event.keyCode == 13 && (_event.ctrlKey || _event.metaKey)) {
+ $(content)
+ .keydown(function (_event) {
+ if (_event.keyCode == 13 && (_event.ctrlKey || _event.metaKey)) {
// Insert current timestamp
_event.preventDefault();
// Get current value
var match = /\[([\d:]+)\]/.exec(getAroundCaret(content[0], 8));
if (match) {
- // Found a timecode. Go to position.
- widget.media.setCurrentTime(IriSP.timestamp2ms(match[1]));
+ // Found a timecode. Go to position.
+ widget.media.setCurrentTime(ns.timestamp2ms(match[1]));
} else {
- $(content).insertAtCaret("[" + (new IriSP.Model.Time(widget.media.getCurrentTime())).toString() + "]");
- save_content();
+ $(content).insertAtCaret(
+ "[" +
+ new ns.Model.Time(widget.media.getCurrentTime()).toString() +
+ "]"
+ );
+ save_content();
}
- }
- }).on("input", function (_event) {
- console.log("Change");
- // Store updated value
- save_content();
- }).on("dblclick", function (_event) {
- var match = /\[([\d:]+)\]/.exec(getAroundCaret(content[0], 8));
- if (match) {
- // Found a timecode. Go to position.
- _event.preventDefault();
- widget.media.setCurrentTime(IriSP.timestamp2ms(match[1]));
- };
- });
+ }
+ })
+ .on("input", function (_event) {
+ // Store updated value
+ save_content();
+ })
+ .on("dblclick", function (_event) {
+ var match = /\[([\d:]+)\]/.exec(getAroundCaret(content[0], 8));
+ if (match) {
+ // Found a timecode. Go to position.
+ _event.preventDefault();
+ widget.media.setCurrentTime(ns.timestamp2ms(match[1]));
+ }
+ });
+ }
+ };
};
+
+export { NoteTaking, noteTakingStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/NoteTaking.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,5 @@
+/* NoteTaking widget */
+.Ldt-NoteTaking-Text {
+ width: 100%;
+ min-height: 360px;
+}
--- a/src/widgets/PlaceholderPlayer.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-.Ldt-PlaceholderPlayer {
- font-size: 40px; text-align: center;
- padding: 40px 0; font-weight: bolder;
- background: #333333; color: #FFFFFF;
-}
--- a/src/widgets/PlaceholderPlayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/PlaceholderPlayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,69 +1,71 @@
/* This is a fake player, for when no video is available */
+import placeholderPlayerStyles from "./PlaceholderPlayer.module.css";
-IriSP.Widgets.PlaceholderPlayer = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
-
-IriSP.Widgets.PlaceholderPlayer.prototype = new IriSP.Widgets.Widget();
+const PlaceholderPlayer = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.PlaceholderPlayer.prototype.defaults = {
- autostart: false
-};
+ static defaults = {
+ autostart: false,
+ };
-IriSP.Widgets.PlaceholderPlayer.prototype.template = '<div class="Ldt-PlaceholderPlayer">(loading)</div>';
+ static template = '<div class="Ldt-PlaceholderPlayer">(loading)</div>';
-IriSP.Widgets.PlaceholderPlayer.prototype.draw = function() {
-
- this.renderTemplate();
-
- var paused = true,
+ draw() {
+ this.renderTemplate();
+
+ var paused = true,
timeDelta = 0,
- currentTime = new IriSP.Model.Time(0),
+ currentTime = new ns.Model.Time(0),
media = this.media,
sel = this.$.find(".Ldt-PlaceholderPlayer");
-
- function updateTime() {
+
+ function updateTime() {
if (!paused) {
- currentTime = new IriSP.Model.Time(new Date().valueOf() - timeDelta);
- if (currentTime <= media.duration) {
- media.trigger("timeupdate", currentTime);
- setTimeout(updateTime, 100);
- } else {
- currentTime = media.duration;
- media.pause();
- }
+ currentTime = new ns.Model.Time(new Date().valueOf() - timeDelta);
+ if (currentTime <= media.duration) {
+ media.trigger("timeupdate", currentTime);
+ setTimeout(updateTime, 100);
+ } else {
+ currentTime = media.duration;
+ media.pause();
+ }
}
sel.text(currentTime.toString(true));
- }
-
-
- // Binding functions to Popcorn
- media.on("setcurrenttime", function(_milliseconds) {
+ }
+
+ // Binding functions to Popcorn
+ media.on("setcurrenttime", function (_milliseconds) {
timeDelta = new Date().valueOf() - _milliseconds;
- currentTime = new IriSP.Model.Time(_milliseconds);
+ currentTime = new ns.Model.Time(_milliseconds);
media.trigger("seeked");
media.trigger("timeupdate", currentTime);
sel.text(currentTime.toString(true));
- });
-
- media.on("setplay", function() {
+ });
+
+ media.on("setplay", function () {
paused = false;
- timeDelta = new Date().valueOf() - currentTime
+ timeDelta = new Date().valueOf() - currentTime;
media.trigger("play");
updateTime();
- });
-
- media.on("setpause", function() {
+ });
+
+ media.on("setpause", function () {
paused = true;
media.trigger("pause");
updateTime();
- });
-
- media.trigger("loadedmetadata");
- media.trigger("setcurrenttime", 0);
-
- if (this.autostart) {
+ });
+
+ media.trigger("loadedmetadata");
+ media.trigger("setcurrenttime", 0);
+
+ if (this.autostart) {
media.trigger("setplay");
+ }
}
-
-};
\ No newline at end of file
+ };
+};
+
+export { PlaceholderPlayer, placeholderPlayerStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/PlaceholderPlayer.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,5 @@
+.Ldt-PlaceholderPlayer {
+ font-size: 40px; text-align: center;
+ padding: 40px 0; font-weight: bolder;
+ background: #333333; color: #FFFFFF;
+}
--- a/src/widgets/Polemic.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/*
- * Polemic Widget CSS
- */
-
-.Ldt-Polemic {
- border-style: solid none; border-color: #cccccc; border-width: 1px;
-}
-
-.Ldt-Polemic-Position {
- background: #fc00ff;
- position: absolute;
- top: 0;
- left: 0;
- margin-left: -1px;
- width: 2px;
- height: 100%;
-}
-
-.Ldt-Polemic-TweetDiv {
- position: absolute;
-}
-
--- a/src/widgets/Polemic.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Polemic.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,249 +1,269 @@
-IriSP.Widgets.Polemic = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+import Mustache from "mustache";
+import _ from "lodash";
+import jQuery from "jquery";
+import polemicStyles from "./Polemic.module.css";
-IriSP.Widgets.Polemic.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.Polemic.prototype.messages = {
- fr: {
+const Polemic = function (ns) {
+ return class extends ns.Widgets.Widget {
+ static messages = {
+ fr: {
from_: "de ",
_to_: " à ",
- _annotations: " annotation(s)"
- },
- en: {
+ _annotations: " annotation(s)",
+ },
+ en: {
from_: "from ",
_to_: " to ",
- _annotations: " annotation(s)"
- }
-};
+ _annotations: " annotation(s)",
+ },
+ };
-IriSP.Widgets.Polemic.prototype.defaults = {
- element_width : 5,
- element_height : 5,
- max_elements: 20,
- annotation_type : "tweet",
- defaultcolor : "#585858",
- foundcolor : "#fc00ff",
- default_version : "1",
- polemics : {
- "1" : [
- {
- "name" : "OK",
- "keywords" : [ "++" ],
- "color" : "#1D973D"
- },
- {
- "name" : "KO",
- "keywords" : [ "--" ],
- "color" : "#CE0A15"
- },
- {
- "name" : "REF",
- "keywords" : [ "==", "http://" ],
- "color" : "#C5A62D"
- },
- {
- "name" : "Q",
- "keywords" : [ "?" ],
- "color" : "#036AAE"
- }
+ static defaults = {
+ element_width: 5,
+ element_height: 5,
+ max_elements: 20,
+ annotation_type: "tweet",
+ defaultcolor: "#585858",
+ foundcolor: "#fc00ff",
+ default_version: "1",
+ polemics: {
+ 1: [
+ {
+ name: "OK",
+ keywords: ["++"],
+ color: "#1D973D",
+ },
+ {
+ name: "KO",
+ keywords: ["--"],
+ color: "#CE0A15",
+ },
+ {
+ name: "REF",
+ keywords: ["==", "http://"],
+ color: "#C5A62D",
+ },
+ {
+ name: "Q",
+ keywords: ["?"],
+ color: "#036AAE",
+ },
],
- "2" : [
- {
- "name" : "OK",
- "keywords" : [ "++" ],
- "color" : "#1D973D"
- },
- {
- "name" : "KO",
- "keywords" : [ "!!" ],
- "color" : "#CE0A15"
- },
- {
- "name" : "REF",
- "keywords" : [ "==", "http://" ],
- "color" : "#C5A62D"
- },
- {
- "name" : "Q",
- "keywords" : [ "?" ],
- "color" : "#036AAE"
- }
- ]
+ 2: [
+ {
+ name: "OK",
+ keywords: ["++"],
+ color: "#1D973D",
+ },
+ {
+ name: "KO",
+ keywords: ["!!"],
+ color: "#CE0A15",
+ },
+ {
+ name: "REF",
+ keywords: ["==", "http://"],
+ color: "#C5A62D",
+ },
+ {
+ name: "Q",
+ keywords: ["?"],
+ color: "#036AAE",
+ },
+ ],
+ },
+ };
+
+ constructor(player, config) {
+ super(player, config);
}
-};
-IriSP.Widgets.Polemic.prototype.getPolemics = function(version) {
- if(typeof(version) === "undefined" || !version) {
+ getPolemics(version) {
+ if (typeof version === "undefined" || !version) {
version = this.default_version;
- }
- if(this.polemics.constructor === Array) {
+ }
+ if (this.polemics.constructor === Array) {
return this.polemics;
- } else {
+ } else {
return this.polemics[version];
+ }
}
-};
-
-IriSP.Widgets.Polemic.prototype.drawNoStackgraph = function(_max, _slices) {
- var _this = this;
- this.is_stackgraph = false;
- if (_max) {
-
+ drawNoStackgraph(_max, _slices) {
+ var _this = this;
+ this.is_stackgraph = false;
+ if (_max) {
this.height = (2 + _max) * this.element_height;
this.$zone.css({
- width: this.width + "px",
- height: this.height + "px",
- position: "relative"
+ width: this.width + "px",
+ height: this.height + "px",
+ position: "relative",
});
var _x = 0;
function displayAnnotation(_elx, _ely, _pol, _col, _annotation) {
- var _htmlAnnot = Mustache.to_html(
- '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id:{{media_id}}, polemic:{{polemic}}, time:{{time}}" polemic-color="{{color}}"'
- + ' tweet-title="{{title}}" annotation-id="{{id}}" style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
+ var _htmlAnnot = Mustache.render(
+ '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id:{{media_id}}, polemic:{{polemic}}, time:{{time}}" polemic-color="{{color}}"' +
+ ' tweet-title="{{title}}" annotation-id="{{id}}" style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
{
- id: _annotation.id,
- media_id: _this.source.currentMedia.id,
- polemic: _pol,
- left: _elx,
- top: _ely,
- color: _col,
- width: (_this.element_width-1),
- height: _this.element_height,
- title: _annotation.title,
- time: _annotation.begin.toString()
- });
- var _el = IriSP.jQuery(_htmlAnnot);
- _el.mouseover(function() {
- _annotation.trigger("select");
- }).mouseout(function() {
- _annotation.trigger("unselect");
- }).click(function() {
- _annotation.trigger("click");
- return false;
+ id: _annotation.id,
+ media_id: _this.source.currentMedia.id,
+ polemic: _pol,
+ left: _elx,
+ top: _ely,
+ color: _col,
+ width: _this.element_width - 1,
+ height: _this.element_height,
+ title: _annotation.title,
+ time: _annotation.begin.toString(),
+ }
+ );
+ var _el = jQuery(_htmlAnnot);
+ _el
+ .on("mouseover", function () {
+ _annotation.trigger("select");
+ })
+ .on("mouseout", function () {
+ _annotation.trigger("unselect");
+ })
+ .on("click", function () {
+ _annotation.trigger("click");
+ return false;
});
- IriSP.attachDndData(_el, {
- title: _annotation.title,
- description: _annotation.description,
- image: _annotation.thumbnail,
- uri: (typeof _annotation.url !== "undefined"
- ? _annotation.url
- : (document.location.href.replace(/#.*$/,'') + '#id=' + _annotation.id)),
- text: '[' + _annotation.begin.toString() + '] ' + _annotation.title
- });
- // test if annotation has several colors.
- var colAr = [];
- var _polemicVersion = (_annotation.content && _annotation.content.polemic_version) || _this.default_version,
- _polemics = _this.getPolemics(_polemicVersion) || [],
- _pol,
- _polKey,
- _polDef,
- _rgxp;
-
- for(var _j = 0; _j < _polemics.length; _j++) {
- _pol = _polemics[_j];
- _rgxp = IriSP.Model.regexpFromTextOrArray(_pol.keywords);
- if(_rgxp.test(_annotation.description)) {
- colAr.push(_pol.color);
- }
- }
+ ns.attachDndData(_el, {
+ title: _annotation.title,
+ description: _annotation.description,
+ image: _annotation.thumbnail,
+ uri:
+ typeof _annotation.url !== "undefined"
+ ? _annotation.url
+ : document.location.href.replace(/#.*$/, "") +
+ "#id=" +
+ _annotation.id,
+ text: "[" + _annotation.begin.toString() + "] " + _annotation.title,
+ });
+ // test if annotation has several colors.
+ var colAr = [];
+ var _polemicVersion =
+ (_annotation.content && _annotation.content.polemic_version) ||
+ _this.default_version,
+ _polemics = _this.getPolemics(_polemicVersion) || [],
+ _pol,
+ _polKey,
+ _polDef,
+ _rgxp;
- // display annotation
- _annotation.on("select", function() {
- if (_this.tooltip) {
- _this.tooltip.show(
- + Math.floor(_elx + (_this.element_width - 1) / 2),
- + _ely,
- _annotation.title,
- ( (colAr.length>1) ? colAr : _col )
- );
- }
- _this.$tweets.each(function() {
- var _e = IriSP.jQuery(this);
- _e.css(
- "opacity",
- ( _e.attr("annotation-id") == _annotation.id ? 1 : .3 )
- );
- });
- });
- _annotation.on("unselect", function() {
- if (_this.tooltip) {
- _this.tooltip.hide();
- }
- _this.$tweets.css("opacity",1);
+ for (var _j = 0; _j < _polemics.length; _j++) {
+ _pol = _polemics[_j];
+ _rgxp = ns.Model.regexpFromTextOrArray(_pol.keywords);
+ if (_rgxp.test(_annotation.description)) {
+ colAr.push(_pol.color);
+ }
+ }
+
+ // display annotation
+ _annotation.on("select", function () {
+ if (_this.tooltip) {
+ _this.tooltip.show(
+ +Math.floor(_elx + (_this.element_width - 1) / 2),
+ +_ely,
+ _annotation.title,
+ colAr.length > 1 ? colAr : _col
+ );
+ }
+ _this.$tweets.each(function () {
+ var _e = jQuery(this);
+ _e.css(
+ "opacity",
+ _e.attr("annotation-id") == _annotation.id ? 1 : 0.3
+ );
});
- _annotation.on("found", function() {
- _el.css({
- "background" : _this.foundcolor,
- "opacity" : 1
- });
+ });
+ _annotation.on("unselect", function () {
+ if (_this.tooltip) {
+ _this.tooltip.hide();
+ }
+ _this.$tweets.css("opacity", 1);
+ });
+ _annotation.on("found", function () {
+ _el.css({
+ background: _this.foundcolor,
+ opacity: 1,
});
- _annotation.on("not-found", function() {
- _el.css({
- "background" : _col,
- "opacity" : .3
- });
+ });
+ _annotation.on("not-found", function () {
+ _el.css({
+ background: _col,
+ opacity: 0.3,
});
- _this.$zone.append(_el);
- };
+ });
+ _this.$zone.append(_el);
+ }
- IriSP._(_slices).forEach(function(_slice) {
- var _y = _this.height;
- _slice.annotations.forEach(function(_annotation) {
- _y -= _this.element_height;
- displayAnnotation(_x, _y, "none", _this.defaultcolor, _annotation);
+ _(_slices).forEach(function (_slice) {
+ var _y = _this.height;
+ _slice.annotations.forEach(function (_annotation) {
+ _y -= _this.element_height;
+ displayAnnotation(_x, _y, "none", _this.defaultcolor, _annotation);
+ });
+ _(_slice.polemicStacks).forEach(function (_annotations) {
+ var _color = _annotations.polemicDef.color,
+ _polemic = _annotations.polemicDef.name;
+ _annotations.annotations.forEach(function (_annotation) {
+ _y -= _this.element_height;
+ displayAnnotation(_x, _y, _polemic, _color, _annotation);
});
- IriSP._(_slice.polemicStacks).forEach(function(_annotations) {
- var _color = _annotations.polemicDef.color,
- _polemic = _annotations.polemicDef.name;
- _annotations.annotations.forEach(function(_annotation) {
- _y -= _this.element_height;
- displayAnnotation(_x, _y, _polemic, _color, _annotation);
- });
- });
- _x += _this.element_width;
+ });
+ _x += _this.element_width;
});
this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv");
- this.source.getAnnotations().on("search-cleared", function() {
- _this.$tweets.each(function() {
- var _el = IriSP.jQuery(this);
- _el.css({
- "background" : _el.attr("polemic-color"),
- "opacity" : 1
- });
+ this.source.getAnnotations().on("search-cleared", function () {
+ _this.$tweets.each(function () {
+ var _el = jQuery(this);
+ _el.css({
+ background: _el.attr("polemic-color"),
+ opacity: 1,
});
+ });
});
+ } else {
+ this.$zone.hide();
+ }
+ }
- } else {
- this.$zone.hide();
- }
-}
+ drawStackgraph(_max, _slices) {
+ this.is_stackgraph = true;
-IriSP.Widgets.Polemic.prototype.drawStackgraph = function(_max, _slices) {
- this.is_stackgraph = true;
+ var _this = this;
- var _this = this;
-
- this.height = (2 + this.max_elements) * this.element_height;
- this.$zone.css({
+ this.height = (2 + this.max_elements) * this.element_height;
+ this.$zone.css({
width: this.width + "px",
height: this.height + "px",
- position: "relative"
- });
+ position: "relative",
+ });
+
+ var _x = 0,
+ _html = "",
+ _scale = (this.max_elements * this.element_height) / _max;
- var _x = 0,
- _html = '',
- _scale = this.max_elements * this.element_height / _max;
-
- function displayStackElement(_x, _y, _h, _color, _nums, _begin, _end, _polemic) {
- _html += Mustache.to_html(
- '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-block, media-id={{media_id}}, polemic={{polemic}}, time:{{begin}}" pos-x="{{posx}}" pos-y="{{top}}" annotation-counts="{{nums}}" begin-time="{{begin}}" end-time="{{end}}"'
- + ' style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
- {
+ function displayStackElement(
+ _x,
+ _y,
+ _h,
+ _color,
+ _nums,
+ _begin,
+ _end,
+ _polemic
+ ) {
+ _html += Mustache.render(
+ '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-block, media-id={{media_id}}, polemic={{polemic}}, time:{{begin}}" pos-x="{{posx}}" pos-y="{{top}}" annotation-counts="{{nums}}" begin-time="{{begin}}" end-time="{{end}}"' +
+ ' style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
+ {
nums: _nums,
posx: Math.floor(_x + (_this.element_width - 1) / 2),
media_id: _this.source.currentMedia.id,
@@ -251,164 +271,218 @@
left: _x,
top: _y,
color: _color,
- width: (_this.element_width-1),
+ width: _this.element_width - 1,
height: _h,
begin: _begin,
- end: _end
+ end: _end,
+ }
+ );
+ }
+
+ _(_slices).forEach(function (_slice) {
+ var _y = _this.height,
+ _nums =
+ _slice.annotations.length +
+ "|" +
+ _this.defaultcolor +
+ "," +
+ _(_slice.polemicStacks)
+ .map(function (_annotations) {
+ return (
+ _annotations.annotations.length +
+ "|" +
+ _annotations.polemicDef.color
+ );
+ })
+ .join(",");
+ if (_slice.annotations.length) {
+ var _h = Math.ceil(_scale * _slice.annotations.length);
+ _y -= _h;
+ displayStackElement(
+ _x,
+ _y,
+ _h,
+ _this.defaultcolor,
+ _nums,
+ _slice.begin,
+ _slice.end,
+ "none"
+ );
+ }
+ _(_slice.polemicStacks).forEach(function (_annotations) {
+ if (_annotations.annotations.length) {
+ var _color = _annotations.polemicDef.color,
+ _polemic = _annotations.polemicDef.name,
+ _h = Math.ceil(_scale * _annotations.annotations.length);
+ _y -= _h;
+ displayStackElement(
+ _x,
+ _y,
+ _h,
+ _color,
+ _nums,
+ _slice.begin,
+ _slice.end,
+ _polemic
+ );
+ }
+ });
+ _x += _this.element_width;
+ });
+
+ this.$zone.append(_html);
+
+ this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv");
+
+ this.$tweets
+ .mouseover(function () {
+ var _el = jQuery(this),
+ _nums = _el.attr("annotation-counts").split(","),
+ _html =
+ "<p>" +
+ _this.l10n.from_ +
+ _el.attr("begin-time") +
+ _this.l10n._to_ +
+ _el.attr("end-time") +
+ "</p>";
+ _html = _.reduce(
+ _nums,
+ function (_htmlStr, _countStr) {
+ var _components = _countStr.split("|");
+ _htmlStr +=
+ '<div class="Ldt-Tooltip-AltColor" style="background: ' +
+ _components[1] +
+ '"></div><p>' +
+ _components[0] +
+ _this.l10n._annotations +
+ "</p>";
+ return _htmlStr;
+ },
+ _html
+ );
+ if (_this.tooltip) {
+ _this.tooltip.show(+_el.attr("pos-x"), +_el.attr("pos-y"), _html);
+ }
+ })
+ .mouseout(function () {
+ if (_this.tooltip) {
+ _this.tooltip.hide();
+ }
});
}
- IriSP._(_slices).forEach(function(_slice) {
- var _y = _this.height,
- _nums = _slice.annotations.length + "|" + _this.defaultcolor + "," + IriSP._(_slice.polemicStacks).map(function(_annotations) {
- return _annotations.annotations.length + "|" + _annotations.polemicDef.color;
- }).join(",");
- if (_slice.annotations.length) {
- var _h = Math.ceil(_scale * _slice.annotations.length);
- _y -= _h;
- displayStackElement(_x, _y, _h, _this.defaultcolor, _nums, _slice.begin, _slice.end, "none");
- }
- IriSP._(_slice.polemicStacks).forEach(function(_annotations) {
- if (_annotations.annotations.length) {
- var _color = _annotations.polemicDef.color,
- _polemic = _annotations.polemicDef.name,
- _h = Math.ceil(_scale * _annotations.annotations.length);
- _y -= _h;
- displayStackElement(_x, _y, _h, _color, _nums, _slice.begin, _slice.end, _polemic);
- }
- });
- _x += _this.element_width;
- });
-
- this.$zone.append(_html);
-
- this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv");
+ draw() {
+ this.onMediaEvent("timeupdate", "onTimeupdate");
+ this.$zone = jQuery("<div>");
+ this.$zone.addClass("Ldt-Polemic");
+ this.$.append(this.$zone);
- this.$tweets
- .mouseover(function() {
- var _el = IriSP.jQuery(this),
- _nums = _el.attr("annotation-counts").split(","),
- _html = '<p>' + _this.l10n.from_ + _el.attr("begin-time") + _this.l10n._to_ + _el.attr("end-time") + '</p>';
- _html = IriSP._.reduce(_nums, function(_htmlStr, _countStr) {
- var _components = _countStr.split("|");
- _htmlStr += '<div class="Ldt-Tooltip-AltColor" style="background: ' + _components[1] + '"></div><p>' + _components[0] + _this.l10n._annotations + '</p>';
- return _htmlStr;
- }, _html);
- if (_this.tooltip) {
- _this.tooltip.show(+ _el.attr("pos-x"), + _el.attr("pos-y"), _html);
- }
- })
- .mouseout(function() {
- if (_this.tooltip) {
- _this.tooltip.hide();
- }
- });
-}
-
+ this.$elapsed = jQuery("<div>").css({
+ background: "#cccccc",
+ position: "absolute",
+ top: 0,
+ left: 0,
+ width: 0,
+ height: "100%",
+ });
-IriSP.Widgets.Polemic.prototype.draw = function() {
-
- this.onMediaEvent("timeupdate", "onTimeupdate");
- this.$zone = IriSP.jQuery('<div>');
- this.$zone.addClass("Ldt-Polemic");
- this.$.append(this.$zone);
+ this.$zone.append(this.$elapsed);
- this.$elapsed = IriSP.jQuery('<div>')
- .css({
- background: '#cccccc',
- position: "absolute",
- top: 0,
- left: 0,
- width: 0,
- height: "100%"
- });
-
- this.$zone.append(this.$elapsed);
-
- // we don't filter with null duration anymore
- var _slices = [],
- _slice_count = Math.floor( this.width / this.element_width ),
+ // we don't filter with null duration anymore
+ var _slices = [],
+ _slice_count = Math.floor(this.width / this.element_width),
_duration = this.source.getDuration(),
_max = 0,
_list = this.getWidgetAnnotations(),
_this = this;
- for (var _i = 0; _i < _slice_count; _i++) {
- var _begin = new IriSP.Model.Time( _i * _duration / _slice_count ),
- _end = new IriSP.Model.Time( ( _i + 1 ) * _duration / _slice_count ),
- _count = 0,
- _res = {
- begin : _begin.toString(),
- end : _end.toString(),
- annotations : _list.filter(function(_annotation) {
- return _annotation.begin >= _begin && _annotation.begin < _end;
- }),
- polemicStacks : {}
- };
+ for (var _i = 0; _i < _slice_count; _i++) {
+ var _begin = new ns.Model.Time((_i * _duration) / _slice_count),
+ _end = new ns.Model.Time(((_i + 1) * _duration) / _slice_count),
+ _count = 0,
+ _res = {
+ begin: _begin.toString(),
+ end: _end.toString(),
+ annotations: _list.filter(function (_annotation) {
+ return _annotation.begin >= _begin && _annotation.begin < _end;
+ }),
+ polemicStacks: {},
+ };
- _res.annotations = _res.annotations.filter(function(_annotation) {
- var _polemicVersion = (_annotation.content && _annotation.content.polemic_version) || _this.default_version,
- _polemics = _this.getPolemics(_polemicVersion) || [],
- _pol,
- _polKey,
- _polDef,
- _rgxp,
- _notMatched = true;
+ _res.annotations = _res.annotations.filter(function (_annotation) {
+ var _polemicVersion =
+ (_annotation.content && _annotation.content.polemic_version) ||
+ _this.default_version,
+ _polemics = _this.getPolemics(_polemicVersion) || [],
+ _pol,
+ _polKey,
+ _polDef,
+ _rgxp,
+ _notMatched = true;
+
+ for (var _j = 0; _j < _polemics.length; _j++) {
+ _pol = _polemics[_j];
+ _rgxp = ns.Model.regexpFromTextOrArray(_pol.keywords);
- for(var _j = 0; _j < _polemics.length; _j++) {
- _pol = _polemics[_j];
- _rgxp = IriSP.Model.regexpFromTextOrArray(_pol.keywords);
-
- if(_rgxp.test(_annotation.description)) {
- _polKey = _polemicVersion + "_" + _pol.name;
- _polDef = _res.polemicStacks[_polKey] || (_res.polemicStacks[_polKey] = { 'polemicDef' : _pol, 'annotations': []});
- _polDef.annotations.push(_annotation);
- _notMatched = false;
- _count++;
- }
+ if (_rgxp.test(_annotation.description)) {
+ _polKey = _polemicVersion + "_" + _pol.name;
+ _polDef =
+ _res.polemicStacks[_polKey] ||
+ (_res.polemicStacks[_polKey] = {
+ polemicDef: _pol,
+ annotations: [],
+ });
+ _polDef.annotations.push(_annotation);
+ _notMatched = false;
+ _count++;
}
- return _notMatched;
+ }
+ return _notMatched;
});
_count += _res.annotations.length;
_max = Math.max(_max, _count);
_slices.push(_res);
- }
+ }
+
+ if (_max < this.max_elements) {
+ this.drawNoStackgraph(_max, _slices);
+ } else {
+ this.drawStackgraph(_max, _slices);
+ }
+
+ this.$position = jQuery("<div>").addClass("Ldt-Polemic-Position");
+
+ this.$zone.append(this.$position);
- if (_max < this.max_elements) {
- this.drawNoStackgraph(_max, _slices);
- } else {
- this.drawStackgraph(_max, _slices);
+ this.$zone.on("click", function (_e) {
+ var _x = _e.pageX - _this.$zone.offset().left;
+ _this.media.setCurrentTime((_this.media.duration * _x) / _this.width);
+ });
+
+ this.$.append('<div class="Ldt-Polemic-Tooltip"></div>');
+
+ this.insertSubwidget(
+ this.$.find(".Ldt-Polemic-Tooltip"),
+ {
+ type: "Tooltip",
+ min_x: 0,
+ max_x: this.width,
+ },
+ "tooltip"
+ );
}
- this.$position = IriSP.jQuery('<div>').addClass("Ldt-Polemic-Position");
-
- this.$zone.append(this.$position);
-
- this.$zone.click(function(_e) {
- var _x = _e.pageX - _this.$zone.offset().left;
- _this.media.setCurrentTime(_this.media.duration * _x / _this.width);
- });
-
- this.$.append('<div class="Ldt-Polemic-Tooltip"></div>');
-
- this.insertSubwidget(
- this.$.find(".Ldt-Polemic-Tooltip"),
- {
- type: "Tooltip",
- min_x: 0,
- max_x: this.width
- },
- "tooltip"
- );
+ onTimeupdate(_time) {
+ var _x = Math.floor((this.width * _time) / this.media.duration);
+ this.$elapsed.css({
+ width: _x + "px",
+ });
+ this.$position.css({
+ left: _x + "px",
+ });
+ }
+ };
};
-IriSP.Widgets.Polemic.prototype.onTimeupdate = function(_time) {
- var _x = Math.floor( this.width * _time / this.media.duration);
- this.$elapsed.css({
- width: _x + "px"
- });
- this.$position.css({
- left: _x + "px"
- });
-};
+export { Polemic, polemicStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Polemic.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,22 @@
+/*
+ * Polemic Widget CSS
+ */
+
+.Ldt-Polemic {
+ border-style: solid none; border-color: #cccccc; border-width: 1px;
+}
+
+.Ldt-Polemic-Position {
+ background: #fc00ff;
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin-left: -1px;
+ width: 2px;
+ height: 100%;
+}
+
+.Ldt-Polemic-TweetDiv {
+ position: absolute;
+}
+
--- a/src/widgets/PopcornPlayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/PopcornPlayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,139 +1,147 @@
-IriSP.Widgets.PopcornPlayer = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
-
-IriSP.Widgets.PopcornPlayer.prototype = new IriSP.Widgets.Widget();
+import jQuery from "jquery";
-/* A Popcorn-based player for HTML5 Video, Youtube and Vimeo */
-
-IriSP.Widgets.PopcornPlayer.prototype.defaults = {
-};
-
-IriSP.Widgets.PopcornPlayer.prototype.draw = function() {
- if (typeof this.video === "undefined") {
- this.video = this.media.video;
+const PopcornPlayer = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
}
- if (this.url_transform) {
- this.video = this.url_transform(this.video);
- }
+ /* A Popcorn-based player for HTML5 Video, Youtube and Vimeo */
+
+ static defaults = {};
- var _url = this.video;
+ draw() {
+ if (typeof this.video === "undefined") {
+ this.video = this.media.video;
+ }
- if (/^(https?:\/\/)?(www\.)?youtube\.com/.test(this.video)) {
+ if (this.url_transform) {
+ this.video = this.url_transform(this.video);
+ }
+
+ var _url = this.video;
+
+ if (/^(https?:\/\/)?(www\.)?youtube\.com/.test(this.video)) {
/* YOUTUBE */
var _urlparts = this.video.split(/[?&]/),
- _params = {};
+ _params = {};
for (var i = 1; i < _urlparts.length; i++) {
- var _ppart = _urlparts[i].split('=');
- _params[_ppart[0]] = decodeURIComponent(_ppart[1]);
+ var _ppart = _urlparts[i].split("=");
+ _params[_ppart[0]] = decodeURIComponent(_ppart[1]);
}
_params.controls = 0;
_params.modestbranding = 1;
if (this.autostart || this.autoplay) {
- _params.autoplay = 1;
+ _params.autoplay = 1;
}
- _url = _urlparts[0] + '?' + IriSP.jQuery.param(_params);
+ _url = _urlparts[0] + "?" + jQuery.param(_params);
+ } // else {
+ // /* DEFAULT HTML5 */
+ // var _tmpId = ns._.uniqueId("popcorn"),
+ // _videoEl = jQuery('<video>');
+ // _videoEl.attr({
+ // id : _tmpId,
+ // width : this.width,
+ // height : this.height || undefined
+ // });
+ // if(typeof this.video === "string"){
+ // _videoEl.attr("src",this.video);
+ // } else {
+ // for (var i = 0; i < this.video.length; i++) {
+ // var _srcNode = jQuery('<source>');
+ // _srcNode.attr({
+ // src: this.video[i].src,
+ // type: this.video[i].type
+ // });
+ // _videoEl.append(_srcNode);
+ // }
+ // }
+ // this.$.html(_videoEl);
+ // }
- }// else {
- // /* DEFAULT HTML5 */
- // var _tmpId = IriSP._.uniqueId("popcorn"),
- // _videoEl = IriSP.jQuery('<video>');
- // _videoEl.attr({
- // id : _tmpId,
- // width : this.width,
- // height : this.height || undefined
- // });
- // if(typeof this.video === "string"){
- // _videoEl.attr("src",this.video);
- // } else {
- // for (var i = 0; i < this.video.length; i++) {
- // var _srcNode = IriSP.jQuery('<source>');
- // _srcNode.attr({
- // src: this.video[i].src,
- // type: this.video[i].type
- // });
- // _videoEl.append(_srcNode);
- // }
- // }
- // this.$.html(_videoEl);
- // }
+ var _popcorn = global.Popcorn.smart("#" + this.container, _url);
+
+ if (this.autostart || this.autoplay) {
+ _popcorn.autoplay(true);
+ }
+
+ var _media = this.media;
- var _popcorn = Popcorn.smart("#"+this.container, _url);
-
- if (this.autostart || this.autoplay) {
- _popcorn.autoplay(true);
- }
-
- var _media = this.media;
+ // Binding functions to Popcorn
- // Binding functions to Popcorn
-
- _media.on("setcurrenttime", function(_milliseconds) {
+ _media.on("setcurrenttime", function (_milliseconds) {
_popcorn.currentTime(_milliseconds / 1000);
- });
+ });
- _media.on("setvolume", function(_vol) {
+ _media.on("setvolume", function (_vol) {
_popcorn.volume(_vol);
_media.volume = _vol;
- });
+ });
- _media.on("setmuted", function(_muted) {
+ _media.on("setmuted", function (_muted) {
_popcorn.muted(_muted);
_media.muted = _muted;
- });
+ });
- _media.on("setplay", function() {
+ _media.on("setplay", function () {
_popcorn.play();
- });
+ });
- _media.on("setpause", function() {
+ _media.on("setpause", function () {
_popcorn.pause();
- });
- _media.on("settimerange", function(_timeRange){
+ });
+ _media.on("settimerange", function (_timeRange) {
_media.timeRange = _timeRange;
try {
- if (_media.getCurrentTime() > _timeRange[0] || _media.getCurrentTime() < _timeRange){
- _popcorn.currentTime(_timeRange[0] / 1000);
- }
- } catch (err) {
- }
- })
- _media.on("resettimerange", function(){
+ if (
+ _media.getCurrentTime() > _timeRange[0] ||
+ _media.getCurrentTime() < _timeRange
+ ) {
+ _popcorn.currentTime(_timeRange[0] / 1000);
+ }
+ } catch (err) {}
+ });
+ _media.on("resettimerange", function () {
_media.timeRange = false;
- })
- // Binding Popcorn events to media
+ });
+ // Binding Popcorn events to media
- function getVolume() {
+ function getVolume() {
_media.muted = _popcorn.muted();
_media.volume = _popcorn.volume();
- }
+ }
- _popcorn.on("loadedmetadata", function() {
+ _popcorn.on("loadedmetadata", function () {
getVolume();
_media.trigger("loadedmetadata");
_media.trigger("volumechange");
- });
+ });
- _popcorn.on("timeupdate", function() {
- _media.trigger("timeupdate", new IriSP.Model.Time(1000*_popcorn.currentTime()));
- });
+ _popcorn.on("timeupdate", function () {
+ _media.trigger(
+ "timeupdate",
+ new ns.Model.Time(1000 * _popcorn.currentTime())
+ );
+ });
- _popcorn.on("volumechange", function() {
+ _popcorn.on("volumechange", function () {
getVolume();
_media.trigger("volumechange");
- });
+ });
- _popcorn.on("play", function(e) {
+ _popcorn.on("play", function (e) {
_media.trigger("play");
- });
+ });
- _popcorn.on("pause", function() {
+ _popcorn.on("pause", function () {
_media.trigger("pause");
- });
+ });
- _popcorn.on("seeked", function() {
+ _popcorn.on("seeked", function () {
_media.trigger("seeked");
- });
+ });
+ }
+ };
+};
-};
+export { PopcornPlayer };
--- a/src/widgets/Quiz.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,224 +0,0 @@
-/* Nothing */
-
-.Ldt-Quiz-Container {
- position: absolute;
- height: calc(100% - 4px);
- top: 0px;
- width: calc(100% - 20px);
- margin: auto;
- border: 1px solid black;
- font-size: 18pt;
-}
-
-.Ldt-Quiz-Title {
- line-height: 1;
- padding-top: 10px;
- text-align: center;
-}
-
-.Ldt-Quiz-Header {
- font-size: 12px;
- color: black;
- border-bottom: 1px solid green;
- padding: 2px;
- height: 22px;
-}
-
-.Ldt-Quiz-Content {
- height: calc(100% - 82px);
- overflow-y: auto;
-}
-
-.Ldt-Quiz-Footer {
- height: 60px;
- width: 100%;
- position: absolute;
- bottom: 0px;
- border-top: 2px solid black;
- background-color: white;
-}
-
-
-.Ldt-Quiz-Score {
- display: inline-block;
- position: absolute;
- right: 20px;
-}
-
-.Ldt-Quiz-Index {
- display: inline-block;
-}
-
-.Ldt-Quiz-Image {
- max-width: 100%;
- max-height: 100%;
-}
-
-.Ldt-Quiz-Questions {
- height: calc(100% - 2.5em);
- margin: 10px;
- padding: 10px;
- border-left: 5px solid gray;
-}
-
-.quiz-question-block {
- padding-top: 10px;
-}
-.quiz-resource-block {
- padding-top: 10px;
- float: right;
- max-height: 100%;
- height: 100%;
-}
-.quiz-resource-block img {
- max-height: 100%;
- max-width: 100%;
-}
-
-.quiz-question-feedback {
- font-size: 15px;
-}
-
-.quiz-question-feedback div {
- display: inline-block;
- height: 100%;
-}
-
-.quiz-question-correct-feedback:before, .quiz-question-incorrect-feedback:before {
- content: '';
- vertical-align: middle;
- display: inline-block;
- width: 48px;
- height: 48px;
- }
-
-.quiz-question-correct-feedback:before {
- background: url(img/valid_sprites.png) left top no-repeat;
-}
-
-.quiz-question-incorrect-feedback:before {
- background: url(img/valid_sprites.png) -49px top no-repeat;
-}
-
-.Ldt-Quiz-Correct-Answer:before {
- background: url(img/min_valid_sprites.png) left top no-repeat;
-}
-
-.Ldt-Quiz-Incorrect-Answer:before {
- background: url(img/min_valid_sprites.png) -13px top no-repeat;
-}
-
-.Ldt-Quiz-Correct-Answer:before, .Ldt-Quiz-Incorrect-Answer:before {
- content: '';
- vertical-align: middle;
- display: inline-block;
- width: 12px;
- height: 12px;
- }
-
-.Ldt-Quiz-Submit {
- margin: 10px;
-}
-
-.Ldt-Quiz-Submit .Ldt-Quiz-Submit-Skip-Link {
- float: left;
-}
-
-.Ldt-Quiz-Submit-Skip-Link a {
- text-decoration: none;
- font-size: 16pt;
-}
-
-.Ldt-Quiz-Submit .Ldt-Quiz-Submit-Button {
- float: right;
-}
-
-.Ldt-Quiz-Votes {
- display: none;
- height: 53px;
- position: relative;
-}
-
-.Ldt-Quiz-Votes-Question {
- font-size: 16px;
- position: absolute;
- top: 2px;
- left: 0px;
-}
-
-.Ldt-Quiz-Votes-Buttons {
- position: absolute;
- bottom: 2px;
- left: 0px;
- right: 0px;
-}
-
-.Ldt-Quiz-Votes-Buttons div {
- display: inline-block;
- width: 33%;
- text-align: center;
-}
-
-.Ldt-Quiz-Vote-Skip-Block {
- width: 30% !important;
- text-align: right;
-}
-
-.Ldt-Quiz-Vote-Skip-Block a {
- text-decoration: none;
-}
-
-.Ldt-Quiz-Overlay {
- position: absolute;
- top: 0px;
- background-color: white;
- z-index: 5;
- width: 100%;
- height: 100%;
-}
-
-.Ldt-Pause-Add-Question {
- background: url(img/quiz_add_question.svg) no-repeat;
- background-position: center;
- background-size: contain;
- position: absolute;
- bottom: 40px;
- right: 0px;
- height: 15%;
- width: 15%;
- max-width: 64px;
- max-height: 64px;
- z-index: 10;
-}
-
-.Ldt-Quiz-Result {
- position: absolute;
- height: 0px;
- bottom: 0;
- left: 0;
- right: 0;
- background: #fde073;
- text-align: center;
- line-height: 2.5;
- overflow: hidden;
- -webkit-box-shadow: 0 0 5px black;
- -moz-box-shadow: 0 0 5px black;
- box-shadow: 0 0 5px black;
-}
-
-input[type="button"] {
- border: none;
- font-size: 18pt;
- text-align: center;
- background-color: #5BCE5B;
- color: #fff;
- cursor: pointer;
-}
-
-input[value="Non"] {
- background-color: #F86060;
-}
-
-input.quiz-question:checked + .quiz-question-label {
- text-decoration: underline;
-}
--- a/src/widgets/Quiz.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Quiz.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,388 +1,543 @@
-IriSP.Widgets.Quiz = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-}
-
-IriSP.Widgets.Quiz.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.Quiz.prototype.defaults = {
- // annotation_type: "at_quiz",
- quiz_activated: true,
- api_serializer: "ldt_annotate",
- analytics_api: "",
- api_method: "POST",
- user: "",
- userid:""
-}
-
-IriSP.Widgets.Quiz.prototype.template = '<div class="Ldt-Quiz-Container">'
- + '<div class="Ldt-Quiz-Header">'
- + ' <div class="Ldt-Quiz-Index"></div><div class="Ldt-Quiz-Score"></div>'
- + '</div>'
- + '<div class="Ldt-Quiz-Content">'
- + ' <h1 class="Ldt-Quiz-Title">{{question}}</h1>'
- + ' <div class="Ldt-Quiz-Questions">'
- + ' </div>'
- + '</div>'
- + '<div class="Ldt-Quiz-Footer">'
- + ' <div class="Ldt-Quiz-Votes">'
- + ' <span class="Ldt-Quiz-Votes-Question">Avez-vous trouvé cette question utile ?</span>'
- + ' <div class="Ldt-Quiz-Votes-Buttons">'
- + ' <div class="Ldt-Quiz-Vote-Skip-Block"><a href="#" class="Ldt-Quiz-Vote-Skip">Passer</a></div>'
- + ' <div><input type="button" value="Non" class="Ldt-Quiz-Vote-Useless" /></div>'
- + ' <div><input type="button" value="Oui" class="Ldt-Quiz-Vote-Useful" /></div>'
- + ' </div>'
- + ' </div>'
- + ' <div class="Ldt-Quiz-Submit">'
- + ' <div class="Ldt-Quiz-Submit-Button"><input type="button" value="Valider" /></div>'
- + ' <div class="Ldt-Quiz-Submit-Skip-Link"><a href="#">Passer</a></div><div style="clear:both;"></div>'
- + ' </div>'
- + ' <div class="Ldt-Quiz-Result">Bonne réponse</div>'
- + '</div>'
- + '</div>';
-
-IriSP.Widgets.Quiz.prototype.annotationTemplate = '';
-
-IriSP.Widgets.Quiz.prototype.update = function(annotation) {
- var _this = this;
-
- if (this.quiz_activated &&
- this.correct[annotation.id] != 1 &&
- this.correct[annotation.id] != 0) {
-
- _this.quiz_displayed = true;
-
- //Pause the current video
- this.media.pause();
-
- this.annotation = annotation;
-
- var question = annotation.content.data.question;
- var answers = annotation.content.data.answers;
- var resource = annotation.content.data.resource;
-
- $(".Ldt-Quiz-Votes").hide();
- $(".Ldt-Pause-Add-Question").hide();
- $(".Ldt-Quiz-Container .Ldt-Quiz-Title").html(question);
-
- var i = 0;
+import Mustache from "mustache";
+import quizStyles from "./Quiz.module.css";
+import jQuery from "jquery";
- var score = Mustache.to_html('<span class="Ldt-Quiz-Correct-Answer">{{ correctness.0 }}</span> / <span class="Ldt-Quiz-Incorrect-Answer">{{ correctness.1 }}</span>', { correctness: this.globalScore() });
- $(".Ldt-Quiz-Index").html(Mustache.to_html("Q{{index}}/{{total}}", { index: annotation.number + 1,
- total: this.totalAmount }));
- $(".Ldt-Quiz-Score").html(score);
- this.question = new IriSP.Widgets.UniqueChoiceQuestion(annotation);
- this.resource = new IriSP.Widgets.UniqueChoiceQuestion(resource);
-
- if (annotation.content.data.type == "multiple_choice") {
- this.question = new IriSP.Widgets.MultipleChoiceQuestion(annotation);
- this.resource = new IriSP.Widgets.MultipleChoiceQuestion(resource);
- }
- else if (annotation.content.data.type == "unique_choice") {
- this.question = new IriSP.Widgets.UniqueChoiceQuestion(annotation);
- this.resource = new IriSP.Widgets.UniqueChoiceQuestion(resource);
- }
-
- var output = "";
- for (i = 0; i < answers.length; i++) {
- output += '<div class="quiz-question-block"><p>' + this.question.renderQuizTemplate(answers[i], i) + '<span class="quiz-question-label">'+ answers[i].content + '</span></p></div>';
- }
-
-
- var QR = '';
- //If there is an attached resource, display it on the resources overlay
- if (resource != null) {
- QR = '<div class="quiz-resource-block" id="resource" >' + resource + '</div>';
- };
- $(".Ldt-Quiz-Questions").html(QR + output);
- $(".Ldt-Quiz-Overlay").fadeIn();
-
- $(".Ldt-Quiz-Submit").fadeIn();
+const Quiz = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
- //Let's automatically check the checkbox/radio if we click on the label
- $(".quiz-question-label").click(function() {
- var input = $(this).siblings("input");
- if (input.prop('checked') && input.prop('type') == 'radio') {
- // Already checked. Consider a double click on unique question as a validation.
- _this.answer();
- } else {
- input.prop('checked', !input.prop('checked'));
- }
- });
-
- //In case we click on the first "Skip" link
- $(".Ldt-Quiz-Submit-Skip-Link").click({media: this.media}, function(event) {
- _this.hide();
- _this.player.trigger("QuizCreator.skip");
- event.data.media.play();
- });
- }
-};
-
-IriSP.Widgets.Quiz.prototype.hide = function() {
- var _this = this;
-
- $(".Ldt-Quiz-Votes").hide();
- $(".Ldt-Quiz-Overlay").hide();
- $(".Ldt-Pause-Add-Question").hide();
- _this.quiz_displayed = false;
-}
-
-IriSP.Widgets.Quiz.prototype.answer = function() {
- var _this = this;
-
- function insert_timecode_links (s) {
- return (s || "").replace(/\s(\d+:\d+)/, function (match, timecode) {
- return ' <a href="#t=' + (IriSP.timestamp2ms(timecode) / 1000) + '">' + timecode + '</a>';
- });
+ static defaults = {
+ // annotation_type: "at_quiz",
+ quiz_activated: true,
+ api_serializer: "ldt_annotate",
+ analytics_api: "",
+ api_method: "POST",
+ user: "",
+ userid: "",
};
- var answers = _this.annotation.content.data.answers;
+ static template =
+ '<div class="Ldt-Quiz-Container">' +
+ '<div class="Ldt-Quiz-Header">' +
+ ' <div class="Ldt-Quiz-Index"></div><div class="Ldt-Quiz-Score"></div>' +
+ "</div>" +
+ '<div class="Ldt-Quiz-Content">' +
+ ' <h1 class="Ldt-Quiz-Title">{{question}}</h1>' +
+ ' <div class="Ldt-Quiz-Questions">' +
+ " </div>" +
+ "</div>" +
+ '<div class="Ldt-Quiz-Footer">' +
+ ' <div class="Ldt-Quiz-Votes">' +
+ ' <span class="Ldt-Quiz-Votes-Question">Avez-vous trouvé cette question utile ?</span>' +
+ ' <div class="Ldt-Quiz-Votes-Buttons">' +
+ ' <div class="Ldt-Quiz-Vote-Skip-Block"><a href="#" class="Ldt-Quiz-Vote-Skip">Passer</a></div>' +
+ ' <div><input type="button" value="Non" class="Ldt-Quiz-Vote-Useless" /></div>' +
+ ' <div><input type="button" value="Oui" class="Ldt-Quiz-Vote-Useful" /></div>' +
+ " </div>" +
+ " </div>" +
+ ' <div class="Ldt-Quiz-Submit">' +
+ ' <div class="Ldt-Quiz-Submit-Button"><input type="button" value="Valider" /></div>' +
+ ' <div class="Ldt-Quiz-Submit-Skip-Link"><a href="#">Passer</a></div><div style="clear:both;"></div>' +
+ " </div>" +
+ ' <div class="Ldt-Quiz-Result">Bonne réponse</div>' +
+ "</div>" +
+ "</div>";
+
+ static annotationTemplate = "";
+
+ update(annotation) {
+ var _this = this;
+
+ if (
+ this.quiz_activated &&
+ this.correct[annotation.id] != 1 &&
+ this.correct[annotation.id] != 0
+ ) {
+ _this.quiz_displayed = true;
+
+ //Pause the current video
+ this.media.pause();
+
+ this.annotation = annotation;
+
+ var question = annotation.content.data.question;
+ var answers = annotation.content.data.answers;
+ var resource = annotation.content.data.resource;
+
+ $(".Ldt-Quiz-Votes").hide();
+ $(".Ldt-Pause-Add-Question").hide();
+ $(".Ldt-Quiz-Container .Ldt-Quiz-Title").html(question);
+
+ var i = 0;
+
+ var score = Mustache.render(
+ '<span class="Ldt-Quiz-Correct-Answer">{{ correctness.0 }}</span> / <span class="Ldt-Quiz-Incorrect-Answer">{{ correctness.1 }}</span>',
+ { correctness: this.globalScore() }
+ );
+ $(".Ldt-Quiz-Index").html(
+ Mustache.render("Q{{index}}/{{total}}", {
+ index: annotation.number + 1,
+ total: this.totalAmount,
+ })
+ );
+ $(".Ldt-Quiz-Score").html(score);
+ this.question = new ns.Widgets.UniqueChoiceQuestion(annotation);
+ this.resource = new ns.Widgets.UniqueChoiceQuestion(resource);
+
+ if (annotation.content.data.type == "multiple_choice") {
+ this.question = new ns.Widgets.MultipleChoiceQuestion(annotation);
+ this.resource = new ns.Widgets.MultipleChoiceQuestion(resource);
+ } else if (annotation.content.data.type == "unique_choice") {
+ this.question = new ns.Widgets.UniqueChoiceQuestion(annotation);
+ this.resource = new ns.Widgets.UniqueChoiceQuestion(resource);
+ }
- // Augment answers with the correct feedback
- var i = 0;
- var wrong = 0;
- // Signature is an array giving the answers signature: 1 for checked, 0 for unchecked
- // We cannot simply store the right answer index, since there may be multiple-choice questions
- var signature = [];
- _this.$.find(".Ldt-Quiz-Question-Check").each( function (code) {
+ var output = "";
+ for (i = 0; i < answers.length; i++) {
+ output +=
+ '<div class="quiz-question-block"><p>' +
+ this.question.renderQuizTemplate(answers[i], i) +
+ '<span class="quiz-question-label">' +
+ answers[i].content +
+ "</span></p></div>";
+ }
+
+ var QR = "";
+ //If there is an attached resource, display it on the resources overlay
+ if (resource != null) {
+ QR =
+ '<div class="quiz-resource-block" id="resource" >' +
+ resource +
+ "</div>";
+ }
+ $(".Ldt-Quiz-Questions").html(QR + output);
+ $(".Ldt-Quiz-Overlay").fadeIn();
+
+ $(".Ldt-Quiz-Submit").fadeIn();
+
+ //Let's automatically check the checkbox/radio if we click on the label
+ $(".quiz-question-label").click(function () {
+ var input = $(this).siblings("input");
+ if (input.prop("checked") && input.prop("type") == "radio") {
+ // Already checked. Consider a double click on unique question as a validation.
+ _this.answer();
+ } else {
+ input.prop("checked", !input.prop("checked"));
+ }
+ });
+
+ //In case we click on the first "Skip" link
+ $(".Ldt-Quiz-Submit-Skip-Link").click(
+ { media: this.media },
+ function (event) {
+ _this.hide();
+ _this.player.trigger("QuizCreator.skip");
+ event.data.media.play();
+ }
+ );
+ }
+ }
+
+ hide() {
+ var _this = this;
+
+ $(".Ldt-Quiz-Votes").hide();
+ $(".Ldt-Quiz-Overlay").hide();
+ $(".Ldt-Pause-Add-Question").hide();
+ _this.quiz_displayed = false;
+ }
+
+ answer() {
+ var _this = this;
+
+ function insert_timecode_links(s) {
+ return (s || "").replace(/\s(\d+:\d+)/, function (match, timecode) {
+ return (
+ ' <a href="#t=' +
+ ns.timestamp2ms(timecode) / 1000 +
+ '">' +
+ timecode +
+ "</a>"
+ );
+ });
+ }
+
+ var answers = _this.annotation.content.data.answers;
+
+ // Augment answers with the correct feedback
+ var i = 0;
+ var wrong = 0;
+ // Signature is an array giving the answers signature: 1 for checked, 0 for unchecked
+ // We cannot simply store the right answer index, since there may be multiple-choice questions
+ var signature = [];
+ _this.$.find(".Ldt-Quiz-Question-Check").each(function (code) {
var checked = $(this).is(":checked");
signature.push(checked ? 1 : 0);
var ans = answers[i];
- if ((ans.correct && !checked)
- || (!ans.correct && checked)) {
- wrong += 1;
- IriSP.jQuery(this).parents(".quiz-question-block").append('<div class="quiz-question-feedback quiz-question-incorrect-feedback">'+ insert_timecode_links(ans.feedback) +'</div>');
+ if ((ans.correct && !checked) || (!ans.correct && checked)) {
+ wrong += 1;
+ jQuery(this)
+ .parents(".quiz-question-block")
+ .append(
+ '<div class="quiz-question-feedback quiz-question-incorrect-feedback">' +
+ insert_timecode_links(ans.feedback) +
+ "</div>"
+ );
} else {
- IriSP.jQuery(this).parents(".quiz-question-block").append('<div class="quiz-question-feedback quiz-question-correct-feedback">'+ insert_timecode_links(ans.feedback) +'</div>');
+ jQuery(this)
+ .parents(".quiz-question-block")
+ .append(
+ '<div class="quiz-question-feedback quiz-question-correct-feedback">' +
+ insert_timecode_links(ans.feedback) +
+ "</div>"
+ );
}
i++;
- });
+ });
- if (wrong) {
- $(".Ldt-Quiz-Result").html("Mauvaise réponse");
- $(".Ldt-Quiz-Result").css({"background-color" : "red"});
- this.correct[this.annotation.id] = 0;
- } else {
- $(".Ldt-Quiz-Result").html("Bonne réponse !");
- $(".Ldt-Quiz-Result").css({"background-color" : "green"});
- this.correct[this.annotation.id] = 1;
- }
+ if (wrong) {
+ $(".Ldt-Quiz-Result").html("Mauvaise réponse");
+ $(".Ldt-Quiz-Result").css({ "background-color": "red" });
+ this.correct[this.annotation.id] = 0;
+ } else {
+ $(".Ldt-Quiz-Result").html("Bonne réponse !");
+ $(".Ldt-Quiz-Result").css({ "background-color": "green" });
+ this.correct[this.annotation.id] = 1;
+ }
- $(".Ldt-Quiz-Result").animate({height:"100%"},500, "linear", function() {
- $(".Ldt-Quiz-Result").delay(2000).animate({ height:"0%" }, 500);
- });
+ $(".Ldt-Quiz-Result").animate(
+ { height: "100%" },
+ 500,
+ "linear",
+ function () {
+ $(".Ldt-Quiz-Result").delay(2000).animate({ height: "0%" }, 500);
+ }
+ );
- var question_number = this.annotation.number + 1;
- var correctness = this.globalScore();
- var score = "";
- score += '<span class="Ldt-Quiz-Correct-Answer">' + correctness[0] +'</span> / <span class="Ldt-Quiz-Incorrect-Answer">' + correctness[1] + '</span>';
- $(".Ldt-Quiz-Index").html("Q"+ question_number + "/" + this.totalAmount);
- $(".Ldt-Quiz-Score").html(score);
+ var question_number = this.annotation.number + 1;
+ var correctness = this.globalScore();
+ var score = "";
+ score +=
+ '<span class="Ldt-Quiz-Correct-Answer">' +
+ correctness[0] +
+ '</span> / <span class="Ldt-Quiz-Incorrect-Answer">' +
+ correctness[1] +
+ "</span>";
+ $(".Ldt-Quiz-Index").html("Q" + question_number + "/" + this.totalAmount);
+ $(".Ldt-Quiz-Score").html(score);
- this.submit(this.user, this.userid, this.annotation.id, wrong ? 'wrong_answer' : 'right_answer', signature.join(""));
-
- //Hide the "Validate" button and display the UI dedicated to votes
- $(".Ldt-Quiz-Submit").fadeOut(400, function () {
- $(".Ldt-Quiz-Votes").show();
- });
-};
+ this.submit(
+ this.user,
+ this.userid,
+ this.annotation.id,
+ wrong ? "wrong_answer" : "right_answer",
+ signature.join("")
+ );
-IriSP.Widgets.Quiz.prototype.globalScore = function() {
- // Return 2 variables to know how many right and wrong answers there are
- var values = _.values(this.correct);
- var ok = values.filter( function (s) { return s == 1; }).length;
- var not_ok = values.filter( function (s) { return s == 0; }).length;
- return [ok, not_ok];
-};
+ //Hide the "Validate" button and display the UI dedicated to votes
+ $(".Ldt-Quiz-Submit").fadeOut(400, function () {
+ $(".Ldt-Quiz-Votes").show();
+ });
+ }
-IriSP.Widgets.Quiz.prototype.refresh = function() {
- var _annotations = this.getWidgetAnnotations().sortBy(function(_annotation) {
+ globalScore() {
+ // Return 2 variables to know how many right and wrong answers there are
+ var values = _.values(this.correct);
+ var ok = values.filter(function (s) {
+ return s == 1;
+ }).length;
+ var not_ok = values.filter(function (s) {
+ return s == 0;
+ }).length;
+ return [ok, not_ok];
+ }
+
+ refresh() {
+ var _annotations = this.getWidgetAnnotations().sortBy(function (
+ _annotation
+ ) {
return _annotation.begin;
- });
-
- var _this = this;
+ });
- _this.totalAmount = _annotations.length;
- _this.number = 0;
- _this.correct = {};
- _this.keys = {};
+ var _this = this;
+
+ _this.totalAmount = _annotations.length;
+ _this.number = 0;
+ _this.correct = {};
+ _this.keys = {};
- _annotations.forEach(function(_a) {
- //Fix each annotation as "non-answered yet"
- _this.correct[_a.id] = -1;
- _this.keys[_this.number] = _a.id;
- _a.number = _this.number++;
- });
+ _annotations.forEach(function (_a) {
+ //Fix each annotation as "non-answered yet"
+ _this.correct[_a.id] = -1;
+ _this.keys[_this.number] = _a.id;
+ _a.number = _this.number++;
+ });
+ }
-}
-
-IriSP.Widgets.Quiz.prototype.draw = function() {
- var _this = this;
- _this.quiz_displayed = false;
- this.onMediaEvent("enter-annotation", function (annotation) {
- var an = _this.getWidgetAnnotations().filter( function (a) { return a === annotation; });
+ draw() {
+ var _this = this;
+ _this.quiz_displayed = false;
+ this.onMediaEvent("enter-annotation", function (annotation) {
+ var an = _this.getWidgetAnnotations().filter(function (a) {
+ return a === annotation;
+ });
if (an.number === undefined) {
- _this.refresh();
+ _this.refresh();
}
if (an.length) {
- _this.update(an[0]);
- };
- });
- this.onMdpEvent("Quiz.activate", function() {
- _this.quiz_activated = true;
- });
+ _this.update(an[0]);
+ }
+ });
+ this.onMdpEvent("Quiz.activate", function () {
+ _this.quiz_activated = true;
+ });
- this.onMdpEvent("Quiz.deactivate", function() {
- _this.quiz_activated = false;
- _this.hide();
- });
+ this.onMdpEvent("Quiz.deactivate", function () {
+ _this.quiz_activated = false;
+ _this.hide();
+ });
- this.onMdpEvent("Quiz.hide", function() {
- _this.hide();
- });
+ this.onMdpEvent("Quiz.hide", function () {
+ _this.hide();
+ });
+
+ this.onMdpEvent("Quiz.refresh", function () {
+ _this.refresh();
+ });
- this.onMdpEvent("Quiz.refresh", function() {
- _this.refresh();
- });
+ this.onMediaEvent("pause", function () {
+ if (!_this.quiz_displayed) {
+ $(".Ldt-Pause-Add-Question").show();
+ }
+ });
- this.onMediaEvent("pause", function() {
- if (! _this.quiz_displayed) {
- $(".Ldt-Pause-Add-Question").show();
- }
- });
+ this.onMediaEvent("play", function () {
+ $(".Ldt-Pause-Add-Question").hide();
+ });
- this.onMediaEvent("play", function() {
- $(".Ldt-Pause-Add-Question").hide();
- });
+ // Add Ldt-Quiz-Overlay widget on top of video player
+ _this.overlay = $("<div class='Ldt-Quiz-Overlay'></div>").appendTo(
+ $("#" + _this.container)
+ );
+ _this.PauseAddQuestion = $(
+ "<div class='Ldt-Pause-Add-Question' title='Ajoutez une question !'>"
+ )
+ .on("click", function () {
+ _this.player.trigger("QuizCreator.create");
+ })
+ .appendTo($("#" + _this.container));
+ _this.overlay.html(this.template);
- // Add Ldt-Quiz-Overlay widget on top of video player
- _this.overlay = $("<div class='Ldt-Quiz-Overlay'></div>").appendTo($('#' + _this.container));
- _this.PauseAddQuestion = $("<div class='Ldt-Pause-Add-Question' title='Ajoutez une question !'>")
- .on("click", function() { _this.player.trigger("QuizCreator.create"); })
- .appendTo($('#' + _this.container));
- _this.overlay.html(this.template);
+ $(".Ldt-Quiz-Overlay").hide();
- $(".Ldt-Quiz-Overlay").hide();
+ $(".Ldt-Quiz-Submit input").click(function () {
+ _this.answer();
+ });
- $(".Ldt-Quiz-Submit input").click(function() {
- _this.answer();
- });
+ //In case we click on the first "Skip" link
+ $(".Ldt-Quiz-Submit-Skip-Link").click(
+ { media: this.media },
+ function (event) {
+ _this.submit(
+ _this.user,
+ _this.userid,
+ _this.annotation.id,
+ "skipped_answer",
+ 0
+ );
+ _this.hide();
+ _this.player.trigger("QuizCreator.skip");
+ event.data.media.play();
+ }
+ );
- //In case we click on the first "Skip" link
- $(".Ldt-Quiz-Submit-Skip-Link").click({ media: this.media }, function(event) {
- _this.submit(_this.user, _this.userid, _this.annotation.id, "skipped_answer", 0);
- _this.hide();
- _this.player.trigger("QuizCreator.skip");
- event.data.media.play();
- });
+ $(
+ '.Ldt-Quiz-Votes-Buttons input[type="button"], .Ldt-Quiz-Votes-Buttons a'
+ ).click({ media: this.media }, function (event) {
+ var vote_prop, vote_val;
- $(".Ldt-Quiz-Votes-Buttons input[type=\"button\"], .Ldt-Quiz-Votes-Buttons a").click({media: this.media}, function(event) {
- var vote_prop, vote_val;
+ if ($(this).hasClass("Ldt-Quiz-Vote-Useful")) {
+ vote_prop = "useful";
+ vote_val = 1;
+ } else if ($(this).hasClass("Ldt-Quiz-Vote-Useless")) {
+ vote_prop = "useless";
+ vote_val = -1;
- if ($(this).hasClass("Ldt-Quiz-Vote-Useful")) {
- vote_prop = "useful";
- vote_val = 1;
- } else if ($(this).hasClass("Ldt-Quiz-Vote-Useless")) {
- vote_prop = "useless";
- vote_val = -1;
-
- $(".Ldt-Ctrl-Quiz-Create").addClass("button_highlight").delay(5000).queue(function() {
- $(this).removeClass("button_highlight").dequeue();
+ $(".Ldt-Ctrl-Quiz-Create")
+ .addClass("button_highlight")
+ .delay(5000)
+ .queue(function () {
+ $(this).removeClass("button_highlight").dequeue();
});
- }else{
- vote_prop = "skipped_vote";
- vote_val = 0;
- }
+ } else {
+ vote_prop = "skipped_vote";
+ vote_val = 0;
+ }
- _this.submit(_this.user, _this.userid, _this.annotation.id, vote_prop, vote_val);
+ _this.submit(
+ _this.user,
+ _this.userid,
+ _this.annotation.id,
+ vote_prop,
+ vote_val
+ );
- //Resume the current video
- event.data.media.play();
+ //Resume the current video
+ event.data.media.play();
+
+ _this.hide();
+ $(".Ldt-Pause-Add-Question").hide();
- _this.hide();
- $(".Ldt-Pause-Add-Question").hide();
+ _this.player.trigger("QuizCreator.skip");
+ });
- _this.player.trigger("QuizCreator.skip");
- });
-
- _this.refresh();
+ _this.refresh();
+ }
+ };
};
-//Generates uid
-//source : http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
-IriSP.Widgets.Widget.prototype.generateUid = function () {
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
- var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
- return v.toString(16);
- });
-}
+const UniqueChoiceQuestion = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(annotation) {
+ this.annotation = annotation;
+ }
-//UniqueChoice Question
-IriSP.Widgets.UniqueChoiceQuestion = function(annotation) {
- this.annotation = annotation;
-}
-
-IriSP.Widgets.UniqueChoiceQuestion.prototype = new IriSP.Widgets.Widget();
+ renderQuizTemplate(answer, identifier) {
+ return (
+ '<input type="radio" class="quiz-question Ldt-Quiz-Question-Check Ldt-Quiz-Question-Check-' +
+ identifier +
+ '" name="question" data-question="' +
+ identifier +
+ '" value="' +
+ identifier +
+ '" />'
+ );
+ }
-IriSP.Widgets.UniqueChoiceQuestion.prototype.renderQuizTemplate = function(answer, identifier) {
- return '<input type="radio" class="quiz-question Ldt-Quiz-Question-Check Ldt-Quiz-Question-Check-' + identifier + '" name="question" data-question="' + identifier + '" value="' + identifier + '" />';
-}
+ renderTemplate(answer, identifier) {
+ var id = this.generateUid();
+ return (
+ '<input type="radio" id="' +
+ id +
+ '" class="quiz-question-edition Ldt-Quiz-Question-Check Ldt-Quiz-Question-Check-' +
+ identifier +
+ '" name="question" data-question="' +
+ identifier +
+ '" value="' +
+ identifier +
+ '" /><label for="' +
+ id +
+ '" title="Veuillez sélectionner la réponse correcte"></label>'
+ );
+ }
-IriSP.Widgets.UniqueChoiceQuestion.prototype.renderTemplate = function(answer, identifier) {
- var id = this.generateUid();
- return '<input type="radio" id="' + id + '" class="quiz-question-edition Ldt-Quiz-Question-Check Ldt-Quiz-Question-Check-'+ identifier +'" name="question" data-question="'+ identifier +'" value="' + identifier + '" /><label for="'+ id +'" title="Veuillez sélectionner la réponse correcte"></label>';
-}
+ renderFullTemplate(answer, identifier) {
+ var correct = answer && answer.correct ? "checked" : "";
+ var id = this.generateUid();
+ return (
+ '<input type="radio" id="' +
+ id +
+ '" ' +
+ correct +
+ ' class="quiz-question-edition Ldt-Quiz-Question-Check Ldt-Quiz-Question-Check-' +
+ identifier +
+ '" name="question" data-question="' +
+ identifier +
+ '" value="' +
+ identifier +
+ '" /><label for="' +
+ id +
+ '"></label>'
+ );
+ }
+ };
+};
-IriSP.Widgets.UniqueChoiceQuestion.prototype.renderFullTemplate = function(answer, identifier) {
- var correct = (answer && answer.correct) ? "checked" : "";
- var id = this.generateUid();
- return '<input type="radio" id="'+ id +'" '+ correct +' class="quiz-question-edition Ldt-Quiz-Question-Check Ldt-Quiz-Question-Check-'+ identifier +'" name="question" data-question="'+ identifier +'" value="' + identifier + '" /><label for="'+ id +'"></label>';
-}
-
+const MultipleChoiceQuestion = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(annotation) {
+ this.annotation = annotation;
+ }
-//MultipleChoice Question
-IriSP.Widgets.MultipleChoiceQuestion = function(annotation) {
- this.annotation = annotation;
-}
-
-IriSP.Widgets.MultipleChoiceQuestion.prototype = new IriSP.Widgets.Widget();
+ renderQuizTemplate(answer, identifier) {
+ return (
+ '<input type="checkbox" class="quiz-question Ldt-Quiz-Question-Check Ldt-Quiz-Question-Check-' +
+ identifier +
+ '" name="question[' +
+ identifier +
+ ']" data-question="' +
+ identifier +
+ '" value="' +
+ identifier +
+ '" /> '
+ );
+ }
-IriSP.Widgets.MultipleChoiceQuestion.prototype.renderQuizTemplate = function(answer, identifier) {
- return '<input type="checkbox" class="quiz-question Ldt-Quiz-Question-Check Ldt-Quiz-Question-Check-'+ identifier + '" name="question['+ identifier +']" data-question="'+ identifier +'" value="' + identifier + '" /> ';
-}
-
-IriSP.Widgets.MultipleChoiceQuestion.prototype.renderTemplate = function(answer, identifier) {
- var id = this.generateUid();
- return '<input type="checkbox" id="'+ id +'" class="quiz-question-edition Ldt-Quiz-Question-Check" name="question['+ identifier +']" data-question="'+ identifier +'" value="' + identifier + '" /><label for="'+ id +'" title="Veuillez sélectionner la ou les réponses correctes"></label>';
-}
+ renderTemplate(answer, identifier) {
+ var id = this.generateUid();
+ return (
+ '<input type="checkbox" id="' +
+ id +
+ '" class="quiz-question-edition Ldt-Quiz-Question-Check" name="question[' +
+ identifier +
+ ']" data-question="' +
+ identifier +
+ '" value="' +
+ identifier +
+ '" /><label for="' +
+ id +
+ '" title="Veuillez sélectionner la ou les réponses correctes"></label>'
+ );
+ }
-IriSP.Widgets.MultipleChoiceQuestion.prototype.renderFullTemplate = function(answer, identifier) {
- var correct = (answer && answer.correct) ? "checked" : "";
- var id = this.generateUid();
- return '<input type="checkbox" id="'+ id +'" '+ correct +' class="quiz-question-edition Ldt-Quiz-Question-Check" name="question['+ identifier +']" data-question="'+ identifier +'" value="' + identifier + '" /><label for="'+ id +'"></label> ';
-}
+ renderFullTemplate(answer, identifier) {
+ var correct = answer && answer.correct ? "checked" : "";
+ var id = this.generateUid();
+ return (
+ '<input type="checkbox" id="' +
+ id +
+ '" ' +
+ correct +
+ ' class="quiz-question-edition Ldt-Quiz-Question-Check" name="question[' +
+ identifier +
+ ']" data-question="' +
+ identifier +
+ '" value="' +
+ identifier +
+ '" /><label for="' +
+ id +
+ '"></label> '
+ );
+ }
-IriSP.Widgets.Quiz.prototype.submit = function(user,user_id,question,prop,val) {
- var _this = this;
- var _url = Mustache.to_html(this.analytics_api, {id: this.source.projectId}),
- donnees = {
- "username": user,
- "useruuid": user_id,
- "subject": question,
- "property": prop,
- "value": val,
- "session": _this.session_id
- };
+ submit(user, user_id, question, prop, val) {
+ var _this = this;
+ var _url = Mustache.render(this.analytics_api, {
+ id: this.source.projectId,
+ }),
+ donnees = {
+ username: user,
+ useruuid: user_id,
+ subject: question,
+ property: prop,
+ value: val,
+ session: _this.session_id,
+ };
- IriSP.jQuery.ajax({
+ jQuery.ajax({
url: _url,
type: this.api_method,
- contentType: 'application/json',
+ contentType: "application/json",
data: JSON.stringify(donnees),
- success: function(_data) {
+ success: function (_data) {},
+ error: function (_xhr, _error, _thrown) {
+ ns.log("Error when sending annotation", _thrown);
},
- error: function(_xhr, _error, _thrown) {
- IriSP.log("Error when sending annotation", _thrown);
- }
- });
-}
+ });
+ }
+ };
+};
+
+export { Quiz, UniqueChoiceQuestion, MultipleChoiceQuestion, quizStyles };
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Quiz.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,224 @@
+/* Nothing */
+
+.Ldt-Quiz-Container {
+ position: absolute;
+ height: calc(100% - 4px);
+ top: 0px;
+ width: calc(100% - 20px);
+ margin: auto;
+ border: 1px solid black;
+ font-size: 18pt;
+}
+
+.Ldt-Quiz-Title {
+ line-height: 1;
+ padding-top: 10px;
+ text-align: center;
+}
+
+.Ldt-Quiz-Header {
+ font-size: 12px;
+ color: black;
+ border-bottom: 1px solid green;
+ padding: 2px;
+ height: 22px;
+}
+
+.Ldt-Quiz-Content {
+ height: calc(100% - 82px);
+ overflow-y: auto;
+}
+
+.Ldt-Quiz-Footer {
+ height: 60px;
+ width: 100%;
+ position: absolute;
+ bottom: 0px;
+ border-top: 2px solid black;
+ background-color: white;
+}
+
+
+.Ldt-Quiz-Score {
+ display: inline-block;
+ position: absolute;
+ right: 20px;
+}
+
+.Ldt-Quiz-Index {
+ display: inline-block;
+}
+
+.Ldt-Quiz-Image {
+ max-width: 100%;
+ max-height: 100%;
+}
+
+.Ldt-Quiz-Questions {
+ height: calc(100% - 2.5em);
+ margin: 10px;
+ padding: 10px;
+ border-left: 5px solid gray;
+}
+
+.quiz-question-block {
+ padding-top: 10px;
+}
+.quiz-resource-block {
+ padding-top: 10px;
+ float: right;
+ max-height: 100%;
+ height: 100%;
+}
+.quiz-resource-block img {
+ max-height: 100%;
+ max-width: 100%;
+}
+
+.quiz-question-feedback {
+ font-size: 15px;
+}
+
+.quiz-question-feedback div {
+ display: inline-block;
+ height: 100%;
+}
+
+.quiz-question-correct-feedback:before, .quiz-question-incorrect-feedback:before {
+ content: '';
+ vertical-align: middle;
+ display: inline-block;
+ width: 48px;
+ height: 48px;
+ }
+
+.quiz-question-correct-feedback:before {
+ background: url(img/valid_sprites.png) left top no-repeat;
+}
+
+.quiz-question-incorrect-feedback:before {
+ background: url(img/valid_sprites.png) -49px top no-repeat;
+}
+
+.Ldt-Quiz-Correct-Answer:before {
+ background: url(img/min_valid_sprites.png) left top no-repeat;
+}
+
+.Ldt-Quiz-Incorrect-Answer:before {
+ background: url(img/min_valid_sprites.png) -13px top no-repeat;
+}
+
+.Ldt-Quiz-Correct-Answer:before, .Ldt-Quiz-Incorrect-Answer:before {
+ content: '';
+ vertical-align: middle;
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ }
+
+.Ldt-Quiz-Submit {
+ margin: 10px;
+}
+
+.Ldt-Quiz-Submit .Ldt-Quiz-Submit-Skip-Link {
+ float: left;
+}
+
+.Ldt-Quiz-Submit-Skip-Link a {
+ text-decoration: none;
+ font-size: 16pt;
+}
+
+.Ldt-Quiz-Submit .Ldt-Quiz-Submit-Button {
+ float: right;
+}
+
+.Ldt-Quiz-Votes {
+ display: none;
+ height: 53px;
+ position: relative;
+}
+
+.Ldt-Quiz-Votes-Question {
+ font-size: 16px;
+ position: absolute;
+ top: 2px;
+ left: 0px;
+}
+
+.Ldt-Quiz-Votes-Buttons {
+ position: absolute;
+ bottom: 2px;
+ left: 0px;
+ right: 0px;
+}
+
+.Ldt-Quiz-Votes-Buttons div {
+ display: inline-block;
+ width: 33%;
+ text-align: center;
+}
+
+.Ldt-Quiz-Vote-Skip-Block {
+ width: 30% !important;
+ text-align: right;
+}
+
+.Ldt-Quiz-Vote-Skip-Block a {
+ text-decoration: none;
+}
+
+.Ldt-Quiz-Overlay {
+ position: absolute;
+ top: 0px;
+ background-color: white;
+ z-index: 5;
+ width: 100%;
+ height: 100%;
+}
+
+.Ldt-Pause-Add-Question {
+ background: url(img/quiz_add_question.svg) no-repeat;
+ background-position: center;
+ background-size: contain;
+ position: absolute;
+ bottom: 40px;
+ right: 0px;
+ height: 15%;
+ width: 15%;
+ max-width: 64px;
+ max-height: 64px;
+ z-index: 10;
+}
+
+.Ldt-Quiz-Result {
+ position: absolute;
+ height: 0px;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: #fde073;
+ text-align: center;
+ line-height: 2.5;
+ overflow: hidden;
+ -webkit-box-shadow: 0 0 5px black;
+ -moz-box-shadow: 0 0 5px black;
+ box-shadow: 0 0 5px black;
+}
+
+input[type="button"] {
+ border: none;
+ font-size: 18pt;
+ text-align: center;
+ background-color: #5BCE5B;
+ color: #fff;
+ cursor: pointer;
+}
+
+input[value="Non"] {
+ background-color: #F86060;
+}
+
+input.quiz-question:checked + .quiz-question-label {
+ text-decoration: underline;
+}
--- a/src/widgets/QuizCreator.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-.Ldt-QuizCreator-Ui {
- width: 100%;
- padding: 10px;
-}
-
-.Ldt-QuizCreator-Form {
- width: 100%;
-}
-
-.Ldt-QuizCreator-Question-Type {
-}
-
-.Ldt-QuizCreator-Question-Area,
-.Ldt-QuizCreator-Resource-Area {
- width: calc(100% - 20px);
-}
-
-.Ldt-QuizCreator-Questions-Block {
- width: 100%;
-}
-
-.Ldt-QuizCreator-Questions-Answer {
- margin-top: 5px;
- border-top: 1px solid black;
-}
-
-.Ldt-QuizCreator-Questions-Answer div {
- display: inline-block;
- vertical-align: middle;
-}
-
-.Ldt-QuizCreator-Questions-Answer-Content {
- width: calc(100% - 80px);
-}
-
-.Ldt-QuizCreator-Questions-Answer-Content input, .Ldt-QuizCreator-Questions-Answer-Content textarea {
- width: calc(100% - 20px);
-}
-
-.Ldt-QuizCreator-Questions-Answer-Time input {
- width: 60px;
-}
-
-.Ldt-QuizCreator-Questions-Answer-Delete {
- width: 15px;
- height: 15px;
-}
-
-.Ldt-QuizCreator-Remove {
- width: 15px;
- height: 15px;
- margin-left: 8px;
- cursor: pointer;
- background: url(img/delete.png);
-}
-
-input.quiz-question-edition {
- display: none;
-}
-
-input.quiz-question-edition[type='radio'] + label,
-input.quiz-question-edition[type='checkbox'] + label {
- height: 12px;
- width: 24px;
- display: inline-block;
- background: url(img/min_wrong_toggle.png);
- cursor: pointer;
- content: "Mauvaise";
-}
-
-input.quiz-question-edition[type='radio']:checked + label,
-input.quiz-question-edition[type='checkbox']:checked + label {
- background: url(img/min_right_toggle.png);
- content: "Bonne";
-}
--- a/src/widgets/QuizCreator.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/QuizCreator.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,306 +1,360 @@
/* TODO: Add Social Network Sharing */
+import quizCreatorStyles from "./QuizCreator.module.css";
-IriSP.Widgets.QuizCreator = function(player, config) {
- var _this = this;
- IriSP.Widgets.Widget.call(this, player, config);
-};
-
-IriSP.Widgets.QuizCreator.prototype = new IriSP.Widgets.Widget();
+const QuizCreator = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ var _this = this;
+ }
-IriSP.Widgets.QuizCreator.prototype.defaults = {
- creator_name : "",
- tags : false,
- tag_titles : false,
- pause_on_write : true,
- annotation_type: "Quiz",
- api_serializer: "ldt_annotate",
- api_endpoint_template: "",
- api_method: "POST"
-};
+ static defaults = {
+ creator_name: "",
+ tags: false,
+ tag_titles: false,
+ pause_on_write: true,
+ annotation_type: "Quiz",
+ api_serializer: "ldt_annotate",
+ api_endpoint_template: "",
+ api_method: "POST",
+ };
-IriSP.Widgets.QuizCreator.prototype.messages = {
- en: {
- },
- fr: {
- }
-};
+ static messages = {
+ en: {},
+ fr: {},
+ };
-IriSP.Widgets.QuizCreator.prototype.template =
- '<div class="Ldt-QuizCreator-Ui Ldt-TraceMe">'
- + '<div class="Ldt-QuizCreator-Question-Form">'
- + '<textarea class="Ldt-QuizCreator-Question-Area" placeholder="Votre question"></textarea><br />'
- + '<textarea class="Ldt-QuizCreator-Resource-Area" placeholder="Ressources (lien vers une image, etc.)"></textarea><br />'
- + '</div>'
- + '<p>Type de question '
- + '<select name="type" class="Ldt-QuizCreator-Question-Type">'
- + '<option value="unique_choice">Choix unique</option>'
- + '<option value="multiple_choice">Choix multiple</option>'
- + '</select>'
- + ' à <input type="text" placeholder="hh:mm:ss" size="6" class="Ldt-QuizCreator-Time" />'
- + '<div class="Ldt-QuizCreator-Questions-Block">'
- + '</div>'
- + '<div>'
- + ' <button class="Ldt-QuizCreator-Question-Add">Ajouter une réponse</button><hr>'
- + ' <button class="Ldt-QuizCreator-Question-Save">Sauvegarder</button>'
- + '</div>'
- + '</div>';
+ static template =
+ '<div class="Ldt-QuizCreator-Ui Ldt-TraceMe">' +
+ '<div class="Ldt-QuizCreator-Question-Form">' +
+ '<textarea class="Ldt-QuizCreator-Question-Area" placeholder="Votre question"></textarea><br />' +
+ '<textarea class="Ldt-QuizCreator-Resource-Area" placeholder="Ressources (lien vers une image, etc.)"></textarea><br />' +
+ "</div>" +
+ "<p>Type de question " +
+ '<select name="type" class="Ldt-QuizCreator-Question-Type">' +
+ '<option value="unique_choice">Choix unique</option>' +
+ '<option value="multiple_choice">Choix multiple</option>' +
+ "</select>" +
+ ' à <input type="text" placeholder="hh:mm:ss" size="6" class="Ldt-QuizCreator-Time" />' +
+ '<div class="Ldt-QuizCreator-Questions-Block">' +
+ "</div>" +
+ "<div>" +
+ ' <button class="Ldt-QuizCreator-Question-Add">Ajouter une réponse</button><hr>' +
+ ' <button class="Ldt-QuizCreator-Question-Save">Sauvegarder</button>' +
+ "</div>" +
+ "</div>";
-/* Hide and clear the interface is case of someone skipped or answer the current question in the Quiz panel*/
-IriSP.Widgets.QuizCreator.prototype.skip = function() {
- this.$.find(".Ldt-QuizCreator-Time").val("");
- this.$.find(".Ldt-QuizCreator-Question-Area").val("");
- this.$.find(".Ldt-QuizCreator-Resource-Area").val("");
- this.$.find(".Ldt-QuizCreator-Questions-Block").html("");
- this.current_annotation = undefined;
-};
+ /* Hide and clear the interface is case of someone skipped or answer the current question in the Quiz panel*/
+ skip() {
+ this.$.find(".Ldt-QuizCreator-Time").val("");
+ this.$.find(".Ldt-QuizCreator-Question-Area").val("");
+ this.$.find(".Ldt-QuizCreator-Resource-Area").val("");
+ this.$.find(".Ldt-QuizCreator-Questions-Block").html("");
+ this.current_annotation = undefined;
+ }
+
+ nbAnswers() {
+ var numItems = this.$.find(".Ldt-QuizCreator-Questions-Answer").length;
+ return numItems;
+ }
-IriSP.Widgets.QuizCreator.prototype.nbAnswers = function(){
- var numItems = this.$.find('.Ldt-QuizCreator-Questions-Answer').length;
- return numItems;
-};
+ draw() {
+ var _this = this;
-IriSP.Widgets.QuizCreator.prototype.draw = function() {
- var _this = this;
+ this.onMediaEvent("timeupdate", function (_time) {
+ _this.setBegin(_time);
+ });
- this.onMediaEvent("timeupdate", function(_time) {
- _this.setBegin(_time);
- });
+ this.onMdpEvent("QuizCreator.show", function () {
+ _this.setBegin(_this.media.currentTime);
+ });
- this.onMdpEvent("QuizCreator.show", function() {
- _this.setBegin(_this.media.currentTime);
- });
+ this.onMdpEvent("QuizCreator.create", function () {
+ _this.skip();
+ _this.setBegin(_this.media.currentTime);
+ });
- this.onMdpEvent("QuizCreator.create", function() {
- _this.skip();
- _this.setBegin(_this.media.currentTime);
- });
+ this.onMdpEvent("QuizCreator.skip", function () {
+ _this.skip();
+ });
- this.onMdpEvent("QuizCreator.skip", function() {
- _this.skip();
- });
-
- this.onMdpEvent("QuizCreator.edit", function (_annotation) {
- _this.skip();
+ this.onMdpEvent("QuizCreator.edit", function (_annotation) {
+ _this.skip();
_this.addQuestion(_annotation);
- });
+ });
- this.$.on("click", ".Ldt-QuizCreator-Remove", function() {
+ this.$.on("click", ".Ldt-QuizCreator-Remove", function () {
$(this).parents(".Ldt-QuizCreator-Questions-Answer").remove();
- });
+ });
- this.begin = new IriSP.Model.Time();
- this.end = this.source.getDuration();
- this.answers = [];
+ this.begin = new ns.Model.Time();
+ this.end = this.source.getDuration();
+ this.answers = [];
- this.renderTemplate();
+ this.renderTemplate();
- /* Quiz creator */
+ /* Quiz creator */
+
+ this.question = new ns.Widgets.UniqueChoiceQuestion();
- this.question = new IriSP.Widgets.UniqueChoiceQuestion();
-
- this.$.find(".Ldt-QuizCreator-Question-Type").bind("change", this.functionWrapper("onQuestionTypeChange"));
- this.$.find(".Ldt-QuizCreator-Question-Add").bind("click", this.functionWrapper("onQuestionAdd"));
- this.$.find(".Ldt-QuizCreator-Question-Save").bind("click", this.functionWrapper("onSave"));
+ this.$.find(".Ldt-QuizCreator-Question-Type").bind(
+ "change",
+ this.functionWrapper("onQuestionTypeChange")
+ );
+ this.$.find(".Ldt-QuizCreator-Question-Add").bind(
+ "click",
+ this.functionWrapper("onQuestionAdd")
+ );
+ this.$.find(".Ldt-QuizCreator-Question-Save").bind(
+ "click",
+ this.functionWrapper("onSave")
+ );
- this.$.find(".Ldt-QuizCreator-Time").keyup(function() {
- var str = _this.$.find(".Ldt-QuizCreator-Time").val();
- _this.begin = IriSP.timestamp2ms(str);
- _this.end = _this.begin + 1000;
- });
+ this.$.find(".Ldt-QuizCreator-Time").keyup(function () {
+ var str = _this.$.find(".Ldt-QuizCreator-Time").val();
+ _this.begin = ns.timestamp2ms(str);
+ _this.end = _this.begin + 1000;
+ });
- this.onMediaEvent("timeupdate", function(_time) {
+ this.onMediaEvent("timeupdate", function (_time) {
// Do not update timecode if description is not empty
if (_this.getDescription()) {
- _this.setBegin(_time);
- };
- });
-};
+ _this.setBegin(_time);
+ }
+ });
+ }
-IriSP.Widgets.QuizCreator.prototype.getDescription = function() {
- return this.$.find(".Ldt-QuizCreator-Question-Area").val().trim();
-};
-
-IriSP.Widgets.QuizCreator.prototype.addQuestion = function(annotation, number) {
- var _this = this;
+ getDescription() {
+ return this.$.find(".Ldt-QuizCreator-Question-Area").val().trim();
+ }
- if (annotation.content.data.type == "multiple_choice") {
- this.question = new IriSP.Widgets.MultipleChoiceQuestion(annotation);
- }
- else if (annotation.content.data.type == "unique_choice") {
- this.question = new IriSP.Widgets.UniqueChoiceQuestion(annotation);
- }
+ addQuestion(annotation, number) {
+ var _this = this;
- var answers = annotation.content.data.answers;
+ if (annotation.content.data.type == "multiple_choice") {
+ this.question = new ns.Widgets.MultipleChoiceQuestion(annotation);
+ } else if (annotation.content.data.type == "unique_choice") {
+ this.question = new ns.Widgets.UniqueChoiceQuestion(annotation);
+ }
- this.answers = [];
+ var answers = annotation.content.data.answers;
+ this.answers = [];
- this.$.find(".Ldt-QuizCreator-Time").val(annotation.begin);
- this.$.find(".Ldt-QuizCreator-Question-Area").val(annotation.content.data.question);
- this.$.find(".Ldt-QuizCreator-Resource-Area").val(annotation.content.data.resource);
- this.$.find(".Ldt-QuizCreator-Questions-Block").html('');
- answers.forEach( function (ans) {
+ this.$.find(".Ldt-QuizCreator-Time").val(annotation.begin);
+ this.$.find(".Ldt-QuizCreator-Question-Area").val(
+ annotation.content.data.question
+ );
+ this.$.find(".Ldt-QuizCreator-Resource-Area").val(
+ annotation.content.data.resource
+ );
+ this.$.find(".Ldt-QuizCreator-Questions-Block").html("");
+ answers.forEach(function (ans) {
_this.onQuestionAdd(null, ans);
- });
- _this.current_annotation = annotation;
-};
+ });
+ _this.current_annotation = annotation;
+ }
-IriSP.Widgets.QuizCreator.prototype.onQuestionTypeChange = function(e) {
-
- var _field = this.$.find(".Ldt-QuizCreator-Question-Type");
- var _contents = _field.val();
+ onQuestionTypeChange(e) {
+ var _field = this.$.find(".Ldt-QuizCreator-Question-Type");
+ var _contents = _field.val();
- var _this = this;
- switch(_contents) {
- case "unique_choice":
- this.question = new IriSP.Widgets.UniqueChoiceQuestion();
- break;
+ var _this = this;
+ switch (_contents) {
+ case "unique_choice":
+ this.question = new ns.Widgets.UniqueChoiceQuestion();
+ break;
- case "multiple_choice":
- this.question = new IriSP.Widgets.MultipleChoiceQuestion();
- break;
- }
+ case "multiple_choice":
+ this.question = new ns.Widgets.MultipleChoiceQuestion();
+ break;
+ }
- var output = "";
+ var output = "";
- _this.$.find(".Ldt-QuizCreator-Questions-Block").html(output);
+ _this.$.find(".Ldt-QuizCreator-Questions-Block").html(output);
- this.pauseOnWrite();
-};
+ this.pauseOnWrite();
+ }
-// Either e !== undefined, then it has been called by the interface and answer === undefined, generate an empty form.
-// Or e === null && answer !== undefined, an existing answer is provided.
-IriSP.Widgets.QuizCreator.prototype.onQuestionAdd = function(e, answer) {
- var output = '<div class="Ldt-QuizCreator-Questions-Answer">'
- + 'Réponse <div class="Ldt-QuizCreator-Questions-Answer-Correct">'+ this.question.renderFullTemplate(answer, this.nbAnswers()) +'</div><br />'
- + '<div class="Ldt-QuizCreator-Questions-Answer-Content">'
- + '<input type="text" class="Ldt-QuizCreator-Answer-Content" data-question="'+ this.nbAnswers() +'" id="question'+ this.nbAnswers() + '"' + (answer ? ' value="'+ answer.content + '"' : "") + '/><br />'
- + 'Commentaire <br/><textarea class="Ldt-QuizCreator-Answer-Feedback" data-question="'+ this.nbAnswers() +'" id="feedback'+ this.nbAnswers() +'">' + (answer ? answer.feedback : "") + '</textarea>'
- + '</div>'
- + '<div class="Ldt-QuizCreator-Questions-Answer-Delete"><div class="Ldt-QuizCreator-Remove"> </div></div>'
- + '</div>';
- this.$.find(".Ldt-QuizCreator-Questions-Block").append(output);
- this.$.find(".Ldt-QuizCreator-Answer-Content").last().focus();
+ // Either e !== undefined, then it has been called by the interface and answer === undefined, generate an empty form.
+ // Or e === null && answer !== undefined, an existing answer is provided.
+ onQuestionAdd(e, answer) {
+ var output =
+ '<div class="Ldt-QuizCreator-Questions-Answer">' +
+ 'Réponse <div class="Ldt-QuizCreator-Questions-Answer-Correct">' +
+ this.question.renderFullTemplate(answer, this.nbAnswers()) +
+ "</div><br />" +
+ '<div class="Ldt-QuizCreator-Questions-Answer-Content">' +
+ '<input type="text" class="Ldt-QuizCreator-Answer-Content" data-question="' +
+ this.nbAnswers() +
+ '" id="question' +
+ this.nbAnswers() +
+ '"' +
+ (answer ? ' value="' + answer.content + '"' : "") +
+ "/><br />" +
+ 'Commentaire <br/><textarea class="Ldt-QuizCreator-Answer-Feedback" data-question="' +
+ this.nbAnswers() +
+ '" id="feedback' +
+ this.nbAnswers() +
+ '">' +
+ (answer ? answer.feedback : "") +
+ "</textarea>" +
+ "</div>" +
+ '<div class="Ldt-QuizCreator-Questions-Answer-Delete"><div class="Ldt-QuizCreator-Remove"> </div></div>' +
+ "</div>";
+ this.$.find(".Ldt-QuizCreator-Questions-Block").append(output);
+ this.$.find(".Ldt-QuizCreator-Answer-Content").last().focus();
- this.pauseOnWrite();
-};
-
-IriSP.Widgets.QuizCreator.prototype.pauseOnWrite = function() {
- if (this.pause_on_write && !this.media.getPaused()) {
- this.media.pause();
+ this.pauseOnWrite();
}
-};
-IriSP.Widgets.QuizCreator.prototype.setBegin = function (t) {
- this.begin = new IriSP.Model.Time(t || 0);
- this.end = this.begin + 500;
- this.$.find(".Ldt-QuizCreator-Time").val(this.begin.toString());
-};
-
-IriSP.Widgets.QuizCreator.prototype.get_local_annotation = function (ident) {
- return this.player.getLocalAnnotation(ident);
-};
+ pauseOnWrite() {
+ if (this.pause_on_write && !this.media.getPaused()) {
+ this.media.pause();
+ }
+ }
-IriSP.Widgets.QuizCreator.prototype.save_local_annotations = function() {
- this.player.saveLocalAnnotations();
- // Merge modifications into widget source
- this.source.merge(this.player.localSource);
-};
+ setBegin(t) {
+ this.begin = new ns.Model.Time(t || 0);
+ this.end = this.begin + 500;
+ this.$.find(".Ldt-QuizCreator-Time").val(this.begin.toString());
+ }
+
+ get_local_annotation(ident) {
+ return this.player.getLocalAnnotation(ident);
+ }
-IriSP.Widgets.QuizCreator.prototype.delete_local_annotation = function(ident) {
- this.source.getAnnotations().removeId(ident);
- this.player.deleteLocalAnnotation(ident);
- this.current_annotation = undefined;
- this.refresh(true);
-};
+ save_local_annotations() {
+ this.player.saveLocalAnnotations();
+ // Merge modifications into widget source
+ this.source.merge(this.player.localSource);
+ }
-IriSP.Widgets.QuizCreator.prototype.show = function() {
- this.$.find(".Ldt-QuizCreator-Question-Area").focus();
-};
+ delete_local_annotation(ident) {
+ this.source.getAnnotations().removeId(ident);
+ this.player.deleteLocalAnnotation(ident);
+ this.current_annotation = undefined;
+ this.refresh(true);
+ }
-IriSP.Widgets.QuizCreator.prototype.hide = function() {
- this.$.find(".Ldt-QuizCreator-Questions-Block").html("");
- this.$.find(".Ldt-QuizCreator-Question-Area").val("");
- this.$.find(".Ldt-QuizCreator-Resource-Area").val("");
- this.$.find(".Ldt-QuizCreator-Time").val("");
-};
+ show() {
+ this.$.find(".Ldt-QuizCreator-Question-Area").focus();
+ }
+
+ hide() {
+ this.$.find(".Ldt-QuizCreator-Questions-Block").html("");
+ this.$.find(".Ldt-QuizCreator-Question-Area").val("");
+ this.$.find(".Ldt-QuizCreator-Resource-Area").val("");
+ this.$.find(".Ldt-QuizCreator-Time").val("");
+ }
-/* Save a local annotation */
-IriSP.Widgets.QuizCreator.prototype.onSave = function(event, should_publish) {
- // Either the annotation already exists (then we overwrite its
- // content) or it must be created.
- var is_created = false;
+ /* Save a local annotation */
+ onSave(event, should_publish) {
+ // Either the annotation already exists (then we overwrite its
+ // content) or it must be created.
+ var is_created = false;
- if (this.nbAnswers() <= 0) {
- alert("Vous devez spécifier au moins une réponse à votre question !");
- return false;
- };
- // Check that there is at least 1 valid answer
- if (! this.$.find(".quiz-question-edition:checked").length) {
+ if (this.nbAnswers() <= 0) {
+ alert("Vous devez spécifier au moins une réponse à votre question !");
+ return false;
+ }
+ // Check that there is at least 1 valid answer
+ if (!this.$.find(".quiz-question-edition:checked").length) {
alert("Vous n'avez pas indiqué de bonne réponse.");
return false;
- };
- var _annotation;
- if (this.current_annotation) {
+ }
+ var _annotation;
+ if (this.current_annotation) {
is_created = false;
_annotation = this.current_annotation;
- } else {
+ } else {
is_created = true;
- var _annotationTypes = this.source.getAnnotationTypes().searchByTitle(this.annotation_type, true), /* Récupération du type d'annotation dans lequel l'annotation doit être ajoutée */
- _annotationType = (_annotationTypes.length ? _annotationTypes[0] : new IriSP.Model.AnnotationType(false, this.player.localSource)); /* Si le Type d'Annotation n'existe pas, il est créé à la volée */
+ var _annotationTypes = this.source
+ .getAnnotationTypes()
+ .searchByTitle(
+ this.annotation_type,
+ true
+ ) /* Récupération du type d'annotation dans lequel l'annotation doit être ajoutée */,
+ _annotationType = _annotationTypes.length
+ ? _annotationTypes[0]
+ : new ns.Model.AnnotationType(
+ false,
+ this.player.localSource
+ ); /* Si le Type d'Annotation n'existe pas, il est créé à la volée */
/* Si nous avons dû générer un ID d'annotationType à la volée... */
if (!_annotationTypes.length) {
- /* Il ne faudra pas envoyer l'ID généré au serveur */
- _annotationType.dont_send_id = true;
- /* Il faut inclure le titre dans le type d'annotation */
- _annotationType.title = this.annotation_type;
+ /* Il ne faudra pas envoyer l'ID généré au serveur */
+ _annotationType.dont_send_id = true;
+ /* Il faut inclure le titre dans le type d'annotation */
+ _annotationType.title = this.annotation_type;
}
- _annotation = new IriSP.Model.Annotation(false, this.player.localSource); /* Création d'une annotation dans cette source avec un ID généré à la volée (param. false) */
+ _annotation = new ns.Model.Annotation(
+ false,
+ this.player.localSource
+ ); /* Création d'une annotation dans cette source avec un ID généré à la volée (param. false) */
// Initialize some fields in case of creation
_annotation.created = new Date(); /* Date de création de l'annotation */
_annotation.creator = this.creator_name;
- _annotation.setAnnotationType(_annotationType.id); /* Id du type d'annotation */
+ _annotation.setAnnotationType(
+ _annotationType.id
+ ); /* Id du type d'annotation */
this.player.localSource.getMedias().push(this.source.currentMedia);
- _annotation.setMedia(this.source.currentMedia.id); /* Id du média annoté */
- }
+ _annotation.setMedia(
+ this.source.currentMedia.id
+ ); /* Id du média annoté */
+ }
- /*
- * Nous remplissons les données de l'annotation
- * */
- _annotation.setBeginEnd(this.begin, this.end);
- _annotation.modified = new Date(); /* Date de modification de l'annotation */
- _annotation.contributor = this.creator_name;
- _annotation.description = this.getDescription();
- _annotation.title = _annotation.description;
- _annotation.content = {};
- _annotation.content.data = {};
- _annotation.content.data.type = this.$.find(".Ldt-QuizCreator-Question-Type").val();
- _annotation.content.data.question = _annotation.description;
- _annotation.content.data.resource = this.$.find(".Ldt-QuizCreator-Resource-Area").val();
- _annotation.content.data.answers = $.makeArray($(".Ldt-QuizCreator-Questions-Answer")
- .map(function (ans)
- {
- return {
- content: $(this).find(".Ldt-QuizCreator-Answer-Content").val(),
- feedback: $(this).find(".Ldt-QuizCreator-Answer-Feedback").val(),
- correct: $(this).find(".Ldt-Quiz-Question-Check").is(':checked')
- };
- }));
- this.current_annotation = _annotation;
- if (is_created) {
+ /*
+ * Nous remplissons les données de l'annotation
+ * */
+ _annotation.setBeginEnd(this.begin, this.end);
+ _annotation.modified =
+ new Date(); /* Date de modification de l'annotation */
+ _annotation.contributor = this.creator_name;
+ _annotation.description = this.getDescription();
+ _annotation.title = _annotation.description;
+ _annotation.content = {};
+ _annotation.content.data = {};
+ _annotation.content.data.type = this.$.find(
+ ".Ldt-QuizCreator-Question-Type"
+ ).val();
+ _annotation.content.data.question = _annotation.description;
+ _annotation.content.data.resource = this.$.find(
+ ".Ldt-QuizCreator-Resource-Area"
+ ).val();
+ _annotation.content.data.answers = $.makeArray(
+ $(".Ldt-QuizCreator-Questions-Answer").map(function (ans) {
+ return {
+ content: $(this).find(".Ldt-QuizCreator-Answer-Content").val(),
+ feedback: $(this).find(".Ldt-QuizCreator-Answer-Feedback").val(),
+ correct: $(this).find(".Ldt-Quiz-Question-Check").is(":checked"),
+ };
+ })
+ );
+ this.current_annotation = _annotation;
+ if (is_created) {
// Add the annotation to the localSource
this.player.addLocalAnnotation(_annotation);
// Update also the remote source
- this.source.merge([ _annotation ]);
+ this.source.merge([_annotation]);
this.player.trigger("Annotation.create", _annotation);
- } else {
+ } else {
// Update the annotation
this.player.saveLocalAnnotations();
this.player.trigger("Annotation.update", _annotation);
- };
- this.player.trigger("AnnotationsList.update"); /* On force le rafraîchissement des widgets AnnotationsList */
- this.player.trigger("Quiz.refresh"); /* On force le rafraîchissement des widgets Quiz */
+ }
+ this.player.trigger(
+ "AnnotationsList.update"
+ ); /* On force le rafraîchissement des widgets AnnotationsList */
+ this.player.trigger(
+ "Quiz.refresh"
+ ); /* On force le rafraîchissement des widgets Quiz */
+ }
+ };
};
+
+export { QuizCreator, quizCreatorStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/QuizCreator.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,75 @@
+.Ldt-QuizCreator-Ui {
+ width: 100%;
+ padding: 10px;
+}
+
+.Ldt-QuizCreator-Form {
+ width: 100%;
+}
+
+.Ldt-QuizCreator-Question-Type {
+}
+
+.Ldt-QuizCreator-Question-Area,
+.Ldt-QuizCreator-Resource-Area {
+ width: calc(100% - 20px);
+}
+
+.Ldt-QuizCreator-Questions-Block {
+ width: 100%;
+}
+
+.Ldt-QuizCreator-Questions-Answer {
+ margin-top: 5px;
+ border-top: 1px solid black;
+}
+
+.Ldt-QuizCreator-Questions-Answer div {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.Ldt-QuizCreator-Questions-Answer-Content {
+ width: calc(100% - 80px);
+}
+
+.Ldt-QuizCreator-Questions-Answer-Content input, .Ldt-QuizCreator-Questions-Answer-Content textarea {
+ width: calc(100% - 20px);
+}
+
+.Ldt-QuizCreator-Questions-Answer-Time input {
+ width: 60px;
+}
+
+.Ldt-QuizCreator-Questions-Answer-Delete {
+ width: 15px;
+ height: 15px;
+}
+
+.Ldt-QuizCreator-Remove {
+ width: 15px;
+ height: 15px;
+ margin-left: 8px;
+ cursor: pointer;
+ background: url(img/delete.png);
+}
+
+input.quiz-question-edition {
+ display: none;
+}
+
+input.quiz-question-edition[type='radio'] + label,
+input.quiz-question-edition[type='checkbox'] + label {
+ height: 12px;
+ width: 24px;
+ display: inline-block;
+ background: url(img/min_wrong_toggle.png);
+ cursor: pointer;
+ content: "Mauvaise";
+}
+
+input.quiz-question-edition[type='radio']:checked + label,
+input.quiz-question-edition[type='checkbox']:checked + label {
+ background: url(img/min_right_toggle.png);
+ content: "Bonne";
+}
--- a/src/widgets/Renkan.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-
-.Ldt-Renkan-Container {
- position: relative; width: 100%; height: 100%;
-}
-
-.Ldt-Renkan a {
- color: #303080;
-}
-
-
-.Rk-Main {
- position: absolute; left: 0; top: 0; right: 0; bottom: 0;
-}
-
-.Rk-Render {
- position: absolute; left: 0; top: 0; right: 0; bottom: 0;
- background: #ffffff;
-}
-
-/* Canvas */
-
-.Rk-Editing-Space {
- position: absolute; left: 0; top: 35px; right: 0; bottom: 0; overflow: hidden;
- background: -moz-radial-gradient( center, circle, #ffffff 40%, #e0e0e0 90%);
- background: -webkit-radial-gradient( center, circle, #ffffff 40%, #e0e0e0 90%);
- background: -ms-radial-gradient( center, circle, #ffffff 40%, #e0e0e0 90%);
-}
-
-.Rk-Editing-Space-Full {
- top: 0;
-}
-
-.Rk-Canvas {
- position: absolute; left: 0; top: 0; right: 0; bottom: 0; z-index: 2;
-}
-
-/* Node Labels */
-
-.Rk-Labels {
- position: absolute; left: 0; top: 0; z-index: 1;
- font-family: "Segoe UI", "Helvetica Neue", Arial, Helvetica, sans-serif;
-}
-
-.Rk-Label {
- position: absolute; width: 160px; margin-left: -80px; text-align: center; font-size: 13px; line-height: 13px;
-}
-
-.Rk-Edge-Label {
- font-size: 11px; transform-origin: 50% 0; -moz-transform-origin: 50% 0;
- -webkit-transform-origin: 50% 0; -ms-transform-origin: 50% 0;
-}
-
-/* Editors */
-
-.Rk-Editor {
- position: absolute; left: 0; top: 0; z-index: 3;
-}
-
-.Rk-Notifications {
- position: absolute; right: 15px; top: 15px; width: 200px;
- padding: 10px; border-radius: 8px; display: none;
- color: #ffffff; font-size: 13px; text-align: center; font-weight: bold;
- background: rgba(20,20,20,.7);
- background: -moz-linear-gradient(top, rgba(40,40,40,.7) 20%, rgba(0,0,0,.7) 80%);
- background: -webkit-linear-gradient(top, rgba(40,40,40,.7) 20%, rgba(0,0,0,.7) 80%);
- background: -ms-linear-gradient(top, rgba(40,40,40,.7) 20%, rgba(0,0,0,.7) 80%);
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#202020', endColorstr='#000000',GradientType=0 );
-}
-
-.Rk-CloseX {
- float: right; cursor: pointer;
-}
-
-.Rk-Editor h2 {
- font-size: 16px; font-weight: bold; padding: 0;
-}
-
-.Rk-Editor p, .Rk-Editor-p {
- margin: 5px 0; font-size: 12px; clear: both; padding: 0;
-}
-
-.Rk-Editor-Label {
- float: left; width: 80px;
-}
-
-.Rk-UserColor {
- display: inline-block; width: 12px; height: 12px; border: 1px solid #666666; margin: -2px 2px;
-}
-
-.Rk-Display-Title a {
- text-decoration: none; color: #000000;
-}
-
-.Rk-Display-Title a:hover {
- text-decoration: underline;
-}
-
-.Rk-Display-URI {
- font-style: italic;
-}
-
-.Rk-Display-ImgPreview {
- margin: 5px auto; display: block; max-width: 255px !important; max-height: 120px !important;
-}
-
-
-.Rk-ZoomButtons {
- position: absolute; left: 0; top: 35px; cursor: pointer;
-}
-
-.Rk-Editing-Space-Full .Rk-ZoomButtons {
- top: 0;
-}
-
-.Rk-ZoomIn, .Rk-ZoomOut {
- width: 21px; height: 20px; background: url(img/zoombuttons.png); margin: 5px;
-}
-
-.Rk-ZoomIn:hover {
- background-position: 0 -20px;
-}
-
-.Rk-ZoomOut {
- background-position: -21px 0;
-}
-
-.Rk-ZoomOut:hover {
- background-position: -21px -20px;
-}
-
--- a/src/widgets/Renkan.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Renkan.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,134 +1,150 @@
-IriSP.Widgets.Renkan = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+import _ from "lodash";
+import renkanStyles from "./Renkan.module.css";
-IriSP.Widgets.Renkan.prototype = new IriSP.Widgets.Widget();
+const Renkan = function (ns) {
+ const Rkns = global.Rkns;
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.Renkan.prototype.defaults = {
- annotation_regexp: /player\/([a-zA-Z0-9_-]+)\/.*id=([a-zA-Z0-9_-]+)/,
- tag_regexp: /search=([^&=]+)/,
- min_duration: 5000,
- renkan_options: {}
-};
+ static defaults = {
+ annotation_regexp: /player\/([a-zA-Z0-9_-]+)\/.*id=([a-zA-Z0-9_-]+)/,
+ tag_regexp: /search=([^&=]+)/,
+ min_duration: 5000,
+ renkan_options: {},
+ };
-IriSP.Widgets.Renkan.prototype.messages = {
- "fr": {
- },
- "en": {
- }
-};
+ static messages = {
+ fr: {},
+ en: {},
+ };
+
+ static template =
+ '<div class="Ldt-Renkan-Container"><div class="Ldt-Renkan"></div></div>';
-IriSP.Widgets.Renkan.prototype.template =
- '<div class="Ldt-Renkan-Container"><div class="Ldt-Renkan"></div></div>';
-
-IriSP.Widgets.Renkan.prototype.draw = function() {
- this.renderTemplate();
- var _id = IriSP.Model.getUID();
- this.$.find(".Ldt-Renkan").attr("id", _id);
- var renkan_options = IriSP._.extend({
- container: _id,
- editor_mode: false,
- show_bins: false,
- show_top_bar: false,
- force_resize: true,
- language: IriSP.language
- }, this.renkan_options);
- this.renkan = new Rkns.Renkan(renkan_options);
- this.node_times = [];
- var _this = this,
+ draw() {
+ this.messages
+this.messages
+this.messages
+this.messages
+this.messagesthis.renderTemplate();
+ var _id = ns.Model.getUID();
+ this.$.find(".Ldt-Renkan").attr("id", _id);
+ var renkan_options = _.extend(
+ {
+ container: _id,
+ editor_mode: false,
+ show_bins: false,
+ show_top_bar: false,
+ force_resize: true,
+ language: ns.language,
+ },
+ this.renkan_options
+ );
+ this.renkan = new Rkns.Renkan(renkan_options);
+ this.node_times = [];
+ var _this = this,
_list = this.getWidgetAnnotations();
- this.renkan.project.on("add:nodes", function(_node) {
+ this.renkan.project.on("add:nodes", function (_node) {
var _uri = _node.get("uri"),
- _annmatch = _uri.match(_this.annotation_regexp);
+ _annmatch = _uri.match(_this.annotation_regexp);
if (_annmatch) {
- var _annotations = _list.filter(function(_ann) {
- return _ann.getMedia().id == _annmatch[1] && _ann.id == _annmatch[2];
+ var _annotations = _list.filter(function (_ann) {
+ return (
+ _ann.getMedia().id == _annmatch[1] && _ann.id == _annmatch[2]
+ );
+ });
+ _annotations.forEach(function (_ann) {
+ var _duration = _ann.getDuration(),
+ _preroll =
+ +(_duration < _this.min_duration) * (_this.min_duration / 2);
+ var _nt = {
+ uri: _uri,
+ selected: false,
+ node: _node,
+ annotation: _ann,
+ begin: _ann.begin - _preroll,
+ end: _ann.end + _preroll,
+ };
+ _this.node_times.push(_nt);
+ var _annselected = false,
+ _nodeselected = false;
+ _ann.on("select", function () {
+ _annselected = true;
+ if (!_nodeselected) {
+ _node.trigger("select", true);
+ }
});
- _annotations.forEach(function(_ann) {
- var _duration = _ann.getDuration(),
- _preroll = + ( _duration < _this.min_duration ) * ( _this.min_duration / 2);
- var _nt = {
- uri: _uri,
- selected: false,
- node: _node,
- annotation: _ann,
- begin: _ann.begin - _preroll,
- end: _ann.end + _preroll
- };
- _this.node_times.push(_nt);
- var _annselected = false,
- _nodeselected = false;
- _ann.on("select", function() {
- _annselected = true;
- if (!_nodeselected) {
- _node.trigger("select",true);
- }
- });
- _node.on("selected", function() {
- _nodeselected = true;
- if (!_annselected) {
- _ann.trigger("select",true);
- }
- });
- _ann.on("unselect", function() {
- _annselected = false;
- if (_nodeselected) {
- _node.trigger("unselect",true);
- }
- });
- _node.on("unselected", function() {
- _nodeselected = false;
- _nt.selected = false;
- if (_annselected) {
- _ann.trigger("unselect",true);
- }
- });
- _node.on("clicked", function() {
- _ann.trigger("click");
- });
+ _node.on("selected", function () {
+ _nodeselected = true;
+ if (!_annselected) {
+ _ann.trigger("select", true);
+ }
+ });
+ _ann.on("unselect", function () {
+ _annselected = false;
+ if (_nodeselected) {
+ _node.trigger("unselect", true);
+ }
});
+ _node.on("unselected", function () {
+ _nodeselected = false;
+ _nt.selected = false;
+ if (_annselected) {
+ _ann.trigger("unselect", true);
+ }
+ });
+ _node.on("clicked", function () {
+ _ann.trigger("click");
+ });
+ });
}
var _tagmatch = _uri.match(_this.tag_regexp);
if (_tagmatch) {
- _node.on("select", function() {
- _this.source.getAnnotations().search(_tagmatch[1]);
- });
- _node.on("unselect", function() {
- _this.source.getAnnotations().search("");
- });
+ _node.on("select", function () {
+ _this.source.getAnnotations().search(_tagmatch[1]);
+ });
+ _node.on("unselect", function () {
+ _this.source.getAnnotations().search("");
+ });
}
- });
- Rkns.jsonIO(this.renkan, {
- url: this.data
- });
-
- this.onMediaEvent("timeupdate","onTimeupdate");
-
- this.$.find(".Rk-Editor").on("click", "a", function() {
+ });
+ Rkns.jsonIO(this.renkan, {
+ url: this.data,
+ });
+
+ this.onMediaEvent("timeupdate", "onTimeupdate");
+
+ this.$.find(".Rk-Editor").on("click", "a", function () {
var href = this.href,
- times = _this.node_times.filter(function(t) {
- return t.uri == href;
- });
+ times = _this.node_times.filter(function (t) {
+ return t.uri == href;
+ });
if (times.length) {
- IriSP._(times).each(function(t) {
- t.annotation.trigger("click");
- });
- return false;
+ _(times).each(function (t) {
+ t.annotation.trigger("click");
+ });
+ return false;
}
- });
+ });
+ }
+
+ onTimeupdate(_time) {
+ _(this.node_times).each(function (_nt) {
+ if (_nt.begin <= _time && _nt.end >= _time) {
+ if (!_nt.selected) {
+ _nt.selected = true;
+ _nt.node.trigger("select");
+ }
+ } else {
+ if (_nt.selected) {
+ _nt.node.trigger("unselect");
+ }
+ }
+ });
+ }
+ };
};
-IriSP.Widgets.Renkan.prototype.onTimeupdate = function(_time) {
- IriSP._(this.node_times).each(function(_nt) {
- if (_nt.begin <= _time && _nt.end >= _time) {
- if (!_nt.selected) {
- _nt.selected = true;
- _nt.node.trigger("select");
- }
- } else {
- if (_nt.selected) {
- _nt.node.trigger("unselect");
- }
- }
- });
-};
+export { Renkan, renkanStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Renkan.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,130 @@
+
+.Ldt-Renkan-Container {
+ position: relative; width: 100%; height: 100%;
+}
+
+.Ldt-Renkan a {
+ color: #303080;
+}
+
+
+.Rk-Main {
+ position: absolute; left: 0; top: 0; right: 0; bottom: 0;
+}
+
+.Rk-Render {
+ position: absolute; left: 0; top: 0; right: 0; bottom: 0;
+ background: #ffffff;
+}
+
+/* Canvas */
+
+.Rk-Editing-Space {
+ position: absolute; left: 0; top: 35px; right: 0; bottom: 0; overflow: hidden;
+ background: -moz-radial-gradient( center, circle, #ffffff 40%, #e0e0e0 90%);
+ background: -webkit-radial-gradient( center, circle, #ffffff 40%, #e0e0e0 90%);
+ background: -ms-radial-gradient( center, circle, #ffffff 40%, #e0e0e0 90%);
+}
+
+.Rk-Editing-Space-Full {
+ top: 0;
+}
+
+.Rk-Canvas {
+ position: absolute; left: 0; top: 0; right: 0; bottom: 0; z-index: 2;
+}
+
+/* Node Labels */
+
+.Rk-Labels {
+ position: absolute; left: 0; top: 0; z-index: 1;
+ font-family: "Segoe UI", "Helvetica Neue", Arial, Helvetica, sans-serif;
+}
+
+.Rk-Label {
+ position: absolute; width: 160px; margin-left: -80px; text-align: center; font-size: 13px; line-height: 13px;
+}
+
+.Rk-Edge-Label {
+ font-size: 11px; transform-origin: 50% 0; -moz-transform-origin: 50% 0;
+ -webkit-transform-origin: 50% 0; -ms-transform-origin: 50% 0;
+}
+
+/* Editors */
+
+.Rk-Editor {
+ position: absolute; left: 0; top: 0; z-index: 3;
+}
+
+.Rk-Notifications {
+ position: absolute; right: 15px; top: 15px; width: 200px;
+ padding: 10px; border-radius: 8px; display: none;
+ color: #ffffff; font-size: 13px; text-align: center; font-weight: bold;
+ background: rgba(20,20,20,.7);
+ background: -moz-linear-gradient(top, rgba(40,40,40,.7) 20%, rgba(0,0,0,.7) 80%);
+ background: -webkit-linear-gradient(top, rgba(40,40,40,.7) 20%, rgba(0,0,0,.7) 80%);
+ background: -ms-linear-gradient(top, rgba(40,40,40,.7) 20%, rgba(0,0,0,.7) 80%);
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#202020', endColorstr='#000000',GradientType=0 );
+}
+
+.Rk-CloseX {
+ float: right; cursor: pointer;
+}
+
+.Rk-Editor h2 {
+ font-size: 16px; font-weight: bold; padding: 0;
+}
+
+.Rk-Editor p, .Rk-Editor-p {
+ margin: 5px 0; font-size: 12px; clear: both; padding: 0;
+}
+
+.Rk-Editor-Label {
+ float: left; width: 80px;
+}
+
+.Rk-UserColor {
+ display: inline-block; width: 12px; height: 12px; border: 1px solid #666666; margin: -2px 2px;
+}
+
+.Rk-Display-Title a {
+ text-decoration: none; color: #000000;
+}
+
+.Rk-Display-Title a:hover {
+ text-decoration: underline;
+}
+
+.Rk-Display-URI {
+ font-style: italic;
+}
+
+.Rk-Display-ImgPreview {
+ margin: 5px auto; display: block; max-width: 255px !important; max-height: 120px !important;
+}
+
+
+.Rk-ZoomButtons {
+ position: absolute; left: 0; top: 35px; cursor: pointer;
+}
+
+.Rk-Editing-Space-Full .Rk-ZoomButtons {
+ top: 0;
+}
+
+.Rk-ZoomIn, .Rk-ZoomOut {
+ width: 21px; height: 20px; background: url(img/zoombuttons.png); margin: 5px;
+}
+
+.Rk-ZoomIn:hover {
+ background-position: 0 -20px;
+}
+
+.Rk-ZoomOut {
+ background-position: -21px 0;
+}
+
+.Rk-ZoomOut:hover {
+ background-position: -21px -20px;
+}
+
--- a/src/widgets/Segments.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-/*
- * Segments Widget
- */
-
-.Ldt-Segments-Segment {
- position: absolute; margin-left: -1px; border: 1px solid #ffffff;
-}
-
-.Ldt-Segments-Position {
- background: #fc00ff;
- position: absolute;
- top: -1px;
- left: 0;
- margin-left: -1px;
- width: 2px;
- bottom: -1px;
- z-index: 80000;
-}
\ No newline at end of file
--- a/src/widgets/Segments.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Segments.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,241 +1,315 @@
-// TODO: Trigger IriSP.SegmentsWidget.click
+// TODO: Trigger ns.SegmentsWidget.click
+import Mustache from "mustache";
+import _ from "lodash";
+import jQuery from "jquery";
-IriSP.Widgets.Segments = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+import segmentsStyles from "./Segments.module.css";
-IriSP.Widgets.Segments.prototype = new IriSP.Widgets.Widget();
+const Segments = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.Segments.prototype.defaults = {
- annotation_type : "chap",
- colors: ["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],
- line_height: 8,
- background: "#e0e0e0",
- overlap: .25,
- found_color: "#FF00FC",
- faded_found_color: "#ff80fc",
- selected_color: "#74d600",
- faded_selected_color: "#baf9b5",
- no_tooltip: false,
- use_timerange: false,
- scale_to_parent: true
-};
+ static defaults = {
+ annotation_type: "chap",
+ colors: [
+ "#1f77b4",
+ "#aec7e8",
+ "#ff7f0e",
+ "#ffbb78",
+ "#2ca02c",
+ "#98df8a",
+ "#d62728",
+ "#ff9896",
+ "#9467bd",
+ "#c5b0d5",
+ "#8c564b",
+ "#c49c94",
+ "#e377c2",
+ "#f7b6d2",
+ "#7f7f7f",
+ "#c7c7c7",
+ "#bcbd22",
+ "#dbdb8d",
+ "#17becf",
+ "#9edae5",
+ ],
+ line_height: 8,
+ background: "#e0e0e0",
+ overlap: 0.25,
+ found_color: "#FF00FC",
+ faded_found_color: "#ff80fc",
+ selected_color: "#74d600",
+ faded_selected_color: "#baf9b5",
+ no_tooltip: false,
+ use_timerange: false,
+ scale_to_parent: true,
+ };
-IriSP.Widgets.Segments.prototype.template =
- '<div class="Ldt-Segments-List"></div>'
- + '<div class="Ldt-Segments-Position"></div>'
- + '<div class="Ldt-Segments-Tooltip"></div>';
+ static template =
+ '<div class="Ldt-Segments-List"></div>' +
+ '<div class="Ldt-Segments-Position"></div>' +
+ '<div class="Ldt-Segments-Tooltip"></div>';
-IriSP.Widgets.Segments.prototype.annotationTemplate =
- '<div class="Ldt-Segments-Segment Ldt-TraceMe" trace-info="segment-id:{{id}}, media-id:{{media_id}}, from:{{from}}, to:{{to}}" segment-text="{{text}}"'
- + 'style="top:{{top}}px; height:{{height}}px; left:{{left}}px; width:{{width}}px; background:{{medcolor}}" data-base-color="{{color}}" data-low-color="{{lowcolor}}" data-medium-color="{{medcolor}}"></div>';
+ static annotationTemplate =
+ '<div class="Ldt-Segments-Segment Ldt-TraceMe" trace-info="segment-id:{{id}}, media-id:{{media_id}}, from:{{from}}, to:{{to}}" segment-text="{{text}}"' +
+ 'style="top:{{top}}px; height:{{height}}px; left:{{left}}px; width:{{width}}px; background:{{medcolor}}" data-base-color="{{color}}" data-low-color="{{lowcolor}}" data-medium-color="{{medcolor}}"></div>';
-
-IriSP.Widgets.Segments.prototype.do_draw = function (isRedraw) {
- if (this.width != this.$.parent().width() && this.scale_to_parent) {
+ do_draw(isRedraw) {
+ if (this.width != this.$.parent().width() && this.scale_to_parent) {
// Reset width
this.width = this.$.parent().width();
- this.$.css({ width : this.width + "px" });
- }
- var _this = this,
- _list = this.getWidgetAnnotations().filter(function(_ann) {
- return _ann.getDuration() > 0 && _ann.getMedia().id == _this.media.id;
+ this.$.css({ width: this.width + "px" });
+ }
+ var _this = this,
+ _list = this.getWidgetAnnotations().filter(function (_ann) {
+ return _ann.getDuration() > 0 && _ann.getMedia().id == _this.media.id;
}),
_scale = this.width / this.source.getDuration(),
- list_$ = this.$.find('.Ldt-Segments-List'),
+ list_$ = this.$.find(".Ldt-Segments-List"),
lines = [],
zindex = 1,
searching = false;
-
- function saturate(r, g, b, s) {
+
+ function saturate(r, g, b, s) {
function satcomp(c) {
- return Math.floor(240 * (1 - s) + c * s);
+ return Math.floor(240 * (1 - s) + c * s);
}
- var res = ( 0x10000 * satcomp(r) + 0x100 * satcomp(g) + satcomp(b)).toString(16);
+ var res = (
+ 0x10000 * satcomp(r) +
+ 0x100 * satcomp(g) +
+ satcomp(b)
+ ).toString(16);
while (res.length < 6) {
- res = "0" + res;
+ res = "0" + res;
}
return "#" + res;
- }
+ }
- if (isRedraw) {
+ if (isRedraw) {
// Remove all previous elements before recreating them. Not very efficient.
- this.$.find('.Ldt-Segments-Segment').remove();
- }
- _list.forEach(function(_annotation, _k) {
+ this.$.find(".Ldt-Segments-Segment").remove();
+ }
+ _list.forEach(function (_annotation, _k) {
var _left = _annotation.begin * _scale,
- _width = ( _annotation.getDuration() ) * _scale,
- _center = Math.floor( _left + _width / 2 ),
- _fulltext = _annotation.title + ( _annotation.description ? ( '<br/>' + _annotation.description ) : '' ),
- line = IriSP._(lines).find(function(line) {
- return !IriSP._(line.annotations).find(function(a) {
- return a.begin < _annotation.end && a.end > _annotation.begin;
- });
+ _width = _annotation.getDuration() * _scale,
+ _center = Math.floor(_left + _width / 2),
+ _fulltext =
+ _annotation.title +
+ (_annotation.description ? "<br/>" + _annotation.description : ""),
+ line = _(lines).find(function (line) {
+ return !_(line.annotations).find(function (a) {
+ return a.begin < _annotation.end && a.end > _annotation.begin;
});
+ });
if (!line) {
- line = { index: lines.length, annotations: []};
- lines.push(line);
+ line = { index: lines.length, annotations: [] };
+ lines.push(line);
}
line.annotations.push(_annotation);
- var _top = ((1 - _this.overlap) * line.index) * _this.line_height,
- color = ( typeof _annotation.color !== "undefined" && _annotation.color ? _annotation.color : _this.colors[_k % _this.colors.length] ),
- r = parseInt(color.substr(1,2),16),
- g = parseInt(color.substr(3,2),16),
- b = parseInt(color.substr(5,2),16),
- medcolor = saturate(r, g, b, .5),
- lowcolor = saturate(r, g, b, .2);
+ var _top = (1 - _this.overlap) * line.index * _this.line_height,
+ color =
+ typeof _annotation.color !== "undefined" && _annotation.color
+ ? _annotation.color
+ : _this.colors[_k % _this.colors.length],
+ r = parseInt(color.substr(1, 2), 16),
+ g = parseInt(color.substr(3, 2), 16),
+ b = parseInt(color.substr(5, 2), 16),
+ medcolor = saturate(r, g, b, 0.5),
+ lowcolor = saturate(r, g, b, 0.2);
var _data = {
- color : color,
- medcolor: medcolor,
- lowcolor: lowcolor,
- text: (_annotation.creator ? (_annotation.creator + " : ") : "" ) + _fulltext.replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{120,140})[\s].+$/m,'$1…'),
- left : _left,
- width : _width,
- top: _top,
- height: _this.line_height - 1,
- id : _annotation.id,
- media_id : _annotation.getMedia().id,
- from: _annotation.begin.toString(),
- to: _annotation.end.toString()
+ color: color,
+ medcolor: medcolor,
+ lowcolor: lowcolor,
+ text:
+ (_annotation.creator ? _annotation.creator + " : " : "") +
+ _fulltext
+ .replace(/(\n|\r|\r\n)/gm, " ")
+ .replace(/(^.{120,140})[\s].+$/m, "$1…"),
+ left: _left,
+ width: _width,
+ top: _top,
+ height: _this.line_height - 1,
+ id: _annotation.id,
+ media_id: _annotation.getMedia().id,
+ from: _annotation.begin.toString(),
+ to: _annotation.end.toString(),
};
- var _html = Mustache.to_html(_this.annotationTemplate, _data),
- _el = IriSP.jQuery(_html);
- _el.mouseover(function() {
- _annotation.trigger("select");
- })
- .mouseout(function() {
- _annotation.trigger("unselect");
- })
- .click(function() {
- if(_this.use_timerange){
- if(!_this.media.getTimeRange()){
- _this.media.setCurrentTime(_annotation.begin);
- _this.media.setTimeRange(_annotation.begin, _annotation.end);
- _this.media.play();
- _this.$segments.each(function(){
- var _segment = IriSP.jQuery(this);
- _segment.css("background", lowcolor).removeClass("selected");
- })
- _el.css("background", _this.selected_color).addClass("selected");
- }
- else if (_this.media.getTimeRange()[0]==_annotation.begin || _this.media.getTimeRange()[1]==_annotation.end){
- _this.media.resetTimeRange();
- _this.$segments.each(function(){
- var _segment = IriSP.jQuery(this);
- _segment.css("background", lowcolor).removeClass("selected");
- _annotation.trigger("select");
- })
- }
- else {
- _this.media.setCurrentTime(_annotation.begin);
- _this.media.setTimeRange(_annotation.begin, _annotation.end);
- _this.media.play();
- _this.$segments.each(function(){
- var _segment = IriSP.jQuery(this);
- _segment.css("background", lowcolor).removeClass("selected");
- })
- _el.css("background", _this.selected_color).addClass("selected");
- }
- }
- _annotation.trigger("click");
- })
- .appendTo(list_$);
- IriSP.attachDndData(_el, {
- title: _annotation.title,
- description: _annotation.description,
- uri: (typeof _annotation.url !== "undefined"
- ? _annotation.url
- : (document.location.href.replace(/#.*$/,'') + '#id=' + _annotation.id)),
- image: _annotation.thumbnail,
- text: '[' + _annotation.begin.toString() + '] ' + _annotation.title
+ var _html = Mustache.render(_this.constructor.annotationTemplate, _data),
+ _el = jQuery(_html);
+ _el
+ .on("mouseover", function () {
+ _annotation.trigger("select");
+ })
+ .on("mouseout", function () {
+ _annotation.trigger("unselect");
+ })
+ .on("click", function () {
+ if (_this.use_timerange) {
+ if (!_this.media.getTimeRange()) {
+ _this.media.setCurrentTime(_annotation.begin);
+ _this.media.setTimeRange(_annotation.begin, _annotation.end);
+ _this.media.play();
+ _this.$segments.each(function () {
+ var _segment = jQuery(this);
+ _segment.css("background", lowcolor).removeClass("selected");
+ });
+ _el
+ .css("background", _this.selected_color)
+ .addClass("selected");
+ } else if (
+ _this.media.getTimeRange()[0] == _annotation.begin ||
+ _this.media.getTimeRange()[1] == _annotation.end
+ ) {
+ _this.media.resetTimeRange();
+ _this.$segments.each(function () {
+ var _segment = jQuery(this);
+ _segment.css("background", lowcolor).removeClass("selected");
+ _annotation.trigger("select");
+ });
+ } else {
+ _this.media.setCurrentTime(_annotation.begin);
+ _this.media.setTimeRange(_annotation.begin, _annotation.end);
+ _this.media.play();
+ _this.$segments.each(function () {
+ var _segment = jQuery(this);
+ _segment.css("background", lowcolor).removeClass("selected");
+ });
+ _el
+ .css("background", _this.selected_color)
+ .addClass("selected");
+ }
+ }
+ _annotation.trigger("click");
+ })
+ .appendTo(list_$);
+ ns.attachDndData(_el, {
+ title: _annotation.title,
+ description: _annotation.description,
+ uri:
+ typeof _annotation.url !== "undefined"
+ ? _annotation.url
+ : document.location.href.replace(/#.*$/, "") +
+ "#id=" +
+ _annotation.id,
+ image: _annotation.thumbnail,
+ text: "[" + _annotation.begin.toString() + "] " + _annotation.title,
+ });
+ _annotation.on("select", function () {
+ _this.$segments.each(function () {
+ var _segment = jQuery(this);
+ _segment.css({
+ background: _segment.hasClass("found")
+ ? _this.faded_found_color
+ : _segment.attr("data-low-color"),
+ });
+ _segment.css({
+ background: _segment.hasClass("selected")
+ ? _this.faded_selected_color
+ : _segment.attr("data-low-color"),
+ });
+ });
+ _el.css({
+ background: _el.hasClass("found") ? _this.found_color : color,
+ background: _el.hasClass("selected") ? _this.selected_color : color,
+ "z-index": ++zindex,
+ });
+ if (_this.tooltip) {
+ _this.tooltip.show(_center, _top, _data.text, _data.color);
+ }
});
- _annotation.on("select", function() {
- _this.$segments.each(function() {
- var _segment = IriSP.jQuery(this);
- _segment.css({
- background: _segment.hasClass("found") ? _this.faded_found_color : _segment.attr("data-low-color")
- });
- _segment.css({
- background: _segment.hasClass("selected") ? _this.faded_selected_color : _segment.attr("data-low-color")
- })
- });
- _el.css({
- background: _el.hasClass("found") ? _this.found_color: color,
- background: _el.hasClass("selected") ? _this.selected_color: color,
- "z-index": ++zindex
- });
- if (_this.tooltip) {
- _this.tooltip.show( _center, _top, _data.text, _data.color );
- }
+ _annotation.on("unselect", function () {
+ if (_this.tooltip) {
+ _this.tooltip.hide();
+ }
+ _this.$segments.each(function () {
+ var _segment = jQuery(this);
+ _segment.css(
+ "background",
+ _segment.hasClass("found")
+ ? _this.found_color
+ : _segment.attr(
+ searching ? "data-low-color" : "data-medium-color"
+ )
+ );
+ _segment.css(
+ "background",
+ _segment.hasClass("selected")
+ ? _this.selected_color
+ : _segment.attr(
+ searching ? "data-low-color" : "data-medium-color"
+ )
+ );
+ });
+ });
+ _annotation.on("found", function () {
+ _el.css("background", _this.found_color).addClass("found");
+ });
+ _annotation.on("not-found", function () {
+ _el.css("background", lowcolor).removeClass("found");
+ });
+ });
+
+ this.onMediaEvent("resettimerange", function () {
+ _this.$segments.each(function () {
+ var _segment = jQuery(this);
+ _segment.removeClass("selected");
});
- _annotation.on("unselect", function() {
- if (_this.tooltip) {
- _this.tooltip.hide();
- }
- _this.$segments.each(function() {
- var _segment = IriSP.jQuery(this);
- _segment.css("background", _segment.hasClass("found") ? _this.found_color : _segment.attr(searching ? "data-low-color" : "data-medium-color"));
- _segment.css("background", _segment.hasClass("selected") ? _this.selected_color : _segment.attr(searching ? "data-low-color" : "data-medium-color"));
- });
- });
- _annotation.on("found", function() {
- _el.css("background", _this.found_color).addClass("found");
- });
- _annotation.on("not-found", function() {
- _el.css("background", lowcolor).removeClass("found");
+ });
+
+ this.$.css({
+ width: this.width + "px",
+ height:
+ ((1 - this.overlap) * lines.length + this.overlap) *
+ this.line_height +
+ "px",
+ background: this.background,
+ margin: "1px 0",
+ });
+ this.$segments = this.$.find(".Ldt-Segments-Segment");
+ }
+
+ draw() {
+ var widget = this;
+ widget.onMediaEvent("timeupdate", "onTimeupdate");
+ widget.renderTemplate();
+ widget.do_draw();
+ if (!this.no_tooltip) {
+ widget.insertSubwidget(
+ widget.$.find(".Ldt-Segments-Tooltip"),
+ {
+ type: "Tooltip",
+ min_x: 0,
+ max_x: this.width,
+ },
+ "tooltip"
+ );
+ }
+ widget.source.getAnnotations().on("search", function () {
+ searching = true;
+ });
+ widget.source.getAnnotations().on("search-cleared", function () {
+ searching = false;
+ _this.$segments.each(function () {
+ var _segment = jQuery(this);
+ _segment
+ .css("background", _segment.attr("data-medium-color"))
+ .removeClass("found");
});
- });
-
- this.onMediaEvent("resettimerange", function(){
-
- _this.$segments.each(function(){
- var _segment = IriSP.jQuery(this);
- _segment.removeClass("selected");
- })
- });
-
- this.$.css({
- width : this.width + "px",
- height : (((1 - this.overlap) * lines.length + this.overlap) * this.line_height) + "px",
- background : this.background,
- margin: "1px 0"
- });
- this.$segments = this.$.find('.Ldt-Segments-Segment');
+ });
+ this.$.on("resize", function () {
+ widget.do_draw(true);
+ });
+ }
+
+ onTimeupdate(_time) {
+ var _x = Math.floor((this.width * _time) / this.media.duration);
+ this.$.find(".Ldt-Segments-Position").css({
+ left: _x + "px",
+ });
+ }
+ };
};
-IriSP.Widgets.Segments.prototype.draw = function() {
- var widget = this;
- widget.onMediaEvent("timeupdate", "onTimeupdate");
- widget.renderTemplate();
- widget.do_draw();
- if (!this.no_tooltip) {
- widget.insertSubwidget(
- widget.$.find(".Ldt-Segments-Tooltip"),
- {
- type: "Tooltip",
- min_x: 0,
- max_x: this.width
- },
- "tooltip"
- );
- };
- widget.source.getAnnotations().on("search", function() {
- searching = true;
- });
- widget.source.getAnnotations().on("search-cleared", function() {
- searching = false;
- _this.$segments.each(function() {
- var _segment = IriSP.jQuery(this);
- _segment.css("background", _segment.attr("data-medium-color")).removeClass("found");
- });
- });
- this.$.on("resize", function () { widget.do_draw(true); });
-};
-
-IriSP.Widgets.Segments.prototype.onTimeupdate = function(_time) {
- var _x = Math.floor( this.width * _time / this.media.duration);
- this.$.find('.Ldt-Segments-Position').css({
- left: _x + "px"
- });
-};
-
+export { Segments, segmentsStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Segments.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,18 @@
+/*
+ * Segments Widget
+ */
+
+.Ldt-Segments-Segment {
+ position: absolute; margin-left: -1px; border: 1px solid #ffffff;
+}
+
+.Ldt-Segments-Position {
+ background: #fc00ff;
+ position: absolute;
+ top: -1px;
+ left: 0;
+ margin-left: -1px;
+ width: 2px;
+ bottom: -1px;
+ z-index: 80000;
+}
\ No newline at end of file
--- a/src/widgets/Shortcuts.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-/* Empty file */
--- a/src/widgets/Shortcuts.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Shortcuts.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,64 +1,83 @@
-IriSP.Widgets.Shortcuts = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+import shortcutsStyles from "./Shortcuts.module.css";
-/**
- * Keyboard shortcuts widget
- * This widgets add global shortcuts for common actions.
- * The default shortcuts are:
- * - Control-space for play/pause
- * - Control-left for rewind (+shift to go faster)
- * - Control-right for forward (+shift to go faster)
- */
-IriSP.Widgets.Shortcuts.prototype = new IriSP.Widgets.Widget();
+const Shortcuts = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.Shortcuts.prototype.defaults = {
- // Time increment, in ms, for backward/forward navigation
- time_increment: 2000
-}
+ /**
+ * Keyboard shortcuts widget
+ * This widgets add global shortcuts for common actions.
+ * The default shortcuts are:
+ * - Control-space for play/pause
+ * - Control-left for rewind (+shift to go faster)
+ * - Control-right for forward (+shift to go faster)
+ */
+ static defaults = {
+ // Time increment, in ms, for backward/forward navigation
+ time_increment: 2000,
+ };
-IriSP.Widgets.Shortcuts.prototype.draw = function() {
- var _this = this;
-
- /* Standard shortcuts */
- Mousetrap.bindGlobal("ctrl+space", function (e) {
+ draw() {
+ var _this = this;
+
+ /* Standard shortcuts */
+ Mousetrap.bindGlobal("ctrl+space", function (e) {
e.preventDefault();
- if (! _this.media.getPaused()) {
- _this.media.pause();
+ if (!_this.media.getPaused()) {
+ _this.media.pause();
} else {
- _this.media.play();
+ _this.media.play();
}
return false;
- });
- Mousetrap.bindGlobal("ctrl+left", function (e) {
+ });
+ Mousetrap.bindGlobal("ctrl+left", function (e) {
// Backward
e.preventDefault();
- _this.media.setCurrentTime(Math.max(0, _this.media.getCurrentTime() - _this.time_increment));
+ _this.media.setCurrentTime(
+ Math.max(0, _this.media.getCurrentTime() - _this.time_increment)
+ );
return false;
- });
- Mousetrap.bindGlobal("ctrl+shift+left", function (e) {
+ });
+ Mousetrap.bindGlobal("ctrl+shift+left", function (e) {
// Backward
e.preventDefault();
- _this.media.setCurrentTime(Math.max(0, _this.media.getCurrentTime() - 5 * _this.time_increment));
+ _this.media.setCurrentTime(
+ Math.max(0, _this.media.getCurrentTime() - 5 * _this.time_increment)
+ );
return false;
- });
- Mousetrap.bindGlobal("ctrl+right", function (e) {
+ });
+ Mousetrap.bindGlobal("ctrl+right", function (e) {
// Forward
e.preventDefault();
- _this.media.setCurrentTime(Math.min(_this.media.duration, _this.media.getCurrentTime() + _this.time_increment));
+ _this.media.setCurrentTime(
+ Math.min(
+ _this.media.duration,
+ _this.media.getCurrentTime() + _this.time_increment
+ )
+ );
return false;
- });
- Mousetrap.bindGlobal("ctrl+shift+right", function (e) {
+ });
+ Mousetrap.bindGlobal("ctrl+shift+right", function (e) {
// Forward
e.preventDefault();
- _this.media.setCurrentTime(Math.min(_this.media.duration, _this.media.getCurrentTime() + 5 * _this.time_increment));
+ _this.media.setCurrentTime(
+ Math.min(
+ _this.media.duration,
+ _this.media.getCurrentTime() + 5 * _this.time_increment
+ )
+ );
return false;
- });
- Mousetrap.bindGlobal("ctrl+a", function (e) {
+ });
+ Mousetrap.bindGlobal("ctrl+a", function (e) {
// Annotate
e.preventDefault();
_this.player.trigger("CreateAnnotation.toggle");
return false;
- });
+ });
+ }
+ };
+};
-};
+export { Shortcuts, shortcutsStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Shortcuts.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,1 @@
+/* Empty file */
--- a/src/widgets/Slice.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-/* Slider Widget */
-
-.Ldt-Slice {
- border-radius: 0; border: none; padding: 0; margin: 12px 0 12px; background: #B6B8B8; height: 8px;
-}
-
-.Ldt-Slice .ui-slider-handle {
- width: 7px; height: 20px; top: 0; border: none; margin: 0; padding: 0;
- background: url(img/slice-handles.png); border-radius: 0; cursor: pointer;
-}
-
-.ui-slider-handle.Ldt-Slice-left-handle {
- margin-left: -7px;
-}
-
-.ui-slider-handle.Ldt-Slice-right-handle {
- margin-left: 0; background-position: -7px 0;
-}
-
-.Ldt-Slice .ui-slider-range {
- background: url(img/pinstripe-purple.png);
-}
-
--- a/src/widgets/Slice.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Slice.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,23 +1,24 @@
/*
The Slider Widget shows time position and allows seek
*/
+import sliceStyles from "./Slice.module.css";
-IriSP.Widgets.Slice = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
+const Slice = function(ns) {
+ return class extends ns.Widgets.Widget {
+constructor(player, config) {
+ super(player, config);
this.sliding = false;
};
-IriSP.Widgets.Slice.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.Slice.prototype.defaults = {
+static defaults = {
show_arrow: false
};
-IriSP.Widgets.Slice.prototype.template =
+static template =
'<div class="Ldt-Slice"></div>'
+ '{{#show_arrow}}<div class="Ldt-Slice-Arrow"></div>{{/show_arrow}}';
-IriSP.Widgets.Slice.prototype.draw = function() {
+draw() {
this.renderTemplate();
@@ -75,14 +76,18 @@
});
};
-IriSP.Widgets.Slice.prototype.setBounds = function(begin, end) {
+setBounds(begin, end) {
this.$slider.slider("values", [ begin, end ]);
};
-IriSP.Widgets.Slice.prototype.show = function() {
+show() {
this.$slider.show();
};
-IriSP.Widgets.Slice.prototype.hide = function() {
+hide() {
this.$slider.hide();
};
+
+ }}
+
+export { Slice, sliceStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Slice.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,23 @@
+/* Slider Widget */
+
+.Ldt-Slice {
+ border-radius: 0; border: none; padding: 0; margin: 12px 0 12px; background: #B6B8B8; height: 8px;
+}
+
+.Ldt-Slice .ui-slider-handle {
+ width: 7px; height: 20px; top: 0; border: none; margin: 0; padding: 0;
+ background: url(img/slice-handles.png); border-radius: 0; cursor: pointer;
+}
+
+.ui-slider-handle.Ldt-Slice-left-handle {
+ margin-left: -7px;
+}
+
+.ui-slider-handle.Ldt-Slice-right-handle {
+ margin-left: 0; background-position: -7px 0;
+}
+
+.Ldt-Slice .ui-slider-range {
+ background: url(img/pinstripe-purple.png);
+}
+
--- a/src/widgets/SlidePreview.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-.Ldt-SlidePreview-Container {
- background-color: #999;
- left: 0px;
- right: 0px;
- height: 36px;
- padding-left: 4px;
- overflow: hidden;
-}
-.Ldt-SlidePreview-Slides {
- display: -webkit-inline-flex;
- display: inline-flex;
- -webkit-flex-direction: row;
- flex-direction: row;
- -webkit-flex-wrap: nowrap;
- flex-wrap: nowrap;
- overflow-x: hidden;
- left: 0px;
- right: 0px;
- height: 36px;
- padding: 0;
- padding-top: 12px;
- margin: 0;
- overflow-y: hidden;
-}
-.Ldt-SlidePreview-Item {
- display: inline-block;
- width: 20px;
- height: 12px;
- background-color: #fff;
- transition: transform .2s ease-in-out;
-}
-.Ldt-SlidePreview-Item img {
- max-width: 100%;
- max-height: 100%;
-}
-.Ldt-SlidePreview-Item:hover {
- -webkit-transform: scale(2.8);
- z-index: 4;
-}
-.Ldt-SlidePreview-Item:hover + .slidepreviewitem {
- -webkit-transform: scale(1.8);
- z-index: 1;
-}
--- a/src/widgets/SlidePreview.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/SlidePreview.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,38 +1,50 @@
-IriSP.Widgets.SlidePreview = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-}
+import Mustache from "mustache";
+import slidePreviewStyles from "./SlidePreview.module.css";
+import jQuery from "jquery";
-IriSP.Widgets.SlidePreview.prototype = new IriSP.Widgets.Widget();
+const SlidePreview = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.SlidePreview.prototype.defaults = {
- annotation_type: "Slides"
-}
+ static defaults = {
+ annotation_type: "Slides",
+ };
+
+ static template =
+ '<div class="Ldt-SlidePreview-Container"><div class="Ldt-SlidePreview-Slides"></div></div>';
-IriSP.Widgets.SlidePreview.prototype.template = '<div class="Ldt-SlidePreview-Container"><div class="Ldt-SlidePreview-Slides"></div></div>';
+ static annotationTemplate =
+ '<div data-id="{{ id }}" data-timecode="{{ ms }}" class="Ldt-SlidePreview-Item"><img title="{{ begin }} - {{ atitle }}" class="Ldt-AnnotationsList-Thumbnail" src="{{ thumbnail }}"></div>';
-IriSP.Widgets.SlidePreview.prototype.annotationTemplate = '<div data-id="{{ id }}" data-timecode="{{ ms }}" class="Ldt-SlidePreview-Item"><img title="{{ begin }} - {{ atitle }}" class="Ldt-AnnotationsList-Thumbnail" src="{{ thumbnail }}"></div>';
-
-IriSP.Widgets.SlidePreview.prototype.draw = function() {
- var _annotations = this.getWidgetAnnotations().sortBy(function(_annotation) {
+ draw() {
+ var _annotations = this.getWidgetAnnotations().sortBy(function (
+ _annotation
+ ) {
return _annotation.begin;
- });
- var _this = this;
- _this.renderTemplate();
- var content = _this.$.find('.Ldt-SlidePreview-Slides');
+ });
+ var _this = this;
+ _this.renderTemplate();
+ var content = _this.$.find(".Ldt-SlidePreview-Slides");
- this.getWidgetAnnotations().forEach(function(_a) {
+ this.getWidgetAnnotations().forEach(function (_a) {
var _data = {
- id : _a.id,
- content : IriSP.textFieldHtml(_a.title),
- begin : _a.begin.toString(),
- ms: _a.begin.milliseconds,
- thumbnail: _a.thumbnail
- };
- var _html = Mustache.to_html(_this.annotationTemplate, _data);
- var _el = IriSP.jQuery(_html);
+ id: _a.id,
+ content: ns.textFieldHtml(_a.title),
+ begin: _a.begin.toString(),
+ ms: _a.begin.milliseconds,
+ thumbnail: _a.thumbnail,
+ };
+ var _html = Mustache.render(_this.annotationTemplate, _data);
+ var _el = jQuery(_html);
content.append(_el);
- });
- _this.$.on("click", ".Ldt-SlidePreview-Item", function () {
+ });
+ _this.$.on("click", ".Ldt-SlidePreview-Item", function () {
_this.media.setCurrentTime(Number(this.dataset.timecode));
- });
+ });
+ }
+ };
};
+
+export { SlidePreview, slidePreviewStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/SlidePreview.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,43 @@
+.Ldt-SlidePreview-Container {
+ background-color: #999;
+ left: 0px;
+ right: 0px;
+ height: 36px;
+ padding-left: 4px;
+ overflow: hidden;
+}
+.Ldt-SlidePreview-Slides {
+ display: -webkit-inline-flex;
+ display: inline-flex;
+ -webkit-flex-direction: row;
+ flex-direction: row;
+ -webkit-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ overflow-x: hidden;
+ left: 0px;
+ right: 0px;
+ height: 36px;
+ padding: 0;
+ padding-top: 12px;
+ margin: 0;
+ overflow-y: hidden;
+}
+.Ldt-SlidePreview-Item {
+ display: inline-block;
+ width: 20px;
+ height: 12px;
+ background-color: #fff;
+ transition: transform .2s ease-in-out;
+}
+.Ldt-SlidePreview-Item img {
+ max-width: 100%;
+ max-height: 100%;
+}
+.Ldt-SlidePreview-Item:hover {
+ -webkit-transform: scale(2.8);
+ z-index: 4;
+}
+.Ldt-SlidePreview-Item:hover + .slidepreviewitem {
+ -webkit-transform: scale(1.8);
+ z-index: 1;
+}
--- a/src/widgets/SlideVideoPlayer.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-.Ldt-SlideVideoPlayer-panel {
- display: -webkit-flex;
- display: flex;
- width: 50%;
- float: left;
-}
-
-.Ldt-SlideVideoPlayer {
- width: 100%;
- max-width: 100%;
- height: 100%;
- max-height: 100%;
-}
-
-.Ldt-SlideVideoPlayer-pip-main {
- position: relative;
- width: 100%;
- height: 100%;
- top: 0px;
- left: 0px;
- right: 0px;
- bottom: 0px;
- z-index: 1;
-}
-
-.Ldt-SlideVideoPlayer-pip-pip {
- position: absolute;
- width: 30%;
- height: 30%;
- right: 2px;
- bottom: 2px;
- z-index: 3;
-}
-
-.Ldt-SlideVideoPlayer h2 {
- display: none;
-}
-.Ldt-SlideVideoPlayer-pip-menu {
- position: absolute;
- top: 0px;
- right: 0px;
- z-index: 10;
- display: none;
-}
-.Ldt-SlideVideoPlayer-pip-pip:hover .Ldt-SlideVideoPlayer-pip-menu {
- background-color: #000;
- opacity: .5;
- display: inline-block;
-}
-
-.Ldt-SlideVideoPlayer-pip-menu-toggle {
- width: 18px;
- height: 18px;
- cursor: pointer;
- background-image: url(img/pip_toggle.svg);
-}
--- a/src/widgets/SlideVideoPlayer.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/SlideVideoPlayer.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,86 +1,112 @@
-IriSP.Widgets.SlideVideoPlayer = function(player, config) {
- IriSP.loadCss(IriSP.getLib("cssSplitter"));
- IriSP.Widgets.Widget.call(this, player, config);
-};
+import slideVideoPlayerStyles from "./SlideVideoPlayer.module.css";
-IriSP.Widgets.SlideVideoPlayer.prototype = new IriSP.Widgets.Widget();
-
+const SlideVideoPlayer = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ //IriSP.loadCss(IriSP.getLib("cssSplitter"));
+ super(player, config);
+ }
-IriSP.Widgets.SlideVideoPlayer.prototype.defaults = {
- playerModule: "HtmlPlayer",
- // mode is either "sidebyside" or "pip"
- mode: "sidebyside"
-};
+ static defaults = {
+ playerModule: "HtmlPlayer",
+ // mode is either "sidebyside" or "pip"
+ mode: "sidebyside",
+ };
-IriSP.Widgets.SlideVideoPlayer.prototype.template = '<div class="Ldt-SlideVideoPlayer">\
+ template =
+ '<div class="Ldt-SlideVideoPlayer">\
<div class="Ldt-SlideVideoPlayer-slide Ldt-SlideVideoPlayer-panel">\
</div>\
<div class="Ldt-SlideVideoPlayer-video Ldt-SlideVideoPlayer-panel">\
</div>\
</div>';
-IriSP.Widgets.SlideVideoPlayer.prototype.draw = function() {
- var _this = this;
+ draw() {
+ var _this = this;
- _this.renderTemplate();
- this.insertSubwidget(
+ _this.renderTemplate();
+ this.insertSubwidget(
_this.$.find(".Ldt-SlideVideoPlayer-panel.Ldt-SlideVideoPlayer-slide"),
- {
- type: "ImageDisplay",
- annotation_type: _this.annotation_type
- },
- "slide"
- );
- this.insertSubwidget(
+ {
+ type: "ImageDisplay",
+ annotation_type: _this.annotation_type,
+ },
+ "slide"
+ );
+ this.insertSubwidget(
_this.$.find(".Ldt-SlideVideoPlayer-panel.Ldt-SlideVideoPlayer-video"),
- {
- type: _this.playerModule,
- video: _this.video,
- width: '100%',
- url_transform: _this.url_transform
- },
- "player"
- );
+ {
+ type: _this.playerModule,
+ video: _this.video,
+ width: "100%",
+ url_transform: _this.url_transform,
+ },
+ "player"
+ );
- if (_this.mode == 'pip') {
- _this.$.find(".Ldt-SlideVideoPlayer-panel").append('<div class="Ldt-SlideVideoPlayer-pip-menu"><div class="Ldt-SlideVideoPlayer-pip-menu-toggle"></div></div>');
- _this.$.on("click", ".Ldt-SlideVideoPlayer-pip-menu-toggle", function () {
+ if (_this.mode == "pip") {
+ _this.$.find(".Ldt-SlideVideoPlayer-panel").append(
+ '<div class="Ldt-SlideVideoPlayer-pip-menu"><div class="Ldt-SlideVideoPlayer-pip-menu-toggle"></div></div>'
+ );
+ _this.$.on(
+ "click",
+ ".Ldt-SlideVideoPlayer-pip-menu-toggle",
+ function () {
_this.toggleMainDisplay();
- });
+ }
+ );
window.setTimeout(function () {
- _this.setMainDisplay('video');
+ _this.setMainDisplay("video");
}, 1500);
- } else {
+ } else {
// Default : side by side
// FIXME: this should be better implemented through a signal sent
// when widgets are ready (and not just loaded)
window.setTimeout(function () {
- _this.$.find(".Ldt-SlideVideoPlayer").touchSplit({ orientation: (screen.height > screen.width) ? 'vertical' : 'horizontal',
- leftMin: 20,
- topMin: 20
- });
+ _this.$.find(".Ldt-SlideVideoPlayer").touchSplit({
+ orientation:
+ screen.height > screen.width ? "vertical" : "horizontal",
+ leftMin: 20,
+ topMin: 20,
+ });
}, 1500);
+ }
}
-};
-IriSP.Widgets.SlideVideoPlayer.prototype.toggleMainDisplay = function() {
- if (this.$.find(".Ldt-SlideVideoPlayer-panel.Ldt-SlideVideoPlayer-video").hasClass("Ldt-SlideVideoPlayer-pip-main")) {
- this.setMainDisplay('slides');
- } else {
- this.setMainDisplay('video');
+ toggleMainDisplay() {
+ if (
+ this.$.find(
+ ".Ldt-SlideVideoPlayer-panel.Ldt-SlideVideoPlayer-video"
+ ).hasClass("Ldt-SlideVideoPlayer-pip-main")
+ ) {
+ this.setMainDisplay("slides");
+ } else {
+ this.setMainDisplay("video");
+ }
}
-};
-// Set main display (in case of a "switch" display mode)
-// main is either 'video' or 'slides'
-IriSP.Widgets.SlideVideoPlayer.prototype.setMainDisplay = function(video_or_slides) {
- var main = this.$.find(".Ldt-SlideVideoPlayer-panel.Ldt-SlideVideoPlayer-video");
- var pip = this.$.find(".Ldt-SlideVideoPlayer-panel.Ldt-SlideVideoPlayer-slide");
- if (video_or_slides == 'slides') {
+ // Set main display (in case of a "switch" display mode)
+ // main is either 'video' or 'slides'
+ setMainDisplay(video_or_slides) {
+ var main = this.$.find(
+ ".Ldt-SlideVideoPlayer-panel.Ldt-SlideVideoPlayer-video"
+ );
+ var pip = this.$.find(
+ ".Ldt-SlideVideoPlayer-panel.Ldt-SlideVideoPlayer-slide"
+ );
+ if (video_or_slides == "slides") {
var temp = main;
main = pip;
pip = temp;
- };
- main.removeClass('Ldt-SlideVideoPlayer-pip-pip').addClass('Ldt-SlideVideoPlayer-pip-main');
- pip.removeClass('Ldt-SlideVideoPlayer-pip-main').addClass('Ldt-SlideVideoPlayer-pip-pip');
-}
+ }
+ main
+ .removeClass("Ldt-SlideVideoPlayer-pip-pip")
+ .addClass("Ldt-SlideVideoPlayer-pip-main");
+ pip
+ .removeClass("Ldt-SlideVideoPlayer-pip-main")
+ .addClass("Ldt-SlideVideoPlayer-pip-pip");
+ }
+ };
+};
+
+export { SlideVideoPlayer, slideVideoPlayerStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/SlideVideoPlayer.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,56 @@
+.Ldt-SlideVideoPlayer-panel {
+ display: -webkit-flex;
+ display: flex;
+ width: 50%;
+ float: left;
+}
+
+.Ldt-SlideVideoPlayer {
+ width: 100%;
+ max-width: 100%;
+ height: 100%;
+ max-height: 100%;
+}
+
+.Ldt-SlideVideoPlayer-pip-main {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ top: 0px;
+ left: 0px;
+ right: 0px;
+ bottom: 0px;
+ z-index: 1;
+}
+
+.Ldt-SlideVideoPlayer-pip-pip {
+ position: absolute;
+ width: 30%;
+ height: 30%;
+ right: 2px;
+ bottom: 2px;
+ z-index: 3;
+}
+
+.Ldt-SlideVideoPlayer h2 {
+ display: none;
+}
+.Ldt-SlideVideoPlayer-pip-menu {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ z-index: 10;
+ display: none;
+}
+.Ldt-SlideVideoPlayer-pip-pip:hover .Ldt-SlideVideoPlayer-pip-menu {
+ background-color: #000;
+ opacity: .5;
+ display: inline-block;
+}
+
+.Ldt-SlideVideoPlayer-pip-menu-toggle {
+ width: 18px;
+ height: 18px;
+ cursor: pointer;
+ background-image: url(img/pip_toggle.svg);
+}
--- a/src/widgets/Slider.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/* Slider Widget */
-
-.Ldt-Slider {
- border: none;
- border-radius: 0;
- padding: 0;
- margin: 0;
- background: #B6B8B8;
-}
-
-.Ldt-Slider .ui-slider-handle {
- border-radius: 8px;
- top: -2px;
- background: #fc00ff;
- border: 1px solid #ffffff;
-}
-
-.Ldt-Slider .ui-slider-range {
- background: #747474;
-}
-
-.Ldt-Slider-Time {
- position: absolute;
- bottom: 32px;
- background: #ffffc0;
- color: #000000;
- border-radius: 3px;
- z-index: 8;
- font-size: 10px;
- width: 34px;
- border: 1px solid #999999;
- padding: 1px;
- margin-left: -20px;
- display: none;
- text-align: center;
- font-weight: bold;
- pointer-events: none;
-}
--- a/src/widgets/Slider.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Slider.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,133 +1,139 @@
/*
The Slider Widget fits right under the video
*/
-
-IriSP.Widgets.Slider = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
-
-IriSP.Widgets.Slider.prototype = new IriSP.Widgets.Widget();
+import sliderStyles from "./Slider.module.css";
+import jQuery from "jquery";
-IriSP.Widgets.Slider.prototype.defaults = {
- minimized_height : 4,
- maximized_height : 4,
- minimize_timeout : 1500 /* time before minimizing slider after mouseout,
- set to zero for fixed slider */
-};
+const Slider = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.Slider.prototype.template =
- '<div class="Ldt-Slider"></div><div class="Ldt-Slider-Time">00:00</div>';
+ static defaults = {
+ minimized_height: 4,
+ maximized_height: 4,
+ minimize_timeout: 1500 /* time before minimizing slider after mouseout,
+ set to zero for fixed slider */,
+ };
-IriSP.Widgets.Slider.prototype.draw = function() {
-
- this.renderTemplate();
+ static template =
+ '<div class="Ldt-Slider"></div><div class="Ldt-Slider-Time">00:00</div>';
- this.$time = this.$.find(".Ldt-Slider-Time");
+ draw() {
+ this.renderTemplate();
- this.$slider = this.$.find(".Ldt-Slider");
+ this.$time = this.$.find(".Ldt-Slider-Time");
- var _this = this;
+ this.$slider = this.$.find(".Ldt-Slider");
- this.$slider.slider({
+ var _this = this;
+
+ this.$slider.slider({
range: "min",
value: 0,
min: 0,
max: this.source.getDuration().milliseconds,
- slide: function(event, ui) {
- _this.media.setCurrentTime(ui.value);
- _this.player.trigger("Mediafragment.setHashToTime");
- }
- });
+ slide: function (event, ui) {
+ _this.media.setCurrentTime(ui.value);
+ _this.player.trigger("Mediafragment.setHashToTime");
+ },
+ });
- this.$handle = this.$slider.find('.ui-slider-handle');
+ this.$handle = this.$slider.find(".ui-slider-handle");
- this.onMediaEvent("timeupdate","onTimeupdate");
- this.onMdpEvent("Player.MouseOver","onMouseover");
- this.onMdpEvent("Player.MouseOut","onMouseout");
+ this.onMediaEvent("timeupdate", "onTimeupdate");
+ this.onMdpEvent("Player.MouseOver", "onMouseover");
+ this.onMdpEvent("Player.MouseOut", "onMouseout");
- if (this.minimize_timeout) {
+ if (this.minimize_timeout) {
this.$slider.css(this.calculateSliderCss(this.minimized_height));
this.$handle.css(this.calculateHandleCss(this.minimized_height));
this.maximized = false;
this.timeoutId = false;
- }
+ }
- this.$slider
- .mouseover(function() {
- _this.$time.show();
- _this.onMouseover();
+ this.$slider
+ .mouseover(function () {
+ _this.$time.show();
+ _this.onMouseover();
})
.mouseout(this.functionWrapper("onMouseout"))
- .mousemove(function(_e) {
- var _x = _e.pageX - _this.$.offset().left,
- _t = new IriSP.Model.Time(_this.media.duration * _x / _this.width);
- _this.$time.text(_t.toString()).css("left",_x);
+ .mousemove(function (_e) {
+ var _x = _e.pageX - _this.$.offset().left,
+ _t = new ns.Model.Time((_this.media.duration * _x) / _this.width);
+ _this.$time.text(_t.toString()).css("left", _x);
});
-};
+ }
-IriSP.Widgets.Slider.prototype.onTimeupdate = function(_time) {
- this.$slider.slider("value",_time);
- this.player.trigger("Arrow.updatePosition",{widget: this.type, time: _time});
-};
+ onTimeupdate(_time) {
+ this.$slider.slider("value", _time);
+ this.player.trigger("Arrow.updatePosition", {
+ widget: this.type,
+ time: _time,
+ });
+ }
-IriSP.Widgets.Slider.prototype.onMouseover = function() {
- if (this.minimize_timeout) {
+ onMouseover() {
+ if (this.minimize_timeout) {
if (this.timeoutId) {
- window.clearTimeout(this.timeoutId);
- this.timeoutId = false;
+ window.clearTimeout(this.timeoutId);
+ this.timeoutId = false;
}
if (!this.maximized) {
- this.animateToHeight(this.maximized_height);
- this.maximized = true;
+ this.animateToHeight(this.maximized_height);
+ this.maximized = true;
+ }
+ }
+ }
+
+ onMouseout() {
+ this.$time.hide();
+ if (this.minimize_timeout) {
+ if (this.timeoutId) {
+ window.clearTimeout(this.timeoutId);
+ this.timeoutId = false;
}
+ var _this = this;
+ this.timeoutId = window.setTimeout(function () {
+ if (_this.maximized) {
+ _this.animateToHeight(_this.minimized_height);
+ _this.maximized = false;
+ }
+ _this.timeoutId = false;
+ }, this.minimize_timeout);
+ }
}
+
+ animateToHeight(_height) {
+ this.$slider
+ .stop()
+ .animate(this.calculateSliderCss(_height), 500, function () {
+ jQuery(this).css("overflow", "visible");
+ });
+ this.$handle
+ .stop()
+ .animate(this.calculateHandleCss(_height), 500, function () {
+ jQuery(this).css("overflow", "visible");
+ });
+ }
+
+ calculateSliderCss(_size) {
+ return {
+ height: _size + "px",
+ "margin-top": this.minimized_height - _size + "px",
+ };
+ }
+
+ calculateHandleCss = function (_size) {
+ return {
+ height: 2 + _size + "px",
+ width: 2 + _size + "px",
+ "margin-left": -Math.ceil(2 + _size / 2) + "px",
+ };
+ };
+ };
};
-IriSP.Widgets.Slider.prototype.onMouseout = function() {
- this.$time.hide();
- if (this.minimize_timeout) {
- if (this.timeoutId) {
- window.clearTimeout(this.timeoutId);
- this.timeoutId = false;
- }
- var _this = this;
- this.timeoutId = window.setTimeout(function() {
- if (_this.maximized) {
- _this.animateToHeight(_this.minimized_height);
- _this.maximized = false;
- }
- _this.timeoutId = false;
- }, this.minimize_timeout);
- }
-};
-
-IriSP.Widgets.Slider.prototype.animateToHeight = function(_height) {
- this.$slider.stop().animate(
- this.calculateSliderCss(_height),
- 500,
- function() {
- IriSP.jQuery(this).css("overflow","visible");
- });
- this.$handle.stop().animate(
- this.calculateHandleCss(_height),
- 500,
- function() {
- IriSP.jQuery(this).css("overflow","visible");
- });
-};
-
-IriSP.Widgets.Slider.prototype.calculateSliderCss = function(_size) {
- return {
- height: _size + "px",
- "margin-top": (this.minimized_height - _size) + "px"
- };
-};
-
-IriSP.Widgets.Slider.prototype.calculateHandleCss = function(_size) {
- return {
- height: (2 + _size) + "px",
- width: (2 + _size) + "px",
- "margin-left": -Math.ceil(2 + _size / 2) + "px"
- };
-};
+export { Slider, sliderStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Slider.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,38 @@
+/* Slider Widget */
+
+.Ldt-Slider {
+ border: none;
+ border-radius: 0;
+ padding: 0;
+ margin: 0;
+ background: #B6B8B8;
+}
+
+.Ldt-Slider .ui-slider-handle {
+ border-radius: 8px;
+ top: -2px;
+ background: #fc00ff;
+ border: 1px solid #ffffff;
+}
+
+.Ldt-Slider .ui-slider-range {
+ background: #747474;
+}
+
+.Ldt-Slider-Time {
+ position: absolute;
+ bottom: 32px;
+ background: #ffffc0;
+ color: #000000;
+ border-radius: 3px;
+ z-index: 8;
+ font-size: 10px;
+ width: 34px;
+ border: 1px solid #999999;
+ padding: 1px;
+ margin-left: -20px;
+ display: none;
+ text-align: center;
+ font-weight: bold;
+ pointer-events: none;
+}
--- a/src/widgets/Slideshare.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-/* Slideshare widget */
-
--- a/src/widgets/Slideshare.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Slideshare.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,17 +1,19 @@
/* TODO: Add Slide synchronization */
+import slideshareStyles from "./Slideshare.module.css";
+import jQuery from "jquery";
-IriSP.Widgets.Slideshare = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
+const Slideshare = function(ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
};
-IriSP.Widgets.Slideshare.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.Slideshare.prototype.defaults = {
+static defaults = {
annotation_type: "slide",
sync: true,
};
-IriSP.Widgets.Slideshare.prototype.messages = {
+static messages = {
fr: {
slides_ : "Diapositives"
},
@@ -20,10 +22,10 @@
}
};
-IriSP.Widgets.Slideshare.prototype.template =
+static template =
'<div class="Ldt-SlideShare"><h2>{{l10n.slides_}}</h2><hr /><div class="Ldt-SlideShare-Container"></div></div>';
-IriSP.Widgets.Slideshare.prototype.draw = function() {
+draw() {
function insertSlideshare(_presentation, _slide) {
if (_lastEmbedded === _presentation) {
@@ -32,7 +34,7 @@
}
} else {
_lastEmbedded = _presentation;
- var _id = IriSP.Model.getUID(),
+ var _id = ns.Model.getUID(),
_params = {
allowScriptAccess: "always"
},
@@ -92,7 +94,7 @@
var _ajaxUrl = "http://www.slideshare.net/api/oembed/1?url="
+ encodeURIComponent(_presentation)
+ "&format=jsonp&callback=?";
- IriSP.jQuery.getJSON(_ajaxUrl, function(_oembedData) {
+ jQuery.getJSON(_ajaxUrl, function(_oembedData) {
var _presmatch = _oembedData.html.match(/doc=([a-z0-9\-_%]+)/i);
if (_presmatch && _presmatch.length > 1) {
_oembedCache[_presentation] = _presmatch[1];
@@ -115,3 +117,6 @@
});
}
};
+ }}
+
+export { Slideshare, slideshareStyles };
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Slideshare.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,2 @@
+/* Slideshare widget */
+
--- a/src/widgets/Social.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-.Ldt-Social a {
- display: inline-block; width: 24px; height: 24px; margin: 2px 0 0 2px; background: url(img/socialbuttons.png);
-}
-
-.Ldt-Social-Url-Container {
- display: inline-block; width: 24px; height: 24px; margin: 2px 0 0 2px; position: relative;
-}
-
-a.Ldt-Social-Url {
- margin: 0; background-position: -96px 0;
-}
-
-a.Ldt-Social-Url:hover {
- background-position: -96px -24px;
-}
-
-.Ldt-Social-UrlPop {
- position: absolute; left: 20px; top: -2px; background: url(img/socialcopy.png);
- padding: 3px 0 0 12px; width: 218px; height: 27px;
- display: none;
-}
-
-.Ldt-Social-Input, .Ldt-Social-CopyBtn {
- font-size: 11px; margin: 1px; border: 1px solid #ccc; height: 16px;
- padding: 1px; border-radius: 2px; display: inline-block;
-}
-
-.Ldt-Social-Input:hover, .Ldt-Social-CopyBtn.hover {
- border-color: #8080ff;
-}
-
-.Ldt-Social-Input {
- width: 200px;
-}
-
-.Ldt-Social-CopyBtn {
- font-weight: bold; width: 50px; text-align: center; background: #f0f0ff;
-}
-
-.Ldt-Social-CopyBtn.hover {
- background: #ffe0a0;
-}
-
-.Ldt-Social-CopyBtn.active {
- background: #ff8000;
-}
-
-a.Ldt-Social-Twitter {
- background-position: 0 0;
-}
-
-a.Ldt-Social-Twitter:hover {
- background-position: 0 -24px;
-}
-
-a.Ldt-Social-Fb {
- background-position: -24px 0;
-}
-
-a.Ldt-Social-Fb:hover {
- background-position: -24px -24px;
-}
-
-a.Ldt-Social-Gplus {
- background-position: -48px 0;
-}
-
-a.Ldt-Social-Gplus:hover {
- background-position: -48px -24px;
-}
-
-a.Ldt-Social-Mail {
- background-position: -72px 0;
-}
-
-a.Ldt-Social-Mail:hover {
- background-position: -72px -24px;
-}
\ No newline at end of file
--- a/src/widgets/Social.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Social.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,80 +1,106 @@
// TODO: Open share links in a small window
+import _ from "lodash";
+import jQuery from "jquery";
+
+import socialStyles from "./Social.module.css";
-IriSP.Widgets.Social = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
-
-IriSP.Widgets.Social.prototype = new IriSP.Widgets.Widget();
+const Social = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.Social.prototype.defaults = {
- text: "",
- url: "",
- show_url: true,
- show_twitter: true,
- show_fb: true,
- show_gplus: true,
- show_mail: true
-};
+ static defaults = {
+ text: "",
+ url: "",
+ show_url: true,
+ show_twitter: true,
+ show_fb: true,
+ show_gplus: true,
+ show_mail: true,
+ };
-IriSP.Widgets.Social.prototype.template =
- '<span class="Ldt-Social">{{#show_url}}<div class="Ldt-Social-Url-Container"><a href="#" draggable="true" target="_blank" class="Ldt-Social-Square Ldt-Social-Url Ldt-TraceMe" title="{{l10n.share_link}}">'
- + '</a><div class="Ldt-Social-UrlPop"><input class="Ldt-Social-Input"/></div></div>{{/show_url}}'
- + '{{#show_fb}}<a href="#" target="_blank" class="Ldt-Social-Fb Ldt-Social-Ext Ldt-TraceMe" title="{{l10n.share_on}} Facebook"></a>{{/show_fb}}'
- + '{{#show_twitter}}<a href="#" target="_blank" class="Ldt-Social-Twitter Ldt-Social-Ext Ldt-TraceMe" title="{{l10n.share_on}} Twitter"></a>{{/show_twitter}}'
- + '{{#show_gplus}}<a href="#" target="_blank" class="Ldt-Social-Gplus Ldt-Social-Ext Ldt-TraceMe" title="{{l10n.share_on}} Google+"></a>{{/show_gplus}}'
- + '{{#show_mail}}<a href="#" target="_blank" class="Ldt-Social-Mail Ldt-TraceMe" title="{{l10n.share_mail}}"></a>{{/show_mail}}</span>';
+ static template =
+ '<span class="Ldt-Social">{{#show_url}}<div class="Ldt-Social-Url-Container"><a href="#" draggable="true" target="_blank" class="Ldt-Social-Square Ldt-Social-Url Ldt-TraceMe" title="{{l10n.share_link}}">' +
+ '</a><div class="Ldt-Social-UrlPop"><input class="Ldt-Social-Input"/></div></div>{{/show_url}}' +
+ '{{#show_fb}}<a href="#" target="_blank" class="Ldt-Social-Fb Ldt-Social-Ext Ldt-TraceMe" title="{{l10n.share_on}} Facebook"></a>{{/show_fb}}' +
+ '{{#show_twitter}}<a href="#" target="_blank" class="Ldt-Social-Twitter Ldt-Social-Ext Ldt-TraceMe" title="{{l10n.share_on}} Twitter"></a>{{/show_twitter}}' +
+ '{{#show_gplus}}<a href="#" target="_blank" class="Ldt-Social-Gplus Ldt-Social-Ext Ldt-TraceMe" title="{{l10n.share_on}} Google+"></a>{{/show_gplus}}' +
+ '{{#show_mail}}<a href="#" target="_blank" class="Ldt-Social-Mail Ldt-TraceMe" title="{{l10n.share_mail}}"></a>{{/show_mail}}</span>';
-IriSP.Widgets.Social.prototype.messages = {
- "fr": {
+ static messages = {
+ fr: {
share_on: "Partager sur",
share_mail: "Envoyer par courriel",
share_link: "Partager le lien hypertexte",
- copy: "Copier"
- },
- "en" : {
+ copy: "Copier",
+ },
+ en: {
share_on: "Share on",
share_mail: "Share by e-mail",
share_link: "Share hypertext link",
- copy: "Copy"
+ copy: "Copy",
+ },
+ };
+
+ draw() {
+ this.renderTemplate();
+ this.clipId = _.uniqueId("Ldt-Social-CopyBtn-");
+ this.$.find(".Ldt-Social-CopyBtn").attr("id", this.clipId);
+ var _this = this;
+ this.$.find(".Ldt-Social-Url")
+ .click(function () {
+ _this.toggleCopy();
+ return false;
+ })
+ .on("dragstart", function (e) {
+ e.originalEvent.dataTransfer.setData("text/x-iri-title", _this.text);
+ e.originalEvent.dataTransfer.setData("text/x-iri-uri", _this.url);
+ });
+ this.$.find(".Ldt-Social-Input").focus(function () {
+ this.select();
+ });
+ this.$.find(".Ldt-Social-Ext").click(function () {
+ window.open(
+ jQuery(this).attr("href"),
+ "_blank",
+ "height=300,width=450,left=100,top=100,toolbar=0,menubar=0,status=0,location=0"
+ );
+ return false;
+ });
+ this.updateUrls(this.url, this.text);
}
+
+ toggleCopy() {
+ var _pop = this.$.find(".Ldt-Social-UrlPop");
+ _pop.toggle();
+ this.$.find(".Ldt-Social-Input").val(this.url).focus();
+ }
+
+ updateUrls(_url, _text) {
+ this.url = _url;
+ this.text = _text;
+ this.$.find(".Ldt-Social-Fb").attr(
+ "href",
+ "http://www.facebook.com/share.php?" +
+ jQuery.param({ u: _url, t: _text })
+ );
+ this.$.find(".Ldt-Social-Twitter").attr(
+ "href",
+ "https://twitter.com/intent/tweet?" +
+ jQuery.param({ url: _url, text: _text })
+ );
+ this.$.find(".Ldt-Social-Gplus").attr(
+ "href",
+ "https://plus.google.com/share?" +
+ jQuery.param({ url: _url, title: _text })
+ );
+ this.$.find(".Ldt-Social-Mail").attr(
+ "href",
+ "mailto:?" + jQuery.param({ subject: _text, body: _text + ": " + _url })
+ );
+ }
+ };
};
-IriSP.Widgets.Social.prototype.draw = function() {
- this.renderTemplate();
- this.clipId = IriSP._.uniqueId("Ldt-Social-CopyBtn-");
- this.$.find(".Ldt-Social-CopyBtn").attr("id", this.clipId);
- var _this = this;
- this.$.find(".Ldt-Social-Url").click(function() {
- _this.toggleCopy();
- return false;
- }).on("dragstart", function(e) {
- e.originalEvent.dataTransfer.setData("text/x-iri-title",_this.text);
- e.originalEvent.dataTransfer.setData("text/x-iri-uri",_this.url);
- });
- this.$.find(".Ldt-Social-Input").focus(function() {
- this.select();
- });
- this.$.find(".Ldt-Social-Ext").click(function() {
- window.open(
- IriSP.jQuery(this).attr("href"),
- "_blank",
- "height=300,width=450,left=100,top=100,toolbar=0,menubar=0,status=0,location=0");
- return false;
- });
- this.updateUrls(this.url, this.text);
-};
-
-IriSP.Widgets.Social.prototype.toggleCopy = function() {
- var _pop = this.$.find(".Ldt-Social-UrlPop");
- _pop.toggle();
- this.$.find(".Ldt-Social-Input").val(this.url).focus();
-};
-
-IriSP.Widgets.Social.prototype.updateUrls = function(_url, _text) {
- this.url = _url;
- this.text = _text;
- this.$.find(".Ldt-Social-Fb").attr("href", "http://www.facebook.com/share.php?" + IriSP.jQuery.param({ u: _url, t: _text }));
- this.$.find(".Ldt-Social-Twitter").attr("href", "https://twitter.com/intent/tweet?" + IriSP.jQuery.param({ url: _url, text: _text }));
- this.$.find(".Ldt-Social-Gplus").attr("href", "https://plus.google.com/share?" + IriSP.jQuery.param({ url: _url, title: _text }));
- this.$.find(".Ldt-Social-Mail").attr("href", "mailto:?" + IriSP.jQuery.param({ subject: _text, body: _text + ": " + _url }));
-};
+export { Social, socialStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Social.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,78 @@
+.Ldt-Social a {
+ display: inline-block; width: 24px; height: 24px; margin: 2px 0 0 2px; background: url(img/socialbuttons.png);
+}
+
+.Ldt-Social-Url-Container {
+ display: inline-block; width: 24px; height: 24px; margin: 2px 0 0 2px; position: relative;
+}
+
+a.Ldt-Social-Url {
+ margin: 0; background-position: -96px 0;
+}
+
+a.Ldt-Social-Url:hover {
+ background-position: -96px -24px;
+}
+
+.Ldt-Social-UrlPop {
+ position: absolute; left: 20px; top: -2px; background: url(img/socialcopy.png);
+ padding: 3px 0 0 12px; width: 218px; height: 27px;
+ display: none;
+}
+
+.Ldt-Social-Input, .Ldt-Social-CopyBtn {
+ font-size: 11px; margin: 1px; border: 1px solid #ccc; height: 16px;
+ padding: 1px; border-radius: 2px; display: inline-block;
+}
+
+.Ldt-Social-Input:hover, .Ldt-Social-CopyBtn.hover {
+ border-color: #8080ff;
+}
+
+.Ldt-Social-Input {
+ width: 200px;
+}
+
+.Ldt-Social-CopyBtn {
+ font-weight: bold; width: 50px; text-align: center; background: #f0f0ff;
+}
+
+.Ldt-Social-CopyBtn.hover {
+ background: #ffe0a0;
+}
+
+.Ldt-Social-CopyBtn.active {
+ background: #ff8000;
+}
+
+a.Ldt-Social-Twitter {
+ background-position: 0 0;
+}
+
+a.Ldt-Social-Twitter:hover {
+ background-position: 0 -24px;
+}
+
+a.Ldt-Social-Fb {
+ background-position: -24px 0;
+}
+
+a.Ldt-Social-Fb:hover {
+ background-position: -24px -24px;
+}
+
+a.Ldt-Social-Gplus {
+ background-position: -48px 0;
+}
+
+a.Ldt-Social-Gplus:hover {
+ background-position: -48px -24px;
+}
+
+a.Ldt-Social-Mail {
+ background-position: -72px 0;
+}
+
+a.Ldt-Social-Mail:hover {
+ background-position: -72px -24px;
+}
\ No newline at end of file
--- a/src/widgets/Sparkline.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Sparkline.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,91 +1,121 @@
-IriSP.Widgets.Sparkline = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+import _ from "lodash";
+import Raphael from "raphael";
-IriSP.Widgets.Sparkline.prototype = new IriSP.Widgets.Widget();
+const Sparkline = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.Sparkline.prototype.defaults = {
- lineColor : "#7492b4",
- fillColor : "#aeaeb8",
- lineWidth : 2,
- slice_count : 20,
- height : 50,
- margin : 5
-};
+ static defaults = {
+ lineColor: "#7492b4",
+ fillColor: "#aeaeb8",
+ lineWidth: 2,
+ slice_count: 20,
+ height: 50,
+ margin: 5,
+ };
-IriSP.Widgets.Sparkline.prototype.draw = function() {
- var _slices = [],
+ draw() {
+ var _slices = [],
_duration = this.source.getDuration(),
_max = 0,
_list = this.getWidgetAnnotations();
- for (var _i = 0; _i < this.slice_count; _i++) {
- var _begin = (_i*_duration/this.slice_count),
- _end = ((_i+1)*_duration/this.slice_count),
- _volume = 0;
- _list.forEach(function(_annotation) {
- if (_annotation.begin < _end && _annotation.end >= _begin) {
- var _d = _annotation.getDuration().milliseconds;
- if (!_d) {
- _volume += 1;
- } else {
- _volume += (Math.min(_annotation.end, _end) - Math.max(_annotation.begin, _begin)) / _d;
- }
- }
- });
- _max = Math.max(_max, _volume);
+ for (var _i = 0; _i < this.slice_count; _i++) {
+ var _begin = (_i * _duration) / this.slice_count,
+ _end = ((_i + 1) * _duration) / this.slice_count,
+ _volume = 0;
+ _list.forEach(function (_annotation) {
+ if (_annotation.begin < _end && _annotation.end >= _begin) {
+ var _d = _annotation.getDuration().milliseconds;
+ if (!_d) {
+ _volume += 1;
+ } else {
+ _volume +=
+ (Math.min(_annotation.end, _end) -
+ Math.max(_annotation.begin, _begin)) /
+ _d;
+ }
+ }
+ });
+ _max = Math.max(_max, _volume);
_slices.push(_volume);
- }
- if (!_max) {
+ }
+ if (!_max) {
return;
- }
- this.paper = new Raphael(this.$[0], this.width, this.height);
- var _scale = (this.height - this.margin) / _max,
+ }
+ this.paper = new Raphael(this.$[0], this.width, this.height);
+ var _scale = (this.height - this.margin) / _max,
_width = this.width / this.slice_count,
_this = this,
- _y = IriSP._(_slices).map(function(_v) {
- return _this.margin + _this.height - (_scale * _v);
- }),
- _d = IriSP._(_y).reduce(function(_memo, _v, _k) {
- return _memo + ( _k
- ? 'C' + (_k * _width) + ' ' + _y[_k - 1] + ' ' + (_k * _width) + ' ' + _v + ' ' + ((_k + .5) * _width) + ' ' + _v
- : 'M0 ' + _v + 'L' + (.5*_width) + ' ' + _v );
- },'') + 'L' + this.width + ' ' + _y[_y.length - 1],
- _d2 = _d + 'L' + this.width + ' ' + this.height + 'L0 ' + this.height;
-
- this.paper.path(_d2).attr({
- "stroke" : "none",
- "fill" : this.fillColor
- });
-
- this.paper.path(_d).attr({
- "fill" : "none",
- "stroke" : this.lineColor,
- "stroke-width" : this.lineWidth
- });
-
- this.rectangleProgress = this.paper.rect(0,0,0,this.height)
- .attr({
- "stroke" : "none",
- "fill" : "#808080",
- "opacity" : .3
- });
-
- this.ligneProgress = this.paper.path("M0 0L0 "+this.height).attr({"stroke":"#ff00ff", "line-width" : 2});
-
- this.$.click(function(_e) {
+ _y = _(_slices).map(function (_v) {
+ return _this.margin + _this.height - _scale * _v;
+ }).value(),
+ _d =
+ _(_y).reduce(function (_memo, _v, _k) {
+ return (
+ _memo +
+ (_k
+ ? "C" +
+ _k * _width +
+ " " +
+ _y[_k - 1] +
+ " " +
+ _k * _width +
+ " " +
+ _v +
+ " " +
+ (_k + 0.5) * _width +
+ " " +
+ _v
+ : "M0 " + _v + "L" + 0.5 * _width + " " + _v)
+ );
+ }, "") +
+ "L" +
+ this.width +
+ " " +
+ _y[_y.length - 1],
+ _d2 = _d + "L" + this.width + " " + this.height + "L0 " + this.height;
+
+ this.paper.path(_d2).attr({
+ stroke: "none",
+ fill: this.fillColor,
+ });
+
+ this.paper.path(_d).attr({
+ fill: "none",
+ stroke: this.lineColor,
+ "stroke-width": this.lineWidth,
+ });
+
+ this.rectangleProgress = this.paper.rect(0, 0, 0, this.height).attr({
+ stroke: "none",
+ fill: "#808080",
+ opacity: 0.3,
+ });
+
+ this.ligneProgress = this.paper
+ .path("M0 0L0 " + this.height)
+ .attr({ stroke: "#ff00ff", "line-width": 2 });
+
+ this.$.click(function (_e) {
var _x = _e.pageX - _this.$.offset().left;
- _this.media.setCurrentTime(_this.media.duration * _x / _this.width);
- });
-
- this.onMediaEvent("timeupdate","onTimeupdate");
+ _this.media.setCurrentTime((_this.media.duration * _x) / _this.width);
+ });
+
+ this.onMediaEvent("timeupdate", "onTimeupdate");
+ }
+
+ onTimeupdate(_time) {
+ var _x = Math.floor((this.width * _time) / this.media.duration);
+ this.rectangleProgress.attr({
+ width: _x,
+ });
+ this.ligneProgress.attr({
+ path: "M" + _x + " 0L" + _x + " " + this.height,
+ });
+ }
+ };
};
-IriSP.Widgets.Sparkline.prototype.onTimeupdate = function(_time) {
- var _x = Math.floor( this.width * _time / this.media.duration);
- this.rectangleProgress.attr({
- "width" : _x
- });
- this.ligneProgress.attr({
- "path" : "M" + _x + " 0L" + _x + " " + this.height
- });
-};
+export { Sparkline };
--- a/src/widgets/SpelSyncHtml.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/SpelSyncHtml.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,18 +1,18 @@
-IriSP.Widgets.SpelSyncHtml = function(player, config) {
+const SpelSyncHtml = function(ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
console.log("Calling IriSP.Widget's constructor from IriSP.HelloWorldWidget");
- IriSP.Widgets.Widget.call(this, player, config);
};
-IriSP.Widgets.SpelSyncHtml.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.SpelSyncHtml.prototype.defaults = {
+static defaults = {
src: "about:blank"
};
-IriSP.Widgets.SpelSyncHtml.prototype.template =
+static template =
'<div class="Ldt-SpelSyncHtml"><iframe src="{{src}}" {{#width}}width="{{width}}"{{/width}} {{#height}}height="{{height}}"{{/height}}</div>';
-IriSP.Widgets.SpelSyncHtml.prototype.draw = function() {
+draw() {
this.renderTemplate();
var frame = this.$.find("iframe")[0],
basesrc = this.src.replace(/#.*$/,'');
@@ -23,4 +23,7 @@
}
});
});
-};
\ No newline at end of file
+};
+ }}
+
+export { SpelSyncHtml };
\ No newline at end of file
--- a/src/widgets/Tagcloud.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- *
- */
-.Ldt-Tagcloud-Container {
- border: 1px solid #b7b7b7;
- padding: 1px;
- margin: 0;
-}
-
-ul.Ldt-Tagcloud-List {
- background: url(img/pinstripe.png);
- padding: 5px;
- margin: 0;
- list-style: none;
- text-align: center;
-}
-
-li.Ldt-Tagcloud-item {
- display: inline-block;
- margin: 2px;
- cursor: pointer;
-}
-
-li.Ldt-Tagcloud-item:hover {
- color: #0099ff;
-}
-
-.Ldt-Tagcloud-active {
- color: #c000c0;
- padding: 0; margin: 0;
-}
\ No newline at end of file
--- a/src/widgets/Tagcloud.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Tagcloud.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,143 +1,260 @@
-IriSP.Widgets.Tagcloud = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
- this.stopwords = IriSP._.uniq([].concat(this.custom_stopwords).concat(this.stopword_lists[this.stopword_language]));
-};
+import Mustache from "mustache";
+import _ from "lodash";
+
+import tagcloudStyles from "./Tagcloud.module.css";
-IriSP.Widgets.Tagcloud.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.Tagcloud.prototype.template =
- '<div class="Ldt-Tagcloud-Container"><ul class="Ldt-Tagcloud-List">'
- + '{{#words}}<li class="Ldt-Tagcloud-item Ldt-TraceMe" trace-info="tag:{{word}}" content="{{word}}" style="font-size: {{size}}px">{{word}}</li>{{/words}}'
- + '</ul></div>';
+const Tagcloud = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ this.stopwords = _.uniq(
+ []
+ .concat(this.custom_stopwords)
+ .concat(this.stopword_lists[this.stopword_language])
+ );
+ }
-IriSP.Widgets.Tagcloud.prototype.defaults = {
- include_titles: true,
- include_descriptions: true,
- include_tag_texts: true,
- tag_count: 30,
- stopword_language: "fr",
- custom_stopwords: [],
- exclude_pattern: false,
- annotation_type: false,
- segment_annotation_type: false,
- min_font_size: 10,
- max_font_size: 26,
- min_count: 2,
- remove_zero_duration: false
-};
+ static template =
+ '<div class="Ldt-Tagcloud-Container"><ul class="Ldt-Tagcloud-List">' +
+ '{{#words}}<li class="Ldt-Tagcloud-item Ldt-TraceMe" trace-info="tag:{{word}}" content="{{word}}" style="font-size: {{size}}px">{{word}}</li>{{/words}}' +
+ "</ul></div>";
+
+ static defaults = {
+ include_titles: true,
+ include_descriptions: true,
+ include_tag_texts: true,
+ tag_count: 30,
+ stopword_language: "fr",
+ custom_stopwords: [],
+ exclude_pattern: false,
+ annotation_type: false,
+ segment_annotation_type: false,
+ min_font_size: 10,
+ max_font_size: 26,
+ min_count: 2,
+ remove_zero_duration: false,
+ };
-IriSP.Widgets.Tagcloud.prototype.stopword_lists = {
- "fr" : [
- 'aussi', 'avec', 'aux', 'bien', 'car', 'cette', 'comme', 'dans', 'des', 'donc', 'dont', 'elle', 'encore', 'entre', 'est',
- 'être', 'eux', 'faire', 'fait', 'http', 'ici', 'ils', 'les', 'leur', 'leurs', 'mais', 'mes', 'même', 'mon', 'notre',
- 'non', 'nos', 'nous', 'ont', 'par', 'pas', 'peu', 'peut', 'plus', 'pour', 'quand', 'que', 'qui', 'quoi', 'sans',
- 'ses' ,'son', 'sont', 'sur', 'tes', 'très', 'the', 'ton', 'tous', 'tout', 'une', 'votre', 'vos', 'vous'
- ],
- "en" : [
- 'about', 'again', 'are', 'and', 'because', 'being', 'but', 'can', 'done', 'have', 'for', 'from',
- 'get', 'here', 'http', 'like', 'more', 'one', 'our', 'she', 'that', 'the', 'their', 'then', 'there',
- 'they', 'this', 'very', 'what', 'when', 'where', 'who', 'why', 'will', 'with', 'www', 'you', 'your'
- ]
-};
+ stopword_lists = {
+ fr: [
+ "aussi",
+ "avec",
+ "aux",
+ "bien",
+ "car",
+ "cette",
+ "comme",
+ "dans",
+ "des",
+ "donc",
+ "dont",
+ "elle",
+ "encore",
+ "entre",
+ "est",
+ "être",
+ "eux",
+ "faire",
+ "fait",
+ "http",
+ "ici",
+ "ils",
+ "les",
+ "leur",
+ "leurs",
+ "mais",
+ "mes",
+ "même",
+ "mon",
+ "notre",
+ "non",
+ "nos",
+ "nous",
+ "ont",
+ "par",
+ "pas",
+ "peu",
+ "peut",
+ "plus",
+ "pour",
+ "quand",
+ "que",
+ "qui",
+ "quoi",
+ "sans",
+ "ses",
+ "son",
+ "sont",
+ "sur",
+ "tes",
+ "très",
+ "the",
+ "ton",
+ "tous",
+ "tout",
+ "une",
+ "votre",
+ "vos",
+ "vous",
+ ],
+ en: [
+ "about",
+ "again",
+ "are",
+ "and",
+ "because",
+ "being",
+ "but",
+ "can",
+ "done",
+ "have",
+ "for",
+ "from",
+ "get",
+ "here",
+ "http",
+ "like",
+ "more",
+ "one",
+ "our",
+ "she",
+ "that",
+ "the",
+ "their",
+ "then",
+ "there",
+ "they",
+ "this",
+ "very",
+ "what",
+ "when",
+ "where",
+ "who",
+ "why",
+ "will",
+ "with",
+ "www",
+ "you",
+ "your",
+ ],
+ };
-IriSP.Widgets.Tagcloud.prototype.draw = function() {
-
- if (this.segment_annotation_type) {
+ draw() {
+ if (this.segment_annotation_type) {
var _this = this;
- this.source.getAnnotationsByTypeTitle(this.segment_annotation_type).forEach(function(_a) {
- _a.on("enter", function() {
- _this.redraw(_a.begin, _a.end);
+ this.source
+ .getAnnotationsByTypeTitle(this.segment_annotation_type)
+ .forEach(function (_a) {
+ _a.on("enter", function () {
+ _this.redraw(_a.begin, _a.end);
});
- });
- } else {
+ });
+ } else {
this.redraw();
+ }
}
-};
-IriSP.Widgets.Tagcloud.prototype.redraw = function(_from, _to) {
- var _urlRegExp = /https?:\/\/[0-9a-zA-Z\.%\/-_]+/g,
+ redraw(_from, _to) {
+ var _urlRegExp = /https?:\/\/[0-9a-zA-Z\.%\/-_]+/g,
_words = {},
_this = this,
_annotations = this.getWidgetAnnotations();
-
- if(!this.include_titles && !this.include_descriptions){
- var _regexpword = /[^\.&;,'"!\?\d\(\)\+\[\]\\\…\-«»\/]{3,}/g;
- }
- else{
- var _regexpword = /[^\s\.&;,'"!\?\d\(\)\+\[\]\\\…\-«»:\/]{3,}/g;
- }
-
- if (typeof _from !== "undefined" && typeof _to !== "undefined") {
- _annotations = _annotations.filter(function(_annotation) {
- return _annotation.begin >= _from && _annotation.end <= _to;
+
+ if (!this.include_titles && !this.include_descriptions) {
+ var _regexpword = /[^\.&;,'"!\?\d\(\)\+\[\]\\\…\-«»\/]{3,}/g;
+ } else {
+ var _regexpword = /[^\s\.&;,'"!\?\d\(\)\+\[\]\\\…\-«»:\/]{3,}/g;
+ }
+
+ if (typeof _from !== "undefined" && typeof _to !== "undefined") {
+ _annotations = _annotations.filter(function (_annotation) {
+ return _annotation.begin >= _from && _annotation.end <= _to;
+ });
+ }
+
+ if (this.remove_zero_duration) {
+ _annotations = _annotations.filter(function (_annotation) {
+ return _annotation.getDuration() > 0;
});
- }
-
- if(this.remove_zero_duration){
- _annotations = _annotations.filter(function(_annotation) {
- return _annotation.getDuration()>0;
- });
- }
-
- _annotations.forEach(function(_annotation) {
- var _txt =
- (_this.include_titles ? _annotation.title : '')
- + ' '
- + (_this.include_descriptions ? _annotation.description : '')
- + ' '
- + (_this.include_tag_texts ? _annotation.getTagTexts() : '');
- IriSP._(_txt.toLowerCase().replace(_urlRegExp, '').match(_regexpword)).each(function(_word) {
- _word = _word.trim();
- if (IriSP._(_this.stopwords).indexOf(_word) == -1 && (!_this.exclude_pattern || !_this.exclude_pattern.test(_word))) {
- _words[_word] = 1 + (_words[_word] || 0);
- }
- });
- });
- _words = IriSP._(_words)
+ }
+
+ _annotations.forEach(function (_annotation) {
+ var _txt =
+ (_this.include_titles ? _annotation.title : "") +
+ " " +
+ (_this.include_descriptions ? _annotation.description : "") +
+ " " +
+ (_this.include_tag_texts ? _annotation.getTagTexts() : "");
+ _(_txt.toLowerCase().replace(_urlRegExp, "").match(_regexpword)).each(
+ function (_word) {
+ _word = _word.trim();
+ if (
+ _(_this.stopwords).indexOf(_word) == -1 &&
+ (!_this.exclude_pattern || !_this.exclude_pattern.test(_word))
+ ) {
+ _words[_word] = 1 + (_words[_word] || 0);
+ }
+ }
+ );
+ });
+ _words = _(_words)
.chain()
- .map(function(_v, _k) {
- return {
- "word" : _k,
- "count" : _v
- };
+ .map(function (_v, _k) {
+ return {
+ word: _k,
+ count: _v,
+ };
})
- .filter(function(_v) {
- return _v.count > _this.min_count;
+ .filter(function (_v) {
+ return _v.count > _this.min_count;
})
- .sortBy(function(_v) {
- return - _v.count;
+ .sortBy(function (_v) {
+ return -_v.count;
})
.first(this.tag_count)
.value();
- if (_words.length) {
+ if (_words && _words.length) {
var _max = _words[0].count,
- _min = Math.min(_words[_words.length - 1].count, _max - 1),
- _scale = (this.max_font_size - this.min_font_size) / Math.sqrt(_max - _min);
- IriSP._(_words).each(function(_word) {
- _word.size = Math.floor( _this.min_font_size + _scale * Math.sqrt(_word.count - _min) );
- });
+ _min = Math.min(_words[_words.length - 1].count, _max - 1),
+ _scale =
+ (this.max_font_size - this.min_font_size) / Math.sqrt(_max - _min);
+ _(_words).each(function (_word) {
+ _word.size = Math.floor(
+ _this.min_font_size + _scale * Math.sqrt(_word.count - _min)
+ );
+ });
+ }
+ this.$.html(Mustache.render(this.constructor.template, { words: _words }));
+ this.$.find(".Ldt-Tagcloud-item").click(function () {
+ var _txt = jQuery(this).attr("content");
+ _this.source.getAnnotations().searchByTags(_txt);
+ });
+ this.source
+ .getAnnotations()
+ .on("search", this.functionWrapper("onSearch"));
+ this.source
+ .getAnnotations()
+ .on("search-cleared", this.functionWrapper("onSearch"));
}
- this.$.html(Mustache.to_html(this.template, {words: _words }));
- this.$.find(".Ldt-Tagcloud-item").click(function() {
- var _txt = IriSP.jQuery(this).attr("content");
- _this.source.getAnnotations().searchByTags(_txt);
- });
- this.source.getAnnotations().on("search", this.functionWrapper("onSearch"));
- this.source.getAnnotations().on("search-cleared", this.functionWrapper("onSearch"));
+
+ onSearch(searchString) {
+ searchString = typeof searchString !== "undefined" ? searchString : "";
+ if (searchString) {
+ var _rgxp = ns.Model.regexpFromTextOrArray(searchString);
+ }
+ this.$.find(".Ldt-Tagcloud-item").each(function () {
+ var _el = jQuery(this),
+ _txt = _el.attr("content");
+ if (searchString) {
+ _el.html(
+ _txt.replace(_rgxp, '<span class="Ldt-Tagcloud-active">$1</span>')
+ );
+ } else {
+ _el.html(_txt);
+ }
+ });
+ }
+ };
};
-IriSP.Widgets.Tagcloud.prototype.onSearch = function(searchString) {
- searchString = typeof searchString !== "undefined" ? searchString : '';
- if (searchString) {
- var _rgxp = IriSP.Model.regexpFromTextOrArray(searchString);
- }
- this.$.find(".Ldt-Tagcloud-item").each(function() {
- var _el = IriSP.jQuery(this),
- _txt = _el.attr("content");
- if (searchString) {
- _el.html(_txt.replace(_rgxp, '<span class="Ldt-Tagcloud-active">$1</span>'));
- } else {
- _el.html(_txt);
- }
- });
-};
+export { Tagcloud, tagcloudStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Tagcloud.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,31 @@
+/*
+ *
+ */
+.Ldt-Tagcloud-Container {
+ border: 1px solid #b7b7b7;
+ padding: 1px;
+ margin: 0;
+}
+
+ul.Ldt-Tagcloud-List {
+ background: url(img/pinstripe.png);
+ padding: 5px;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+
+li.Ldt-Tagcloud-item {
+ display: inline-block;
+ margin: 2px;
+ cursor: pointer;
+}
+
+li.Ldt-Tagcloud-item:hover {
+ color: #0099ff;
+}
+
+.Ldt-Tagcloud-active {
+ color: #c000c0;
+ padding: 0; margin: 0;
+}
\ No newline at end of file
--- a/src/widgets/Title.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Title.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,17 +1,20 @@
-IriSP.Widgets.Title = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
+const Title = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
+
+ static defaults = {
+ media_title: false,
+ };
+
+ static template =
+ '<div class="Ldt-TitleWidget"><h2>{{#media_title}}{{media.title}}{{/media_title}}{{^media_title}}{{source.title}}{{/media_title}}</h2></div>';
+
+ draw() {
+ this.renderTemplate();
+ }
+ };
};
-IriSP.Widgets.Title.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.Title.prototype.defaults = {
- media_title: false
-};
-
-IriSP.Widgets.Title.prototype.template =
- '<div class="Ldt-TitleWidget"><h2>{{#media_title}}{{media.title}}{{/media_title}}{{^media_title}}{{source.title}}{{/media_title}}</h2></div>';
-
-
-IriSP.Widgets.Title.prototype.draw = function() {
- this.renderTemplate();
-};
\ No newline at end of file
+export { Title };
--- a/src/widgets/Tooltip.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-.Ldt-Tooltip {
- position: absolute;
- height: 0; width: 0;
- z-index: 100000;
-}
-
-.Ldt-Tooltip-Main {
- position: absolute; bottom: 0; left: -96px;
-}
-
-.Ldt-Tooltip-Corner-NW,
-.Ldt-Tooltip-Corner-NE,
-.Ldt-Tooltip-Corner-SW,
-.Ldt-Tooltip-Corner-SE {
- position: absolute; width: 6px; height: 6px; background: url(img/tooltip-corners.png);
-}
-
-.Ldt-Tooltip-Corner-NW,
-.Ldt-Tooltip-Corner-SW {
- left: 0;
-}
-
-.Ldt-Tooltip-Corner-NE,
-.Ldt-Tooltip-Corner-SE {
- right: 0;
-}
-
-.Ldt-Tooltip-Corner-NW,
-.Ldt-Tooltip-Corner-NE {
- top: 0;
-}
-
-.Ldt-Tooltip-Corner-SW,
-.Ldt-Tooltip-Corner-SE {
- bottom: 10px;
-}
-
-.Ldt-Tooltip-Corner-NW {
- background-position: top left;
-}
-
-.Ldt-Tooltip-Corner-NE {
- background-position: top right;
-}
-
-.Ldt-Tooltip-Corner-SW {
- background-position: bottom left;
-}
-
-.Ldt-Tooltip-Corner-SE {
- background-position: bottom right;
-}
-
-.Ldt-Tooltip-Border-Top,
-.Ldt-Tooltip-Border-SW,
-.Ldt-Tooltip-Border-SE {
- position: absolute; height: 6px; background: url(img/tooltip-h-borders.png);
-}
-
-.Ldt-Tooltip-Border-Top {
- left: 6px; right: 6px;
-}
-
-.Ldt-Tooltip-Border-SW,
-.Ldt-Tooltip-Border-SE {
- bottom: 10px; background-position: bottom;
-}
-
-.Ldt-Tooltip-Border-SW {
- left: 6px;
-}
-
-.Ldt-Tooltip-Border-SE {
- right: 6px;
-}
-
-.Ldt-Tooltip-Tip {
- position: absolute; height: 16px; width: 22px;
- background: url(img/tooltip-tip.png);
- bottom: 0;
-}
-
-.Ldt-Tooltip-Border-Left,
-.Ldt-Tooltip-Border-Right {
- position: absolute; width: 6px; background: url(img/tooltip-v-borders.png);
- top: 6px; bottom: 16px;
-}
-
-.Ldt-Tooltip-Border-Left {
- left: 0; background-position: left;
-}
-
-.Ldt-Tooltip-Border-Right {
- right: 0; background-position: right;
-}
-
-.Ldt-Tooltip-Inner {
- min-height: 30px;
- max-height: 140px;
- width: 180px;
- overflow: hidden;
- margin: 6px 6px 16px;
- background: url(img/tooltip-gradient.png) bottom;
-}
-
-
-.Ldt-Tooltip-Color {
- float: left; margin: 8px 2px 2px 8px; width: 10px; height: 10px;
-}
-
-.Ldt-Tooltip-AltColor {
- float: left; margin: 2px 2px 2px 3px; width: 10px; height: 10px;
-}
-
-.Ldt-Tooltip img {
- max-width: 140px; max-height: 80px; margin: 2px 20px;
-}
-
-.Ldt-Tooltip p {
- margin: 6px 8px;
- font-size: 12px;
- line-height: 14px;
-}
\ No newline at end of file
--- a/src/widgets/Tooltip.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Tooltip.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,94 +1,113 @@
/* this widget displays a small tooltip */
-IriSP.Widgets.Tooltip = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-};
+import tooltipStyles from "./Tooltip.module.css";
+
+const Tooltip = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
+
+ static defaults = {};
+
+ static template =
+ '<div class="Ldt-Tooltip"><div class="Ldt-Tooltip-Main"><div class="Ldt-Tooltip-Corner-NW"></div>' +
+ '<div class="Ldt-Tooltip-Border-Top"></div><div class="Ldt-Tooltip-Corner-NE"></div>' +
+ '<div class="Ldt-Tooltip-Border-Left"></div><div class="Ldt-Tooltip-Border-Right"></div>' +
+ '<div class="Ldt-Tooltip-Corner-SW"></div><div class="Ldt-Tooltip-Border-SW"></div>' +
+ '<div class="Ldt-Tooltip-Tip"></div><div class="Ldt-Tooltip-Border-SE"></div>' +
+ '<div class="Ldt-Tooltip-Corner-SE"></div><div class="Ldt-Tooltip-Inner">' +
+ '<div class="Ldt-Tooltip-Color"></div><p class="Ldt-Tooltip-Text"></p></div></div></div>';
-IriSP.Widgets.Tooltip.prototype = new IriSP.Widgets.Widget();
-
-IriSP.Widgets.Tooltip.prototype.defaults = {
-
-};
+ draw() {
+ const _this = this;
+ this.renderTemplate();
+ this.$.parent().css({
+ position: "relative",
+ });
+ this.$tooltip = this.$.find(".Ldt-Tooltip");
+ this.$tip = this.$.find(".Ldt-Tooltip-Tip");
+ this.$sw = this.$.find(".Ldt-Tooltip-Border-SW");
+ this.$se = this.$.find(".Ldt-Tooltip-Border-SE");
+ this.__halfWidth = Math.floor(
+ (this.$.find(".Ldt-Tooltip-Main").width() || 192) / 2
+ );
+ this.__borderWidth = this.$.find(".Ldt-Tooltip-Border-Left").width();
+ this.__tipDelta = this.__halfWidth - Math.floor(this.$tip.width() / 2);
+ this.__maxShift = this.__tipDelta - this.__borderWidth;
+ this.$.mouseover(function () {
+ _this.$tooltip.hide();
+ });
+ this.hide();
+ }
-IriSP.Widgets.Tooltip.prototype.template =
- '<div class="Ldt-Tooltip"><div class="Ldt-Tooltip-Main"><div class="Ldt-Tooltip-Corner-NW"></div>'
- + '<div class="Ldt-Tooltip-Border-Top"></div><div class="Ldt-Tooltip-Corner-NE"></div>'
- + '<div class="Ldt-Tooltip-Border-Left"></div><div class="Ldt-Tooltip-Border-Right"></div>'
- + '<div class="Ldt-Tooltip-Corner-SW"></div><div class="Ldt-Tooltip-Border-SW"></div>'
- + '<div class="Ldt-Tooltip-Tip"></div><div class="Ldt-Tooltip-Border-SE"></div>'
- + '<div class="Ldt-Tooltip-Corner-SE"></div><div class="Ldt-Tooltip-Inner">'
- + '<div class="Ldt-Tooltip-Color"></div><p class="Ldt-Tooltip-Text"></p></div></div></div>';
+ show(x, y, text, color) {
+ if (typeof color !== "undefined") {
+ // one color or array of colors
+ if (typeof color === "string") {
+ this.$.find(".Ldt-Tooltip-Color").html("");
+ this.$.find(".Ldt-Tooltip-Color")
+ .show()
+ .css("background-color", color);
+ this.$.find(".Ldt-Tooltip-Color").show().css("height", "");
+ } else {
+ var d = this.$.find(".Ldt-Tooltip-Color");
+ d.html("");
+ d.show();
+ for (var i = 0; i < color.length; i++) {
+ d.append(
+ '<div style="float: left; height: 10px; width: 10px; background-color: ' +
+ color[i] +
+ '">'
+ );
+ }
+ this.$.find(".Ldt-Tooltip-Color").css(
+ "height",
+ color.length * 10 + "px"
+ );
+ }
+ } else {
+ this.$.find(".Ldt-Tooltip-Color").hide();
+ }
+
+ this.$.find(".Ldt-Tooltip-Text").html(text);
+
+ this.$tooltip.show();
-IriSP.Widgets.Tooltip.prototype.draw = function() {
- _this = this;
- this.renderTemplate();
- this.$.parent().css({
- "position" : "relative"
- });
- this.$tooltip = this.$.find(".Ldt-Tooltip");
- this.$tip = this.$.find(".Ldt-Tooltip-Tip");
- this.$sw = this.$.find(".Ldt-Tooltip-Border-SW");
- this.$se = this.$.find(".Ldt-Tooltip-Border-SE");
- this.__halfWidth = Math.floor(( this.$.find(".Ldt-Tooltip-Main").width() || 192)/2);
- this.__borderWidth = this.$.find(".Ldt-Tooltip-Border-Left").width();
- this.__tipDelta = this.__halfWidth - Math.floor(this.$tip.width()/2);
- this.__maxShift = this.__tipDelta - this.__borderWidth;
- this.$.mouseover(function() {
- _this.$tooltip.hide();
- });
- this.hide();
+ var shift = 0;
+
+ if (
+ typeof this.min_x !== "undefined" &&
+ x - this.__halfWidth < this.min_x
+ ) {
+ shift = Math.max(x - this.__halfWidth - this.min_x, -this.__maxShift);
+ }
+
+ if (
+ typeof this.max_x !== "undefined" &&
+ +x + this.__halfWidth > this.max_x
+ ) {
+ shift = Math.min(+x + this.__halfWidth - this.max_x, this.__maxShift);
+ }
+
+ this.$tooltip.css({
+ left: x - shift + "px",
+ top: y + "px",
+ });
+ this.$tip.css({
+ left: this.__tipDelta + shift + "px",
+ });
+ this.$sw.css({
+ width: this.__tipDelta + shift - this.__borderWidth + "px",
+ });
+ this.$se.css({
+ width: this.__tipDelta - shift - this.__borderWidth + "px",
+ });
+ }
+
+ hide() {
+ this.$tooltip.hide();
+ }
+ };
};
-IriSP.Widgets.Tooltip.prototype.show = function(x, y, text, color) {
-
- if (typeof color !== "undefined") {
- // one color or array of colors
- if (typeof color === "string") {
- this.$.find(".Ldt-Tooltip-Color").html("");
- this.$.find(".Ldt-Tooltip-Color").show().css("background-color", color);
- this.$.find(".Ldt-Tooltip-Color").show().css("height", "");
- }
- else{
- var d = this.$.find(".Ldt-Tooltip-Color");
- d.html("");
- d.show();
- for(var i=0; i<color.length; i++){
- d.append('<div style="float: left; height: 10px; width: 10px; background-color: ' + color[i] + '">')
- }
- this.$.find(".Ldt-Tooltip-Color").css("height", (color.length * 10) + "px");
- }
- } else {
- this.$.find(".Ldt-Tooltip-Color").hide();
- }
-
- this.$.find(".Ldt-Tooltip-Text").html(text);
-
- this.$tooltip.show();
-
- var shift = 0;
-
- if (typeof this.min_x !== "undefined" && (x - this.__halfWidth < this.min_x)) {
- shift = Math.max(x - this.__halfWidth - this.min_x, - this.__maxShift);
- }
-
- if (typeof this.max_x !== "undefined" && (+x + this.__halfWidth > this.max_x)) {
- shift = Math.min(+ x + this.__halfWidth - this.max_x, this.__maxShift);
- }
-
- this.$tooltip.css({
- "left" : (x - shift) + "px",
- "top" : y + "px"
- });
- this.$tip.css({
- "left": (this.__tipDelta + shift) + "px"
- });
- this.$sw.css({
- "width": (this.__tipDelta + shift - this.__borderWidth) + "px"
- });
- this.$se.css({
- "width": (this.__tipDelta - shift - this.__borderWidth) + "px"
- });
-};
-
-IriSP.Widgets.Tooltip.prototype.hide = function() {
- this.$tooltip.hide();
-};
+export { Tooltip, tooltipStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Tooltip.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,123 @@
+.Ldt-Tooltip {
+ position: absolute;
+ height: 0; width: 0;
+ z-index: 100000;
+}
+
+.Ldt-Tooltip-Main {
+ position: absolute; bottom: 0; left: -96px;
+}
+
+.Ldt-Tooltip-Corner-NW,
+.Ldt-Tooltip-Corner-NE,
+.Ldt-Tooltip-Corner-SW,
+.Ldt-Tooltip-Corner-SE {
+ position: absolute; width: 6px; height: 6px; background: url(img/tooltip-corners.png);
+}
+
+.Ldt-Tooltip-Corner-NW,
+.Ldt-Tooltip-Corner-SW {
+ left: 0;
+}
+
+.Ldt-Tooltip-Corner-NE,
+.Ldt-Tooltip-Corner-SE {
+ right: 0;
+}
+
+.Ldt-Tooltip-Corner-NW,
+.Ldt-Tooltip-Corner-NE {
+ top: 0;
+}
+
+.Ldt-Tooltip-Corner-SW,
+.Ldt-Tooltip-Corner-SE {
+ bottom: 10px;
+}
+
+.Ldt-Tooltip-Corner-NW {
+ background-position: top left;
+}
+
+.Ldt-Tooltip-Corner-NE {
+ background-position: top right;
+}
+
+.Ldt-Tooltip-Corner-SW {
+ background-position: bottom left;
+}
+
+.Ldt-Tooltip-Corner-SE {
+ background-position: bottom right;
+}
+
+.Ldt-Tooltip-Border-Top,
+.Ldt-Tooltip-Border-SW,
+.Ldt-Tooltip-Border-SE {
+ position: absolute; height: 6px; background: url(img/tooltip-h-borders.png);
+}
+
+.Ldt-Tooltip-Border-Top {
+ left: 6px; right: 6px;
+}
+
+.Ldt-Tooltip-Border-SW,
+.Ldt-Tooltip-Border-SE {
+ bottom: 10px; background-position: bottom;
+}
+
+.Ldt-Tooltip-Border-SW {
+ left: 6px;
+}
+
+.Ldt-Tooltip-Border-SE {
+ right: 6px;
+}
+
+.Ldt-Tooltip-Tip {
+ position: absolute; height: 16px; width: 22px;
+ background: url(img/tooltip-tip.png);
+ bottom: 0;
+}
+
+.Ldt-Tooltip-Border-Left,
+.Ldt-Tooltip-Border-Right {
+ position: absolute; width: 6px; background: url(img/tooltip-v-borders.png);
+ top: 6px; bottom: 16px;
+}
+
+.Ldt-Tooltip-Border-Left {
+ left: 0; background-position: left;
+}
+
+.Ldt-Tooltip-Border-Right {
+ right: 0; background-position: right;
+}
+
+.Ldt-Tooltip-Inner {
+ min-height: 30px;
+ max-height: 140px;
+ width: 180px;
+ overflow: hidden;
+ margin: 6px 6px 16px;
+ background: url(img/tooltip-gradient.png) bottom;
+}
+
+
+.Ldt-Tooltip-Color {
+ float: left; margin: 8px 2px 2px 8px; width: 10px; height: 10px;
+}
+
+.Ldt-Tooltip-AltColor {
+ float: left; margin: 2px 2px 2px 3px; width: 10px; height: 10px;
+}
+
+.Ldt-Tooltip img {
+ max-width: 140px; max-height: 80px; margin: 2px 20px;
+}
+
+.Ldt-Tooltip p {
+ margin: 6px 8px;
+ font-size: 12px;
+ line-height: 14px;
+}
\ No newline at end of file
--- a/src/widgets/Trace.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Trace.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,97 +1,121 @@
-IriSP.Widgets.Trace = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-
-};
+import _ from "lodash";
+import jQuery from "jquery";
-IriSP.Widgets.Trace.prototype = new IriSP.Widgets.Widget();
+const Trace = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.Trace.prototype.defaults = {
- js_console : false,
- url: "http://traces.advene.org:5000/",
- requestmode: 'GET',
- syncmode: "sync",
- default_subject: "IRI",
- tracer: null,
- extend: false
-};
+ static defaults = {
+ js_console: false,
+ url: "http://traces.advene.org:5000/",
+ requestmode: "GET",
+ syncmode: "sync",
+ default_subject: "IRI",
+ tracer: null,
+ extend: false,
+ };
-IriSP.Widgets.Trace.prototype.draw = function() {
- if (typeof window.tracemanager === "undefined") {
- console.log("Tracemanager not found");
- return;
- }
- var _this = this,
- _medialisteners = {
- "play" : 0,
- "pause" : 0,
- "volumechange" : 0,
- "seeked" : 0,
- "play" : 0,
- "pause" : 0,
- "timeupdate" : 10000
- },
- _annlisteners = {
- search: 0,
- "search-cleared": 0
- };
- IriSP._(_medialisteners).each(function(_ms, _listener) {
- var _f = function(_arg) {
- _this.eventHandler(_listener, _arg);
+ draw() {
+ if (typeof window.tracemanager === "undefined") {
+ console.log("Tracemanager not found");
+ return;
+ }
+ var _this = this,
+ _medialisteners = {
+ play: 0,
+ pause: 0,
+ volumechange: 0,
+ seeked: 0,
+ play: 0,
+ pause: 0,
+ timeupdate: 10000,
+ },
+ _annlisteners = {
+ search: 0,
+ "search-cleared": 0,
+ };
+ _(_medialisteners).each(function (_ms, _listener) {
+ var _f = function (_arg) {
+ _this.eventHandler(_listener, _arg);
};
if (_ms) {
- _f = IriSP._.throttle(_f, _ms);
+ _f = _.throttle(_f, _ms);
}
_this.media.on(_listener, _f);
- });
- var _annotations = this.source.getAnnotations();
- IriSP._(_annlisteners).each(function(_ms, _listener) {
- var _f = function(_arg) {
- _this.eventHandler(_listener, _arg);
+ });
+ var _annotations = this.source.getAnnotations();
+ _(_annlisteners).each(function (_ms, _listener) {
+ var _f = function (_arg) {
+ _this.eventHandler(_listener, _arg);
};
if (_ms) {
- _f = IriSP._.throttle(_f, _ms);
+ _f = _.throttle(_f, _ms);
}
_annotations.on(_listener, _f);
- });
-
- if (!this.tracer) {
-
+ });
+
+ if (!this.tracer) {
this.tracer = window.tracemanager.init_trace("test", {
- url: this.url,
- requestmode: this.requestmode,
- syncmode: this.syncmode,
- default_subject: this.default_subject
+ url: this.url,
+ requestmode: this.requestmode,
+ syncmode: this.syncmode,
+ default_subject: this.default_subject,
});
-
- }
-
-
-
- this.tracer.trace("TraceWidgetInit", {});
+ }
+
+ this.tracer.trace("TraceWidgetInit", {});
- // Configure annotation creation/update/delete/publish tracing
- _this.player.on("Annotation.create", function (a) {
- _this.tracer.trace("AnnotationCreated", { id: a.id, annotation_begin: a.begin.milliseconds, annotation_end: a.end.milliseconds, annotation_media: a.media.id, content_length: a.title.length, content_words: a.title.split(/\s+/).length });
- });
- _this.player.on("Annotation.delete", function (aid) {
+ // Configure annotation creation/update/delete/publish tracing
+ _this.player.on("Annotation.create", function (a) {
+ _this.tracer.trace("AnnotationCreated", {
+ id: a.id,
+ annotation_begin: a.begin.milliseconds,
+ annotation_end: a.end.milliseconds,
+ annotation_media: a.media.id,
+ content_length: a.title.length,
+ content_words: a.title.split(/\s+/).length,
+ });
+ });
+ _this.player.on("Annotation.delete", function (aid) {
_this.tracer.trace("AnnotationDeleted", { id: aid });
- });
- _this.player.on("Annotation.update", function (a) {
- _this.tracer.trace("AnnotationUpdated", { id: a.id, annotation_begin: a.begin.milliseconds, annotation_end: a.end.milliseconds, annotation_media: a.media.id, content_length: a.title.length, content_words: a.title.split(/\s+/).length });
- });
- _this.player.on("Annotation.publish", function (a) {
- _this.tracer.trace("AnnotationPublished", { id: a.id, annotation_begin: a.begin.milliseconds, annotation_end: a.end.milliseconds, annotation_media: a.media.id, content_length: a.title.length, content_words: a.title.split(/\s+/).length });
- });
+ });
+ _this.player.on("Annotation.update", function (a) {
+ _this.tracer.trace("AnnotationUpdated", {
+ id: a.id,
+ annotation_begin: a.begin.milliseconds,
+ annotation_end: a.end.milliseconds,
+ annotation_media: a.media.id,
+ content_length: a.title.length,
+ content_words: a.title.split(/\s+/).length,
+ });
+ });
+ _this.player.on("Annotation.publish", function (a) {
+ _this.tracer.trace("AnnotationPublished", {
+ id: a.id,
+ annotation_begin: a.begin.milliseconds,
+ annotation_end: a.end.milliseconds,
+ annotation_media: a.media.id,
+ content_length: a.title.length,
+ content_words: a.title.split(/\s+/).length,
+ });
+ });
- _this.player.trigger("trace-ready");
- this.mouseLocation = '';
- IriSP.jQuery(".Ldt-Widget").on("mousedown mouseenter mouseleave", ".Ldt-TraceMe", function(_e) {
- var _target = IriSP.jQuery(this);
-
- var _widget = _target.attr("widget-type") || _target.parents(".Ldt-Widget").attr("widget-type"),
+ _this.player.trigger("trace-ready");
+ this.mouseLocation = "";
+ jQuery(".Ldt-Widget").on(
+ "mousedown mouseenter mouseleave",
+ ".Ldt-TraceMe",
+ function (_e) {
+ var _target = ns.jQuery(this);
+
+ var _widget =
+ _target.attr("widget-type") ||
+ _target.parents(".Ldt-Widget").attr("widget-type"),
_data = {
- "type": _e.type,
- "widget": _widget
+ type: _e.type,
+ widget: _widget,
},
_targetEl = _target[0],
_class = _targetEl.className,
@@ -99,47 +123,66 @@
_id = _targetEl.id,
_value = _target.val(),
_traceInfo = _target.attr("trace-info");
- _data.target = _name + (_id && _id.length ? '#' + IriSP.jqEscape(_id) : '') + (_class && _class.length ? ('.' + IriSP.jqEscape(_class).replace(/\s/g,'.')).replace(/\.Ldt-(Widget|TraceMe)/g,'') : '');
- if (typeof _traceInfo == "string" && _traceInfo) {
+ _data.target =
+ _name +
+ (_id && _id.length ? "#" + ns.jqEscape(_id) : "") +
+ (_class && _class.length
+ ? ("." + ns.jqEscape(_class).replace(/\s/g, ".")).replace(
+ /\.Ldt-(Widget|TraceMe)/g,
+ ""
+ )
+ : "");
+ if (typeof _traceInfo == "string" && _traceInfo) {
_data.traceInfo = _traceInfo;
+ }
+ if (typeof _value == "string" && _value.length) {
+ _data.value = _value;
+ }
+ _this.eventHandler("UIEvent", _data);
}
- if (typeof _value == "string" && _value.length) {
- _data.value = _value;
- }
- _this.eventHandler('UIEvent', _data);
- });
+ );
+ }
+
+ eventHandler(_listener, _arg) {
+ var _traceName = "Mdp_";
+ if (typeof _arg == "string" || typeof _arg == "number") {
+ _arg = { value: _arg };
+ }
+ if (typeof _arg == "undefined") {
+ _arg = {};
+ }
+ switch (_listener) {
+ case "UIEvent":
+ _traceName += _arg.widget + "_" + _arg.type;
+ delete _arg.widget;
+ delete _arg.type;
+ break;
+ case "play":
+ case "pause":
+ _arg.milliseconds = this.media.getCurrentTime().milliseconds;
+ case "timeupdate":
+ case "seeked":
+ case "volumechange":
+ _traceName += "media_" + _listener;
+ break;
+ default:
+ _traceName += _listener.replace(".", "_");
+ }
+ if (typeof this.extend === "object" && this.extend) {
+ _(_arg).extend(this.extend);
+ }
+ this.tracer.trace(_traceName, _arg);
+ if (
+ this.js_console &&
+ typeof window.console !== "undefined" &&
+ typeof console.log !== "undefined"
+ ) {
+ console.log(
+ "tracer.trace('" + _traceName + "', " + JSON.stringify(_arg) + ");"
+ );
+ }
+ }
+ };
};
-IriSP.Widgets.Trace.prototype.eventHandler = function(_listener, _arg) {
- var _traceName = 'Mdp_';
- if (typeof _arg == "string" || typeof _arg == "number") {
- _arg = { "value" : _arg };
- }
- if (typeof _arg == "undefined") {
- _arg = {};
- }
- switch(_listener) {
- case 'UIEvent':
- _traceName += _arg.widget + '_' + _arg.type;
- delete _arg.widget;
- delete _arg.type;
- break;
- case 'play':
- case 'pause':
- _arg.milliseconds = this.media.getCurrentTime().milliseconds;
- case 'timeupdate':
- case 'seeked':
- case 'volumechange':
- _traceName += 'media_' + _listener;
- break;
- default:
- _traceName += _listener.replace('.','_');
- }
- if (typeof this.extend === "object" && this.extend) {
- IriSP._(_arg).extend(this.extend);
- }
- this.tracer.trace(_traceName, _arg);
- if (this.js_console && typeof window.console !== "undefined" && typeof console.log !== "undefined") {
- console.log("tracer.trace('" + _traceName + "', " + JSON.stringify(_arg) + ");");
- }
-};
+export { Trace };
--- a/src/widgets/Transcript.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-.Ldt-Transcript-Annotation {
- margin-right: .5em;
-}
-.Ldt-Transcript-Annotation:hover {
- background-color: #bbb;
-}
-.Ldt-Transcript-Annotation.active {
- background-color: #ddd;
-}
--- a/src/widgets/Transcript.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Transcript.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,79 +1,100 @@
/* This widget displays annotations as a transcript */
+import Mustache from "mustache";
+import jQuery from "jquery";
-IriSP.Widgets.Transcript = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-}
+import transcriptStyles from "./Transcript.module.css";
-IriSP.Widgets.Transcript.prototype = new IriSP.Widgets.Widget();
+const Transcript = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ }
-IriSP.Widgets.Transcript.prototype.defaults = {
- annotation_type: "Caption",
- use_vtt_track: false
-}
+ static defaults = {
+ annotation_type: "Caption",
+ use_vtt_track: false,
+ };
-IriSP.Widgets.Transcript.prototype.template = '<div class="Ldt-TranscriptWidget"></div>';
+ static template = '<div class="Ldt-TranscriptWidget"></div>';
-IriSP.Widgets.Transcript.prototype.annotationTemplate = '<span data-begin="{{ begin }}" data-end="{{ end }}" data-id="{{ id }}" class="Ldt-Transcript-Annotation">{{ content }}</span> ';
+ static annotationTemplate =
+ '<span data-begin="{{ begin }}" data-end="{{ end }}" data-id="{{ id }}" class="Ldt-Transcript-Annotation">{{ content }}</span> ';
-IriSP.Widgets.Transcript.prototype.draw = function() {
- var _annotations = this.getWidgetAnnotations();
- var _this = this;
- var content;
+ draw() {
+ var _annotations = this.getWidgetAnnotations();
+ var _this = this;
+ var content;
- _this.renderTemplate();
- content = _this.$.find('.Ldt-TranscriptWidget');
+ _this.renderTemplate();
+ content = _this.$.find(".Ldt-TranscriptWidget");
- if (_this.use_vtt_track) {
+ if (_this.use_vtt_track) {
// Use webvtt track. It will only work with native video player.
- var widgets = _this.player.widgets.filter(function (w) { return w.type == "HtmlPlayer"; });
+ var widgets = _this.player.widgets.filter(function (w) {
+ return w.type == "HtmlPlayer";
+ });
if (widgets) {
- var v = widgets[0].$.find("video")[0];
- // FIXME: allow to specify the used track
- v.addEventListener("loadedmetadata", function () {
- var track = v.textTracks[0];
- var cues = track.cues;
- var i = 1;
- Array.prototype.forEach.apply(cues, [ function(_c) {
- _c.id = "cue" + i;
- var _html = Mustache.to_html(_this.annotationTemplate, {
- id : _c.id,
- content : _c.text,
- begin : 1000 * _c.startTime,
- end : 1000 * _c.endTime
- });
- i += 1;
- var _el = IriSP.jQuery(_html);
- content.append(_el);
- } ]);
- track.addEventListener("cuechange", function () {
- var acues = track.activeCues;
- if (acues.length > 0) {
- // Update attributes for active cues
- _this.$.find(".Ldt-Transcript-Annotation.active").removeClass("active");
- Array.prototype.forEach.apply(acues, [ function(_c) {
- _this.$.find("#" + _c.id).addClass("active");
- } ]);
- }
- }, false);
- content.on("click", ".Ldt-Transcript-Annotation", function () {
- _this.media.setCurrentTime(this.dataset.begin);
+ var v = widgets[0].$.find("video")[0];
+ // FIXME: allow to specify the used track
+ v.addEventListener("loadedmetadata", function () {
+ var track = v.textTracks[0];
+ var cues = track.cues;
+ var i = 1;
+ Array.prototype.forEach.apply(cues, [
+ function (_c) {
+ _c.id = "cue" + i;
+ var _html = Mustache.render(_this.annotationTemplate, {
+ id: _c.id,
+ content: _c.text,
+ begin: 1000 * _c.startTime,
+ end: 1000 * _c.endTime,
});
+ i += 1;
+ var _el = jQuery(_html);
+ content.append(_el);
+ },
+ ]);
+ track.addEventListener(
+ "cuechange",
+ function () {
+ var acues = track.activeCues;
+ if (acues.length > 0) {
+ // Update attributes for active cues
+ _this.$.find(".Ldt-Transcript-Annotation.active").removeClass(
+ "active"
+ );
+ Array.prototype.forEach.apply(acues, [
+ function (_c) {
+ _this.$.find("#" + _c.id).addClass("active");
+ },
+ ]);
+ }
+ },
+ false
+ );
+ content.on("click", ".Ldt-Transcript-Annotation", function () {
+ _this.media.setCurrentTime(this.dataset.begin);
});
+ });
} else {
- console.log("cannot find a video object");
+ console.log("cannot find a video object");
}
- } else {
+ } else {
// Populate with annotation data
- _annotations.forEach(function(_a) {
- var _data = {
- id : _a.id,
- content : IriSP.textFieldHtml(_a.title),
- begin : _a.begin.toString(),
- end : _a.end.toString()
- };
- var _html = Mustache.to_html(_this.annotationTemplate, _data);
- var _el = IriSP.jQuery(_html);
- content.append(_el);
+ _annotations.forEach(function (_a) {
+ var _data = {
+ id: _a.id,
+ content: ns.textFieldHtml(_a.title),
+ begin: _a.begin.toString(),
+ end: _a.end.toString(),
+ };
+ var _html = Mustache.render(_this.annotationTemplate, _data);
+ var _el = jQuery(_html);
+ content.append(_el);
});
- };
+ }
+ }
+ };
};
+
+export { Transcript, transcriptStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Transcript.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,9 @@
+.Ldt-Transcript-Annotation {
+ margin-right: .5em;
+}
+.Ldt-Transcript-Annotation:hover {
+ background-color: #bbb;
+}
+.Ldt-Transcript-Annotation.active {
+ background-color: #ddd;
+}
--- a/src/widgets/Tweet.css Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-.Ldt-Tweet-Widget {
- border: 1px solid #b7b7b7;
- padding: 1px;
- margin: 0;
-}
-
-.Ldt-Tweet-Widget a {
- color: #0068C4;
-}
-
-.Ldt-Tweet-Widget a:hover {
- color: #003366;
-}
-
-.Ldt-Tweet-Inner {
- background: url(img/pinstripe.png);
- padding: 5px;
- margin: 0;
- min-height: 50px;
-}
-
-.Ldt-Tweet-PinClose-Buttons {
- float: right;
-}
-
-.Ldt-Tweet-PinClose-Buttons a {
- display: inline-block; width: 17px; height: 17px; margin: 2px;
- background: url(img/widget-control.png);
-}
-
-a.Ldt-Tweet-Pin {
- background-position: 0 -17px;
-}
-
-a.Ldt-Tweet-Pin:hover, a.Ldt-Tweet-Pin.active {
- background-position: -17px -17px;
-}
-
-a.Ldt-Tweet-Pin.active:hover {
- background-position: 0 -17px;
-}
-
-a.Ldt-Tweet-Close:hover {
- background-position: -17px 0;
-}
-
-.Ldt-Tweet-AvatarContainer {
- float: left; width: 48px; height: 48px; margin: 2px 4px 2px 0;
-}
-
-.Ldt-Tweet-Avatar {
- border: none; width: 48px; height: 48px;
-}
-
-.Ldt-Tweet-Inner h3 {
- margin: 2px 0 5px 52px;
- font-size: 14px;
-}
-
-a.Ldt-Tweet-ScreenName {
- text-decoration: none;
-}
-
-a.Ldt-Tweet-ScreenName:hover {
- text-decoration: underline;
-}
-
-p.Ldt-Tweet-Contents {
- margin: 5px 0 5px 52px;
- font-size: 12px;
-}
-
-.Ldt-Tweet-Bottom {
- margin: 5px 0 0;
- font-size: 12px;
- text-align: right;
-}
-
-.Ldt-Tweet-Time {
- display: inline-block;
-}
-
-.Ldt-Tweet-Bottom a {
- display: inline-block;
- margin-left: 12px;
- text-decoration: none;
-}
-
-.Ldt-Tweet-Bottom a:hover {
- text-decoration: underline;
-}
-
-.Ldt-Tweet-Icon {
- display: inline-block; width: 16px; height: 16px;
- margin: 0 2px -2px;
- background: url(img/twitter_sprites.png);
-}
-
-.Ldt-Tweet-Retweet .Ldt-Tweet-Icon {
- background-position: -80px 0;
-}
-
-.Ldt-Tweet-Retweet:hover .Ldt-Tweet-Icon {
- background-position: -96px 0;
-}
-
-.Ldt-Tweet-Reply:hover .Ldt-Tweet-Icon {
- background-position: -16px 0;
-}
\ No newline at end of file
--- a/src/widgets/Tweet.js Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/Tweet.js Wed Sep 04 17:32:50 2024 +0200
@@ -1,36 +1,40 @@
-IriSP.Widgets.Tweet = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
- this.lastAnnotation = false;
-};
-
-IriSP.Widgets.Tweet.prototype = new IriSP.Widgets.Widget();
+import _ from "lodash";
+import tweetStyles from "./Tweet.module.css";
+import jQuery from "jquery";
-IriSP.Widgets.Tweet.prototype.defaults = {
- hide_timeout: 10000,
- polemics : [
+const Tweet = function (ns) {
+ return class extends ns.Widgets.Widget {
+ constructor(player, config) {
+ super(player, config);
+ this.lastAnnotation = false;
+ }
+
+ static defaults = {
+ hide_timeout: 10000,
+ polemics: [
{
- "keywords" : [ "++" ],
- "color" : "#30d765"
+ keywords: ["++"],
+ color: "#30d765",
},
{
- "keywords" : [ "--" ],
- "color" : "#f51123"
+ keywords: ["--"],
+ color: "#f51123",
},
{
- "keywords" : [ "==" ],
- "color" : "#f1e24a"
+ keywords: ["=="],
+ color: "#f1e24a",
},
{
- "keywords" : [ "??" ],
- "color" : "#05aae6"
- }
- ],
- annotation_type: "tweet",
- pin_at_start: false
-};
+ keywords: ["??"],
+ color: "#05aae6",
+ },
+ ],
+ annotation_type: "tweet",
+ pin_at_start: false,
+ };
-IriSP.Widgets.Tweet.prototype.messages = {
- "fr": {
+ static messages = {
+ fr: {
retweet: "Retweeter",
reply: "Répondre",
keep_visible: "Empêcher la fermeture automatique",
@@ -38,9 +42,9 @@
close_widget: "Fermer l'affichage du tweet",
original_time: "Heure d'envoi\u00a0: ",
video_time: "Temps de la vidéo\u00a0: ",
- show_original: "Voir l'original"
- },
- "en": {
+ show_original: "Voir l'original",
+ },
+ en: {
retweet: "Retweet",
reply: "Reply",
keep_visible: "Keep visible",
@@ -48,121 +52,169 @@
close_widget: "Close tweet display",
original_time: "Tweet sent at: ",
video_time: "Video time: ",
- show_original: "Show original"
- }
-};
+ show_original: "Show original",
+ },
+ };
-IriSP.Widgets.Tweet.prototype.template =
- '<div class="Ldt-Tweet-Widget"><div class="Ldt-Tweet-Inner"><div class="Ldt-Tweet-PinClose-Buttons">'
- + '<a href="#" class="Ldt-Tweet-Pin Ldt-TraceMe{{#pin_at_start}} active" title="{{l10n.dont_keep_visible}}{{/pin_at_start}}{{^pin_at_start}}" title="{{l10n.keep_visible}}{{/pin_at_start}}"></a>'
- + '<a href="#" class="Ldt-Tweet-Close Ldt-TraceMe" title="{{l10n.close_widget}}"></a>'
- + '</div><div class="Ldt-Tweet-AvatarContainer"><a href="#" class="Ldt-Tweet-ProfileLink" target="_blank">'
- + '<img src="" class="Ldt-Tweet-Avatar"/></a></div><h3><a href="#" class="Ldt-Tweet-ProfileLink Ldt-Tweet-ScreenName" target="_blank">'
- + '</a> (<span class="Ldt-Tweet-FullName"></span>)</h3><p class="Ldt-Tweet-Contents"></p><div class="Ldt-Tweet-Bottom">'
- + '<span class="Ldt-Tweet-Time"></span>'
- + '<a class="Ldt-Tweet-Original" href="" target="_blank">{{l10n.show_original}}</a>'
- + '<a href="" target="_blank" class="Ldt-Tweet-Retweet"><div class="Ldt-Tweet-Icon"></div>{{l10n.retweet}}</a>'
- + '<a href="" target="_blank" class="Ldt-Tweet-Reply"><div class="Ldt-Tweet-Icon"></div>{{l10n.reply}}</a></div></div></div>';
-
+ static template =
+ '<div class="Ldt-Tweet-Widget"><div class="Ldt-Tweet-Inner"><div class="Ldt-Tweet-PinClose-Buttons">' +
+ '<a href="#" class="Ldt-Tweet-Pin Ldt-TraceMe{{#pin_at_start}} active" title="{{l10n.dont_keep_visible}}{{/pin_at_start}}{{^pin_at_start}}" title="{{l10n.keep_visible}}{{/pin_at_start}}"></a>' +
+ '<a href="#" class="Ldt-Tweet-Close Ldt-TraceMe" title="{{l10n.close_widget}}"></a>' +
+ '</div><div class="Ldt-Tweet-AvatarContainer"><a href="#" class="Ldt-Tweet-ProfileLink" target="_blank">' +
+ '<img src="" class="Ldt-Tweet-Avatar"/></a></div><h3><a href="#" class="Ldt-Tweet-ProfileLink Ldt-Tweet-ScreenName" target="_blank">' +
+ '</a> (<span class="Ldt-Tweet-FullName"></span>)</h3><p class="Ldt-Tweet-Contents"></p><div class="Ldt-Tweet-Bottom">' +
+ '<span class="Ldt-Tweet-Time"></span>' +
+ '<a class="Ldt-Tweet-Original" href="" target="_blank">{{l10n.show_original}}</a>' +
+ '<a href="" target="_blank" class="Ldt-Tweet-Retweet"><div class="Ldt-Tweet-Icon"></div>{{l10n.retweet}}</a>' +
+ '<a href="" target="_blank" class="Ldt-Tweet-Reply"><div class="Ldt-Tweet-Icon"></div>{{l10n.reply}}</a></div></div></div>';
-IriSP.Widgets.Tweet.prototype.draw = function() {
- this.renderTemplate();
- this.pinned = this.pin_at_start;
- var _this = this;
- this.$.find(".Ldt-Tweet-Pin").click(function() {
+ draw() {
+ this.renderTemplate();
+ this.pinned = this.pin_at_start;
+ var _this = this;
+ this.$.find(".Ldt-Tweet-Pin").click(function () {
_this.pinned = !_this.pinned;
- var _el = IriSP.jQuery(this);
+ var _el = jQuery(this);
if (_this.pinned) {
- _el.addClass("active").attr("title",_this.l10n.dont_keep_visible);
- _this.cancelTimeout();
+ _el.addClass("active").attr("title", _this.l10n.dont_keep_visible);
+ _this.cancelTimeout();
} else {
- _el.removeClass("active").attr("title",_this.l10n.keep_visible);
- _this.hideTimeout();
+ _el.removeClass("active").attr("title", _this.l10n.keep_visible);
+ _this.hideTimeout();
}
- });
- this.$.find(".Ldt-Tweet-Close").click(function() {
+ });
+ this.$.find(".Ldt-Tweet-Close").click(function () {
_this.hide();
- });
- this.$.hide();
- this.getWidgetAnnotations().forEach(function(_annotation) {
- _annotation.on("click", function() {
- _this.show(_annotation);
+ });
+ this.$.hide();
+ this.getWidgetAnnotations().forEach(function (_annotation) {
+ _annotation.on("click", function () {
+ _this.show(_annotation);
});
- });
-};
+ });
+ }
-IriSP.Widgets.Tweet.prototype.show = function(_tweet) {
- if (typeof _tweet !== "undefined" && typeof _tweet.source !== "undefined") {
+ show(_tweet) {
+ if (
+ typeof _tweet !== "undefined" &&
+ typeof _tweet.source !== "undefined"
+ ) {
var extend = [
- [
- /#(\w+)/gm,
- function(matches) {
- return '<a href="http://twitter.com/search?q=%23' + matches[1] + '" target="_blank">';
- },
- '</a>'
- ]
+ [
+ /#(\w+)/gm,
+ function (matches) {
+ return (
+ '<a href="http://twitter.com/search?q=%23' +
+ matches[1] +
+ '" target="_blank">'
+ );
+ },
+ "</a>",
+ ],
];
- var _urls = IriSP._(_tweet.source.entities.urls).sortBy(function(_entity) {
- return _entity.indices[0];
+ var _urls = _(_tweet.source.entities.urls).sortBy(function (_entity) {
+ return _entity.indices[0];
});
-
+
var _currentPos = 0,
- _txt = '';
- IriSP._(_urls).each(function(_url) {
- if (_url.indices[0] >= _currentPos) {
- _txt += _tweet.source.text.substring(_currentPos, _url.indices[0]);
- _txt += (typeof _url.expanded_url !== "undefined" && _url.expanded_url !== null ? _url.expanded_url : _url.url);
- _currentPos = _url.indices[1];
- }
+ _txt = "";
+ _(_urls).each(function (_url) {
+ if (_url.indices[0] >= _currentPos) {
+ _txt += _tweet.source.text.substring(_currentPos, _url.indices[0]);
+ _txt +=
+ typeof _url.expanded_url !== "undefined" &&
+ _url.expanded_url !== null
+ ? _url.expanded_url
+ : _url.url;
+ _currentPos = _url.indices[1];
+ }
});
_txt += _tweet.source.text.substring(_currentPos);
-
+
for (var _i = 0; _i < this.polemics.length; _i++) {
- var rx = IriSP.Model.regexpFromTextOrArray(this.polemics[_i].keywords);
- extend.push([
- rx,
- '<span style="background: ' + this.polemics[_i].color + '">',
- '</span>'
- ]);
+ var rx = ns.Model.regexpFromTextOrArray(this.polemics[_i].keywords);
+ extend.push([
+ rx,
+ '<span style="background: ' + this.polemics[_i].color + '">',
+ "</span>",
+ ]);
}
- var rx = (_tweet.found ? (_this.source.getAnnotations().regexp || false) : false),
- profile_url = _tweet.source.user ? _tweet.source.user.profile_image_url : _tweet.source.profile_image_url,
- screen_name = _tweet.source.user ? _tweet.source.user.screen_name :_tweet.source.from_user,
- user_name = _tweet.source.user ? _tweet.source.user.name :_tweet.source.from_user_name;
+ var rx = _tweet.found
+ ? _this.source.getAnnotations().regexp || false
+ : false,
+ profile_url = _tweet.source.user
+ ? _tweet.source.user.profile_image_url
+ : _tweet.source.profile_image_url,
+ screen_name = _tweet.source.user
+ ? _tweet.source.user.screen_name
+ : _tweet.source.from_user,
+ user_name = _tweet.source.user
+ ? _tweet.source.user.name
+ : _tweet.source.from_user_name;
this.$.find(".Ldt-Tweet-Avatar").attr("src", profile_url);
- this.$.find(".Ldt-Tweet-ScreenName").html('@' + screen_name);
- this.$.find(".Ldt-Tweet-ProfileLink").attr("href", "https://twitter.com/" + screen_name);
+ this.$.find(".Ldt-Tweet-ScreenName").html("@" + screen_name);
+ this.$.find(".Ldt-Tweet-ProfileLink").attr(
+ "href",
+ "https://twitter.com/" + screen_name
+ );
this.$.find(".Ldt-Tweet-FullName").html(user_name);
- this.$.find(".Ldt-Tweet-Contents").html(IriSP.textFieldHtml(_txt, rx, extend));
- this.$.find(".Ldt-Tweet-Time").html(this.l10n.original_time + new Date(_tweet.source.created_at).toLocaleTimeString() + " / " + this.l10n.video_time + _tweet.begin.toString());
- this.$.find(".Ldt-Tweet-Retweet").attr("href", "https://twitter.com/intent/retweet?tweet_id=" + _tweet.source.id_str);
- this.$.find(".Ldt-Tweet-Reply").attr("href", "https://twitter.com/intent/tweet?in_reply_to=" + _tweet.source.id_str);
- this.$.find(".Ldt-Tweet-Original").attr("href", "https://twitter.com/" + screen_name + "/status/" + _tweet.source.id_str);
+ this.$.find(".Ldt-Tweet-Contents").html(
+ ns.textFieldHtml(_txt, rx, extend)
+ );
+ this.$.find(".Ldt-Tweet-Time").html(
+ this.l10n.original_time +
+ new Date(_tweet.source.created_at).toLocaleTimeString() +
+ " / " +
+ this.l10n.video_time +
+ _tweet.begin.toString()
+ );
+ this.$.find(".Ldt-Tweet-Retweet").attr(
+ "href",
+ "https://twitter.com/intent/retweet?tweet_id=" + _tweet.source.id_str
+ );
+ this.$.find(".Ldt-Tweet-Reply").attr(
+ "href",
+ "https://twitter.com/intent/tweet?in_reply_to=" + _tweet.source.id_str
+ );
+ this.$.find(".Ldt-Tweet-Original").attr(
+ "href",
+ "https://twitter.com/" +
+ screen_name +
+ "/status/" +
+ _tweet.source.id_str
+ );
this.player.trigger("Annotation.minimize");
this.$.slideDown();
this.cancelTimeout();
if (!this.pinned) {
- this.hideTimeout();
+ this.hideTimeout();
}
- } else {
+ } else {
this.hide();
+ }
}
+
+ hide() {
+ this.player.trigger("Annotation.maximize");
+ this.$.slideUp();
+ this.cancelTimeout();
+ }
+
+ cancelTimeout() {
+ if (typeof this.hide_timer !== "undefined") {
+ window.clearTimeout(this.hide_timer);
+ this.hide_timer = undefined;
+ }
+ }
+
+ hideTimeout() {
+ this.cancelTimeout();
+ this.hide_timer = window.setTimeout(
+ this.functionWrapper("hide"),
+ this.hide_timeout
+ );
+ }
+ };
};
-IriSP.Widgets.Tweet.prototype.hide = function() {
- this.player.trigger("Annotation.maximize");
- this.$.slideUp();
- this.cancelTimeout();
-};
-
-IriSP.Widgets.Tweet.prototype.cancelTimeout = function() {
- if (typeof this.hide_timer !== "undefined") {
- window.clearTimeout(this.hide_timer);
- this.hide_timer = undefined;
- }
-};
-
-IriSP.Widgets.Tweet.prototype.hideTimeout = function() {
- this.cancelTimeout();
- this.hide_timer = window.setTimeout(this.functionWrapper("hide"), this.hide_timeout);
-};
+export { Tweet, tweetStyles };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/Tweet.module.css Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,109 @@
+.Ldt-Tweet-Widget {
+ border: 1px solid #b7b7b7;
+ padding: 1px;
+ margin: 0;
+}
+
+.Ldt-Tweet-Widget a {
+ color: #0068C4;
+}
+
+.Ldt-Tweet-Widget a:hover {
+ color: #003366;
+}
+
+.Ldt-Tweet-Inner {
+ background: url(img/pinstripe.png);
+ padding: 5px;
+ margin: 0;
+ min-height: 50px;
+}
+
+.Ldt-Tweet-PinClose-Buttons {
+ float: right;
+}
+
+.Ldt-Tweet-PinClose-Buttons a {
+ display: inline-block; width: 17px; height: 17px; margin: 2px;
+ background: url(img/widget-control.png);
+}
+
+a.Ldt-Tweet-Pin {
+ background-position: 0 -17px;
+}
+
+a.Ldt-Tweet-Pin:hover, a.Ldt-Tweet-Pin.active {
+ background-position: -17px -17px;
+}
+
+a.Ldt-Tweet-Pin.active:hover {
+ background-position: 0 -17px;
+}
+
+a.Ldt-Tweet-Close:hover {
+ background-position: -17px 0;
+}
+
+.Ldt-Tweet-AvatarContainer {
+ float: left; width: 48px; height: 48px; margin: 2px 4px 2px 0;
+}
+
+.Ldt-Tweet-Avatar {
+ border: none; width: 48px; height: 48px;
+}
+
+.Ldt-Tweet-Inner h3 {
+ margin: 2px 0 5px 52px;
+ font-size: 14px;
+}
+
+a.Ldt-Tweet-ScreenName {
+ text-decoration: none;
+}
+
+a.Ldt-Tweet-ScreenName:hover {
+ text-decoration: underline;
+}
+
+p.Ldt-Tweet-Contents {
+ margin: 5px 0 5px 52px;
+ font-size: 12px;
+}
+
+.Ldt-Tweet-Bottom {
+ margin: 5px 0 0;
+ font-size: 12px;
+ text-align: right;
+}
+
+.Ldt-Tweet-Time {
+ display: inline-block;
+}
+
+.Ldt-Tweet-Bottom a {
+ display: inline-block;
+ margin-left: 12px;
+ text-decoration: none;
+}
+
+.Ldt-Tweet-Bottom a:hover {
+ text-decoration: underline;
+}
+
+.Ldt-Tweet-Icon {
+ display: inline-block; width: 16px; height: 16px;
+ margin: 0 2px -2px;
+ background: url(img/twitter_sprites.png);
+}
+
+.Ldt-Tweet-Retweet .Ldt-Tweet-Icon {
+ background-position: -80px 0;
+}
+
+.Ldt-Tweet-Retweet:hover .Ldt-Tweet-Icon {
+ background-position: -96px 0;
+}
+
+.Ldt-Tweet-Reply:hover .Ldt-Tweet-Icon {
+ background-position: -16px 0;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/widgets/index.js Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,131 @@
+import { AdaptivePlayer } from "./AdaptivePlayer";
+import { HelloWorld, helloWorldStyles } from "./HelloWorld";
+import { Annotation, annotationStyles } from "./Annotation";
+import { AnnotationsController, annotationsControllerStyles } from "./AnnotationsController";
+import { AnnotationsList, annotationsListStyles } from "./AnnotationsList";
+import { Arrow } from "./Arrow";
+import { Controller, controllerStyles } from "./Controller";
+import { CreateAnnotation, createAnnotationStyles } from "./CreateAnnotation";
+import { CurrentSegmentInfobox, currentSegmentInfoboxStyles } from "./CurrentSegmentInfobox";
+import { DailymotionPlayer } from "./DailymotionPlayer";
+import { EnrichedPlan, enrichedPlanStyles } from "./EnrichedPlan";
+import { Highlighter, highlighterStyles } from "./Highlighter";
+import { HtmlMashupPlayer } from "./HtmlMashupPlayer";
+import { HtmlPlayer } from "./HtmlPlayer";
+import { ImageDisplay, imageDisplayStyles } from "./ImageDisplay";
+import { JwpPlayer } from "./JwpPlayer";
+//import { KnowledgeConcierge, knowledgeConciergeStyles } from "./KnowledgeConcierge";
+import { LatestAnnotation, latestAnnotationStyles } from "./LatestAnnotation";
+import { MashupPlayer, mashupPlayerStyles } from "./MashupPlayer";
+import { Mediafragment } from "./Mediafragment";
+import { MediaList, mediaListStyles } from "./MediaList";
+import { NoteTaking, noteTakingStyles } from "./NoteTaking";
+import { PlaceholderPlayer, placeholderPlayerStyles } from "./PlaceholderPlayer";
+import { Polemic, polemicStyles } from "./Polemic";
+import { PopcornPlayer } from "./PopcornPlayer";
+import { Quiz, UniqueChoiceQuestion, MultipleChoiceQuestion, quizStyles } from "./Quiz";
+import { QuizCreator, quizCreatorStyles } from "./QuizCreator";
+// import { Renkan, renkanStyles } from "./Renkan";
+import { Segments, segmentsStyles } from "./Segments";
+import { Shortcuts, shortcutsStyles } from "./Shortcuts";
+import { Slice, sliceStyles } from "./Slice";
+import { SlidePreview, slidePreviewStyles } from "./SlidePreview";
+import { Slider, sliderStyles } from "./Slider";
+// import { Slideshare, slideshareStyles } from "./Slideshare";
+import { SlideVideoPlayer, slideVideoPlayerStyles } from "./SlideVideoPlayer";
+import { Social, socialStyles } from "./Social";
+import { Sparkline } from "./Sparkline";
+import { SpelSyncHtml } from "./SpelSyncHtml";
+import { Tagcloud, tagcloudStyles } from "./Tagcloud";
+import { Title } from "./Title";
+import { Tooltip, tooltipStyles } from "./Tooltip";
+import { Transcript, transcriptStyles } from "./Transcript";
+import { Tweet, tweetStyles } from "./Tweet";
+import { AutoPlayer } from "./AutoPlayer";
+import { MultiSegments } from "./MultiSegments";
+
+export default function (ns) {
+ return {
+ AdaptivePlayer: AdaptivePlayer(ns),
+ AutoPlayer: AutoPlayer(ns),
+ HelloWorld: HelloWorld(ns),
+ Annotation: Annotation(ns),
+ AnnotationsController: AnnotationsController(ns),
+ AnnotationsList: AnnotationsList(ns),
+ Arrow: Arrow(ns),
+ Controller: Controller(ns),
+ CreateAnnotation: CreateAnnotation(ns),
+ CurrentSegmentInfobox: CurrentSegmentInfobox(ns),
+ DailymotionPlayer: DailymotionPlayer(ns),
+ EnrichedPlan: EnrichedPlan(ns),
+ Highlighter: Highlighter(ns),
+ HtmlMashupPlayer: HtmlMashupPlayer(ns),
+ HtmlPlayer: HtmlPlayer(ns),
+ ImageDisplay: ImageDisplay(ns),
+ JwpPlayer: JwpPlayer(ns),
+// KnowledgeConcierge: KnowledgeConcierge(ns),
+ LatestAnnotation: LatestAnnotation(ns),
+ MashupPlayer: MashupPlayer(ns),
+ Mediafragment: Mediafragment(ns),
+ MediaList: MediaList(ns),
+ MultiSegments: MultiSegments(ns),
+ NoteTaking: NoteTaking(ns),
+ PlaceholderPlayer: PlaceholderPlayer(ns),
+ Polemic: Polemic(ns),
+ PopcornPlayer: PopcornPlayer(ns),
+ Quiz: Quiz(ns),
+ UniqueChoiceQuestion: UniqueChoiceQuestion(ns),
+ MultipleChoiceQuestion: MultipleChoiceQuestion(ns),
+ QuizCreator: QuizCreator(ns),
+// Renkan: Renkan(ns),
+ Segments: Segments(ns),
+ Shortcuts: Shortcuts(ns),
+ Slice: Slice(ns),
+ SlidePreview: SlidePreview(ns),
+ Slider: Slider(ns),
+// Slideshare: Slideshare(ns),
+ SlideVideoPlayer: SlideVideoPlayer(ns),
+ Social: Social(ns),
+ Sparkline: Sparkline(ns),
+ SpelSyncHtml: SpelSyncHtml(ns),
+ Tagcloud: Tagcloud(ns),
+ Title: Title(ns),
+ Tooltip: Tooltip(ns),
+ Transcript: Transcript(ns),
+ Tweet: Tweet(ns),
+ styles: {
+ annotationStyles,
+ helloWorldStyles,
+ annotationsControllerStyles,
+ annotationsListStyles,
+ controllerStyles,
+ createAnnotationStyles,
+ currentSegmentInfoboxStyles,
+ enrichedPlanStyles,
+ highlighterStyles,
+ imageDisplayStyles,
+// knowledgeConciergeStyles,
+ latestAnnotationStyles,
+ mashupPlayerStyles,
+ mediaListStyles,
+ noteTakingStyles,
+ placeholderPlayerStyles,
+ polemicStyles,
+ quizStyles,
+ quizCreatorStyles,
+// renkanStyles,
+ segmentsStyles,
+ shortcutsStyles,
+ sliceStyles,
+ slidePreviewStyles,
+ sliderStyles,
+// slideshareStyles,
+ slideVideoPlayerStyles,
+ socialStyles,
+ tagcloudStyles,
+ tooltipStyles,
+ transcriptStyles,
+ tweetStyles,
+ }
+ };
+}
--- a/test/dailymotion.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <title>Metadataplayer test with Dailymotion</title>
- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
- <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
- </head>
-
- <body>
- <h1>Metadataplayer test with Dailymotion</h1>
- <div id="LdtPlayer"></div>
- <div id="AnnotationsListContainer"></div>
- <script type="text/javascript">
-IriSP.libFiles.defaultDir = "libs/";
-IriSP.widgetsDir = "metadataplayer";
-var _metadata = {
- url: "json/ldt-dailymotion.json",
- format: 'ldt'
-};
-var _config = {
- width : 620,
- container : 'LdtPlayer',
- default_options: {
- metadata: _metadata
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- { type: "AutoPlayer" },
- { type: "Sparkline" },
- { type: "Slider" },
- { type: "Controller" },
- { type: "Polemic" },
- { type: "Segments" },
- { type: "Annotation" },
- { type: "CreateAnnotation" },
- { type: "Tweet" },
- { type: "Tagcloud" },
- {
- type: "AnnotationsList",
- container: "AnnotationsListContainer"
- },
- { type: "Mediafragment"}
- ]
-};
-_myPlayer = new IriSP.Metadataplayer(_config);
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/dailymotion.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,51 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with Dailymotion</title>
+ <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+ <link href='test.css' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with Dailymotion</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <script type="text/javascript">
+IriSP.libFiles.defaultDir = "libs/";
+IriSP.widgetsDir = "metadataplayer";
+var _metadata = {
+ url: "json/ldt-dailymotion.json",
+ format: 'ldt'
+};
+var _config = {
+ width : 620,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css : 'metadataplayer/LdtPlayer-core.css',
+ widgets: [
+ { type: "AutoPlayer" },
+ { type: "Sparkline" },
+ { type: "Slider" },
+ { type: "Controller" },
+ { type: "Polemic" },
+ { type: "Segments" },
+ { type: "Annotation" },
+ { type: "CreateAnnotation" },
+ { type: "Tweet" },
+ { type: "Tagcloud" },
+ {
+ type: "AnnotationsList",
+ container: "AnnotationsListContainer"
+ },
+ { type: "Mediafragment"}
+ ]
+};
+_myPlayer = new IriSP.Metadataplayer(_config);
+ </script>
+ </body>
+</html>
--- a/test/ext-trace.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <title>Metadataplayer test with JwPlayer</title>
- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
- <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
- <script type="text/javascript" src="libs/jquery.min.js"></script>
- <script type="text/javascript" src="libs/tracemanager.js" type="text/javascript"></script>
- </head>
-
- <body>
- <h1>Metadataplayer test with JwPlayer</h1>
- <div id="LdtPlayer"></div>
- <div id="AnnotationsListContainer"></div>
- <script type="text/javascript">
-IriSP.libFiles.defaultDir = "libs/";
-IriSP.language = 'fr';
-IriSP.widgetsDir = "metadataplayer";
-var _tracer = tracemanager.init_trace("test", {
- url: "http://traces.advene.org:5000/",
- requestmode: "GET",
- syncmode: "sync",
- default_subject: "tests-Metadataplayer"
- });
-_tracer.trace("CallFromOutside");
-var _metadata = {
- url: 'json/ldt-ogv.json',
- format: 'ldt'
-};
-var _config = {
- width : 550,
- container : 'LdtPlayer',
- default_options: {
- metadata: _metadata
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- {
- type: "AutoPlayer",
- live: true,
- height: 350,
- width: 550,
- provider: "rtmp",
- autostart: true
- },
- { type: "Slider" },
- { type: "Controller" },
- { type: "Polemic" },
- { type: "Segments" },
- { type: "Slice" },
- {
- type: "Arrow",
- base_height: 4
- },
- { type: "Annotation" },
- {
- type: "CreateAnnotation",
- api_endpoint_template: "http://capsicum/pf/ldtplatform/api/ldt/annotations/{{id}}.json",
- creator_name: "Metadataplayer",
- creator_avatar: "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png",
- tag_titles: ["#amateur", "#digital-humanities"]
- },
- { type: "Tweet" },
- {
- type: "Tagcloud"
- },
- {
- type: "AnnotationsList",
- container: "AnnotationsListContainer",
- default_thumbnail : "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png"
- },
- {
- type: "Trace",
- tracer: _tracer,
- js_console: true,
- extend: {
- test: 42
- }
- }
- ]
-};
-
-var _myPlayer = new IriSP.Metadataplayer(_config);
-
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ext-trace.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with JwPlayer</title>
+ <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+ <link href='test.css' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
+ <script type="text/javascript" src="libs/jquery.min.js"></script>
+ <script type="text/javascript" src="libs/tracemanager.js" type="text/javascript"></script>
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with JwPlayer</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <script type="text/javascript">
+IriSP.libFiles.defaultDir = "libs/";
+IriSP.language = 'fr';
+IriSP.widgetsDir = "metadataplayer";
+var _tracer = tracemanager.init_trace("test", {
+ url: "http://traces.advene.org:5000/",
+ requestmode: "GET",
+ syncmode: "sync",
+ default_subject: "tests-Metadataplayer"
+ });
+_tracer.trace("CallFromOutside");
+var _metadata = {
+ url: 'json/ldt-ogv.json',
+ format: 'ldt'
+};
+var _config = {
+ width : 550,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css : 'metadataplayer/LdtPlayer-core.css',
+ widgets: [
+ {
+ type: "AutoPlayer",
+ live: true,
+ height: 350,
+ width: 550,
+ provider: "rtmp",
+ autostart: true
+ },
+ { type: "Slider" },
+ { type: "Controller" },
+ { type: "Polemic" },
+ { type: "Segments" },
+ { type: "Slice" },
+ {
+ type: "Arrow",
+ base_height: 4
+ },
+ { type: "Annotation" },
+ {
+ type: "CreateAnnotation",
+ api_endpoint_template: "http://capsicum/pf/ldtplatform/api/ldt/annotations/{{id}}.json",
+ creator_name: "Metadataplayer",
+ creator_avatar: "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png",
+ tag_titles: ["#amateur", "#digital-humanities"]
+ },
+ { type: "Tweet" },
+ {
+ type: "Tagcloud"
+ },
+ {
+ type: "AnnotationsList",
+ container: "AnnotationsListContainer",
+ default_thumbnail : "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png"
+ },
+ {
+ type: "Trace",
+ tracer: _tracer,
+ js_console: true,
+ extend: {
+ test: 42
+ }
+ }
+ ]
+};
+
+var _myPlayer = new IriSP.Metadataplayer(_config);
+
+ </script>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hello-world-dist.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with JwPlayer</title>
+ <!-- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+-->
+ <link href="/dist/LdtPlayer-core.css" rel="stylesheet" type="text/css" />
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with JwPlayer</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <script src="/dist/LdtPlayer-core.js" type="text/javascript"></script>
+ <script type="text/javascript">
+ document.addEventListener("DOMContentLoaded", (event) => {
+ const IriSP = window.IriSP;
+ IriSP.language = "fr";
+ IriSP.widgetsDir = "metadataplayer";
+ var _metadata = {
+ // url: 'json/ldt-jwplayer.json',
+ url: "https://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/e2f36e5c-8b26-11e2-a28d-00145ea4a2be",
+ // url: 'http://capsicum/pf/ldtplatform/ldt/cljson/id/f1a17368-2bc8-11e1-b21a-00145ea49a02',
+ // url: 'http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/fc0a654e-49ea-11e2-b4ad-00145ea4a2be',
+ // dataType: "json",
+ format: "ldt",
+ };
+ var _config = {
+ width: 550,
+ container: "LdtPlayer",
+ default_options: {
+ metadata: _metadata,
+ },
+ widgets: [
+ {
+ type: "HelloWorld",
+ },
+ // { type: "Trace",
+ // js_console: true }
+ ],
+ };
+
+ var _myPlayer = new IriSP.Metadataplayer(_config);
+ });
+ </script>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hello-world.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with JwPlayer</title>
+ <!-- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+-->
+ <link href="/src/main.module.css" rel="stylesheet" type="text/css" />
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with JwPlayer</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <script type="module">
+ import LdtPlayerCore from "/src/main.js";
+ document.addEventListener("DOMContentLoaded", (event) => {
+ const IriSP = LdtPlayerCore.IriSP;
+ IriSP.language = "fr";
+ IriSP.widgetsDir = "metadataplayer";
+ var _metadata = {
+ // url: 'json/ldt-jwplayer.json',
+ url: "https://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/e2f36e5c-8b26-11e2-a28d-00145ea4a2be",
+ // url: 'http://capsicum/pf/ldtplatform/ldt/cljson/id/f1a17368-2bc8-11e1-b21a-00145ea49a02',
+ // url: 'http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/fc0a654e-49ea-11e2-b4ad-00145ea4a2be',
+ // dataType: "json",
+ format: "ldt",
+ };
+ var _config = {
+ width: 550,
+ container: "LdtPlayer",
+ default_options: {
+ metadata: _metadata,
+ },
+ widgets: [
+ {
+ type: "HelloWorld",
+ },
+ // { type: "Trace",
+ // js_console: true }
+ ],
+ };
+
+ var _myPlayer = new IriSP.Metadataplayer(_config);
+ });
+ </script>
+ </body>
+</html>
--- a/test/index.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <title>Metadataplayer test configurations</title>
- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
- <link href='test.css' rel='stylesheet' type='text/css'>
- </head>
-
- <body>
- <h1>Metadataplayer test configurations</h1>
- <ul class="pageindex">
- <li><h2><a href="placeholderplayer.htm">with Placeholder Player instead of video</a></h2></li>
- <li><h2><a href="jwplayer.htm">with JwPlayer (default on Ldt Platform, uses custom player functions)</a></h2></li>
- <li><h2><a href="oggvideo.htm">with HTML5/OGG (compatible with Firefox and Chrome)</a></h2></li>
- <li><h2><a href="mp4video.htm">with MP4 (HTML5 with compatible browsers, JwPlayer with others)</a></h2></li>
- <li><h2><a href="youtube.htm">with Youtube (uses Popcorn.js and the Popcorn Youtube plugin/player)</a></h2></li>
- <li><h2><a href="vimeo.htm">with Vimeo (uses Popcorn.js and the Popcorn Vimeo plugin/player)</a></h2></li>
- <li><h2><a href="dailymotion.htm">with Dailymotion (uses custom player functions)</a></h2></li>
- </ul>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/index.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,23 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test configurations</title>
+ <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+ <link href='test.css' rel='stylesheet' type='text/css'>
+ </head>
+
+ <body>
+ <h1>Metadataplayer test configurations</h1>
+ <ul class="pageindex">
+ <li><h2><a href="placeholderplayer.htm">with Placeholder Player instead of video</a></h2></li>
+ <li><h2><a href="jwplayer.htm">with JwPlayer (default on Ldt Platform, uses custom player functions)</a></h2></li>
+ <li><h2><a href="oggvideo.htm">with HTML5/OGG (compatible with Firefox and Chrome)</a></h2></li>
+ <li><h2><a href="mp4video.htm">with MP4 (HTML5 with compatible browsers, JwPlayer with others)</a></h2></li>
+ <li><h2><a href="youtube.htm">with Youtube (uses Popcorn.js and the Popcorn Youtube plugin/player)</a></h2></li>
+ <li><h2><a href="vimeo.htm">with Vimeo (uses Popcorn.js and the Popcorn Vimeo plugin/player)</a></h2></li>
+ <li><h2><a href="dailymotion.htm">with Dailymotion (uses custom player functions)</a></h2></li>
+ </ul>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/iri-ressources_embed.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,217 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with iriressources</title>
+ <!-- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+-->
+ <link href="test.css" rel="stylesheet" type="text/css" />
+ <link href="/src/main.module.css" rel="stylesheet" type="text/css" />
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with iri ressources</h1>
+
+ <div id="ld-video-embed">
+ <div
+ id="player_project_330760fc-a31f-11e5-8011-00145ea4a2be_embed"
+ style="float: left; width: 550; margin-bottom: 20px; margin-top: 20px"
+ class="iri_player_embed"
+ ></div>
+ <script type="module">
+ import LdtPlayerCore from "/src/main.js";
+ if (typeof jQuery == "undefined") {
+ jQuery = IriSP.jQuery;
+ }
+ var metadatas = {
+ metadata: {
+ url: "https://ldt.iri.centrepompidou.fr/ldtplatform/api/ldt/1.0/contents/all/84762f8c-a31e-11e5-8011-00145ea4a2be/",
+ },
+ };
+ var metadata_key = "metadata";
+ IriSP.libFiles.defaultDir =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/js/";
+ IriSP.libFiles.locations.jwPlayerSWF =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/swf/player.swf";
+ IriSP.libFiles.locations.recordMicSwf =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/swf/record_mic.swf";
+ IriSP.libFiles.locations.zeroClipboardSwf =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/swf/ZeroClipboard10.swf";
+ IriSP.libFiles.locations.cssjQueryUI =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/css/jq-css/themes/base/jquery-ui.css";
+ IriSP.language = "fr-fr";
+
+ IriSP.widgetsDir =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/metadataplayer";
+ var _metadata = {
+ url: metadatas[metadata_key].url,
+ format: "ldt",
+ };
+ var _config = {
+ width: "550",
+ container:
+ "player_project_330760fc-a31f-11e5-8011-00145ea4a2be_embed",
+ css: "https://ldt.iri.centrepompidou.fr/static/site/ldt/metadataplayer/LdtPlayer-core.css",
+ default_options: {
+ metadata: _metadata,
+ },
+ widgets: [
+ {
+ type: "AutoPlayer",
+ streamer: function (_url) {
+ var _matches = _url.match(/^[^\/]+\/\/[^\/]+\/[^\/]+\//);
+ if (_matches) {
+ return _matches[0];
+ } else {
+ return _url;
+ }
+ },
+ url_transform: function (url) {
+ // Adaptation to jwplayer 6
+ if (url.substr(url.length - 4).toLowerCase() === ".flv") {
+ return url.replace(
+ "/ddc_player/video/",
+ "/ddc_player/flv:video/"
+ );
+ }
+ return url.replace(
+ "/ddc_player/video/",
+ "/ddc_player/mp4:video/"
+ );
+ },
+ height: 300,
+ autostart: true,
+ },
+ {
+ type: "Slider",
+ },
+ {
+ type: "Controller",
+ },
+ {
+ type: "Mediafragment",
+ },
+ {
+ type: "Polemic",
+ annotation_type: ["tweet"],
+ defaultcolor: "#585858",
+ foundcolor: "#fc00ff",
+ default_version: "3",
+ max_elements: "50",
+ polemics: {
+ 1: [
+ { keywords: ["++"], color: "#1D973D", name: "OK" },
+ { keywords: ["--"], color: "#CE0A15", name: "KO" },
+ {
+ keywords: ["==", "http://"],
+ color: "#C5A62D",
+ name: "REF",
+ },
+ { keywords: ["?"], color: "#036AAE", name: "Q" },
+ ],
+ 3: [
+ { keywords: ["++"], color: "#196be6", name: "OK" },
+ { keywords: ["??"], color: "#e6b919", name: "KO" },
+ {
+ keywords: ["**", "http://", "https://"],
+ color: "#e619e6",
+ name: "REF",
+ },
+ { keywords: ["=="], color: "#42e619", name: "Q" },
+ ],
+ 2: [
+ { keywords: ["++"], color: "#1D973D", name: "OK" },
+ { keywords: ["!!"], color: "#CE0A15", name: "KO" },
+ {
+ keywords: ["==", "http://"],
+ color: "#C5A62D",
+ name: "REF",
+ },
+ { keywords: ["?"], color: "#036AAE", name: "Q" },
+ ],
+ },
+ },
+ {
+ type: "Polemic",
+ annotation_type: ["chat"],
+ defaultcolor: "#9b8864",
+ foundcolor: "#fc00ff",
+ default_version: "3",
+ max_elements: "100",
+ polemics: {
+ 1: [
+ { keywords: ["++"], color: "#1D973D", name: "OK" },
+ { keywords: ["--"], color: "#CE0A15", name: "KO" },
+ {
+ keywords: ["==", "http://"],
+ color: "#C5A62D",
+ name: "REF",
+ },
+ { keywords: ["?"], color: "#036AAE", name: "Q" },
+ ],
+ 3: [
+ { keywords: ["++"], color: "#196be6", name: "OK" },
+ { keywords: ["??"], color: "#e6b919", name: "KO" },
+ {
+ keywords: ["**", "http://", "https://"],
+ color: "#e619e6",
+ name: "REF",
+ },
+ { keywords: ["=="], color: "#42e619", name: "Q" },
+ ],
+ 2: [
+ { keywords: ["++"], color: "#1D973D", name: "OK" },
+ { keywords: ["!!"], color: "#CE0A15", name: "KO" },
+ {
+ keywords: ["==", "http://"],
+ color: "#C5A62D",
+ name: "REF",
+ },
+ { keywords: ["?"], color: "#036AAE", name: "Q" },
+ ],
+ },
+ },
+ {
+ type: "Sparkline",
+ lineColor: "#7492b4",
+ fillColor: "#aeaeb8",
+ },
+ {
+ type: "MultiSegments",
+ },
+ {
+ type: "Annotation",
+ start_minimized: true,
+ site_name: "Lignes de Temps",
+ annotation_type: ["chap", "découpage"],
+ },
+ {
+ type: "Tweet",
+ hide_timeout: 5000,
+ },
+ {
+ type: "AnnotationsList",
+ ajax_url:
+ "https://ldt.iri.centrepompidou.fr/ldtplatform/api/ldt/1.0/segments/bytimecode///",
+ container: "AnnotationsList_ext",
+ ajax_granularity: 300000,
+ default_thumbnail:
+ "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
+ show_audio: true,
+ rtmp_streamer:
+ "rtmp://media.iri.centrepompidou.fr/ddc_micro_record/",
+ },
+ ],
+ };
+
+ const _myPlayer = new IriSP.Metadataplayer(_config);
+ </script>
+ <div
+ id="AnnotationsList_ext"
+ class="ext_widget Ldt-TraceMe Ldt-Widget"
+ style="float: left; width: 400px; margin-bottom: 10px; margin-top: 10px"
+ widget-type="AnnotationsList"
+ ></div>
+ </div>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/iri-ressources_embed_dist.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,217 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with iriressources</title>
+ <!-- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+-->
+ <link href="test.css" rel="stylesheet" type="text/css" />
+ <link href="/dist/LdtPlayer-core.css" rel="stylesheet" type="text/css" />
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with iri ressources</h1>
+
+ <div id="ld-video-embed">
+ <div
+ id="player_project_330760fc-a31f-11e5-8011-00145ea4a2be_embed"
+ style="float: left; width: 550; margin-bottom: 20px; margin-top: 20px"
+ class="iri_player_embed"
+ ></div>
+ <script type="text/javascript" src="/dist/LdtPlayer-core.js"></script>
+ <script type="text/javascript">
+ if (typeof jQuery == "undefined") {
+ jQuery = IriSP.jQuery;
+ }
+ var metadatas = {
+ metadata: {
+ url: "https://ldt.iri.centrepompidou.fr/ldtplatform/api/ldt/1.0/contents/all/84762f8c-a31e-11e5-8011-00145ea4a2be/",
+ },
+ };
+ var metadata_key = "metadata";
+ IriSP.libFiles.defaultDir =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/js/";
+ IriSP.libFiles.locations.jwPlayerSWF =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/swf/player.swf";
+ IriSP.libFiles.locations.recordMicSwf =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/swf/record_mic.swf";
+ IriSP.libFiles.locations.zeroClipboardSwf =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/swf/ZeroClipboard10.swf";
+ IriSP.libFiles.locations.cssjQueryUI =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/css/jq-css/themes/base/jquery-ui.css";
+ IriSP.language = "fr-fr";
+
+ IriSP.widgetsDir =
+ "https://ldt.iri.centrepompidou.fr/static/site/ldt/metadataplayer";
+ var _metadata = {
+ url: metadatas[metadata_key].url,
+ format: "ldt",
+ };
+ var _config = {
+ width: "550",
+ container:
+ "player_project_330760fc-a31f-11e5-8011-00145ea4a2be_embed",
+ css: "https://ldt.iri.centrepompidou.fr/static/site/ldt/metadataplayer/LdtPlayer-core.css",
+ default_options: {
+ metadata: _metadata,
+ },
+ widgets: [
+ {
+ type: "AutoPlayer",
+ streamer: function (_url) {
+ var _matches = _url.match(/^[^\/]+\/\/[^\/]+\/[^\/]+\//);
+ if (_matches) {
+ return _matches[0];
+ } else {
+ return _url;
+ }
+ },
+ url_transform: function (url) {
+ // Adaptation to jwplayer 6
+ if (url.substr(url.length - 4).toLowerCase() === ".flv") {
+ return url.replace(
+ "/ddc_player/video/",
+ "/ddc_player/flv:video/"
+ );
+ }
+ return url.replace(
+ "/ddc_player/video/",
+ "/ddc_player/mp4:video/"
+ );
+ },
+ height: 300,
+ autostart: true,
+ },
+ {
+ type: "Slider",
+ },
+ {
+ type: "Controller",
+ },
+ {
+ type: "Mediafragment",
+ },
+ {
+ type: "Polemic",
+ annotation_type: ["tweet"],
+ defaultcolor: "#585858",
+ foundcolor: "#fc00ff",
+ default_version: "3",
+ max_elements: "50",
+ polemics: {
+ 1: [
+ { keywords: ["++"], color: "#1D973D", name: "OK" },
+ { keywords: ["--"], color: "#CE0A15", name: "KO" },
+ {
+ keywords: ["==", "http://"],
+ color: "#C5A62D",
+ name: "REF",
+ },
+ { keywords: ["?"], color: "#036AAE", name: "Q" },
+ ],
+ 3: [
+ { keywords: ["++"], color: "#196be6", name: "OK" },
+ { keywords: ["??"], color: "#e6b919", name: "KO" },
+ {
+ keywords: ["**", "http://", "https://"],
+ color: "#e619e6",
+ name: "REF",
+ },
+ { keywords: ["=="], color: "#42e619", name: "Q" },
+ ],
+ 2: [
+ { keywords: ["++"], color: "#1D973D", name: "OK" },
+ { keywords: ["!!"], color: "#CE0A15", name: "KO" },
+ {
+ keywords: ["==", "http://"],
+ color: "#C5A62D",
+ name: "REF",
+ },
+ { keywords: ["?"], color: "#036AAE", name: "Q" },
+ ],
+ },
+ },
+ {
+ type: "Polemic",
+ annotation_type: ["chat"],
+ defaultcolor: "#9b8864",
+ foundcolor: "#fc00ff",
+ default_version: "3",
+ max_elements: "100",
+ polemics: {
+ 1: [
+ { keywords: ["++"], color: "#1D973D", name: "OK" },
+ { keywords: ["--"], color: "#CE0A15", name: "KO" },
+ {
+ keywords: ["==", "http://"],
+ color: "#C5A62D",
+ name: "REF",
+ },
+ { keywords: ["?"], color: "#036AAE", name: "Q" },
+ ],
+ 3: [
+ { keywords: ["++"], color: "#196be6", name: "OK" },
+ { keywords: ["??"], color: "#e6b919", name: "KO" },
+ {
+ keywords: ["**", "http://", "https://"],
+ color: "#e619e6",
+ name: "REF",
+ },
+ { keywords: ["=="], color: "#42e619", name: "Q" },
+ ],
+ 2: [
+ { keywords: ["++"], color: "#1D973D", name: "OK" },
+ { keywords: ["!!"], color: "#CE0A15", name: "KO" },
+ {
+ keywords: ["==", "http://"],
+ color: "#C5A62D",
+ name: "REF",
+ },
+ { keywords: ["?"], color: "#036AAE", name: "Q" },
+ ],
+ },
+ },
+ {
+ type: "Sparkline",
+ lineColor: "#7492b4",
+ fillColor: "#aeaeb8",
+ },
+ {
+ type: "MultiSegments",
+ },
+ {
+ type: "Annotation",
+ start_minimized: true,
+ site_name: "Lignes de Temps",
+ annotation_type: ["chap", "découpage"],
+ },
+ {
+ type: "Tweet",
+ hide_timeout: 5000,
+ },
+ {
+ type: "AnnotationsList",
+ ajax_url:
+ "https://ldt.iri.centrepompidou.fr/ldtplatform/api/ldt/1.0/segments/bytimecode///",
+ container: "AnnotationsList_ext",
+ ajax_granularity: 300000,
+ default_thumbnail:
+ "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
+ show_audio: true,
+ rtmp_streamer:
+ "rtmp://media.iri.centrepompidou.fr/ddc_micro_record/",
+ },
+ ],
+ };
+
+ _myPlayer = new IriSP.Metadataplayer(_config);
+ </script>
+ <div
+ id="AnnotationsList_ext"
+ class="ext_widget Ldt-TraceMe Ldt-Widget"
+ style="float: left; width: 400px; margin-bottom: 10px; margin-top: 10px"
+ widget-type="AnnotationsList"
+ ></div>
+ </div>
+ </body>
+</html>
--- a/test/jwplayer-audio.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <title>Metadataplayer test with JwPlayer</title>
- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
- <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
- </head>
-
- <body>
- <h1>Metadataplayer test with JwPlayer</h1>
- <div id="LdtPlayer"></div>
- <div id="AnnotationsListContainer"></div>
- <script type="text/javascript">
- IriSP.libFiles.defaultDir = "libs/";
- IriSP.language = 'fr';
- IriSP.widgetsDir = "metadataplayer";
- var _metadata = {
- url: 'http://exp.iri.centrepompidou.fr/tralalere/tralalere/ldt/cljson/id/42a3fc0a-afee-11e1-82e8-58b035f6b93d?callback=?',
- format: 'ldt'
- };
- var _config = {
- width : 550,
- container : 'LdtPlayer',
- default_options: {
- metadata: _metadata
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- {
- type: "JwpPlayer",
- live: true,
- width: 1,
- height: 1,
- provider: "rtmp",
- streamer: function(_url) {
- var _matches = _url.match(/^[^\/]+\/\/[^\/]+\/[^\/]+\//);
- if (_matches) {
- return _matches[0];
- } else {
- return _url;
- }
- }
- },
- { type: "Slider" },
- { type: "Controller" },
- { type: "Polemic" },
- { type: "Segments" },
- { type: "Annotation" },
- {
- type: "CreateAnnotation",
- api_endpoint_template: "post-test.php",
- creator_name: "Metadataplayer",
- creator_avatar: "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png",
- show_mic_record: true
- },
- { type: "Tweet" },
- {
- type: "Tagger",
- api_endpoint: "post-test.php"
- },
- {
- type: "Tagcloud"
- },
- {
- type: "AnnotationsList",
- container: "AnnotationsListContainer",
- default_thumbnail : "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
- show_audio: true,
- rtmp_streamer: "rtmp://media.iri.centrepompidou.fr/ddc_micro_record/"
- //ajax_url: "/pf/ldtplatform/api/ldt/segments/{{media}}/{{begin}}/{{end}}",
- //ajax_granularity : 300000
- },
- { type: "Mediafragment"}
- ]
- };
-
- var _myPlayer = new IriSP.Metadataplayer(_config);
-
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jwplayer-audio.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,84 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with JwPlayer</title>
+ <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+ <link href='test.css' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with JwPlayer</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <script type="text/javascript">
+ IriSP.libFiles.defaultDir = "libs/";
+ IriSP.language = 'fr';
+ IriSP.widgetsDir = "metadataplayer";
+ var _metadata = {
+ url: 'http://exp.iri.centrepompidou.fr/tralalere/tralalere/ldt/cljson/id/42a3fc0a-afee-11e1-82e8-58b035f6b93d?callback=?',
+ format: 'ldt'
+ };
+ var _config = {
+ width : 550,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css : 'metadataplayer/LdtPlayer-core.css',
+ widgets: [
+ {
+ type: "JwpPlayer",
+ live: true,
+ width: 1,
+ height: 1,
+ provider: "rtmp",
+ streamer: function(_url) {
+ var _matches = _url.match(/^[^\/]+\/\/[^\/]+\/[^\/]+\//);
+ if (_matches) {
+ return _matches[0];
+ } else {
+ return _url;
+ }
+ }
+ },
+ { type: "Slider" },
+ { type: "Controller" },
+ { type: "Polemic" },
+ { type: "Segments" },
+ { type: "Annotation" },
+ {
+ type: "CreateAnnotation",
+ api_endpoint_template: "post-test.php",
+ creator_name: "Metadataplayer",
+ creator_avatar: "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png",
+ show_mic_record: true
+ },
+ { type: "Tweet" },
+ {
+ type: "Tagger",
+ api_endpoint: "post-test.php"
+ },
+ {
+ type: "Tagcloud"
+ },
+ {
+ type: "AnnotationsList",
+ container: "AnnotationsListContainer",
+ default_thumbnail : "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
+ show_audio: true,
+ rtmp_streamer: "rtmp://media.iri.centrepompidou.fr/ddc_micro_record/"
+ //ajax_url: "/pf/ldtplatform/api/ldt/segments/{{media}}/{{begin}}/{{end}}",
+ //ajax_granularity : 300000
+ },
+ { type: "Mediafragment"}
+ ]
+ };
+
+ var _myPlayer = new IriSP.Metadataplayer(_config);
+
+ </script>
+ </body>
+</html>
--- a/test/jwplayer.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <title>Metadataplayer test with JwPlayer</title>
-<!-- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
---> <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
- </head>
-
- <body>
- <h1>Metadataplayer test with JwPlayer</h1>
- <div id="LdtPlayer"></div>
- <div id="AnnotationsListContainer"></div>
- <div id="SlideShareContainer"></div>
- <script type="text/javascript">
- IriSP.libFiles.defaultDir = "libs/";
- IriSP.language = 'fr';
- IriSP.widgetsDir = "metadataplayer";
- var _metadata = {
-// url: 'json/ldt-jwplayer.json',
- url: 'http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/e2f36e5c-8b26-11e2-a28d-00145ea4a2be',
-// url: 'http://capsicum/pf/ldtplatform/ldt/cljson/id/f1a17368-2bc8-11e1-b21a-00145ea49a02',
-// url: 'http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/fc0a654e-49ea-11e2-b4ad-00145ea4a2be',
- format: 'ldt'
- };
- var _config = {
- width : 550,
- container : 'LdtPlayer',
- default_options: {
- metadata: _metadata
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- {
- type: "JwpPlayer",
- autostart: true,
- url_transform: function(url) {
- return url.replace('/ddc_player/video/','/ddc_player/mp4:video/');
- }
- },
- { type: "Slider" },
- { type: "Controller" },
- {
- type: "Polemic",
- max_elements: 20,
- annotation_type: false
- },
- { type: "Sparkline" },
- { type: "MultiSegments" },
- {
- type: "CreateAnnotation",
- api_endpoint_template: "post-test.php",
- creator_name: "Metadataplayer",
- creator_avatar: "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png",
- tag_titles: ["amateur", "digital-humanities"],
- //show_title_field: false,
- //show_creator_field: false,
- show_slice: false
- },
- {
- type: "Tweet"
- },
- {
- type: "Tagcloud"
- },
- {
- type: "AnnotationsList",
- container: "AnnotationsListContainer",
- default_thumbnail : "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
- //ajax_url: "/pf/ldtplatform/api/ldt/1.0/segments/bytimecode/{{media}}/{{begin}}/{{end}}",
- //ajax_granularity : 300000
- },
- {
- type: "Slideshare",
- container: "SlideShareContainer"
- },
- { type: "Mediafragment"},
-// { type: "Trace",
-// js_console: true }
- ]
- };
-
- var _myPlayer = new IriSP.Metadataplayer(_config);
-
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jwplayer.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,87 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with JwPlayer</title>
+<!-- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+--> <link href='test.css' rel='stylesheet' type='text/css'>
+ <link href="/src/main.module.css" rel="stylesheet" type="text/css" />
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with JwPlayer</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <div id="SlideShareContainer"></div>
+ <script type="module">
+ import LdtPlayerCore from "/src/main.js";
+ IriSP.language = 'fr';
+ var _metadata = {
+// url: 'json/ldt-jwplayer.json',
+ url: 'https://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/e2f36e5c-8b26-11e2-a28d-00145ea4a2be',
+// url: 'http://capsicum/pf/ldtplatform/ldt/cljson/id/f1a17368-2bc8-11e1-b21a-00145ea49a02',
+// url: 'http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/fc0a654e-49ea-11e2-b4ad-00145ea4a2be',
+ format: 'ldt'
+ };
+ var _config = {
+ width : 550,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ widgets: [
+ {
+ type: "HtmlPlayer",
+ autostart: true,
+ url_transform: function(url) {
+ return url.replace('/ddc_player/video/','/ddc_player/mp4:video/');
+ }
+ },
+ { type: "Slider" },
+ { type: "Controller" },
+ {
+ type: "Polemic",
+ max_elements: 20,
+ annotation_type: false
+ },
+ { type: "Sparkline" },
+ { type: "MultiSegments" },
+ {
+ type: "CreateAnnotation",
+ api_endpoint_template: "post-test.php",
+ creator_name: "Metadataplayer",
+ creator_avatar: "https://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png",
+ tag_titles: ["amateur", "digital-humanities"],
+ //show_title_field: false,
+ //show_creator_field: false,
+ show_slice: false
+ },
+ {
+ type: "Tweet"
+ },
+ {
+ type: "Tagcloud"
+ },
+ {
+ type: "AnnotationsList",
+ container: "AnnotationsListContainer",
+ default_thumbnail : "https://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
+ //ajax_url: "/pf/ldtplatform/api/ldt/1.0/segments/bytimecode/{{media}}/{{begin}}/{{end}}",
+ //ajax_granularity : 300000
+ },
+ // {
+ // type: "Slideshare",
+ // container: "SlideShareContainer"
+ // },
+ { type: "Mediafragment"},
+// { type: "Trace",
+// js_console: true }
+ ]
+ };
+
+ var _myPlayer = new IriSP.Metadataplayer(_config);
+
+ </script>
+ </body>
+</html>
--- a/test/mp4video.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
- <title>Metadataplayer test with HTML5 / OGG Video</title>
- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
- <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
- </head>
-
- <body>
- <h1>Metadataplayer test with HTML5 / H.264 Video - Uses Popcorn with compatible browsers, JwPlayer with others</h1>
- <div id="LdtPlayer"></div>
- <div id="AnnotationsListContainer"></div>
- <script type="text/javascript">
-IriSP.libFiles.defaultDir = "libs/";
-IriSP.widgetsDir = "metadataplayer";
-var _metadata = {
- url: "json/ldt-ogv.json",
- format: 'ldt'
-};
-var _config = {
- width : 550,
- container : 'LdtPlayer',
- default_options: {
- metadata: _metadata
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- {
- type: "AdaptivePlayer",
- video: "http://media.iri.centrepompidou.fr/video/mashup/texaverybannedcartoonsuncletomscabana1947.mp4"
- },
- { type: "Sparkline" },
- { type: "Slider" },
- { type: "Controller" },
- { type: "Polemic" },
- { type: "Segments" },
- { type: "Annotation" },
- { type: "Tweet" },
- { type: "Tagcloud" },
- {
- type: "AnnotationsList",
- container: "AnnotationsListContainer"
- },
- { type: "Mediafragment"}
- ]
-};
-_myPlayer = new IriSP.Metadataplayer(_config);
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/mp4video.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,54 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <title>Metadataplayer test with HTML5 / OGG Video</title>
+ <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+ <link href='test.css' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with HTML5 / H.264 Video - Uses Popcorn with compatible browsers, JwPlayer with others</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <script type="text/javascript">
+IriSP.libFiles.defaultDir = "libs/";
+IriSP.widgetsDir = "metadataplayer";
+var _metadata = {
+ url: "json/ldt-ogv.json",
+ format: 'ldt'
+};
+var _config = {
+ width : 550,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css : 'metadataplayer/LdtPlayer-core.css',
+ widgets: [
+ {
+ type: "AdaptivePlayer",
+ video: "http://media.iri.centrepompidou.fr/video/mashup/texaverybannedcartoonsuncletomscabana1947.mp4"
+ },
+ { type: "Sparkline" },
+ { type: "Slider" },
+ { type: "Controller" },
+ { type: "Polemic" },
+ { type: "Segments" },
+ { type: "Annotation" },
+ { type: "Tweet" },
+ { type: "Tagcloud" },
+ {
+ type: "AnnotationsList",
+ container: "AnnotationsListContainer"
+ },
+ { type: "Mediafragment"}
+ ]
+};
+_myPlayer = new IriSP.Metadataplayer(_config);
+ </script>
+ </body>
+</html>
--- a/test/oggvideo.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
- <title>Metadataplayer test with HTML5 / OGG Video</title>
- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
- <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
- </head>
-
- <body>
- <h1>Metadataplayer test with HTML5 / OGG Video - Does not work with IE and Safari</h1>
- <div id="LdtPlayer"></div>
- <div id="AnnotationsListContainer"></div>
- <script type="text/javascript">
-IriSP.libFiles.defaultDir = "libs/";
-IriSP.widgetsDir = "metadataplayer";
-var _metadata = {
- url: "json/ldt-ogv.json",
- format: 'ldt'
-};
-var _config = {
- width : 460,
- container : 'LdtPlayer',
- default_options: {
- metadata: _metadata
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- { type: "AutoPlayer" },
- { type: "Slider" },
- { type: "Controller" },
- { type: "Polemic" },
- { type: "Segments" },
- { type: "Annotation" },
- { type: "Tweet" },
- { type: "Tagcloud" },
- {
- type: "AnnotationsList",
- container: "AnnotationsListContainer"
- },
- { type: "Mediafragment"}
- ]
-};
-_myPlayer = new IriSP.Metadataplayer(_config);
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/oggvideo.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,50 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <title>Metadataplayer test with HTML5 / OGG Video</title>
+ <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+ <link href='test.css' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with HTML5 / OGG Video - Does not work with IE and Safari</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <script type="text/javascript">
+IriSP.libFiles.defaultDir = "libs/";
+IriSP.widgetsDir = "metadataplayer";
+var _metadata = {
+ url: "json/ldt-ogv.json",
+ format: 'ldt'
+};
+var _config = {
+ width : 460,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css : 'metadataplayer/LdtPlayer-core.css',
+ widgets: [
+ { type: "AutoPlayer" },
+ { type: "Slider" },
+ { type: "Controller" },
+ { type: "Polemic" },
+ { type: "Segments" },
+ { type: "Annotation" },
+ { type: "Tweet" },
+ { type: "Tagcloud" },
+ {
+ type: "AnnotationsList",
+ container: "AnnotationsListContainer"
+ },
+ { type: "Mediafragment"}
+ ]
+};
+_myPlayer = new IriSP.Metadataplayer(_config);
+ </script>
+ </body>
+</html>
--- a/test/onthefly.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
- <title>Metadataplayer test with HTML5 / OGG Video</title>
- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
- <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
- <script type="text/javascript" src="libs/underscore-min.js" type="text/javascript"></script>
- </head>
-
- <body>
- <h1>Metadataplayer test with HTML5 / H.264 Video - Uses Popcorn with compatible browsers, JwPlayer with others</h1>
- <div id="LdtPlayer"></div>
- <div id="AnnotationsListContainer"></div>
- <script type="text/javascript">
-IriSP._ = _;
-IriSP.libFiles.defaultDir = "libs/";
-IriSP.widgetsDir = "metadataplayer";
-var _dir = new IriSP.Model.Directory(),
- _src = _dir.newLocalSource(),
- _media = new IriSP.Model.Media(false, _src),
- _cutt = new IriSP.Model.AnnotationType(false, _src),
- _ann1 = new IriSP.Model.Annotation(false, _src),
- _ann2 = new IriSP.Model.Annotation(false, _src);
-_cutt.title = "Chapitrage";
-_ann1.setAnnotationType(_cutt.id);
-_ann2.setAnnotationType(_cutt.id);
-_ann1.setMedia(_media.id);
-_ann2.setMedia(_media.id);
-_ann1.setBegin(0);
-_ann1.setEnd(32000);
-_ann1.title = "Première Annotation";
-_ann2.setBegin(32000);
-_ann2.setEnd(64000);
-_ann2.title = "Deuxième Annotation";
-_media.video = "trailer.mp4";
-_media.setDuration(64000);
-console.log("OK");
-var _config = {
- width : 620,
- container : 'LdtPlayer',
- default_options: {
- metadata: _src
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- {
- type: "AdaptivePlayer"
- },
- { type: "Sparkline" },
- { type: "Slider" },
- { type: "Controller" },
- { type: "Polemic" },
- { type: "Segments" },
- { type: "Annotation" },
- { type: "Tweet" },
- { type: "Tagcloud" },
- {
- type: "AnnotationsList",
- container: "AnnotationsListContainer"
- },
- { type: "Mediafragment"}
- ]
-};
-_myPlayer = new IriSP.Metadataplayer(_config);
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/onthefly.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,71 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <title>Metadataplayer test with HTML5 / OGG Video</title>
+ <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+ <link href='test.css' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
+ <script type="text/javascript" src="libs/underscore-min.js" type="text/javascript"></script>
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with HTML5 / H.264 Video - Uses Popcorn with compatible browsers, JwPlayer with others</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <script type="text/javascript">
+IriSP._ = _;
+IriSP.libFiles.defaultDir = "libs/";
+IriSP.widgetsDir = "metadataplayer";
+var _dir = new IriSP.Model.Directory(),
+ _src = _dir.newLocalSource(),
+ _media = new IriSP.Model.Media(false, _src),
+ _cutt = new IriSP.Model.AnnotationType(false, _src),
+ _ann1 = new IriSP.Model.Annotation(false, _src),
+ _ann2 = new IriSP.Model.Annotation(false, _src);
+_cutt.title = "Chapitrage";
+_ann1.setAnnotationType(_cutt.id);
+_ann2.setAnnotationType(_cutt.id);
+_ann1.setMedia(_media.id);
+_ann2.setMedia(_media.id);
+_ann1.setBegin(0);
+_ann1.setEnd(32000);
+_ann1.title = "Première Annotation";
+_ann2.setBegin(32000);
+_ann2.setEnd(64000);
+_ann2.title = "Deuxième Annotation";
+_media.video = "trailer.mp4";
+_media.setDuration(64000);
+console.log("OK");
+var _config = {
+ width : 620,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _src
+ },
+ css : 'metadataplayer/LdtPlayer-core.css',
+ widgets: [
+ {
+ type: "AdaptivePlayer"
+ },
+ { type: "Sparkline" },
+ { type: "Slider" },
+ { type: "Controller" },
+ { type: "Polemic" },
+ { type: "Segments" },
+ { type: "Annotation" },
+ { type: "Tweet" },
+ { type: "Tagcloud" },
+ {
+ type: "AnnotationsList",
+ container: "AnnotationsListContainer"
+ },
+ { type: "Mediafragment"}
+ ]
+};
+_myPlayer = new IriSP.Metadataplayer(_config);
+ </script>
+ </body>
+</html>
--- a/test/placeholderplayer.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <title>Metadataplayer test with Placeholder Player</title>
-<!-- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
---> <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
- </head>
-
- <body>
- <h1>Metadataplayer test with Placeholder Player</h1>
- <div id="LdtPlayer"></div>
- <div id="AnnotationsListContainer"></div>
- <div id="SlideShareContainer"></div>
- <script type="text/javascript">
- IriSP.libFiles.defaultDir = "libs/";
- IriSP.language = 'fr';
- IriSP.widgetsDir = "metadataplayer";
- var _metadata = {
- url: 'json/ldt-jwplayer.json',
- format: 'ldt'
- };
- var _config = {
- width : 550,
- container : 'LdtPlayer',
- default_options: {
- metadata: _metadata
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- {
- type: "PlaceholderPlayer"
- },
- { type: "Slider" },
- { type: "Controller" },
- {
- type: "Polemic",
- max_elements: 20
- },
- { type: "Sparkline" },
- { type: "MultiSegments" },
- { type: "Tweet" },
- {
- type: "Tagcloud"
- },
- {
- type: "AnnotationsList",
- container: "AnnotationsListContainer",
- default_thumbnail : "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
- },
- { type: "Mediafragment"}
- ]
- };
-
- var _myPlayer = new IriSP.Metadataplayer(_config);
-
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/placeholderplayer.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,61 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with Placeholder Player</title>
+<!-- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+--> <link href='test.css' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with Placeholder Player</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <div id="SlideShareContainer"></div>
+ <script type="text/javascript">
+ IriSP.libFiles.defaultDir = "libs/";
+ IriSP.language = 'fr';
+ IriSP.widgetsDir = "metadataplayer";
+ var _metadata = {
+ url: 'json/ldt-jwplayer.json',
+ format: 'ldt'
+ };
+ var _config = {
+ width : 550,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css : 'metadataplayer/LdtPlayer-core.css',
+ widgets: [
+ {
+ type: "PlaceholderPlayer"
+ },
+ { type: "Slider" },
+ { type: "Controller" },
+ {
+ type: "Polemic",
+ max_elements: 20
+ },
+ { type: "Sparkline" },
+ { type: "MultiSegments" },
+ { type: "Tweet" },
+ {
+ type: "Tagcloud"
+ },
+ {
+ type: "AnnotationsList",
+ container: "AnnotationsListContainer",
+ default_thumbnail : "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
+ },
+ { type: "Mediafragment"}
+ ]
+ };
+
+ var _myPlayer = new IriSP.Metadataplayer(_config);
+
+ </script>
+ </body>
+</html>
--- a/test/renkan.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <title>Metadataplayer test with Renkan</title>
- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
- <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
- <style type="text/css">
- #MainContainer {
- width: 1180px;
- margin: 0 auto;
- }
- #RenkanContainer {
- float: left;
- width: 600px;
- height: 500px;
- margin: 5px;
- }
- </style>
- </head>
-
- <body>
- <h1>Metadataplayer test with Renkan</h1>
- <div id="MainContainer">
- <div id="LdtPlayer"></div>
- <div id="RenkanContainer"></div>
- </div>
- <script type="text/javascript">
-IriSP.libFiles.defaultDir = "libs/";
-IriSP.language = 'fr';
-IriSP.widgetsDir = "metadataplayer";
-var _metadata = {
-// url: 'json/ldt-jwplayer.json',
- url: 'http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/67280b1c-ff30-11e0-a82d-00145ea49a02?callback=?',
- format: 'ldt'
-};
-var _config = {
- width : 550,
- container : 'LdtPlayer',
- default_options: {
- metadata: _metadata
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- {
- type: "JwpPlayer",
- live: true,
- height: 350,
- width: 550,
- provider: "rtmp",
- streamer: function(_url) {
- var _matches = _url.match(/^[^\/]+\/\/[^\/]+\/[^\/]+\//);
- if (_matches) {
- return _matches[0];
- } else {
- return _url;
- }
- }
- },
- { type: "Slider" },
- { type: "Controller" },
- { type: "Polemic" },
- { type: "Segments" },
- { type: "Annotation" },
- { type: "Tweet" },
- {
- type: "Renkan",
- container: "RenkanContainer",
- data: "json/renkan.json"
- },
- { type: "Mediafragment"}
- ]
-};
-
-var _myPlayer = new IriSP.Metadataplayer(_config);
-
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/renkan.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,81 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with Renkan</title>
+ <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+ <link href='test.css' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
+ <style type="text/css">
+ #MainContainer {
+ width: 1180px;
+ margin: 0 auto;
+ }
+ #RenkanContainer {
+ float: left;
+ width: 600px;
+ height: 500px;
+ margin: 5px;
+ }
+ </style>
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with Renkan</h1>
+ <div id="MainContainer">
+ <div id="LdtPlayer"></div>
+ <div id="RenkanContainer"></div>
+ </div>
+ <script type="text/javascript">
+IriSP.libFiles.defaultDir = "libs/";
+IriSP.language = 'fr';
+IriSP.widgetsDir = "metadataplayer";
+var _metadata = {
+// url: 'json/ldt-jwplayer.json',
+ url: 'http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/67280b1c-ff30-11e0-a82d-00145ea49a02?callback=?',
+ format: 'ldt'
+};
+var _config = {
+ width : 550,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css : 'metadataplayer/LdtPlayer-core.css',
+ widgets: [
+ {
+ type: "JwpPlayer",
+ live: true,
+ height: 350,
+ width: 550,
+ provider: "rtmp",
+ streamer: function(_url) {
+ var _matches = _url.match(/^[^\/]+\/\/[^\/]+\/[^\/]+\//);
+ if (_matches) {
+ return _matches[0];
+ } else {
+ return _url;
+ }
+ }
+ },
+ { type: "Slider" },
+ { type: "Controller" },
+ { type: "Polemic" },
+ { type: "Segments" },
+ { type: "Annotation" },
+ { type: "Tweet" },
+ {
+ type: "Renkan",
+ container: "RenkanContainer",
+ data: "json/renkan.json"
+ },
+ { type: "Mediafragment"}
+ ]
+};
+
+var _myPlayer = new IriSP.Metadataplayer(_config);
+
+ </script>
+ </body>
+</html>
--- a/test/slideshare.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <title>Metadataplayer test with JwPlayer</title>
- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
- <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
- <style type="text/css">
- #SlideShareContainer {
- float: left;
- width: 400px;
- margin: 10px 0;
- }
- </style>
- </head>
-
- <body>
- <h1>Metadataplayer test with JwPlayer</h1>
- <div id="LdtPlayer"></div>
- <div id="SlideShareContainer"></div>
- <div id="AnnotationsListContainer"></div>
- <script type="text/javascript">
-IriSP.libFiles.defaultDir = "libs/";
-IriSP.language = 'fr';
-IriSP.widgetsDir = "metadataplayer";
-var _metadata = {
- url: 'http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/8a1a344a-7f34-11e1-9ee2-00145ea4a2be?callback=?',
- format: 'ldt'
-};
-var _config = {
- width : 620,
- container : 'LdtPlayer',
- default_options: {
- metadata: _metadata
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- {
- type: "JwpPlayer",
- live: true,
- height: 350,
- provider: "rtmp",
- autostart: true,
- streamer: function(_url) {
- var _matches = _url.match(/^[^\/]+\/\/[^\/]+\/[^\/]+\//);
- if (_matches) {
- return _matches[0];
- } else {
- return _url;
- }
- }
- },
- { type: "Slider" },
- { type: "Controller" },
- { type: "Polemic" },
- { type: "Segments" },
- { type: "Annotation" },
- {
- type: "Segments",
- annotation_type: "Slide"
- },
- { type: "Tweet" },
- {
- type: "Tagcloud"
- },
- {
- type: "AnnotationsList",
- container: "AnnotationsListContainer"
- },
- {
- type: "Slideshare",
- container: "SlideShareContainer"
- },
- { type: "Mediafragment"}
- ]
-};
-
- var _myPlayer = new IriSP.Metadataplayer(_config);
-
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/slideshare.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,84 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Metadataplayer test with JwPlayer</title>
+ <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+ <link href='test.css' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js" type="text/javascript"></script>
+ <style type="text/css">
+ #SlideShareContainer {
+ float: left;
+ width: 400px;
+ margin: 10px 0;
+ }
+ </style>
+ </head>
+
+ <body>
+ <h1>Metadataplayer test with JwPlayer</h1>
+ <div id="LdtPlayer"></div>
+ <div id="SlideShareContainer"></div>
+ <div id="AnnotationsListContainer"></div>
+ <script type="text/javascript">
+IriSP.libFiles.defaultDir = "libs/";
+IriSP.language = 'fr';
+IriSP.widgetsDir = "metadataplayer";
+var _metadata = {
+ url: 'http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/8a1a344a-7f34-11e1-9ee2-00145ea4a2be?callback=?',
+ format: 'ldt'
+};
+var _config = {
+ width : 620,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css : 'metadataplayer/LdtPlayer-core.css',
+ widgets: [
+ {
+ type: "JwpPlayer",
+ live: true,
+ height: 350,
+ provider: "rtmp",
+ autostart: true,
+ streamer: function(_url) {
+ var _matches = _url.match(/^[^\/]+\/\/[^\/]+\/[^\/]+\//);
+ if (_matches) {
+ return _matches[0];
+ } else {
+ return _url;
+ }
+ }
+ },
+ { type: "Slider" },
+ { type: "Controller" },
+ { type: "Polemic" },
+ { type: "Segments" },
+ { type: "Annotation" },
+ {
+ type: "Segments",
+ annotation_type: "Slide"
+ },
+ { type: "Tweet" },
+ {
+ type: "Tagcloud"
+ },
+ {
+ type: "AnnotationsList",
+ container: "AnnotationsListContainer"
+ },
+ {
+ type: "Slideshare",
+ container: "SlideShareContainer"
+ },
+ { type: "Mediafragment"}
+ ]
+};
+
+ var _myPlayer = new IriSP.Metadataplayer(_config);
+
+ </script>
+ </body>
+</html>
--- a/test/spel-2.htm Sun Nov 12 22:07:33 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-<!doctype html>
-<html>
-
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
- <title>Tests Spectacle en ligne(s)</title>
- <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
- <link href='test.css' rel='stylesheet' type='text/css'>
- <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js"></script>
- <script type="text/javascript" src="spel-serializer.js"></script>
- </head>
-
- <body>
- <section style="width: 1070px; margin: 0 auto">
- <h1>Tests Spectacle en ligne(s)</h1>
- <div id="LdtPlayer"></div>
- <div id="AnnotationsListContainer"></div>
- </section>
- <script type="text/javascript">
-IriSP.libFiles.defaultDir = "libs/";
-IriSP.widgetsDir = "metadataplayer";
-var _metadata = {
- url: "json/extrait-celestins-paris.json",
- format: 'spel'
-};
-var _config = {
- width : 550,
- container : 'LdtPlayer',
- default_options: {
- metadata: _metadata
- },
- css : 'metadataplayer/LdtPlayer-core.css',
- widgets: [
- {
- type: "Title"
- },
- {
- type: "JwpPlayer",
- video: "rtmpt://sln8pxlnphabw.cloudfront.net/cfx/st/mp4:2013-09-11_11-00-57_extrait-celesti_8878b1/original_web_low.mp4",
- height: 320
- },
- { type: "Slider" },
- { type: "Controller" },
- {
- type: "Segments",
- annotation_type: ["performance","discussion"]
- },
- {
- type: "Annotation",
- show_social: false,
- show_annotation_type: true,
- annotation_type: ["performance","discussion"]
- },
- {
- type: "Polemic",
- annotation_type: "interpretation",
- polemics: [
- {
- keywords: [ "performance d'un(e) comédien(ne)" ],
- color: "#c00000"
- },
- {
- keywords: [ "Interpétation alternative de mise en scène" ],
- color: "#008000"
- },
- {
- keywords: [ "Intervention de la technique" ],
- color: "#0000f0"
- },
- ]
- },
- {
- type: "Annotation",
- annotation_type: "interpretation",
- show_social: false,
- arrow_position: 0
- },
- {
- type: "SpelSyncHtml",
- container: "AnnotationsListContainer",
- height: 600,
- width: 500,
- src: "ctb.html"
- }
- ]
-};
-_myPlayer = new IriSP.Metadataplayer(_config);
- </script>
- </body>
-</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/spel-2.html Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,91 @@
+<!doctype html>
+<html>
+
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <title>Tests Spectacle en ligne(s)</title>
+ <link href='open-sans/css/fonts.css' rel='stylesheet' type='text/css'>
+ <link href='test.css' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="metadataplayer/LdtPlayer-core.js"></script>
+ <script type="text/javascript" src="spel-serializer.js"></script>
+ </head>
+
+ <body>
+ <section style="width: 1070px; margin: 0 auto">
+ <h1>Tests Spectacle en ligne(s)</h1>
+ <div id="LdtPlayer"></div>
+ <div id="AnnotationsListContainer"></div>
+ </section>
+ <script type="text/javascript">
+IriSP.libFiles.defaultDir = "libs/";
+IriSP.widgetsDir = "metadataplayer";
+var _metadata = {
+ url: "json/extrait-celestins-paris.json",
+ format: 'spel'
+};
+var _config = {
+ width : 550,
+ container : 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css : 'metadataplayer/LdtPlayer-core.css',
+ widgets: [
+ {
+ type: "Title"
+ },
+ {
+ type: "JwpPlayer",
+ video: "rtmpt://sln8pxlnphabw.cloudfront.net/cfx/st/mp4:2013-09-11_11-00-57_extrait-celesti_8878b1/original_web_low.mp4",
+ height: 320
+ },
+ { type: "Slider" },
+ { type: "Controller" },
+ {
+ type: "Segments",
+ annotation_type: ["performance","discussion"]
+ },
+ {
+ type: "Annotation",
+ show_social: false,
+ show_annotation_type: true,
+ annotation_type: ["performance","discussion"]
+ },
+ {
+ type: "Polemic",
+ annotation_type: "interpretation",
+ polemics: [
+ {
+ keywords: [ "performance d'un(e) comédien(ne)" ],
+ color: "#c00000"
+ },
+ {
+ keywords: [ "Interpétation alternative de mise en scène" ],
+ color: "#008000"
+ },
+ {
+ keywords: [ "Intervention de la technique" ],
+ color: "#0000f0"
+ },
+ ]
+ },
+ {
+ type: "Annotation",
+ annotation_type: "interpretation",
+ show_social: false,
+ arrow_position: 0
+ },
+ {
+ type: "SpelSyncHtml",
+ container: "AnnotationsListContainer",
+ height: 600,
+ width: 500,
+ src: "ctb.html"
+ }
+ ]
+};
+_myPlayer = new IriSP.Metadataplayer(_config);
+ </script>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vite.config.js Wed Sep 04 17:32:50 2024 +0200
@@ -0,0 +1,81 @@
+import { defineConfig } from "vite";
+import banner from "vite-plugin-banner";
+import pkg from "./package.json";
+import { nodePolyfills } from "vite-plugin-node-polyfills";
+import inject from '@rollup/plugin-inject';
+
+export default defineConfig({
+ build: {
+ lib: {
+ // Could also be a dictionary or array of multiple entry points
+ entry: "./src/main.js",
+ name: "MetadataPlayer",
+ // the proper extensions will be added
+ fileName: (format) => {
+ if(format == "es")
+ return "LdtPlayer-core.lib.js"
+ else
+ return "LdtPlayer-core.js";
+ },
+ type: ["es", "cjs", "umd"],
+ },
+ rollupOptions: {
+ // make sure to externalize deps that shouldn't be bundled
+ // into your library
+ external: [],
+ output: {
+ // Provide global variables to use in the UMD build
+ // for externalized deps
+ globals: {},
+ assetFileNames: "LdtPlayer-core.[ext]",
+ },
+ },
+ define: {
+ __APP_VERSION__: JSON.stringify(process.env.npm_package_version),
+ },
+ copyPublicDir: false,
+ sourcemap: true,
+ },
+ css: {
+ modules: {
+ scopeBehaviour: "global",
+ // localsConvention: "camelCaseOnly"
+ },
+ },
+ plugins: [
+ {
+ ...inject({
+ $: 'jquery',
+ jQuery: 'jquery',
+ }),
+ enforce:"post",
+ },
+ banner(`
+ *
+ __ __ _ _ _ _
+ | \\/ | ___| |_ __ _ __| | __ _| |_ __ _ _ __ | | __ _ _ _ ___ _ __
+ | |\\/| |/ _ \\ __/ _\` |/ _\` |/ _\` | __/ _\` | '_ \\| |/ _\` | | | |/ _ \\ '__|
+ | | | | __/ || (_| | (_| | (_| | || (_| | |_) | | (_| | |_| | __/ |
+ |_| |_|\\___|\\__\\__,_|\\__,_|\\__,_|\\__\\__,_| .__/|_|\\__,_|\\__, |\\___|_|
+ |_| |___/
+
+ * Copyright 2010-2024 Institut de Recherche et d'Innovation
+ * contributor(s) : Karim Hamidou, Samuel Huron, Raphael Velt, Thibaut Cavalie, Yves-Marie Haussonne, Nicolas Durand, Olivier Aubert
+ *
+ * contact@iri.centrepompidou.fr
+ * http://www.iri.centrepompidou.fr
+ *
+ * This software is a computer program whose purpose is to show and add annotations on a video .
+ * This software is governed by the CeCILL-C license under French law and
+ * abiding by the rules of distribution of free software. You can use,
+ * modify and/ or redistribute the software under the terms of the CeCILL-C
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL-C license and that you accept its terms.
+ * ${pkg.name} - version ${pkg.version}
+ `),
+ nodePolyfills(),
+ ],
+});