Compare commits
	
		
			1 Commits
		
	
	
		
			upstream/4
			...
			debian/4.8
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 598845c89b | 
							
								
								
									
										7
									
								
								debian/README.source
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								debian/README.source
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| freeipa | ||||
|  | ||||
| Upstream does not ship unminified copies of various javascript files, so we must ship them | ||||
| in debian/missing-sources. Minified build.js, dojo.js and freeipa/{app,core}.js | ||||
| are built with a certain set of modules, so those bits are under missing-sources/{build,dojo}. | ||||
| The list of modules needed for the build are taken from install/ui/src/build.profile.js, | ||||
| install/ui/src/dojo.profile.js and install/ui/src/webui.profile.js. | ||||
							
								
								
									
										3
									
								
								debian/TODO
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								debian/TODO
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| TODO | ||||
|  | ||||
| - Bundle OpenSans fonts? Fallback works fine though | ||||
							
								
								
									
										747
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										747
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,747 @@ | ||||
| freeipa (4.8.10-2) unstable; urgency=medium | ||||
|  | ||||
|   * client: Drop obsolete nssdb migration, which is now causing an | ||||
|     error. (Closes: #971363) | ||||
|   * Move ipa-epn service to -client-epn package. | ||||
|   * control: Rebuild against new krb5. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Mon, 23 Nov 2020 20:48:56 +0200 | ||||
|  | ||||
| freeipa (4.8.10-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|   * control: Build freeipa-client-epn only where nodejs is available. | ||||
|     (Closes: #970230) | ||||
|   * install: ipa-print-pac belongs to the server instead of -client-epn. | ||||
|   * control, pkcs11-openssl-for-bind.diff: Add support for bind 9.16. | ||||
|     (LP: #1874568) | ||||
|   * fix-chrony-service-name.diff: Map to correct chrony service name. | ||||
|     (Closes: #968428) | ||||
|   * freeipa-client-epn.install: Add epn.conf. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Mon, 28 Sep 2020 13:12:26 +0300 | ||||
|  | ||||
| freeipa (4.8.8-2) unstable; urgency=medium | ||||
|  | ||||
|   * copyright: Fix duplicate-globbing-patterns lintian error. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Wed, 02 Sep 2020 11:05:55 +0300 | ||||
|  | ||||
| freeipa (4.8.8-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|     - CVE-2020-1722 (Closes: #966200) | ||||
|   * use-bind9.16.diff: Fix some paths to what's in bind9 9.16. | ||||
|   * write-out-only-one-cert-per-file.diff, tasks-fixes.diff: Dropped, | ||||
|     upstream. | ||||
|   * control: Replace node-uglify build-dependency with python3-rjsmin. | ||||
|   * control: Add freeipa-client-epn package. | ||||
|   * .install: Updated. | ||||
|   * control: Drop libnss3-dev from build-depends, use libssl for util & | ||||
|     libotp. | ||||
|   * fix-sssd-socket-activation.diff: Don't add a 'services =' line on | ||||
|     sssd.conf. (LP: #1879083) | ||||
|   * sources: Fix some lintian errors. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Wed, 02 Sep 2020 08:05:51 +0300 | ||||
|  | ||||
| freeipa (4.8.6-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|   * pki-proxy-Don-t-rely-on-running-apache-until-it-s-co.patch: Dropped, | ||||
|     upstream. | ||||
|   * migrate-to-gpg.diff: Use gpg instead of gpg2, update dependencies. | ||||
|     (Closes: #919062) | ||||
|   * control: Bump gssproxy depends. | ||||
|   * control: Relax apache2 dependency so it works on ubuntu. | ||||
|   * control: Bump policy to 4.5.0. | ||||
|   * control: Fix some M-A issues. | ||||
|   * control: Drop the dummy freeipa-admintools package. | ||||
|   * source: Update diff-ignore. | ||||
|   * rules: Don't remove po/ipa.pot on clean. | ||||
|   * tasks-fixes.diff: Use enable/disable_ldap_automount from base, | ||||
|     parse_ipa_version from redhat. Add librpm8 to python3-ipalib Depends. | ||||
|   * dnssec-race-wa.diff: Work-around racy dnssec setup, the socket isn't | ||||
|     necessarily ready when doing policy import. | ||||
|   * control: Update bind9-utils dependency. | ||||
|   * control: Bump depends on opendnssec. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Tue, 07 Apr 2020 06:28:03 +0300 | ||||
|  | ||||
| freeipa (4.8.5-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|   * control: Drop client from freeipa-tests depends. | ||||
|   * Fix-font-awesome-path.patch: Dropped, upstream. | ||||
|   * fix-ods-conf-template.diff: Dropped, upstream. | ||||
|   * Use debhelper-compat. | ||||
|   * Add debian/gitlab-ci.yml. | ||||
|     - allow blhc and piuparts to fail | ||||
|   * write-out-only-one-cert-per-file.diff: Fix writing CA cert to file. | ||||
|   * tests: Make failure an actual failure again, and dump only last 2000 | ||||
|     lines on failure, also from ipaclient log. | ||||
|   * rules: Import architecture.mk. | ||||
|   * source: Update extend-diff-ignore. | ||||
|   * server.install: Updated. | ||||
|   * pki-proxy-Don-t-rely-on-running-apache-until-it-s-co.patch: Fix | ||||
|     httpd_proxy install. | ||||
|   * control: Bump dependency on apache2 to where mod_proxy_ajp got fixed. | ||||
|   * tests: Add sudo to dependencies for dogtag. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Wed, 25 Mar 2020 19:42:37 +0200 | ||||
|  | ||||
| freeipa (4.8.3-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|     - CVE-2019-10195: Don't log passwords embedded in commands in calls | ||||
|       using batch | ||||
|     - CVE-2019-14867: Make sure to have storage space for tag | ||||
|   * Fix-font-awesome-path.patch: Fix the path to font-awesome dir. (LP: | ||||
|     #1853863) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Tue, 26 Nov 2019 20:14:47 +0200 | ||||
|  | ||||
| freeipa (4.8.2-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|   * control: Server needs to depend on the py3 version of mod-wsgi. | ||||
|   * server.install: Updated. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Wed, 20 Nov 2019 19:58:42 +0200 | ||||
|  | ||||
| freeipa (4.8.1-2) unstable; urgency=medium | ||||
|  | ||||
|   * client.postinst: Migrate checks to python3. (Closes: #936555) | ||||
|   * server.postinst: Let ipactl run the upgrader when needed, drop it from here. | ||||
|   * control: Add python3-pki-base to python3-ipaserver depends. | ||||
|   * control: Add ssl-cert to freeipa-server depends. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Thu, 12 Sep 2019 00:30:23 +0300 | ||||
|  | ||||
| freeipa (4.8.1-1) experimental; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|   * Drop upstreamed patches. | ||||
|   * install: Updated. | ||||
|   * fix-ods-conf-template.diff: Drop an obsolete conf option. | ||||
|   * rules: Rework gentarball target. | ||||
|   * control: Bump policy to 4.4.0. | ||||
|   * Bump debhelper compat to 12. | ||||
|   * Migrate to python3. | ||||
|   * d/s/local-options: Updated. | ||||
|   * install: Updated. | ||||
|   * control, install: Add freeipa-client-samba. | ||||
|   * d/pydist-overrides: Updated. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Sun, 08 Sep 2019 00:18:39 +0300 | ||||
|  | ||||
| freeipa (4.7.2-3) unstable; urgency=medium | ||||
|  | ||||
|   * control: Move python-jwcrypto to python-ipaserver depends. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Mon, 06 May 2019 08:43:34 +0300 | ||||
|  | ||||
| freeipa (4.7.2-2+exp1) experimental; urgency=medium | ||||
|  | ||||
|   * rules: Build the server for experimental. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Tue, 12 Feb 2019 16:05:05 +0200 | ||||
|  | ||||
| freeipa (4.7.2-2) unstable; urgency=medium | ||||
|  | ||||
|   * tests: Disabled, they are for the server. | ||||
|   * Split server build-deps from the stub. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Tue, 12 Feb 2019 16:02:08 +0200 | ||||
|  | ||||
| freeipa (4.7.2-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|   * client.tmpfile: Use /run instead of /var/run. | ||||
|   * control.common: Use same arch set on node-uglify build-dep as for | ||||
|     nodejs. (Closes: #918579) | ||||
|   * fix-fontawesome-path.diff: Refreshed. | ||||
|   * rules: Build only the client until Dogtag works again. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Tue, 05 Feb 2019 12:39:34 +0200 | ||||
|  | ||||
| freeipa (4.7.1-3) unstable; urgency=medium | ||||
|  | ||||
|   * control: Replace libsvrcore-dev build-dep with 389-ds-base-dev. | ||||
|   * tests: Install only the packages which are used for testing. | ||||
|   * rules: Don't run git on clean. (Closes: #912202) | ||||
|   * control: Nodejs is not available on all archs, build server packages | ||||
|     only where it is. | ||||
|   * control: Add systemd to python-ipalib depends. (Closes: #851158) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Thu, 06 Dec 2018 02:22:35 +0200 | ||||
|  | ||||
| freeipa (4.7.1-2) unstable; urgency=medium | ||||
|  | ||||
|   * control: Change python-nose to -mock on python-ipatests Depends. | ||||
|   * fix-oddjobd-conf.diff: Fix path to org.freeipa.server.conncheck. | ||||
|   * server.postinst: Fix a typo. | ||||
|   * fix-fontawesome-path.diff: Fix upgrade. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Thu, 18 Oct 2018 14:30:44 +0300 | ||||
|  | ||||
| freeipa (4.7.1-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|     - fix-replicainstall.diff dropped, not applicable anymore | ||||
|     - ipa-httpd-pwdreader-force-fqdn.diff dropped, obsolete | ||||
|     - refresh patches | ||||
|     - server: drop ipa-replica-prepare | ||||
|   * dont-migrate-to-authselect.diff We don't have authselect, so just | ||||
|     return true when trying to migrate to it. (LP: #1793994) | ||||
|   * control: Move client dependency on chrony to recommends. (Closes: | ||||
|     #909803) | ||||
|   * control: Build server on any arch again. | ||||
|   * tests: Don't fail the tests, just dump the log if something goes | ||||
|     wrong. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Tue, 09 Oct 2018 10:30:09 +0300 | ||||
|  | ||||
| freeipa (4.7.0-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. (LP: #1772447, #1772450) | ||||
|     - fix-version.diff: Dropped, not needed | ||||
|     - hack-duplicate-cert-directive.diff: Dropped, fixed upstream | ||||
|     - ldap-multiarch.diff: Dropped, fixed upstream | ||||
|     - support-pam-mkhomedir.diff: Dropped, fixed upstream | ||||
|     - fix-apache-ssl-setup.diff: Dropped, fixed upstream | ||||
|     - fix-httpd-group.diff: Dropped, fixed upstream | ||||
|     - fix-named-conf-template.diff: Dropped, fixed upstream | ||||
|     - fix-paths.diff: Dropped, fixed upstream | ||||
|     - refresh patches | ||||
|   * tests/server-install: Fix the fake domain, single label domains are not | ||||
|     supported anymore. | ||||
|   * server.postinst: Fix upgrade from earlier version. | ||||
|   * fix-fontawesome-path.diff: Fix the path to font-awesome. (LP: | ||||
|     #1772921) | ||||
|   * fix-krb5kdc-cert-path.diff: Apache can't access KDC certs, move them | ||||
|     to /var/lib/ipa/certs. (LP: #1772447) | ||||
|   * ipa-httpd-pwdreader-force-fqdn.diff: Make sure HOSTNAME is a FQDN. (LP: | ||||
|     #1769485) | ||||
|   * control: Add libjs-scriptaculous to server depends. | ||||
|   * fix-gzip-path.diff: Fix path to gzip. (LP: #1778236) | ||||
|   * control, rules: Switch rhino to nodejs for ui build. | ||||
|   * d/s/local-options: Add some files to ignore. | ||||
|   * control, copyright: Add node-uglify to build-depends, the embedded | ||||
|     copy was removed. | ||||
|   * control, fix-py3-lesscpy-name.diff: Add python3-lesscpy to build- | ||||
|     depends, call the binary with the correct name. | ||||
|   * control: Add python3-pkg-resources to build-depends. | ||||
|   * client.install: Add new template. | ||||
|   * control: Update vcs urls. | ||||
|   * control: Mark priority as optional. | ||||
|   * control, rules: Bump dh to 11. | ||||
|   * control: Add adduser to server depends. | ||||
|   * source/lintian-overrides: Updated. | ||||
|   * control: Bump policy to 4.1.5. | ||||
|   * control: Update maintainer list address. | ||||
|   * control: Build the server only on archs where 389-ds-base is | ||||
|     available. | ||||
|   * control: Bump python-ldap build-dep to 3.1. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Fri, 28 Sep 2018 14:10:34 +0300 | ||||
|  | ||||
| freeipa (4.7.0~pre1+git20180411-2) experimental; urgency=medium | ||||
|  | ||||
|   * fix-bind-ldap-so-path.diff: Dropped, the plugin uses non-MA path | ||||
|     now, fix depends to match. | ||||
|   * control: Add python-augeas to python-ipaclient depends. (LP: #1764615) | ||||
|   * ldap-multiarch.diff: Replace hack-libarch.diff with a new patch to | ||||
|     support more than x86. (LP: #1600634) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Tue, 17 Apr 2018 23:47:32 +0300 | ||||
|  | ||||
| freeipa (4.7.0~pre1+git20180411-1) experimental; urgency=medium | ||||
|  | ||||
|   * New upstream prerelease + git snapshot. | ||||
|   * tests: Fix whitespace. | ||||
|   * client.dirs: Add /var/lib/ipa-client/pki. | ||||
|   * server.post*: Enable session, session_cookie apache modules. | ||||
|   * control: Add sssd-dbus to server Depends. | ||||
|   * fix-httpd-group.diff: Fix apache group for Debian. | ||||
|   * control: Bump dependency on certmonger. | ||||
|   * support-pam-mkhomedir.diff: Add support for enabling pam_mkhomedir. | ||||
|     (LP: #1336869) | ||||
|   * control: Add libsss-certmap-dev to build-depends. | ||||
|   * control: Drop hardcoded libcurl3 dependency from client. | ||||
|   * control*, rules: Add support for client-only build. | ||||
|   * Fold admintools into the client package. | ||||
|   * fix-bind-ldap-so-path.diff: Use multiarch path to bind/ldap.so. | ||||
|   * fix-ipa-conf.diff: Dropped, upstream. | ||||
|   * rules: Force building with python2. | ||||
|   * server.install: Updated. | ||||
|   * debian/.gitignore: Ignore d/control. | ||||
|   * rules: If git is installed, revert po/ on clean. | ||||
|   * server.dirs: Add missing directories, fix some permissions in | ||||
|     postinst. | ||||
|   * control.server: Bump dogtag dependencies to 10.6.0~. | ||||
|   * control.server: Drop mod-nss from Depends, mod_ssl is used instead. | ||||
|   * enable-mod-nss-during-setup.diff: Dropped, not needed anymore. | ||||
|   * server.postinst/postrm: Enable/disable mod_ssl. | ||||
|   * control: Bump 389-ds-base dependency. | ||||
|   * rules: Modify python scripts to use python2. | ||||
|   * fix-paths.diff: Add some paths to platform data. | ||||
|   * hack-tomcat-race.diff: Restarting pki-tomcatd takes time, and renew_ca_cert | ||||
|     does that several times in a row, so wait for 80s before starting migrating | ||||
|     profiles to ldap to make sure the instance is up. | ||||
|   * fix-apache-ssl-setup.diff: Fix mod_ssl setup. | ||||
|   * hack-duplicate-cert-directive.diff: Delete a duplicate | ||||
|     SSLCertificateFile directive until upstream is fixed. | ||||
|   * server.postinst: Enable default-ssl site. | ||||
|   * control: Depend on chrony instead of ntp. | ||||
|   * fix-paths.diff: Add CHRONY_CONF. | ||||
|   * python-ipaserver.install: Updated after dropping NTP. | ||||
|   * fix-version.diff: Append +git to prerelease tag, don't require git. | ||||
|   * pydist_overrides: Added. | ||||
|   * rules: Update clean target. | ||||
|   * control: Bump depends on bind9. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Thu, 12 Apr 2018 14:01:56 +0300 | ||||
|  | ||||
| freeipa (4.6.3-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|   * support-kdb-dal-7.0.diff: Dropped, upstream. | ||||
|   * tests: Force hostname as 'autopkgtest' if the system didn't have | ||||
|     one. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Fri, 02 Feb 2018 17:27:41 +0200 | ||||
|  | ||||
| freeipa (4.6.2-4) unstable; urgency=medium | ||||
|  | ||||
|   * client.postinst: Migrate from old nssdb only if it exists. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Tue, 30 Jan 2018 17:42:08 +0200 | ||||
|  | ||||
| freeipa (4.6.2-3) unstable; urgency=medium | ||||
|  | ||||
|   * tests: Add some debug info, and fail properly. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Mon, 29 Jan 2018 13:17:25 +0200 | ||||
|  | ||||
| freeipa (4.6.2-2) unstable; urgency=medium | ||||
|  | ||||
|   * server.postinst: Fix output redirection. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Sat, 20 Jan 2018 21:33:26 +0200 | ||||
|  | ||||
| freeipa (4.6.2-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|     - Remove upstreamed patches: | ||||
|       add-debian-platform.diff, | ||||
|       ipa-kdb-support-dal-version-5-and-6.diff, | ||||
|       purge-firefox-extension.diff, | ||||
|       fix-ipa-otpd-install.diff, | ||||
|       fix-ipa-otpd-service.diff, | ||||
|       purge-firefox-extension.diff, | ||||
|       prefix.patch, | ||||
|       fix-kdcproxy-path.diff, | ||||
|       fix-is-running.diff, | ||||
|       fix-pkcs11-helper.diff, | ||||
|       fix-dnssec-services.diff | ||||
|     - Remove obsolete patches: fix-memcached.diff, | ||||
|       fix-oddjobs.diff, | ||||
|       fix-kdcproxy-paths.diff | ||||
|     - Refresh rest of the patches | ||||
|   * control et al: Memcached is not used anymore. | ||||
|   * control, server.install: Depend on gssproxy. | ||||
|   * control: Build-depend on python-jinja2, add CSR files to python- | ||||
|     ipaclient. | ||||
|   * *.install: Updated. | ||||
|   * client.postinst: Fix update_ipa_nssdb import. | ||||
|   * rules, autoreconf: Refactor the build to match current upstream, | ||||
|     drop d/autoreconf. | ||||
|   * local-options: Ignore some files not on tarballs. | ||||
|   * rules: Migrate to dh_missing. | ||||
|   * Drop server tmpfile, ship upstream one, and create ipaapi/kdcproxy | ||||
|     users/groups on install and add www-data to ipaapi group. | ||||
|   * control: Add python-sss to python-ipaserver depends. | ||||
|   * rules: Disable building on a builddirectory, it's broken upstream | ||||
|     for now. | ||||
|   * control: Drop libcurl4-nss-dev from build-depends, bump libkrb5-dev | ||||
|     build-dependency. | ||||
|   * control: Bump dependency on bind9 and bind9-dyndb-ldap. | ||||
|   * control: add libapache2-mod-lookup-identity to server dependencies, | ||||
|     enable/disable it in postinst/postrm. | ||||
|   * control: Depend on newer custodia, move dep on python-custodia to | ||||
|     python-ipaserver. | ||||
|   * control: Add python-sss to client depends. | ||||
|   * Add support for krb 1.16. (Closes: #887814) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Sat, 20 Jan 2018 12:41:28 +0200 | ||||
|  | ||||
| freeipa (4.4.4-4) unstable; urgency=medium | ||||
|  | ||||
|   [ Timo Aaltonen ] | ||||
|   * fix-opendnssec-setup.diff: Use /usr/sbin prefix for ods binaries. | ||||
|   * samba-4.7-fix-*: Add backported commits to allow building against | ||||
|     samba 4.7. (Closes: #880841) | ||||
|  | ||||
|   [ Steve Langasek ] | ||||
|   * Fix autopkgtest to be robust in the face of changed iproute2 output. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Sat, 16 Dec 2017 09:15:37 +0200 | ||||
|  | ||||
| freeipa (4.4.4-3) unstable; urgency=medium | ||||
|  | ||||
|   * fix-opendnssec-setup.diff: Fix a typo. (Closes: #878095) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Mon, 09 Oct 2017 23:51:56 +0300 | ||||
|  | ||||
| freeipa (4.4.4-2) unstable; urgency=medium | ||||
|  | ||||
|   * control: Add a dependency on fonts-open-sans. (LP: #1656236) | ||||
|   * fix-opendnssec-install.diff: Updated for opendnssec 2.1.x. (LP: | ||||
|     #1703836) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Mon, 09 Oct 2017 10:41:55 +0300 | ||||
|  | ||||
| freeipa (4.4.4-1) unstable; urgency=medium | ||||
|  | ||||
|   * Upload to unstable. (Closes: #862846) | ||||
|   * New upstream release. | ||||
|     - CVE-2017-2590 | ||||
|     - ipa-kdb-support-dal-version-5-and-6.diff: Dropped, upstream. | ||||
|     - purge-firefox-extension.diff: Refreshed. | ||||
|   * fix-is-running.diff: Add a third argument to is_running() in | ||||
|     ipaplatform/debian/services.py. (Closes: #856533) | ||||
|   * fix-kdcproxy-path.diff: Update debian/paths.py to use correct path | ||||
|     for ipa-httpd-kdcproxy. | ||||
|   * client.dirs: Ship /etc/krb5.conf.d, because not having that breaks | ||||
|     the installer when krb5.conf tries to include that. | ||||
|   * copyright, watch: Update source/release location. | ||||
|   * control, ipaserver: Move adtrustinstance python files to python- | ||||
|     ipaserver, and add samba-common to python-ipaserver depends so that | ||||
|     uninstall works. | ||||
|   * fix-pkcs11-helper.diff: Fix ipa-dnskeysyncd setup which was broken | ||||
|     by softhsm 2.2. | ||||
|   * fix-opendnssec-setup.diff: Opendnssec 2.0.x broke DNSSEC setup, fix | ||||
|     it. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Wed, 17 May 2017 21:19:22 +0300 | ||||
|  | ||||
| freeipa (4.4.3-3) experimental; urgency=medium | ||||
|  | ||||
|   * client.postinst: Fix logfile location. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Thu, 16 Feb 2017 11:26:08 +0200 | ||||
|  | ||||
| freeipa (4.4.3-2) experimental; urgency=medium | ||||
|  | ||||
|   * control: Fix python-ipatests to depend on python-sss instead of | ||||
|     python-sssdconfig. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Sat, 28 Jan 2017 00:15:53 +0200 | ||||
|  | ||||
| freeipa (4.4.3-1) experimental; urgency=medium | ||||
|  | ||||
|   * New upstream release. (Closes: #848762) | ||||
|   * configure-apache-from-installer.diff: Dropped, upstream. | ||||
|   * fix-cve-2016-5404.diff: Dropped, upstream. | ||||
|   * patches: Refreshed. | ||||
|   * work-around-apache-fail.diff: Dropped, apache supports systemd now | ||||
|     so this should not be needed. | ||||
|   * watch: Use https url. | ||||
|   * client.postinst: Use update_ipa_nssdb(), which also removes remnants | ||||
|     from /etc/pki/nssdb. | ||||
|   * control: Bump depends on slapi-nis to 0.56.1. | ||||
|   * control: Add python-custodia and python-requests to ipalib depends. | ||||
|   * control: Use python-netifaces instead of iproute. | ||||
|   * control: Add python-sssdconfig to python-ipatests depends. | ||||
|   * control: Bump depends on 389-ds-base to 1.3.5.6, upstream #5396 | ||||
|     #2008. | ||||
|   * control: Bump bind9-dyndb-ldap depends to 10, upstream #2008. | ||||
|   * control: Add python-libsss-nss-idmap to build-depends. | ||||
|   * control: Bump depends on sssd to 1.14.0. | ||||
|   * install: Updated. | ||||
|   * platform: | ||||
|     - drop variables that were commented out | ||||
|     - add some comments to tasks.py | ||||
|     - migrate some services to use systemd | ||||
|     - add & update some paths | ||||
|     - add some stub services (LP: #1653245) | ||||
|   * control: Add krb5-otp to server depends. (LP: #1640732) | ||||
|   * control: Demote ntp to Recommends so that lxc containers can be | ||||
|     enrolled without it. (LP: #1630911) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Sat, 14 Jan 2017 15:29:25 +0200 | ||||
|  | ||||
| freeipa (4.3.2-5) unstable; urgency=medium | ||||
|  | ||||
|   * fix-cve-2016-5404.diff: Fix permission check bypass (Closes: #835131) | ||||
|     - CVE-2016-5404 | ||||
|   * ipa-kdb-support-dal-version-5-and-6.diff: Support mit-krb5 1.15. | ||||
|     (Closes: #844114) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Sat, 03 Dec 2016 01:02:40 +0200 | ||||
|  | ||||
| freeipa (4.3.2-4) unstable; urgency=medium | ||||
|  | ||||
|   * freeipa-client.post*: Use /var/log/ipaclient-upgrade.log instead of | ||||
|     ipaupgrade.log, and remove it on purge. (Closes: #842071) | ||||
|   * control: Bump dependency on libapache2-mod-auth-gssapi to verify | ||||
|     upstream bug #5653 is resolved. | ||||
|   * platform: Add Debian mapping for rpcgssd and rpcidmapd service | ||||
|     files. (LP: #1645201) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Thu, 01 Dec 2016 08:12:27 +0200 | ||||
|  | ||||
| freeipa (4.3.2-3) unstable; urgency=medium | ||||
|  | ||||
|   * rules: Add a check to override_dh_fixperms so that chmod is not run | ||||
|     on arch-indep build where the targets don't exist. (Closes: #839844) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Thu, 06 Oct 2016 01:22:13 +0300 | ||||
|  | ||||
| freeipa (4.3.2-2) unstable; urgency=medium | ||||
|  | ||||
|   * copyright: Since ffb9a09a0d all original code should be GPL-3+, so | ||||
|     drop some exceptions. | ||||
|   * control: Add libnss-sss, libpam-sss and libsss-sudo to client depends | ||||
|     to ensure they get installed. (LP: #1600513) | ||||
|   * fix-ipa-otpd-service.diff: Use correct path for ipa-otpd. (LP: | ||||
|     #1628884) | ||||
|   * add-debian-platform.diff: Fix libsofthsm2.so install path. | ||||
|   * control: Bump dep on softhsm2 due to changed lib install path. | ||||
|   * tests: Add simple autopkgtest to check that ipa-server-install | ||||
|     works. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Wed, 05 Oct 2016 00:35:51 +0300 | ||||
|  | ||||
| freeipa (4.3.2-1) experimental; urgency=medium | ||||
|  | ||||
|   * New upstream release. | ||||
|   * copyright, missing-sources, README.source: Exclude minified javascript | ||||
|     that the runtime does not need. Add unminified versions of others, | ||||
|     update copyright to match. (Closes: #787593) | ||||
|   * source/lintian-overrides: Document minified javascript issues. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Wed, 14 Sep 2016 13:03:54 +0300 | ||||
|  | ||||
| freeipa (4.3.1-2) experimental; urgency=medium | ||||
|  | ||||
|   * control: python-ipalib can be arch:all now. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Mon, 25 Jul 2016 22:22:52 +0300 | ||||
|  | ||||
| freeipa (4.3.1-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release. (Closes: #781607, #786411) (LP: #1449304) | ||||
|     - drop no-test-lang.diff, obsolete | ||||
|   * fix-match-hostname.diff, control: Drop the patch and python-openssl | ||||
|     deps, not needed anymore | ||||
|   * rules, platform, server.dirs, server.install: | ||||
|     Add support for DNSSEC. | ||||
|   * control, rules: Add support for kdcproxy. | ||||
|   * control, server: Migrate to mod-auth-gssapi. | ||||
|   * control, rules, fix-ipa-conf.diff: Add support for custodia. | ||||
|   * control: | ||||
|     - Add python-cryptography to build-deps and python-freeipa deps. | ||||
|     - Add libp11-kit-dev to build-deps, p11-kit to server deps. | ||||
|     - Depend on python-gssapi instead of python-kerberos/-krbV. | ||||
|     - Add libini-config-dev and python-dbus to build-deps, replace wget | ||||
|       with curl. | ||||
|     - Bump libkrb5-dev build-dep. | ||||
|     - Add pki-base to build-deps and pki-kra to server deps, bump pki-ca | ||||
|       version. | ||||
|     - Drop python-m2crypto from deps, obsolete. | ||||
|     - Bump sssd deps to 1.13.1. | ||||
|     - Add python-six to build-deps and python-freeipa deps. | ||||
|     - Split python stuff from server, client, tests to python- | ||||
|       ipa{server,client,tests}, rename python-freeipa to match and move | ||||
|       translations to freeipa-common. Mark them Arch:all where possible, | ||||
|       and add Breaks/Replaces. | ||||
|     - Add oddjob to server and oddjob-mkhomedir to client deps. | ||||
|     - Add python-setuptools to python-ipalib deps. | ||||
|     - Bump 389-ds-base* deps. | ||||
|     - Bump server and python-ipaserver dependency on python-ldap to 2.4.22 | ||||
|       to fix a bug on ipa-server-upgrade. | ||||
|     - Add pki-tools to python-ipaserver deps. | ||||
|     - Add zip to python-ipaserver depends. | ||||
|     - Add python-systemd to server depends. | ||||
|     - Add opendnssec to freeipa-server-dns depends. | ||||
|     - Add python-cffi to python-ipalib depends. | ||||
|     - Bump dep on bind9-dyndb-ldap. | ||||
|     - Bump certmonger dependency to version that has helpers in the correct | ||||
|       place. | ||||
|   * patches: | ||||
|     - prefix.patch: Fix ipalib install too. | ||||
|     - Drop bits of platform.diff and other patches that are now upstream. | ||||
|     - fix-kdcproxy-paths.diff: Fix paths in kdcproxy configs. | ||||
|     - fix-oddjobs.diff: Fix paths and uids in oddjob configs. | ||||
|     - fix-replicainstall.diff: Use ldap instead of ldaps for conncheck. | ||||
|     - fix-dnssec-services.diff: Debianize ipa-dnskeysyncd & ipa-ods- | ||||
|       exporter units. | ||||
|     - create-sysconfig-ods.diff: Create an empty file for opendnssec | ||||
|       daemons, until opendnssec itself is fixed. | ||||
|     - purge-firefox-extension.diff: Clean obsolete kerberosauth.xpi. | ||||
|     - enable-mod-nss-during-setup.diff: Split from platform.diff, call | ||||
|       a2enmod/a2dismod from httpinstance.py. | ||||
|     - fix-memcached.diff: Split from platform.diff, debianize memcached | ||||
|       conf & unit. | ||||
|     - hack-libarch.diff: Don't use fedora libpaths. | ||||
|   * add-debian-platform.diff: | ||||
|     - Update paths.py to include all variables, comment out ones we don't | ||||
|       modify. | ||||
|     - Use systemwide certificate store; put ipa-ca.crt in | ||||
|       /usr/local/share/ca-certificates, and run update-ca-certificates | ||||
|     - Map smb service to smbd (LP: #1543230) | ||||
|     - Don't ship /var/cache/bind/data, fix named.conf a bit. | ||||
|     - Use DebianNoService() for dbus. (LP: #1564981) | ||||
|     - Add more constants | ||||
|   * Split freeipa-server-dns from freeipa-server, add -dns to -server | ||||
|     Recommends. | ||||
|   * server.postinst: Use ipa-server-upgrade. | ||||
|   * admintools: Use the new location for bash completions. | ||||
|   * rules: Remove obsolete configure.jar, preferences.html. | ||||
|   * platform: Fix ipautil.run stdout handling, add support for systemd. | ||||
|   * server.postinst, tmpfile: Create state directories for | ||||
|     mod_auth_gssapi. | ||||
|   * rules, server.install: Install scripts under /usr/lib instead of | ||||
|     multiarch path to avoid hacking the code too much. | ||||
|   * fix-ipa-otpd-install.diff, rules, server.install: Put ipa-otpd in | ||||
|     /usr/lib/ipa instead of directly under multiarch lib path. | ||||
|   * control, server*.install: Move dirsrv plugins from server-trust-ad | ||||
|     to server, needed on upgrades even if trust-ad isn't set up. | ||||
|   * server: Enable mod_proxy_ajp and mod_proxy_http on postinst, disable | ||||
|     on postrm. | ||||
|   * rules: Add SKIP_API_VERSION_CHECK, and adjust directories to clean. | ||||
|   * rules: Don't enable systemd units on install. | ||||
|   * client: Don't create /etc/pki/nssdb on postinst, it's not used | ||||
|     anymore. | ||||
|   * platform.diff, rules, server.install: Drop generate-rndc-key.sh, bind | ||||
|     already generates the keyfile. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Mon, 18 Apr 2016 17:40:32 +0300 | ||||
|  | ||||
| freeipa (4.1.4-1) experimental; urgency=medium | ||||
|  | ||||
|   * New upstream release. (LP: #1492226) | ||||
|     - Refresh patches | ||||
|     - platform-support.diff: Added NAMED_VAR_DIR. | ||||
|     - fix-bind-conf.diff: Dropped, obsolete with above. | ||||
|     - disable-dnssec-support.patch: Disable DNSSEC-support as we're | ||||
|       missing the dependencies for now. | ||||
|   * control: Add python-usb to build-depends and to python-freeipa | ||||
|     depends. | ||||
|   * control: Bump SSSD dependencies. | ||||
|   * control: Add libsofthsm2-dev to build-depends and softhsm2 to server | ||||
|     depends. | ||||
|   * freeipa-{server,client}.install: Add new files. | ||||
|   * control: Bump Depends on slapi-nis for CVE fixes. | ||||
|   * control: Bump 389-ds-base, pki-ca depends. | ||||
|   * control: Drop dogtag-pki-server-theme from server depends, it's not | ||||
|     needed. | ||||
|   * control: Server needs newer python-ldap, bump build-dep too. | ||||
|   * control: Bump certmonger depends. | ||||
|   * control: Bump python-nss depends. | ||||
|   * freeipa-client: Add /etc/ipa/nssdb, rework /etc/pki/nssdb handling. | ||||
|   * platform: Add DebianNamedService. | ||||
|   * platform, disable-dnssec-support.patch: Fix named.conf template. | ||||
|   * server.postinst: Run ipa-ldap-updater and ipa-upgradeconfig on | ||||
|     postinst. | ||||
|   * Revert DNSSEC changes to schema and ACI, makes upgrade tools fail. | ||||
|   * server.postrm: Clean logs on purge and disable apache modules on | ||||
|     remove/purge. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Fri, 25 Sep 2015 14:07:40 +0300 | ||||
|  | ||||
| freeipa (4.0.5-6) unstable; urgency=medium | ||||
|  | ||||
|   * control Add gnupg-agent to python-freeipa depends, and change gnupg | ||||
|     to gnupg2. (LP: #1492184) | ||||
|   * Rebuild against current krb5, there was an abi break which broke at | ||||
|     least the setup phase. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Thu, 24 Sep 2015 23:22:24 +0300 | ||||
|  | ||||
| freeipa (4.0.5-5) unstable; urgency=medium | ||||
|  | ||||
|   * control: Drop selinux-policy-dev from build-depends, not needed | ||||
|     anymore. | ||||
|   * client.dirs,postrm: Drop removing /etc/pki/nssdb from postrm and let | ||||
|     dpkg handle it. (Closes: #781114) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Thu, 09 Apr 2015 17:16:37 +0300 | ||||
|  | ||||
| freeipa (4.0.5-4) unstable; urgency=medium | ||||
|  | ||||
|   * control: Fix freeipa-tests depends. | ||||
|   * control: Add systemd-sysv to server depends. (Closes: #780386) | ||||
|   * freeipa-client.postrm: Purge /etc/pki if empty. (Closes: #781114) | ||||
|   * add-a-clear-openssl-exception.diff: Add a clear OpenSSL exception. | ||||
|     (Closes: #772136) | ||||
|   * control: Add systemd to build-depends. | ||||
|   * dont-check-for-systemd-pc.diff: Dropped, not needed anymore. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Thu, 02 Apr 2015 10:53:55 +0300 | ||||
|  | ||||
| freeipa (4.0.5-3) unstable; urgency=medium | ||||
|  | ||||
|   * rules: Set JAVA_STACK_SIZE to hopefully avoid FTBFS on exotic archs. | ||||
|   * freeipa-client.postrm: Remove nssdb files on purge. (Closes: | ||||
|     #775387) | ||||
|   * freeipa-client.postinst: Fix bashism with echo. (Closes: #772242) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Wed, 04 Mar 2015 14:51:35 +0200 | ||||
|  | ||||
| freeipa (4.0.5-2) unstable; urgency=medium | ||||
|  | ||||
|   * Team upload. | ||||
|   * Let python-freeipa depend on python-pyasn1, because pyasn1 is imported | ||||
|     by ipalib/pkcs10.py and ipalib/plugins/cert.py. | ||||
|   * debian/copyright: Drop unused PD license section | ||||
|   * debian/copyright: Fix paths of Javascript files | ||||
|  | ||||
|  -- Benjamin Drung <benjamin.drung@profitbricks.com>  Mon, 24 Nov 2014 12:32:36 +0100 | ||||
|  | ||||
| freeipa (4.0.5-1) unstable; urgency=medium | ||||
|  | ||||
|   * New upstream release | ||||
|     - Fix CVE-2014-7828. (Closes: #768294) | ||||
|   * control: Update my email address. | ||||
|   * fix-bind-conf.diff, add-debian-platform.diff: Fix bind config | ||||
|     template to use Debian specific paths, and replace named.conf not | ||||
|     named.conf.local. (Closes: #768122) | ||||
|   * rules, -server.postinst: Create /var/cache/bind/data owned by bind | ||||
|     user. | ||||
|   * rules: Fix /var/lib/ipa/backup permissions. | ||||
|   * Add non-standard-dir-perm to server lintian overrides. | ||||
|   * copyright: Fix a typo. | ||||
|   * control: Bump dependency on bind9-dyndb-ldap to 6.0-4~. | ||||
|   * control: Move dependency on python-qrcode and python-yubico from | ||||
|     server to python-freeipa and drop python-selinux which belongs to | ||||
|     pki-server. | ||||
|   * control: Relax libxmlrpc-core-c3-dev buil-dep and 389-ds-base dep | ||||
|     for easier backporting. | ||||
|   * control: Add python-dateutils to server, and python-dbus and python- | ||||
|     memcache to python-freeipa dependencies. (Closes: #768187) | ||||
|   * platform: Handle /etc/default/nfs-common and /etc/default/autofs, | ||||
|     drop NSS_DB_DIR since it's inherited already. (Closes: #769037) | ||||
|   * control: Bump policy to 3.9.6, no changes. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Tue, 11 Nov 2014 10:38:52 +0200 | ||||
|  | ||||
| freeipa (4.0.4-2) unstable; urgency=medium | ||||
|  | ||||
|   * control: Add python-qrcode, python-selinux, python-yubico | ||||
|     to freeipa-server dependencies. (Closes: #767427) | ||||
|   * freeipa-server.postinst: Enable mod_authz_user and mod_deflate too, | ||||
|     but since they should be part of the default apache2 install, don't | ||||
|     disable them on uninstall like the other modules. (Closes: #767425) | ||||
|   * control: Bump server dependency on -mod-nss to 1.0.10-2 which | ||||
|     doesn't enable the module by default. | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Fri, 31 Oct 2014 11:36:51 +0200 | ||||
|  | ||||
| freeipa (4.0.4-1) unstable; urgency=medium | ||||
|  | ||||
|   * Initial release (Closes: #734703) | ||||
|  | ||||
|  -- Timo Aaltonen <tjaalton@debian.org>  Sat, 25 Oct 2014 02:43:59 +0300 | ||||
							
								
								
									
										400
									
								
								debian/control
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										400
									
								
								debian/control
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,400 @@ | ||||
| Source: freeipa | ||||
| Section: net | ||||
| Priority: optional | ||||
| Maintainer: Debian FreeIPA Team <pkg-freeipa-devel@alioth-lists.debian.net> | ||||
| Uploaders: Timo Aaltonen <tjaalton@debian.org> | ||||
| Standards-Version: 4.5.0 | ||||
| Vcs-Git: https://salsa.debian.org/freeipa-team/freeipa.git | ||||
| Vcs-Browser: https://salsa.debian.org/freeipa-team/freeipa | ||||
| Homepage: http://www.freeipa.org | ||||
| Build-Depends: | ||||
|  check, | ||||
|  debhelper-compat (= 12), | ||||
|  dh-python, | ||||
|  gettext, | ||||
|  krb5-user, | ||||
|  libcmocka-dev, | ||||
|  libini-config-dev, | ||||
|  libkrad-dev, | ||||
|  libkrb5-dev (>= 1.16), | ||||
|  libldap2-dev, | ||||
|  libnspr4-dev, | ||||
|  libpopt-dev, | ||||
|  libsasl2-dev, | ||||
|  libssl-dev, | ||||
|  libtalloc-dev, | ||||
|  libxmlrpc-core-c3-dev (>= 1.33.06), | ||||
|  python3-all-dev, | ||||
|  python3-cryptography, | ||||
|  python3-dbus, | ||||
|  python3-dnspython (>= 1.11.1), | ||||
|  python3-gssapi, | ||||
|  python3-jinja2, | ||||
|  python3-kdcproxy, | ||||
|  python3-ldap (>= 3.1), | ||||
|  python3-lesscpy, | ||||
|  python3-libipa-hbac, | ||||
|  python3-libsss-nss-idmap, | ||||
|  python3-lxml, | ||||
|  python3-netaddr, | ||||
|  python3-netifaces (>= 0.10.4), | ||||
|  python3-nose, | ||||
|  python3-nss (>= 0.16.0), | ||||
|  python3-polib, | ||||
|  python3-pyasn1, | ||||
|  python3-qrcode (>= 5.0.0), | ||||
|  python3-setuptools, | ||||
|  python3-six, | ||||
|  python3-sss (>= 1.14.0), | ||||
|  python3-usb (>= 1.0.0~b2), | ||||
|  python3-yubico, | ||||
|  systemd, | ||||
|  uuid-dev, | ||||
|  389-ds-base-dev (>= 1.3.7.9), | ||||
|  libsss-idmap-dev, | ||||
|  libsss-certmap-dev, | ||||
|  libsss-nss-idmap-dev (>= 1.14.0), | ||||
|  libtevent-dev, | ||||
|  libunistring-dev, | ||||
|  libverto-dev, | ||||
|  nodejs [amd64 arm64 armhf i386 mips mips64el mipsel ppc64 ppc64el s390x], | ||||
|  pki-base (>= 10.6.0~), | ||||
|  python3-lesscpy, | ||||
|  python3-pkg-resources, | ||||
|  python3-rjsmin, | ||||
|  samba-dev, | ||||
|  | ||||
| Package: freeipa-common | ||||
| Architecture: all | ||||
| Depends: | ||||
|  ${misc:Depends}, | ||||
| Multi-Arch: foreign | ||||
| Description: FreeIPA centralized identity framework -- common files | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This package includes common files. | ||||
|  | ||||
| Package: freeipa-client | ||||
| Architecture: any | ||||
| Depends: | ||||
|  bind9-utils, | ||||
|  certmonger (>= 0.79.5-2), | ||||
|  curl, | ||||
|  dnsutils, | ||||
|  freeipa-common (= ${source:Version}), | ||||
|  krb5-user, | ||||
|  libnss3-tools, | ||||
|  libnss-sss, | ||||
|  libpam-sss, | ||||
|  libsasl2-modules-gssapi-mit, | ||||
|  libsss-sudo, | ||||
|  libxmlrpc-core-c3 (>= 1.16.33-3.1ubuntu5), | ||||
|  oddjob-mkhomedir, | ||||
|  python3-dnspython, | ||||
|  python3-ipaclient (= ${source:Version}), | ||||
|  python3-gssapi, | ||||
|  python3-ldap, | ||||
|  python3-sss, | ||||
|  sssd (>= 1.14.0), | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends} | ||||
| Recommends: | ||||
|  chrony, | ||||
| Suggests: | ||||
|  libpam-krb5, | ||||
| Description: FreeIPA centralized identity framework -- client | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This is the client package. | ||||
|  | ||||
| Package: freeipa-client-epn | ||||
| Architecture: amd64 arm64 armhf i386 mips mips64el mipsel ppc64 ppc64el s390x | ||||
| Depends: | ||||
|  freeipa-client (= ${binary:Version}), | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends} | ||||
| Breaks: freeipa-server (<< 4.8.10-2) | ||||
| Replaces: freeipa-server (<< 4.8.10-2) | ||||
| Description: FreeIPA centralized identity framework -- tools for configuring Expiring Password Notification | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This package provides a service to collect and send expiring password | ||||
|  notifications via email (SMTP). | ||||
|  | ||||
| Package: freeipa-client-samba | ||||
| Architecture: any | ||||
| Depends: | ||||
|  cifs-utils, | ||||
|  freeipa-client (= ${binary:Version}), | ||||
|  libwbclient-sssd, | ||||
|  python3-samba, | ||||
|  samba-common-bin, | ||||
|  smbclient, | ||||
|  tdb-tools, | ||||
|  winbind, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
| Multi-Arch: same | ||||
| Description: FreeIPA centralized identity framework -- Samba client | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This package provides command-line tools to deploy Samba domain member | ||||
|  on the machine enrolled into a FreeIPA environment. | ||||
|  | ||||
| Package: python3-ipaclient | ||||
| Architecture: all | ||||
| Section: python | ||||
| Breaks: freeipa-client (<< 4.3.0-1) | ||||
| Replaces: freeipa-client (<< 4.3.0-1) | ||||
| Depends: | ||||
|  freeipa-common (= ${binary:Version}), | ||||
|  python3-augeas, | ||||
|  python3-dnspython, | ||||
|  python3-ipalib (>= ${source:Version}), | ||||
|  python3-jinja2, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
| Description: FreeIPA centralized identity framework -- Python3 modules for ipaclient | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This Python3 module is used by FreeIPA client. | ||||
|  | ||||
| Package: python3-ipalib | ||||
| Architecture: all | ||||
| Section: python | ||||
| Depends: | ||||
|  freeipa-common (= ${source:Version}), | ||||
|  gnupg, | ||||
|  gpg-agent, | ||||
|  keyutils, | ||||
|  librpm8, | ||||
|  python3-cffi, | ||||
|  python3-cryptography, | ||||
|  python3-dbus, | ||||
|  python3-dnspython, | ||||
|  python3-gssapi, | ||||
|  python3-ldap, | ||||
|  python3-libipa-hbac, | ||||
|  python3-lxml, | ||||
|  python3-netaddr, | ||||
|  python3-netifaces (>= 0.10.4), | ||||
|  python3-nss (>= 0.16.0), | ||||
|  python3-pyasn1, | ||||
|  python3-qrcode (>= 5.0.0), | ||||
|  python3-requests, | ||||
|  python3-setuptools, | ||||
|  python3-six, | ||||
|  python3-usb (>= 1.0.0~b2), | ||||
|  python3-yubico, | ||||
|  systemd, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends}, | ||||
| Description: FreeIPA centralized identity framework -- shared Python3 modules | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This Python3 module is used by other FreeIPA packages. | ||||
|  | ||||
|  | ||||
| Package: freeipa-server | ||||
| Architecture: amd64 arm64 armhf i386 mips mips64el mipsel ppc64 ppc64el s390x | ||||
| Breaks: freeipa-server-trust-ad (<< 4.3.0-1) | ||||
| Replaces: freeipa-server-trust-ad (<< 4.3.0-1) | ||||
| Depends: | ||||
|  389-ds-base (>= 1.3.7.9), | ||||
|  acl, | ||||
|  adduser, | ||||
|  apache2 (>= 2.4.41-4ubuntu2), | ||||
|  certmonger (>= 0.79.5-2), | ||||
|  chrony, | ||||
|  custodia (>= 0.5.0), | ||||
|  fonts-font-awesome, | ||||
|  fonts-open-sans, | ||||
|  freeipa-client (= ${binary:Version}), | ||||
|  freeipa-common (= ${source:Version}), | ||||
|  gssproxy (>= 0.8.2-2), | ||||
|  krb5-admin-server, | ||||
|  krb5-kdc, | ||||
|  krb5-kdc-ldap, | ||||
|  krb5-otp, | ||||
|  krb5-pkinit, | ||||
|  ldap-utils, | ||||
|  libapache2-mod-auth-gssapi (>= 1.5.0), | ||||
|  libapache2-mod-lookup-identity (>= 1.0.0), | ||||
|  libapache2-mod-wsgi-py3, | ||||
|  libjs-dojo-core, | ||||
|  libjs-jquery, | ||||
|  libjs-scriptaculous, | ||||
|  libnss3-tools, | ||||
|  libsasl2-modules-gssapi-mit, | ||||
|  oddjob (>= 0.34.3-2), | ||||
|  p11-kit, | ||||
|  pki-ca (>= 10.6.0~), | ||||
|  pki-kra (>= 10.6.0~), | ||||
|  python3-dateutil, | ||||
|  python3-ipaserver (= ${source:Version}), | ||||
|  python3-gssapi, | ||||
|  python3-ldap (>= 2.4.22), | ||||
|  python3-systemd, | ||||
|  slapi-nis (>= 0.56.1), | ||||
|  ssl-cert, | ||||
|  sssd-dbus, | ||||
|  systemd-sysv, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends} | ||||
| Recommends: | ||||
|  freeipa-server-dns, | ||||
| Description: FreeIPA centralized identity framework -- server | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This is the server package. | ||||
|  | ||||
| Package: freeipa-server-dns | ||||
| Architecture: all | ||||
| Breaks: freeipa-server (<< 4.3.0-1) | ||||
| Replaces: freeipa-server (<< 4.3.0-1) | ||||
| Depends: | ||||
|  freeipa-server (>= ${source:Version}), | ||||
|  bind9 (>= 1:9.16), | ||||
|  bind9-dyndb-ldap (>= 11.4), | ||||
|  libengine-pkcs11-openssl, | ||||
|  opendnssec (>= 1:2.1.5), | ||||
|  softhsm2, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends} | ||||
| Description: FreeIPA centralized identity framework -- IPA DNS integration | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This package adds DNS integration with BIND 9. | ||||
|  | ||||
| Package: freeipa-server-trust-ad | ||||
| Architecture: amd64 arm64 armhf i386 mips mips64el mipsel ppc64 ppc64el s390x | ||||
| Depends: | ||||
|  freeipa-common (= ${source:Version}), | ||||
|  freeipa-server (= ${binary:Version}), | ||||
|  python3-ipaserver (= ${source:Version}), | ||||
|  python3-samba, | ||||
|  samba, | ||||
|  winbind, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends} | ||||
| Multi-Arch: same | ||||
| Description: FreeIPA centralized identity framework -- AD trust installer | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  Cross-realm trusts with Active Directory in IPA require working Samba 4 | ||||
|  installation. This package is provided for convenience to install all required | ||||
|  dependencies at once. | ||||
|  | ||||
| Package: freeipa-tests | ||||
| Architecture: all | ||||
| Depends: | ||||
|  python3-ipalib (>= ${source:Version}), | ||||
|  python3-ipatests (>= ${source:Version}), | ||||
|  python3-pytest, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends} | ||||
| Recommends: python3-yaml | ||||
| Description: FreeIPA centralized identity framework -- tests | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This package contains tests that verify IPA functionality. | ||||
|  | ||||
| Package: python3-ipaserver | ||||
| Architecture: all | ||||
| Section: python | ||||
| Breaks: freeipa-server (<< 4.3.0-1), | ||||
|  freeipa-server-trust-ad (<< 4.4.4-1), | ||||
| Replaces: freeipa-server (<< 4.3.0-1), | ||||
|  freeipa-server-trust-ad (<< 4.4.4-1), | ||||
| Depends: | ||||
|  freeipa-common (= ${binary:Version}), | ||||
|  pki-tools (>= 10.2.6-3), | ||||
|  python3-custodia (>= 0.5.0), | ||||
|  python3-dbus, | ||||
|  python3-dnspython, | ||||
|  python3-gssapi, | ||||
|  python3-ipaclient (= ${binary:Version}), | ||||
|  python3-ipalib (>= ${source:Version}), | ||||
|  python3-jwcrypto, | ||||
|  python3-kdcproxy, | ||||
|  python3-ldap (>= 2.4.22), | ||||
|  python3-libsss-nss-idmap, | ||||
|  python3-pki-base, | ||||
|  python3-pyasn1, | ||||
|  python3-sss, | ||||
|  samba-common, | ||||
|  zip, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
| Description: FreeIPA centralized identity framework -- Python3 modules for server | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This Python3 module is used by FreeIPA server. | ||||
|  | ||||
| Package: python3-ipatests | ||||
| Architecture: all | ||||
| Section: python | ||||
| Breaks: freeipa-tests (<< 4.3.0-1) | ||||
| Replaces: freeipa-tests (<< 4.3.0-1) | ||||
| Depends: | ||||
|  libnss3-tools, | ||||
|  python3-coverage, | ||||
|  python3-ipalib (>= ${source:Version}), | ||||
|  python3-mock, | ||||
|  python3-paramiko, | ||||
|  python3-paste, | ||||
|  python3-polib, | ||||
|  python3-pytest-multihost, | ||||
|  python3-pytest-sourceorder, | ||||
|  python3-sss, | ||||
|  xz-utils, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends} | ||||
| Recommends: python3-yaml | ||||
| Description: FreeIPA centralized identity framework -- Python3 modules for tests | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This Python3 module is used by FreeIPA tests. | ||||
|  | ||||
							
								
								
									
										152
									
								
								debian/control.common
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								debian/control.common
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,152 @@ | ||||
|  | ||||
| Package: freeipa-common | ||||
| Architecture: all | ||||
| Depends: | ||||
|  ${misc:Depends}, | ||||
| Multi-Arch: foreign | ||||
| Description: FreeIPA centralized identity framework -- common files | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This package includes common files. | ||||
|  | ||||
| Package: freeipa-client | ||||
| Architecture: any | ||||
| Depends: | ||||
|  bind9-utils, | ||||
|  certmonger (>= 0.79.5-2), | ||||
|  curl, | ||||
|  dnsutils, | ||||
|  freeipa-common (= ${source:Version}), | ||||
|  krb5-user, | ||||
|  libnss3-tools, | ||||
|  libnss-sss, | ||||
|  libpam-sss, | ||||
|  libsasl2-modules-gssapi-mit, | ||||
|  libsss-sudo, | ||||
|  libxmlrpc-core-c3 (>= 1.16.33-3.1ubuntu5), | ||||
|  oddjob-mkhomedir, | ||||
|  python3-dnspython, | ||||
|  python3-ipaclient (= ${source:Version}), | ||||
|  python3-gssapi, | ||||
|  python3-ldap, | ||||
|  python3-sss, | ||||
|  sssd (>= 1.14.0), | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends} | ||||
| Recommends: | ||||
|  chrony, | ||||
| Suggests: | ||||
|  libpam-krb5, | ||||
| Description: FreeIPA centralized identity framework -- client | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This is the client package. | ||||
|  | ||||
| Package: freeipa-client-epn | ||||
| Architecture: amd64 arm64 armhf i386 mips mips64el mipsel ppc64 ppc64el s390x | ||||
| Depends: | ||||
|  freeipa-client (= ${binary:Version}), | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends} | ||||
| Breaks: freeipa-server (<< 4.8.10-2) | ||||
| Replaces: freeipa-server (<< 4.8.10-2) | ||||
| Description: FreeIPA centralized identity framework -- tools for configuring Expiring Password Notification | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This package provides a service to collect and send expiring password | ||||
|  notifications via email (SMTP). | ||||
|  | ||||
| Package: freeipa-client-samba | ||||
| Architecture: any | ||||
| Depends: | ||||
|  cifs-utils, | ||||
|  freeipa-client (= ${binary:Version}), | ||||
|  libwbclient-sssd, | ||||
|  python3-samba, | ||||
|  samba-common-bin, | ||||
|  smbclient, | ||||
|  tdb-tools, | ||||
|  winbind, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
| Multi-Arch: same | ||||
| Description: FreeIPA centralized identity framework -- Samba client | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This package provides command-line tools to deploy Samba domain member | ||||
|  on the machine enrolled into a FreeIPA environment. | ||||
|  | ||||
| Package: python3-ipaclient | ||||
| Architecture: all | ||||
| Section: python | ||||
| Breaks: freeipa-client (<< 4.3.0-1) | ||||
| Replaces: freeipa-client (<< 4.3.0-1) | ||||
| Depends: | ||||
|  freeipa-common (= ${binary:Version}), | ||||
|  python3-augeas, | ||||
|  python3-dnspython, | ||||
|  python3-ipalib (>= ${source:Version}), | ||||
|  python3-jinja2, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
| Description: FreeIPA centralized identity framework -- Python3 modules for ipaclient | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This Python3 module is used by FreeIPA client. | ||||
|  | ||||
| Package: python3-ipalib | ||||
| Architecture: all | ||||
| Section: python | ||||
| Depends: | ||||
|  freeipa-common (= ${source:Version}), | ||||
|  gnupg, | ||||
|  gpg-agent, | ||||
|  keyutils, | ||||
|  librpm8, | ||||
|  python3-cffi, | ||||
|  python3-cryptography, | ||||
|  python3-dbus, | ||||
|  python3-dnspython, | ||||
|  python3-gssapi, | ||||
|  python3-ldap, | ||||
|  python3-libipa-hbac, | ||||
|  python3-lxml, | ||||
|  python3-netaddr, | ||||
|  python3-netifaces (>= 0.10.4), | ||||
|  python3-nss (>= 0.16.0), | ||||
|  python3-pyasn1, | ||||
|  python3-qrcode (>= 5.0.0), | ||||
|  python3-requests, | ||||
|  python3-setuptools, | ||||
|  python3-six, | ||||
|  python3-usb (>= 1.0.0~b2), | ||||
|  python3-yubico, | ||||
|  systemd, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends}, | ||||
| Description: FreeIPA centralized identity framework -- shared Python3 modules | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This Python3 module is used by other FreeIPA packages. | ||||
|  | ||||
							
								
								
									
										183
									
								
								debian/control.server
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								debian/control.server
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,183 @@ | ||||
|  | ||||
| Package: freeipa-server | ||||
| Architecture: amd64 arm64 armhf i386 mips mips64el mipsel ppc64 ppc64el s390x | ||||
| Breaks: freeipa-server-trust-ad (<< 4.3.0-1) | ||||
| Replaces: freeipa-server-trust-ad (<< 4.3.0-1) | ||||
| Depends: | ||||
|  389-ds-base (>= 1.3.7.9), | ||||
|  acl, | ||||
|  adduser, | ||||
|  apache2 (>= 2.4.41-4ubuntu2), | ||||
|  certmonger (>= 0.79.5-2), | ||||
|  chrony, | ||||
|  custodia (>= 0.5.0), | ||||
|  fonts-font-awesome, | ||||
|  fonts-open-sans, | ||||
|  freeipa-client (= ${binary:Version}), | ||||
|  freeipa-common (= ${source:Version}), | ||||
|  gssproxy (>= 0.8.2-2), | ||||
|  krb5-admin-server, | ||||
|  krb5-kdc, | ||||
|  krb5-kdc-ldap, | ||||
|  krb5-otp, | ||||
|  krb5-pkinit, | ||||
|  ldap-utils, | ||||
|  libapache2-mod-auth-gssapi (>= 1.5.0), | ||||
|  libapache2-mod-lookup-identity (>= 1.0.0), | ||||
|  libapache2-mod-wsgi-py3, | ||||
|  libjs-dojo-core, | ||||
|  libjs-jquery, | ||||
|  libjs-scriptaculous, | ||||
|  libnss3-tools, | ||||
|  libsasl2-modules-gssapi-mit, | ||||
|  oddjob (>= 0.34.3-2), | ||||
|  p11-kit, | ||||
|  pki-ca (>= 10.6.0~), | ||||
|  pki-kra (>= 10.6.0~), | ||||
|  python3-dateutil, | ||||
|  python3-ipaserver (= ${source:Version}), | ||||
|  python3-gssapi, | ||||
|  python3-ldap (>= 2.4.22), | ||||
|  python3-systemd, | ||||
|  slapi-nis (>= 0.56.1), | ||||
|  ssl-cert, | ||||
|  sssd-dbus, | ||||
|  systemd-sysv, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends} | ||||
| Recommends: | ||||
|  freeipa-server-dns, | ||||
| Description: FreeIPA centralized identity framework -- server | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This is the server package. | ||||
|  | ||||
| Package: freeipa-server-dns | ||||
| Architecture: all | ||||
| Breaks: freeipa-server (<< 4.3.0-1) | ||||
| Replaces: freeipa-server (<< 4.3.0-1) | ||||
| Depends: | ||||
|  freeipa-server (>= ${source:Version}), | ||||
|  bind9 (>= 1:9.16), | ||||
|  bind9-dyndb-ldap (>= 11.4), | ||||
|  libengine-pkcs11-openssl, | ||||
|  opendnssec (>= 1:2.1.5), | ||||
|  softhsm2, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends} | ||||
| Description: FreeIPA centralized identity framework -- IPA DNS integration | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This package adds DNS integration with BIND 9. | ||||
|  | ||||
| Package: freeipa-server-trust-ad | ||||
| Architecture: amd64 arm64 armhf i386 mips mips64el mipsel ppc64 ppc64el s390x | ||||
| Depends: | ||||
|  freeipa-common (= ${source:Version}), | ||||
|  freeipa-server (= ${binary:Version}), | ||||
|  python3-ipaserver (= ${source:Version}), | ||||
|  python3-samba, | ||||
|  samba, | ||||
|  winbind, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
|  ${shlibs:Depends} | ||||
| Multi-Arch: same | ||||
| Description: FreeIPA centralized identity framework -- AD trust installer | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  Cross-realm trusts with Active Directory in IPA require working Samba 4 | ||||
|  installation. This package is provided for convenience to install all required | ||||
|  dependencies at once. | ||||
|  | ||||
| Package: freeipa-tests | ||||
| Architecture: all | ||||
| Depends: | ||||
|  python3-ipalib (>= ${source:Version}), | ||||
|  python3-ipatests (>= ${source:Version}), | ||||
|  python3-pytest, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends} | ||||
| Recommends: python3-yaml | ||||
| Description: FreeIPA centralized identity framework -- tests | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This package contains tests that verify IPA functionality. | ||||
|  | ||||
| Package: python3-ipaserver | ||||
| Architecture: all | ||||
| Section: python | ||||
| Breaks: freeipa-server (<< 4.3.0-1), | ||||
|  freeipa-server-trust-ad (<< 4.4.4-1), | ||||
| Replaces: freeipa-server (<< 4.3.0-1), | ||||
|  freeipa-server-trust-ad (<< 4.4.4-1), | ||||
| Depends: | ||||
|  freeipa-common (= ${binary:Version}), | ||||
|  pki-tools (>= 10.2.6-3), | ||||
|  python3-custodia (>= 0.5.0), | ||||
|  python3-dbus, | ||||
|  python3-dnspython, | ||||
|  python3-gssapi, | ||||
|  python3-ipaclient (= ${binary:Version}), | ||||
|  python3-ipalib (>= ${source:Version}), | ||||
|  python3-jwcrypto, | ||||
|  python3-kdcproxy, | ||||
|  python3-ldap (>= 2.4.22), | ||||
|  python3-libsss-nss-idmap, | ||||
|  python3-pki-base, | ||||
|  python3-pyasn1, | ||||
|  python3-sss, | ||||
|  samba-common, | ||||
|  zip, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends}, | ||||
| Description: FreeIPA centralized identity framework -- Python3 modules for server | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This Python3 module is used by FreeIPA server. | ||||
|  | ||||
| Package: python3-ipatests | ||||
| Architecture: all | ||||
| Section: python | ||||
| Breaks: freeipa-tests (<< 4.3.0-1) | ||||
| Replaces: freeipa-tests (<< 4.3.0-1) | ||||
| Depends: | ||||
|  libnss3-tools, | ||||
|  python3-coverage, | ||||
|  python3-ipalib (>= ${source:Version}), | ||||
|  python3-mock, | ||||
|  python3-paramiko, | ||||
|  python3-paste, | ||||
|  python3-polib, | ||||
|  python3-pytest-multihost, | ||||
|  python3-pytest-sourceorder, | ||||
|  python3-sss, | ||||
|  xz-utils, | ||||
|  ${misc:Depends}, | ||||
|  ${python3:Depends} | ||||
| Recommends: python3-yaml | ||||
| Description: FreeIPA centralized identity framework -- Python3 modules for tests | ||||
|  FreeIPA is an integrated solution to provide centrally managed Identity | ||||
|  (machine, user, virtual machines, groups, authentication credentials), Policy | ||||
|  (configuration settings, access control information) and Audit (events, | ||||
|  logs, analysis thereof). | ||||
|  . | ||||
|  This Python3 module is used by FreeIPA tests. | ||||
|  | ||||
							
								
								
									
										13
									
								
								debian/control.server-bdeps
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								debian/control.server-bdeps
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
|  389-ds-base-dev (>= 1.3.7.9), | ||||
|  libsss-idmap-dev, | ||||
|  libsss-certmap-dev, | ||||
|  libsss-nss-idmap-dev (>= 1.14.0), | ||||
|  libtevent-dev, | ||||
|  libunistring-dev, | ||||
|  libverto-dev, | ||||
|  nodejs [amd64 arm64 armhf i386 mips mips64el mipsel ppc64 ppc64el s390x], | ||||
|  pki-base (>= 10.6.0~), | ||||
|  python3-lesscpy, | ||||
|  python3-pkg-resources, | ||||
|  python3-rjsmin, | ||||
|  samba-dev, | ||||
							
								
								
									
										52
									
								
								debian/control.stub
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								debian/control.stub
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| Source: freeipa | ||||
| Section: net | ||||
| Priority: optional | ||||
| Maintainer: Debian FreeIPA Team <pkg-freeipa-devel@alioth-lists.debian.net> | ||||
| Uploaders: Timo Aaltonen <tjaalton@debian.org> | ||||
| Standards-Version: 4.5.0 | ||||
| Vcs-Git: https://salsa.debian.org/freeipa-team/freeipa.git | ||||
| Vcs-Browser: https://salsa.debian.org/freeipa-team/freeipa | ||||
| Homepage: http://www.freeipa.org | ||||
| Build-Depends: | ||||
|  check, | ||||
|  debhelper-compat (= 12), | ||||
|  dh-python, | ||||
|  gettext, | ||||
|  krb5-user, | ||||
|  libcmocka-dev, | ||||
|  libini-config-dev, | ||||
|  libkrad-dev, | ||||
|  libkrb5-dev (>= 1.16), | ||||
|  libldap2-dev, | ||||
|  libnspr4-dev, | ||||
|  libpopt-dev, | ||||
|  libsasl2-dev, | ||||
|  libssl-dev, | ||||
|  libtalloc-dev, | ||||
|  libxmlrpc-core-c3-dev (>= 1.33.06), | ||||
|  python3-all-dev, | ||||
|  python3-cryptography, | ||||
|  python3-dbus, | ||||
|  python3-dnspython (>= 1.11.1), | ||||
|  python3-gssapi, | ||||
|  python3-jinja2, | ||||
|  python3-kdcproxy, | ||||
|  python3-ldap (>= 3.1), | ||||
|  python3-lesscpy, | ||||
|  python3-libipa-hbac, | ||||
|  python3-libsss-nss-idmap, | ||||
|  python3-lxml, | ||||
|  python3-netaddr, | ||||
|  python3-netifaces (>= 0.10.4), | ||||
|  python3-nose, | ||||
|  python3-nss (>= 0.16.0), | ||||
|  python3-polib, | ||||
|  python3-pyasn1, | ||||
|  python3-qrcode (>= 5.0.0), | ||||
|  python3-setuptools, | ||||
|  python3-six, | ||||
|  python3-sss (>= 1.14.0), | ||||
|  python3-usb (>= 1.0.0~b2), | ||||
|  python3-yubico, | ||||
|  systemd, | ||||
|  uuid-dev, | ||||
							
								
								
									
										333
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										333
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,333 @@ | ||||
| Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ | ||||
| Upstream-name: freeipa | ||||
| Source: http://releases.pagure.org/freeipa | ||||
|  | ||||
| Files: * | ||||
| Copyright: 1999-2011 Red Hat, Inc. | ||||
| License: GPL-3+ | ||||
|  | ||||
| Files: daemons/ipa-slapi-plugins/*/*.c | ||||
|        daemons/ipa-slapi-plugins/*/*.h | ||||
| Copyright: 2005-2010 Red Hat, Inc. | ||||
| License: GPL-3+ with OpenSSL exception | ||||
|  This program is free software; you can redistribute it and/or modify | ||||
|  it under the terms of the GNU General Public License as published by | ||||
|  the Free Software Foundation, either version 3 of the License, or | ||||
|  (at your option) any later version. | ||||
|  . | ||||
|  This program is distributed in the hope that it will be useful, | ||||
|  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  GNU General Public License for more details. | ||||
|  . | ||||
|  You should have received a copy of the GNU General Public License | ||||
|  along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  . | ||||
|  Additional permission under GPLv3 section 7: | ||||
|  . | ||||
|  In the following paragraph, "GPL" means the GNU General Public | ||||
|  License, version 3 or any later version, and "Non-GPL Code" means | ||||
|  code that is governed neither by the GPL nor a license | ||||
|  compatible with the GPL. | ||||
|  . | ||||
|  You may link the code of this Program with Non-GPL Code and convey | ||||
|  linked combinations including the two, provided that such Non-GPL | ||||
|  Code only links to the code of this Program through those well | ||||
|  defined interfaces identified in the file named EXCEPTION found in | ||||
|  the source code files (the "Approved Interfaces"). The files of | ||||
|  Non-GPL Code may instantiate templates or use macros or inline | ||||
|  functions from the Approved Interfaces without causing the resulting | ||||
|  work to be covered by the GPL. Only the copyright holders of this | ||||
|  Program may make changes or additions to the list of Approved | ||||
|  Interfaces. | ||||
|  | ||||
| Files: install/ui/css/patternfly.css | ||||
| Copyright: Nicolas Gallagher | ||||
|            Jonathan Neal | ||||
| License: MIT | ||||
|  | ||||
| Files: install/ui/src/libs/bootstrap.js | ||||
|        debian/missing-sources/bootstrap*.js | ||||
| Copyright: 2011-2014 Twitter, Inc. | ||||
| License: MIT | ||||
|  | ||||
| Files: install/ui/src/libs/d3.js | ||||
|        debian/missing-sources/d3.js | ||||
| Copyright: 2010-2015, Michael Bostock | ||||
| License: BSD-3-clause | ||||
|  | ||||
| Files: install/ui/src/libs/jquery.js | ||||
|        debian/missing-sources/jquery-2.0.3.js | ||||
| Copyright: 2005, 2013 jQuery Foundation, Inc. | ||||
| License: MIT | ||||
|  | ||||
| Files: install/ui/src/libs/json2.js | ||||
| Copyright: None | ||||
| License: public-domain | ||||
|  Public Domain. | ||||
|  | ||||
| Files: install/ui/src/libs/patternfly.js | ||||
|        debian/missing-sources/patternfly.js | ||||
| Copyright: 2013, Red Hat | ||||
| License: Apache-2.0 | ||||
|  | ||||
| Files: install/ui/src/libs/qrcode.js | ||||
|        debian/missing-sources/qrcode.js | ||||
| Copyright: 2012, Shim Sangmin | ||||
| License: MIT | ||||
|  | ||||
| Files: install/ui/less/font-awesome/* | ||||
| Copyright: 2012-2013, Dave Gandy <drgandy@alum.mit.edu> | ||||
| License: MIT | ||||
|  | ||||
| Files: install/ui/util/build/build.js | ||||
|        install/ui/util/build/_base/configRhino.js | ||||
|        install/ui/build/dojo/dojo.js | ||||
|        debian/missing-sources/dojo | ||||
| Copyright: 2004-2012, The Dojo Foundation | ||||
| License: BSD-3-clause or AFL-2.1 | ||||
|  | ||||
| Files: install/ui/test/qunit.css install/ui/test/qunit.js | ||||
| Copyright: 2009, John Resig, Jörn Zaefferer | ||||
|            2008, Ariel Flesler | ||||
| License: MIT or GPL-2 or BSD-2-clause | ||||
|  | ||||
| Files: debian/* | ||||
| Copyright: Michele Baldessari michele@pupazzo.org> | ||||
|            Timo Aaltonen <tjaalton@ubuntu.com> | ||||
| License: GPL-2+ | ||||
|  | ||||
| License: GPL-2 | ||||
|  On Debian machines the full text of the GNU General Public License | ||||
|  version 2 can be found in the file /usr/share/common-licenses/GPL-2. | ||||
|  | ||||
| License: GPL-2+ | ||||
|  On Debian machines the full text of the GNU General Public License | ||||
|  version 2 can be found in the file /usr/share/common-licenses/GPL-2. | ||||
|  | ||||
| License: GPL-3+ | ||||
|  On Debian machines the full text of the GNU General Public License | ||||
|  version 3 can be found in the file /usr/share/common-licenses/GPL-3. | ||||
|  | ||||
| License: BSD-2-clause | ||||
|  Redistribution and use in source and binary forms, with or without | ||||
|  modification, are permitted provided that the following conditions | ||||
|  are met: | ||||
|  . | ||||
|      * Redistributions of source code must retain the above | ||||
|        copyright notice, this list of conditions and the following | ||||
|        disclaimer. | ||||
|  . | ||||
|      * Redistributions in binary form must reproduce the above | ||||
|        copyright notice, this list of conditions and the following | ||||
|        disclaimer in the documentation and/or other materials | ||||
|        provided with the distribution. | ||||
|  . | ||||
|  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY | ||||
|  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||||
|  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE | ||||
|  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, | ||||
|  OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||||
|  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||||
|  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR | ||||
|  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF | ||||
|  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|  SUCH DAMAGE. | ||||
|  | ||||
| License: BSD-3-clause | ||||
|  Redistribution and use in source and binary forms, with or without | ||||
|  modification, are permitted provided that the following conditions are met: | ||||
|  . | ||||
|    * Redistributions of source code must retain the above copyright notice, this | ||||
|      list of conditions and the following disclaimer. | ||||
|    * Redistributions in binary form must reproduce the above copyright notice, | ||||
|      this list of conditions and the following disclaimer in the documentation | ||||
|      and/or other materials provided with the distribution. | ||||
|    * Neither the name of the Dojo Foundation nor the names of its contributors | ||||
|      may be used to endorse or promote products derived from this software | ||||
|      without specific prior written permission. | ||||
|  . | ||||
|  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||||
|  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
|  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
|  DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE | ||||
|  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||||
|  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||||
|  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||||
|  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| License: MIT | ||||
|  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. | ||||
|  | ||||
| License: AFL-2.1 | ||||
|  This Academic Free License (the "License") applies to any original work of | ||||
|  authorship (the "Original Work") whose owner (the "Licensor") has placed the | ||||
|  following notice immediately following the copyright notice for the Original | ||||
|  Work: | ||||
|  . | ||||
|  Licensed under the Academic Free License version 2.1 | ||||
|  . | ||||
|  1) Grant of Copyright License. Licensor hereby grants You a world-wide, | ||||
|  royalty-free, non-exclusive, perpetual, sublicenseable license to do the | ||||
|  following: | ||||
|  . | ||||
|  a) to reproduce the Original Work in copies; | ||||
|  . | ||||
|  b) to prepare derivative works ("Derivative Works") based upon the Original | ||||
|  Work; | ||||
|  . | ||||
|  c) to distribute copies of the Original Work and Derivative Works to the | ||||
|  public; | ||||
|  . | ||||
|  d) to perform the Original Work publicly; and | ||||
|  . | ||||
|  e) to display the Original Work publicly. | ||||
|  . | ||||
|  2) Grant of Patent License. Licensor hereby grants You a world-wide, | ||||
|  royalty-free, non-exclusive, perpetual, sublicenseable license, under patent | ||||
|  claims owned or controlled by the Licensor that are embodied in the Original | ||||
|  Work as furnished by the Licensor, to make, use, sell and offer for sale the | ||||
|  Original Work and Derivative Works. | ||||
|  . | ||||
|  3) Grant of Source Code License. The term "Source Code" means the preferred | ||||
|  form of the Original Work for making modifications to it and all available | ||||
|  documentation describing how to modify the Original Work. Licensor hereby | ||||
|  agrees to provide a machine-readable copy of the Source Code of the Original | ||||
|  Work along with each copy of the Original Work that Licensor distributes. | ||||
|  Licensor reserves the right to satisfy this obligation by placing a | ||||
|  machine-readable copy of the Source Code in an information repository | ||||
|  reasonably calculated to permit inexpensive and convenient access by You for as | ||||
|  long as Licensor continues to distribute the Original Work, and by publishing | ||||
|  the address of that information repository in a notice immediately following | ||||
|  the copyright notice that applies to the Original Work. | ||||
|  . | ||||
|  4) Exclusions From License Grant. Neither the names of Licensor, nor the names | ||||
|  of any contributors to the Original Work, nor any of their trademarks or | ||||
|  service marks, may be used to endorse or promote products derived from this | ||||
|  Original Work without express prior written permission of the Licensor. Nothing | ||||
|  in this License shall be deemed to grant any rights to trademarks, copyrights, | ||||
|  patents, trade secrets or any other intellectual property of Licensor except as | ||||
|  expressly stated herein. No patent license is granted to make, use, sell or | ||||
|  offer to sell embodiments of any patent claims other than the licensed claims | ||||
|  defined in Section 2. No right is granted to the trademarks of Licensor even if | ||||
|  such marks are included in the Original Work. Nothing in this License shall be | ||||
|  interpreted to prohibit Licensor from licensing under different terms from this | ||||
|  License any Original Work that Licensor otherwise would have a right to | ||||
|  license. | ||||
|  . | ||||
|  5) This section intentionally omitted. | ||||
|  . | ||||
|  6) Attribution Rights. You must retain, in the Source Code of any Derivative | ||||
|  Works that You create, all copyright, patent or trademark notices from the | ||||
|  Source Code of the Original Work, as well as any notices of licensing and any | ||||
|  descriptive text identified therein as an "Attribution Notice." You must cause | ||||
|  the Source Code for any Derivative Works that You create to carry a prominent | ||||
|  Attribution Notice reasonably calculated to inform recipients that You have | ||||
|  modified the Original Work. | ||||
|  . | ||||
|  7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that | ||||
|  the copyright in and to the Original Work and the patent rights granted herein | ||||
|  by Licensor are owned by the Licensor or are sublicensed to You under the terms | ||||
|  of this License with the permission of the contributor(s) of those copyrights | ||||
|  and patent rights. Except as expressly stated in the immediately proceeding | ||||
|  sentence, the Original Work is provided under this License on an "AS IS" BASIS | ||||
|  and WITHOUT WARRANTY, either express or implied, including, without limitation, | ||||
|  the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR | ||||
|  PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. | ||||
|  This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No | ||||
|  license to Original Work is granted hereunder except under this disclaimer. | ||||
|  . | ||||
|  8) Limitation of Liability. Under no circumstances and under no legal theory, | ||||
|  whether in tort (including negligence), contract, or otherwise, shall the | ||||
|  Licensor be liable to any person for any direct, indirect, special, incidental, | ||||
|  or consequential damages of any character arising as a result of this License | ||||
|  or the use of the Original Work including, without limitation, damages for loss | ||||
|  of goodwill, work stoppage, computer failure or malfunction, or any and all | ||||
|  other commercial damages or losses. This limitation of liability shall not | ||||
|  apply to liability for death or personal injury resulting from Licensor's | ||||
|  negligence to the extent applicable law prohibits such limitation. Some | ||||
|  jurisdictions do not allow the exclusion or limitation of incidental or | ||||
|  consequential damages, so this exclusion and limitation may not apply to You. | ||||
|  . | ||||
|  9) Acceptance and Termination. If You distribute copies of the Original Work or | ||||
|  a Derivative Work, You must make a reasonable effort under the circumstances to | ||||
|  obtain the express assent of recipients to the terms of this License. Nothing | ||||
|  else but this License (or another written agreement between Licensor and You) | ||||
|  grants You permission to create Derivative Works based upon the Original Work | ||||
|  or to exercise any of the rights granted in Section 1 herein, and any attempt | ||||
|  to do so except under the terms of this License (or another written agreement | ||||
|  between Licensor and You) is expressly prohibited by U.S. copyright law, the | ||||
|  equivalent laws of other countries, and by international treaty. Therefore, by | ||||
|  exercising any of the rights granted to You in Section 1 herein, You indicate | ||||
|  Your acceptance of this License and all of its terms and conditions. | ||||
|  . | ||||
|  10) Termination for Patent Action. This License shall terminate automatically | ||||
|  and You may no longer exercise any of the rights granted to You by this License | ||||
|  as of the date You commence an action, including a cross-claim or counterclaim, | ||||
|  against Licensor or any licensee alleging that the Original Work infringes a | ||||
|  patent. This termination provision shall not apply for an action alleging | ||||
|  patent infringement by combinations of the Original Work with other software or | ||||
|  hardware. | ||||
|  . | ||||
|  11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this | ||||
|  License may be brought only in the courts of a jurisdiction wherein the | ||||
|  Licensor resides or in which Licensor conducts its primary business, and under | ||||
|  the laws of that jurisdiction excluding its conflict-of-law provisions. The | ||||
|  application of the United Nations Convention on Contracts for the International | ||||
|  Sale of Goods is expressly excluded. Any use of the Original Work outside the | ||||
|  scope of this License or after its termination shall be subject to the | ||||
|  requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et | ||||
|  seq., the equivalent laws of other countries, and international treaty. This | ||||
|  section shall survive the termination of this License. | ||||
|  . | ||||
|  12) Attorneys Fees. In any action to enforce the terms of this License or | ||||
|  seeking damages relating thereto, the prevailing party shall be entitled to | ||||
|  recover its costs and expenses, including, without limitation, reasonable | ||||
|  attorneys' fees and costs incurred in connection with such action, including | ||||
|   any appeal of such action. This section shall survive the termination of this | ||||
|  License. | ||||
|  . | ||||
|  13) Miscellaneous. This License represents the complete agreement concerning | ||||
|  the subject matter hereof. If any provision of this License is held to be | ||||
|  unenforceable, such provision shall be reformed only to the extent necessary to | ||||
|  make it enforceable. | ||||
|  . | ||||
|  14) Definition of "You" in This License. "You" throughout this License, whether | ||||
|  in upper or lower case, means an individual or a legal entity exercising rights | ||||
|  under, and complying with all of the terms of, this License. For legal | ||||
|  entities, "You" includes any entity that controls, is controlled by, or is | ||||
|  under common control with you. For purposes of this definition, "control" means | ||||
|  (i) the power, direct or indirect, to cause the direction or management of such | ||||
|  entity, whether by contract or otherwise, or (ii) ownership of fifty percent | ||||
|  (50%) or more of the outstanding shares, or (iii) beneficial ownership of such | ||||
|  entity. | ||||
|  . | ||||
|  15) Right to Use. You may use the Original Work in all ways not otherwise | ||||
|  restricted or conditioned by this License or by law, and Licensor promises not | ||||
|  to interfere with or be responsible for such uses by You. | ||||
|  . | ||||
|  This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. | ||||
|  Permission is hereby granted to copy and distribute this license without | ||||
|  modification. This license may not be modified without the express written | ||||
|  permission of its copyright owner. | ||||
|  | ||||
| License: Apache-2.0 | ||||
|  On Debian machines the full text of the Apache License 2.0 can be found in the | ||||
|  file /usr/share/common-licenses/Apache-2.0. | ||||
							
								
								
									
										7
									
								
								debian/freeipa-client-epn.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								debian/freeipa-client-epn.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| etc/ipa/epn.conf | ||||
| etc/ipa/epn/expire_msg.template | ||||
| lib/systemd/system/ipa-epn.service | ||||
| lib/systemd/system/ipa-epn.timer | ||||
| usr/sbin/ipa-epn | ||||
| usr/share/man/man1/ipa-epn.1 | ||||
| usr/share/man/man5/epn.conf.5 | ||||
							
								
								
									
										2
									
								
								debian/freeipa-client-samba.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								debian/freeipa-client-samba.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| usr/sbin/ipa-client-samba | ||||
| usr/share/man/man1/ipa-client-samba.1* | ||||
							
								
								
									
										6
									
								
								debian/freeipa-client.dirs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								debian/freeipa-client.dirs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| etc/ipa | ||||
| etc/ipa/nssdb | ||||
| etc/krb5.conf.d | ||||
| etc/pki/nssdb | ||||
| var/lib/ipa-client/pki | ||||
| var/lib/ipa-client/sysrestore | ||||
							
								
								
									
										18
									
								
								debian/freeipa-client.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								debian/freeipa-client.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| etc/default/certmonger | ||||
| usr/bin/ipa | ||||
| usr/sbin/ipa-certupdate | ||||
| usr/sbin/ipa-client-automount | ||||
| usr/sbin/ipa-client-install | ||||
| usr/sbin/ipa-getkeytab | ||||
| usr/sbin/ipa-join | ||||
| usr/sbin/ipa-rmkeytab | ||||
| usr/share/bash-completion/completions/ipa | ||||
| usr/share/ipa/client/*.template | ||||
| usr/share/man/man1/ipa.1* | ||||
| usr/share/man/man1/ipa-certupdate.1* | ||||
| usr/share/man/man1/ipa-client-automount.1* | ||||
| usr/share/man/man1/ipa-client-install.1* | ||||
| usr/share/man/man1/ipa-getkeytab.1* | ||||
| usr/share/man/man1/ipa-join.1* | ||||
| usr/share/man/man1/ipa-rmkeytab.1* | ||||
| usr/share/man/man5/default.conf.5* | ||||
							
								
								
									
										3
									
								
								debian/freeipa-client.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								debian/freeipa-client.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # lintian is lying | ||||
| python-script-but-no-python-dep | ||||
| possible-bashism-in-maintainer-script | ||||
							
								
								
									
										8
									
								
								debian/freeipa-client.postinst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								debian/freeipa-client.postinst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| #!/bin/sh | ||||
| set -e | ||||
|  | ||||
| if [ ! -e /run/ipa ]; then | ||||
|     mkdir -m 0700 /run/ipa | ||||
| fi | ||||
|  | ||||
| #DEBHELPER# | ||||
							
								
								
									
										22
									
								
								debian/freeipa-client.postrm
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								debian/freeipa-client.postrm
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| #!/bin/sh | ||||
| set -e | ||||
|  | ||||
| if [ "$1" = purge ]; then | ||||
|     rm -f /etc/ipa/default.conf | ||||
|     rm -f /etc/pki/nssdb/cert8.db \ | ||||
|           /etc/pki/nssdb/key3.db \ | ||||
|           /etc/pki/nssdb/secmod.db | ||||
|     rm -f /etc/ipa/nssdb/cert8.db \ | ||||
|           /etc/ipa/nssdb/key3.db \ | ||||
|           /etc/ipa/nssdb/pwdfile.txt \ | ||||
|           /etc/ipa/nssdb/secmod.db \ | ||||
|           /etc/ipa/nssdb/*.orig | ||||
|     rmdir /etc/pki/nssdb || true | ||||
|     rmdir /etc/ipa/nssdb || true | ||||
|     rmdir /etc/ipa || true | ||||
|     rm -rf /var/lib/ipa-client | ||||
|     rm -f /var/log/ipaclient-upgrade.log | ||||
| fi | ||||
|  | ||||
| #DEBHELPER# | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/freeipa-client.tmpfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/freeipa-client.tmpfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| d /run/ipa 0711 root root | ||||
							
								
								
									
										1
									
								
								debian/freeipa-common.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/freeipa-common.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| usr/share/locale | ||||
							
								
								
									
										3
									
								
								debian/freeipa-server-dns.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								debian/freeipa-server-dns.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| usr/sbin/ipa-dns-install | ||||
| usr/share/man/man1/ipa-dns-install.1* | ||||
|  | ||||
							
								
								
									
										3
									
								
								debian/freeipa-server-dns.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								debian/freeipa-server-dns.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # lintian is lying | ||||
| python-script-but-no-python-dep | ||||
|  | ||||
							
								
								
									
										7
									
								
								debian/freeipa-server-trust-ad.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								debian/freeipa-server-trust-ad.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| etc/dbus-1/system.d/oddjob-ipa-trust.conf | ||||
| etc/oddjobd.conf.d/oddjobd-ipa-trust.conf | ||||
| usr/lib/*/samba/pdb/ipasam.so | ||||
| usr/lib/ipa/oddjob/com.redhat.idm.trust-fetch-domains | ||||
| usr/sbin/ipa-adtrust-install | ||||
| usr/share/ipa/smb.conf.empty | ||||
| usr/share/man/man1/ipa-adtrust-install.1* | ||||
							
								
								
									
										2
									
								
								debian/freeipa-server-trust-ad.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								debian/freeipa-server-trust-ad.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # lintian is lying | ||||
| python-script-but-no-python-dep | ||||
							
								
								
									
										6
									
								
								debian/freeipa-server.dirs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								debian/freeipa-server.dirs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| etc/ipa/custodia | ||||
| etc/ipa/dnssec | ||||
| var/lib/ipa/backup | ||||
| var/lib/ipa/certs | ||||
| var/lib/ipa/passwds | ||||
| var/lib/ipa/private | ||||
							
								
								
									
										1
									
								
								debian/freeipa-server.docs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/freeipa-server.docs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| README.md | ||||
							
								
								
									
										119
									
								
								debian/freeipa-server.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								debian/freeipa-server.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | ||||
| etc/default/ipa-dnskeysyncd | ||||
| etc/default/ipa-ods-exporter | ||||
| etc/ipa/html/* | ||||
| etc/ipa/kdcproxy | ||||
| etc/dbus-1/system.d/org.freeipa.server.conf | ||||
| etc/oddjobd.conf.d/ipa-server.conf | ||||
| lib/systemd/system/ipa-custodia.service | ||||
| lib/systemd/system/ipa-dnskeysyncd.service | ||||
| lib/systemd/system/ipa-ods-exporter.service | ||||
| lib/systemd/system/ipa-ods-exporter.socket | ||||
| lib/systemd/system/ipa-otpd.socket | ||||
| lib/systemd/system/ipa-otpd@.service | ||||
| lib/systemd/system/ipa.service | ||||
| usr/lib/*/dirsrv/plugins/libipa_cldap.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_dns.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_enrollment_extop.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_extdom_extop.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_lockout.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_modrdn.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_otp_counter.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_otp_lasttoken.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_pwd_extop.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_range_check.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_repl_version.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_sidgen.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_sidgen_task.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_uuid.so | ||||
| usr/lib/*/dirsrv/plugins/libipa_winsync.so | ||||
| usr/lib/*/dirsrv/plugins/libtopology.so | ||||
| usr/lib/*/krb5/plugins/kdb/*.so | ||||
| usr/lib/certmonger/dogtag-ipa-ca-renew-agent-submit | ||||
| usr/lib/certmonger/ipa-server-guard | ||||
| usr/lib/ipa/certmonger/* | ||||
| usr/lib/ipa/custodia/ipa-custodia-dmldap | ||||
| usr/lib/ipa/custodia/ipa-custodia-pki-tomcat | ||||
| usr/lib/ipa/custodia/ipa-custodia-pki-tomcat-wrapped | ||||
| usr/lib/ipa/custodia/ipa-custodia-ra-agent | ||||
| usr/lib/ipa/ipa-custodia | ||||
| usr/lib/ipa/ipa-custodia-check | ||||
| usr/lib/ipa/ipa-dnskeysync-replica | ||||
| usr/lib/ipa/ipa-dnskeysyncd | ||||
| usr/lib/ipa/ipa-httpd-kdcproxy | ||||
| usr/lib/ipa/ipa-httpd-pwdreader | ||||
| usr/lib/ipa/ipa-ods-exporter | ||||
| usr/lib/ipa/ipa-otpd | ||||
| usr/lib/ipa/ipa-pki-retrieve-key | ||||
| usr/lib/ipa/ipa-pki-wait-running | ||||
| usr/lib/ipa/ipa-print-pac | ||||
| usr/lib/ipa/oddjob/org.freeipa.server.conncheck | ||||
| usr/lib/ipa/oddjob/org.freeipa.server.trust-enable-agent | ||||
| usr/lib/tmpfiles.d/ipa.conf | ||||
| usr/sbin/ipa-advise | ||||
| usr/sbin/ipa-backup | ||||
| usr/sbin/ipa-ca-install | ||||
| usr/sbin/ipa-cacert-manage | ||||
| usr/sbin/ipa-cert-fix | ||||
| usr/sbin/ipa-compat-manage | ||||
| usr/sbin/ipa-crlgen-manage | ||||
| usr/sbin/ipa-csreplica-manage | ||||
| usr/sbin/ipa-kra-install | ||||
| usr/sbin/ipa-ldap-updater | ||||
| usr/sbin/ipa-managed-entries | ||||
| usr/sbin/ipa-nis-manage | ||||
| usr/sbin/ipa-otptoken-import | ||||
| usr/sbin/ipa-pkinit-manage | ||||
| usr/sbin/ipa-replica-conncheck | ||||
| usr/sbin/ipa-replica-install | ||||
| usr/sbin/ipa-replica-manage | ||||
| usr/sbin/ipa-restore | ||||
| usr/sbin/ipa-server-certinstall | ||||
| usr/sbin/ipa-server-install | ||||
| usr/sbin/ipa-server-upgrade | ||||
| usr/sbin/ipa-winsync-migrate | ||||
| usr/sbin/ipactl | ||||
| usr/share/ipa/*.ldif | ||||
| usr/share/ipa/*.template | ||||
| usr/share/ipa/*.uldif | ||||
| usr/share/ipa/advise/legacy/*.template | ||||
| usr/share/ipa/bind.ipa-ext.conf.template | ||||
| usr/share/ipa/gssapi.login | ||||
| usr/share/ipa/html/* | ||||
| usr/share/ipa/ipaca_*.ini | ||||
| usr/share/ipa/ipakrb5.aug | ||||
| usr/share/ipa/kdcproxy.wsgi | ||||
| usr/share/ipa/migration/* | ||||
| usr/share/ipa/profiles/README | ||||
| usr/share/ipa/profiles/*.cfg | ||||
| usr/share/ipa/schema.d/* | ||||
| usr/share/ipa/ui/* | ||||
| usr/share/ipa/updates/* | ||||
| usr/share/ipa/wsgi.py | ||||
| usr/share/ipa/wsgi/* | ||||
| usr/share/man/man1/ipa-advise.1* | ||||
| usr/share/man/man1/ipa-backup.1* | ||||
| usr/share/man/man1/ipa-ca-install.1* | ||||
| usr/share/man/man1/ipa-cacert-manage.1* | ||||
| usr/share/man/man1/ipa-cert-fix.1* | ||||
| usr/share/man/man1/ipa-compat-manage.1* | ||||
| usr/share/man/man1/ipa-crlgen-manage.1* | ||||
| usr/share/man/man1/ipa-csreplica-manage.1* | ||||
| usr/share/man/man1/ipa-kra-install.1* | ||||
| usr/share/man/man1/ipa-ldap-updater.1* | ||||
| usr/share/man/man1/ipa-managed-entries.1* | ||||
| usr/share/man/man1/ipa-nis-manage.1* | ||||
| usr/share/man/man1/ipa-otptoken-import.1* | ||||
| usr/share/man/man1/ipa-pkinit-manage.1* | ||||
| usr/share/man/man1/ipa-replica-conncheck.1* | ||||
| usr/share/man/man1/ipa-replica-install.1* | ||||
| usr/share/man/man1/ipa-replica-manage.1* | ||||
| usr/share/man/man1/ipa-restore.1* | ||||
| usr/share/man/man1/ipa-server-certinstall.1* | ||||
| usr/share/man/man1/ipa-server-install.1* | ||||
| usr/share/man/man1/ipa-server-upgrade.1* | ||||
| usr/share/man/man1/ipa-winsync-migrate.1* | ||||
| usr/share/man/man8/ipactl.8* | ||||
| var/lib/ipa/pki-ca | ||||
| var/lib/ipa/gssproxy | ||||
| var/lib/ipa/sysrestore | ||||
| var/lib/ipa/sysupgrade | ||||
							
								
								
									
										8
									
								
								debian/freeipa-server.links
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								debian/freeipa-server.links
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| /etc/ipa/html/browserconfig.html	usr/share/ipa/html/browserconfig.html | ||||
| /etc/ipa/html/ffconfig.js		usr/share/ipa/html/ffconfig.js | ||||
| /etc/ipa/html/ffconfig_page.js		usr/share/ipa/html/ffconfig_page.js | ||||
| /etc/ipa/html/ssbrowser.html		usr/share/ipa/html/ssbrowser.html | ||||
| /etc/ipa/html/unauthorized.html		usr/share/ipa/html/unauthorized.html | ||||
| /usr/share/javascript/prototype/prototype.js       	/usr/share/ipa/ipagui/static/javascript/prototype.js | ||||
| /usr/share/javascript/scriptaculous/effects.js		/usr/share/ipa/ipagui/static/javascript/effects.js | ||||
| /usr/share/javascript/scriptaculous/scriptaculous.js	/usr/share/ipa/ipagui/static/javascript/scriptaculous.js | ||||
							
								
								
									
										9
									
								
								debian/freeipa-server.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								debian/freeipa-server.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| # lintian is lying | ||||
| python-script-but-no-python-dep | ||||
| # we really need apache2 | ||||
| web-application-should-not-depend-unconditionally-on-apache2 | ||||
| # embedded versions used for better performance and function | ||||
| embedded-javascript-library | ||||
| # this is how we need them | ||||
| non-standard-dir-perm var/cache/bind/data/ * | ||||
| non-standard-dir-perm var/lib/ipa/backup/ * | ||||
							
								
								
									
										111
									
								
								debian/freeipa-server.postinst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								debian/freeipa-server.postinst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | ||||
| #!/bin/sh | ||||
| set -e | ||||
|  | ||||
| OUT=/dev/null | ||||
|  | ||||
| if [ "$1" = configure ]; then | ||||
|     if ! getent passwd kdcproxy  > $OUT; then | ||||
|         adduser --quiet --system --home / \ | ||||
|             --shell /usr/sbin/nologin --group \ | ||||
|             --no-create-home --gecos "IPA KDC Proxy User" \ | ||||
|             kdcproxy > $OUT | ||||
|     fi | ||||
|     if ! getent passwd ipaapi  > $OUT; then | ||||
|         adduser --quiet --system --home / \ | ||||
|             --shell /usr/sbin/nologin --group \ | ||||
|             --no-create-home --gecos "IPA Framework User" \ | ||||
|             ipaapi > $OUT | ||||
|     fi | ||||
|  | ||||
|     # fix upgrade | ||||
|     if dpkg --compare-versions "$2" lt "4.7.0~pre2-1"; then | ||||
|         # mod_nss needs to be disabled before mod_ssl is enabled | ||||
|         if [ -e /etc/apache2/mods-enabled/nss.load ]; then | ||||
|             . /usr/share/apache2/apache2-maintscript-helper | ||||
|             apache2_invoke dismod nss || exit $? | ||||
|             # and if that's not enough, just remove the links to be sure | ||||
|             rm /etc/apache2/mods-enabled/nss.load /etc/apache2/mods-enabled/nss.conf | ||||
|         fi | ||||
|  | ||||
|         # this is new in tmpfiles.d/ipa.conf, need to create it here | ||||
|         # for the upgrader | ||||
|         if [ ! -e /var/run/ipa/ccaches ]; then | ||||
|             mkdir /var/run/ipa/ccaches | ||||
|             chown ipaapi:ipaapi /var/run/ipa/ccaches | ||||
|             chmod 770 /var/run/ipa/ccaches | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     chmod 711 /var/lib/ipa/sysrestore > $OUT || true | ||||
|     chmod 700 /var/lib/ipa/passwds > $OUT || true | ||||
|     chmod 700 /var/lib/ipa/private > $OUT || true | ||||
|  | ||||
|     # add www-data to ipaapi group | ||||
|     if ! id -Gn www-data | grep '\bipaapi\b' >/dev/null; then | ||||
|         usermod www-data -a -G ipaapi | ||||
|     fi | ||||
|  | ||||
|     if [ -e /usr/share/apache2/apache2-maintscript-helper ]; then | ||||
|         . /usr/share/apache2/apache2-maintscript-helper | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/auth_gssapi.load ]; then | ||||
|             apache2_invoke enmod auth_gssapi || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/authz_user.load ]; then | ||||
|             apache2_invoke enmod authz_user || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/deflate.load ]; then | ||||
|             apache2_invoke enmod deflate || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/expires.load ]; then | ||||
|             apache2_invoke enmod expires || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/headers.load ]; then | ||||
|             apache2_invoke enmod headers || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/lookup_identity.load ]; then | ||||
|             apache2_invoke enmod lookup_identity || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/proxy.load ]; then | ||||
|             apache2_invoke enmod proxy || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/proxy_ajp.load ]; then | ||||
|             apache2_invoke enmod proxy_ajp || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/proxy_http.load ]; then | ||||
|             apache2_invoke enmod proxy_http || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/rewrite.load ]; then | ||||
|             apache2_invoke enmod rewrite || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/session.load ]; then | ||||
|             apache2_invoke enmod session || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/session_cookie.load ]; then | ||||
|             apache2_invoke enmod session_cookie || exit $? | ||||
|         fi | ||||
| 	if [ ! -e /etc/apache2/mods-enabled/ssl.load ]; then | ||||
|             apache2_invoke enmod ssl || exit $? | ||||
|         fi | ||||
|  | ||||
| 	# Enable default SSL site | ||||
| 	if [ ! -e /etc/apache2/sites-enabled/default-ssl.conf ]; then | ||||
|             apache2_invoke ensite default-ssl || exit $? | ||||
|         fi | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| if [ ! -e /run/apache2/ipa ]; then | ||||
|     mkdir -m 0700 /run/apache2/ipa | ||||
|     chown www-data:www-data /run/apache2/ipa | ||||
|  | ||||
|     if [ ! -e /run/apache2/ipa/clientcaches ]; then | ||||
|         mkdir -m 0700 /run/apache2/ipa/clientcaches | ||||
|         chown www-data:www-data /run/apache2/ipa/clientcaches | ||||
|     fi | ||||
|     if [ ! -e /run/apache2/ipa/krbcache ]; then | ||||
|         mkdir -m 0700 /run/apache2/ipa/krbcache | ||||
|         chown www-data:www-data /run/apache2/ipa/krbcache | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| #DEBHELPER# | ||||
							
								
								
									
										65
									
								
								debian/freeipa-server.postrm
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								debian/freeipa-server.postrm
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| #!/bin/sh | ||||
| set -e | ||||
|  | ||||
| case "$1" in | ||||
|     remove|purge) | ||||
|         if [ -e /usr/share/apache2/apache2-maintscript-helper ]; then | ||||
|             . /usr/share/apache2/apache2-maintscript-helper | ||||
|  | ||||
|             if [ -e /etc/apache2/mods-enabled/auth_kerb.load ]; then | ||||
|                 apache2_invoke dismod auth_kerb || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/auth_gssapi.load ]; then | ||||
|                 apache2_invoke dismod auth_gssapi || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/authz_user.load ]; then | ||||
|                 apache2_invoke dismod authz_user || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/deflate.load ]; then | ||||
|                 apache2_invoke dismod deflate || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/expires.load ]; then | ||||
|                 apache2_invoke dismod expires || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/headers.load ]; then | ||||
|                 apache2_invoke dismod headers || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/lookup_identity.load ]; then | ||||
|                 apache2_invoke dismod lookup_identity || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/proxy.load ]; then | ||||
|                 apache2_invoke dismod proxy || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/proxy_ajp.load ]; then | ||||
|                 apache2_invoke dismod proxy_ajp || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/proxy_http.load ]; then | ||||
|                 apache2_invoke dismod proxy_http || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/rewrite.load ]; then | ||||
|                 apache2_invoke dismod rewrite || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/session.load ]; then | ||||
|                 apache2_invoke dismod session || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/session_cookie.load ]; then | ||||
|                 apache2_invoke dismod session_cookie || exit $? | ||||
|             fi | ||||
|             if [ -e /etc/apache2/mods-enabled/ssl.load ]; then | ||||
|                 apache2_invoke dismod ssl || exit $? | ||||
|             fi | ||||
|         fi | ||||
|     ;; | ||||
| esac | ||||
| case "$1" in | ||||
|     purge) | ||||
|         rm -f \ | ||||
|             /var/log/ipareplica-conncheck.log \ | ||||
|             /var/log/ipareplica-install.log \ | ||||
|             /var/log/ipaserver-install.log \ | ||||
|             /var/log/ipaserver-uninstall.log \ | ||||
|             /var/log/ipaupgrade.log | ||||
|     ;; | ||||
| esac | ||||
|  | ||||
| #DEBHELPER# | ||||
							
								
								
									
										26
									
								
								debian/freeipa-server.prerm
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								debian/freeipa-server.prerm
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| #!/bin/sh | ||||
| set -e | ||||
|  | ||||
| if [ -e /usr/share/apache2/apache2-maintscript-helper ]; then | ||||
|     . /usr/share/apache2/apache2-maintscript-helper | ||||
|     if [ -e /etc/apache2/mods-enabled/auth_kerb ]; then | ||||
|         apache2_invoke dismod auth_kerb || exit $? | ||||
|     fi | ||||
|     if [ -e /etc/apache2/mods-enabled/auth_gssapi ]; then | ||||
|         apache2_invoke dismod auth_gssapi || exit $? | ||||
|     fi | ||||
|     if [ -e /etc/apache2/mods-enabled/expires  ]; then | ||||
|         apache2_invoke dismod expires || exit $? | ||||
|     fi | ||||
|     if [ -e /etc/apache2/mods-enabled/headers  ]; then | ||||
|         apache2_invoke dismod headers || exit $? | ||||
|     fi | ||||
|     if [ -e /etc/apache2/mods-enabled/proxy  ]; then | ||||
|         apache2_invoke dismod proxy || exit $? | ||||
|     fi | ||||
|     if [ -e /etc/apache2/mods-enabled/rewrite  ]; then | ||||
|         apache2_invoke dismod rewrite || exit $? | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| #DEBHELPER# | ||||
							
								
								
									
										6
									
								
								debian/freeipa-tests.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								debian/freeipa-tests.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| usr/bin/ipa-run-tests | ||||
| usr/bin/ipa-test-config | ||||
| usr/bin/ipa-test-task | ||||
| usr/share/man/man1/ipa-run-tests.1* | ||||
| usr/share/man/man1/ipa-test-config.1* | ||||
| usr/share/man/man1/ipa-test-task.1* | ||||
							
								
								
									
										2
									
								
								debian/freeipa-tests.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								debian/freeipa-tests.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # lintian is just wrong | ||||
| freeipa-tests: python-script-but-no-python-dep | ||||
							
								
								
									
										9
									
								
								debian/gitlab-ci.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								debian/gitlab-ci.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| include: | ||||
|   - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml | ||||
|   - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml | ||||
|  | ||||
| blhc: | ||||
|   allow_failure: true | ||||
|  | ||||
| piuparts: | ||||
|   allow_failure: true | ||||
							
								
								
									
										1798
									
								
								debian/missing-sources/bootstrap-datepicker.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1798
									
								
								debian/missing-sources/bootstrap-datepicker.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1951
									
								
								debian/missing-sources/bootstrap.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1951
									
								
								debian/missing-sources/bootstrap.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										9504
									
								
								debian/missing-sources/d3.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9504
									
								
								debian/missing-sources/d3.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										320
									
								
								debian/missing-sources/dojo/Deferred.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										320
									
								
								debian/missing-sources/dojo/Deferred.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,320 @@ | ||||
| define([ | ||||
| 	"./has", | ||||
| 	"./_base/lang", | ||||
| 	"./errors/CancelError", | ||||
| 	"./promise/Promise", | ||||
| 	"./has!config-deferredInstrumentation?./promise/instrumentation" | ||||
| ], function(has, lang, CancelError, Promise, instrumentation){ | ||||
| 	"use strict"; | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/Deferred | ||||
|  | ||||
| 	var PROGRESS = 0, | ||||
| 			RESOLVED = 1, | ||||
| 			REJECTED = 2; | ||||
| 	var FULFILLED_ERROR_MESSAGE = "This deferred has already been fulfilled."; | ||||
|  | ||||
| 	var freezeObject = Object.freeze || function(){}; | ||||
|  | ||||
| 	var signalWaiting = function(waiting, type, result, rejection, deferred){ | ||||
| 		if(has("config-deferredInstrumentation")){ | ||||
| 			if(type === REJECTED && Deferred.instrumentRejected && waiting.length === 0){ | ||||
| 				Deferred.instrumentRejected(result, false, rejection, deferred); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		for(var i = 0; i < waiting.length; i++){ | ||||
| 			signalListener(waiting[i], type, result, rejection); | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	var signalListener = function(listener, type, result, rejection){ | ||||
| 		var func = listener[type]; | ||||
| 		var deferred = listener.deferred; | ||||
| 		if(func){ | ||||
| 			try{ | ||||
| 				var newResult = func(result); | ||||
| 				if(type === PROGRESS){ | ||||
| 					if(typeof newResult !== "undefined"){ | ||||
| 						signalDeferred(deferred, type, newResult); | ||||
| 					} | ||||
| 				}else{ | ||||
| 					if(newResult && typeof newResult.then === "function"){ | ||||
| 						listener.cancel = newResult.cancel; | ||||
| 						newResult.then( | ||||
| 								// Only make resolvers if they're actually going to be used | ||||
| 								makeDeferredSignaler(deferred, RESOLVED), | ||||
| 								makeDeferredSignaler(deferred, REJECTED), | ||||
| 								makeDeferredSignaler(deferred, PROGRESS)); | ||||
| 						return; | ||||
| 					} | ||||
| 					signalDeferred(deferred, RESOLVED, newResult); | ||||
| 				} | ||||
| 			}catch(error){ | ||||
| 				signalDeferred(deferred, REJECTED, error); | ||||
| 			} | ||||
| 		}else{ | ||||
| 			signalDeferred(deferred, type, result); | ||||
| 		} | ||||
|  | ||||
| 		if(has("config-deferredInstrumentation")){ | ||||
| 			if(type === REJECTED && Deferred.instrumentRejected){ | ||||
| 				Deferred.instrumentRejected(result, !!func, rejection, deferred.promise); | ||||
| 			} | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	var makeDeferredSignaler = function(deferred, type){ | ||||
| 		return function(value){ | ||||
| 			signalDeferred(deferred, type, value); | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	var signalDeferred = function(deferred, type, result){ | ||||
| 		if(!deferred.isCanceled()){ | ||||
| 			switch(type){ | ||||
| 				case PROGRESS: | ||||
| 					deferred.progress(result); | ||||
| 					break; | ||||
| 				case RESOLVED: | ||||
| 					deferred.resolve(result); | ||||
| 					break; | ||||
| 				case REJECTED: | ||||
| 					deferred.reject(result); | ||||
| 					break; | ||||
| 			} | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	var Deferred = function(canceler){ | ||||
| 		// summary: | ||||
| 		//		Creates a new deferred. This API is preferred over | ||||
| 		//		`dojo/_base/Deferred`. | ||||
| 		// description: | ||||
| 		//		Creates a new deferred, as an abstraction over (primarily) | ||||
| 		//		asynchronous operations. The deferred is the private interface | ||||
| 		//		that should not be returned to calling code. That's what the | ||||
| 		//		`promise` is for. See `dojo/promise/Promise`. | ||||
| 		// canceler: Function? | ||||
| 		//		Will be invoked if the deferred is canceled. The canceler | ||||
| 		//		receives the reason the deferred was canceled as its argument. | ||||
| 		//		The deferred is rejected with its return value, or a new | ||||
| 		//		`dojo/errors/CancelError` instance. | ||||
|  | ||||
| 		// promise: dojo/promise/Promise | ||||
| 		//		The public promise object that clients can add callbacks to.  | ||||
| 		var promise = this.promise = new Promise(); | ||||
|  | ||||
| 		var deferred = this; | ||||
| 		var fulfilled, result, rejection; | ||||
| 		var canceled = false; | ||||
| 		var waiting = []; | ||||
|  | ||||
| 		if(has("config-deferredInstrumentation") && Error.captureStackTrace){ | ||||
| 			Error.captureStackTrace(deferred, Deferred); | ||||
| 			Error.captureStackTrace(promise, Deferred); | ||||
| 		} | ||||
|  | ||||
| 		this.isResolved = promise.isResolved = function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the deferred has been resolved. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			return fulfilled === RESOLVED; | ||||
| 		}; | ||||
|  | ||||
| 		this.isRejected = promise.isRejected = function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the deferred has been rejected. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			return fulfilled === REJECTED; | ||||
| 		}; | ||||
|  | ||||
| 		this.isFulfilled = promise.isFulfilled = function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the deferred has been resolved or rejected. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			return !!fulfilled; | ||||
| 		}; | ||||
|  | ||||
| 		this.isCanceled = promise.isCanceled = function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the deferred has been canceled. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			return canceled; | ||||
| 		}; | ||||
|  | ||||
| 		this.progress = function(update, strict){ | ||||
| 			// summary: | ||||
| 			//		Emit a progress update on the deferred. | ||||
| 			// description: | ||||
| 			//		Emit a progress update on the deferred. Progress updates | ||||
| 			//		can be used to communicate updates about the asynchronous | ||||
| 			//		operation before it has finished. | ||||
| 			// update: any | ||||
| 			//		The progress update. Passed to progbacks. | ||||
| 			// strict: Boolean? | ||||
| 			//		If strict, will throw an error if the deferred has already | ||||
| 			//		been fulfilled and consequently no progress can be emitted. | ||||
| 			// returns: dojo/promise/Promise | ||||
| 			//		Returns the original promise for the deferred. | ||||
|  | ||||
| 			if(!fulfilled){ | ||||
| 				signalWaiting(waiting, PROGRESS, update, null, deferred); | ||||
| 				return promise; | ||||
| 			}else if(strict === true){ | ||||
| 				throw new Error(FULFILLED_ERROR_MESSAGE); | ||||
| 			}else{ | ||||
| 				return promise; | ||||
| 			} | ||||
| 		}; | ||||
|  | ||||
| 		this.resolve = function(value, strict){ | ||||
| 			// summary: | ||||
| 			//		Resolve the deferred. | ||||
| 			// description: | ||||
| 			//		Resolve the deferred, putting it in a success state. | ||||
| 			// value: any | ||||
| 			//		The result of the deferred. Passed to callbacks. | ||||
| 			// strict: Boolean? | ||||
| 			//		If strict, will throw an error if the deferred has already | ||||
| 			//		been fulfilled and consequently cannot be resolved. | ||||
| 			// returns: dojo/promise/Promise | ||||
| 			//		Returns the original promise for the deferred. | ||||
|  | ||||
| 			if(!fulfilled){ | ||||
| 				// Set fulfilled, store value. After signaling waiting listeners unset | ||||
| 				// waiting. | ||||
| 				signalWaiting(waiting, fulfilled = RESOLVED, result = value, null, deferred); | ||||
| 				waiting = null; | ||||
| 				return promise; | ||||
| 			}else if(strict === true){ | ||||
| 				throw new Error(FULFILLED_ERROR_MESSAGE); | ||||
| 			}else{ | ||||
| 				return promise; | ||||
| 			} | ||||
| 		}; | ||||
|  | ||||
| 		var reject = this.reject = function(error, strict){ | ||||
| 			// summary: | ||||
| 			//		Reject the deferred. | ||||
| 			// description: | ||||
| 			//		Reject the deferred, putting it in an error state. | ||||
| 			// error: any | ||||
| 			//		The error result of the deferred. Passed to errbacks. | ||||
| 			// strict: Boolean? | ||||
| 			//		If strict, will throw an error if the deferred has already | ||||
| 			//		been fulfilled and consequently cannot be rejected. | ||||
| 			// returns: dojo/promise/Promise | ||||
| 			//		Returns the original promise for the deferred. | ||||
|  | ||||
| 			if(!fulfilled){ | ||||
| 				if(has("config-deferredInstrumentation") && Error.captureStackTrace){ | ||||
| 					Error.captureStackTrace(rejection = {}, reject); | ||||
| 				} | ||||
| 				signalWaiting(waiting, fulfilled = REJECTED, result = error, rejection, deferred); | ||||
| 				waiting = null; | ||||
| 				return promise; | ||||
| 			}else if(strict === true){ | ||||
| 				throw new Error(FULFILLED_ERROR_MESSAGE); | ||||
| 			}else{ | ||||
| 				return promise; | ||||
| 			} | ||||
| 		}; | ||||
|  | ||||
| 		this.then = promise.then = function(callback, errback, progback){ | ||||
| 			// summary: | ||||
| 			//		Add new callbacks to the deferred. | ||||
| 			// description: | ||||
| 			//		Add new callbacks to the deferred. Callbacks can be added | ||||
| 			//		before or after the deferred is fulfilled. | ||||
| 			// callback: Function? | ||||
| 			//		Callback to be invoked when the promise is resolved. | ||||
| 			//		Receives the resolution value. | ||||
| 			// errback: Function? | ||||
| 			//		Callback to be invoked when the promise is rejected. | ||||
| 			//		Receives the rejection error. | ||||
| 			// progback: Function? | ||||
| 			//		Callback to be invoked when the promise emits a progress | ||||
| 			//		update. Receives the progress update. | ||||
| 			// returns: dojo/promise/Promise | ||||
| 			//		Returns a new promise for the result of the callback(s). | ||||
| 			//		This can be used for chaining many asynchronous operations. | ||||
|  | ||||
| 			var listener = [progback, callback, errback]; | ||||
| 			// Ensure we cancel the promise we're waiting for, or if callback/errback | ||||
| 			// have returned a promise, cancel that one. | ||||
| 			listener.cancel = promise.cancel; | ||||
| 			listener.deferred = new Deferred(function(reason){ | ||||
| 				// Check whether cancel is really available, returned promises are not | ||||
| 				// required to expose `cancel` | ||||
| 				return listener.cancel && listener.cancel(reason); | ||||
| 			}); | ||||
| 			if(fulfilled && !waiting){ | ||||
| 				signalListener(listener, fulfilled, result, rejection); | ||||
| 			}else{ | ||||
| 				waiting.push(listener); | ||||
| 			} | ||||
| 			return listener.deferred.promise; | ||||
| 		}; | ||||
|  | ||||
| 		this.cancel = promise.cancel = function(reason, strict){ | ||||
| 			// summary: | ||||
| 			//		Inform the deferred it may cancel its asynchronous operation. | ||||
| 			// description: | ||||
| 			//		Inform the deferred it may cancel its asynchronous operation. | ||||
| 			//		The deferred's (optional) canceler is invoked and the | ||||
| 			//		deferred will be left in a rejected state. Can affect other | ||||
| 			//		promises that originate with the same deferred. | ||||
| 			// reason: any | ||||
| 			//		A message that may be sent to the deferred's canceler, | ||||
| 			//		explaining why it's being canceled. | ||||
| 			// strict: Boolean? | ||||
| 			//		If strict, will throw an error if the deferred has already | ||||
| 			//		been fulfilled and consequently cannot be canceled. | ||||
| 			// returns: any | ||||
| 			//		Returns the rejection reason if the deferred was canceled | ||||
| 			//		normally. | ||||
|  | ||||
| 			if(!fulfilled){ | ||||
| 				// Cancel can be called even after the deferred is fulfilled | ||||
| 				if(canceler){ | ||||
| 					var returnedReason = canceler(reason); | ||||
| 					reason = typeof returnedReason === "undefined" ? reason : returnedReason; | ||||
| 				} | ||||
| 				canceled = true; | ||||
| 				if(!fulfilled){ | ||||
| 					// Allow canceler to provide its own reason, but fall back to a CancelError | ||||
| 					if(typeof reason === "undefined"){ | ||||
| 						reason = new CancelError(); | ||||
| 					} | ||||
| 					reject(reason); | ||||
| 					return reason; | ||||
| 				}else if(fulfilled === REJECTED && result === reason){ | ||||
| 					return reason; | ||||
| 				} | ||||
| 			}else if(strict === true){ | ||||
| 				throw new Error(FULFILLED_ERROR_MESSAGE); | ||||
| 			} | ||||
| 		}; | ||||
|  | ||||
| 		freezeObject(promise); | ||||
| 	}; | ||||
|  | ||||
| 	Deferred.prototype.toString = function(){ | ||||
| 		// returns: String | ||||
| 		//		Returns `[object Deferred]`. | ||||
|  | ||||
| 		return "[object Deferred]"; | ||||
| 	}; | ||||
|  | ||||
| 	if(instrumentation){ | ||||
| 		instrumentation(Deferred); | ||||
| 	} | ||||
|  | ||||
| 	return Deferred; | ||||
| }); | ||||
							
								
								
									
										35
									
								
								debian/missing-sources/dojo/Evented.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								debian/missing-sources/dojo/Evented.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| define(["./aspect", "./on"], function(aspect, on){ | ||||
| 	// module: | ||||
| 	//		dojo/Evented | ||||
|  | ||||
|  	"use strict"; | ||||
|  	var after = aspect.after; | ||||
| 	function Evented(){ | ||||
| 		// summary: | ||||
| 		//		A class that can be used as a mixin or base class, | ||||
| 		//		to add on() and emit() methods to a class | ||||
| 		//		for listening for events and emitting events: | ||||
| 		// | ||||
| 		//		|	define(["dojo/Evented"], function(Evented){ | ||||
| 		//		|		var EventedWidget = dojo.declare([Evented, dijit._Widget], {...}); | ||||
| 		//		|		widget = new EventedWidget(); | ||||
| 		//		|		widget.on("open", function(event){ | ||||
| 		//		|		... do something with event | ||||
| 		//		|	 }); | ||||
| 		//		| | ||||
| 		//		|	widget.emit("open", {name:"some event", ...}); | ||||
| 	} | ||||
| 	Evented.prototype = { | ||||
| 		on: function(type, listener){ | ||||
| 			return on.parse(this, type, listener, function(target, type){ | ||||
| 				return after(target, 'on' + type, listener, true); | ||||
| 			}); | ||||
| 		}, | ||||
| 		emit: function(type, event){ | ||||
| 			var args = [this]; | ||||
| 			args.push.apply(args, arguments); | ||||
| 			return on.emit.apply(on, args); | ||||
| 		} | ||||
| 	}; | ||||
| 	return Evented; | ||||
| }); | ||||
							
								
								
									
										514
									
								
								debian/missing-sources/dojo/NodeList-dom.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										514
									
								
								debian/missing-sources/dojo/NodeList-dom.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,514 @@ | ||||
| define(["./_base/kernel", "./query", "./_base/array", "./_base/lang", "./dom-class", "./dom-construct", "./dom-geometry", "./dom-attr", "./dom-style"], function(dojo, query, array, lang, domCls, domCtr, domGeom, domAttr, domStyle){ | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/NodeList-dom.js | ||||
|  | ||||
| 	/*===== | ||||
| 	 return function(){ | ||||
| 		 // summary: | ||||
| 		 //		Adds DOM related methods to NodeList, and returns NodeList constructor. | ||||
| 	 }; | ||||
| 	 =====*/ | ||||
|  | ||||
| 	var magicGuard = function(a){ | ||||
| 		// summary: | ||||
| 		//		the guard function for dojo.attr() and dojo.style() | ||||
| 		return a.length == 1 && (typeof a[0] == "string"); // inline'd type check | ||||
| 	}; | ||||
|  | ||||
| 	var orphan = function(node){ | ||||
| 		// summary: | ||||
| 		//		function to orphan nodes | ||||
| 		var p = node.parentNode; | ||||
| 		if(p){ | ||||
| 			p.removeChild(node); | ||||
| 		} | ||||
| 	}; | ||||
| 	// FIXME: should we move orphan() to dojo.html? | ||||
|  | ||||
| 	var NodeList = query.NodeList, | ||||
| 		awc = NodeList._adaptWithCondition, | ||||
| 		aafe = NodeList._adaptAsForEach, | ||||
| 		aam = NodeList._adaptAsMap; | ||||
|  | ||||
| 	function getSet(module){ | ||||
| 		return function(node, name, value){ | ||||
| 			if(arguments.length == 2){ | ||||
| 				return module[typeof name == "string" ? "get" : "set"](node, name); | ||||
| 			} | ||||
| 			// setter | ||||
| 			return module.set(node, name, value); | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	lang.extend(NodeList, { | ||||
| 		_normalize: function(/*String||Element||Object||NodeList*/content, /*DOMNode?*/refNode){ | ||||
| 			// summary: | ||||
| 			//		normalizes data to an array of items to insert. | ||||
| 			// description: | ||||
| 			//		If content is an object, it can have special properties "template" and | ||||
| 			//		"parse". If "template" is defined, then the template value is run through | ||||
| 			//		dojo.string.substitute (if dojo/string.substitute() has been dojo.required elsewhere), | ||||
| 			//		or if templateFunc is a function on the content, that function will be used to | ||||
| 			//		transform the template into a final string to be used for for passing to dojo/dom-construct.toDom(). | ||||
| 			//		If content.parse is true, then it is remembered for later, for when the content | ||||
| 			//		nodes are inserted into the DOM. At that point, the nodes will be parsed for widgets | ||||
| 			//		(if dojo.parser has been dojo.required elsewhere). | ||||
|  | ||||
| 			//Wanted to just use a DocumentFragment, but for the array/NodeList | ||||
| 			//case that meant using cloneNode, but we may not want that. | ||||
| 			//Cloning should only happen if the node operations span | ||||
| 			//multiple refNodes. Also, need a real array, not a NodeList from the | ||||
| 			//DOM since the node movements could change those NodeLists. | ||||
|  | ||||
| 			var parse = content.parse === true; | ||||
|  | ||||
| 			//Do we have an object that needs to be run through a template? | ||||
| 			if(typeof content.template == "string"){ | ||||
| 				var templateFunc = content.templateFunc || (dojo.string && dojo.string.substitute); | ||||
| 				content = templateFunc ? templateFunc(content.template, content) : content; | ||||
| 			} | ||||
|  | ||||
| 			var type = (typeof content); | ||||
| 			if(type == "string" || type == "number"){ | ||||
| 				content = domCtr.toDom(content, (refNode && refNode.ownerDocument)); | ||||
| 				if(content.nodeType == 11){ | ||||
| 					//DocumentFragment. It cannot handle cloneNode calls, so pull out the children. | ||||
| 					content = lang._toArray(content.childNodes); | ||||
| 				}else{ | ||||
| 					content = [content]; | ||||
| 				} | ||||
| 			}else if(!lang.isArrayLike(content)){ | ||||
| 				content = [content]; | ||||
| 			}else if(!lang.isArray(content)){ | ||||
| 				//To get to this point, content is array-like, but | ||||
| 				//not an array, which likely means a DOM NodeList. Convert it now. | ||||
| 				content = lang._toArray(content); | ||||
| 			} | ||||
|  | ||||
| 			//Pass around the parse info | ||||
| 			if(parse){ | ||||
| 				content._runParse = true; | ||||
| 			} | ||||
| 			return content; //Array | ||||
| 		}, | ||||
|  | ||||
| 		_cloneNode: function(/*DOMNode*/ node){ | ||||
| 			// summary: | ||||
| 			//		private utility to clone a node. Not very interesting in the vanilla | ||||
| 			//		dojo/NodeList case, but delegates could do interesting things like | ||||
| 			//		clone event handlers if that is derivable from the node. | ||||
| 			return node.cloneNode(true); | ||||
| 		}, | ||||
|  | ||||
| 		_place: function(/*Array*/ary, /*DOMNode*/refNode, /*String*/position, /*Boolean*/useClone){ | ||||
| 			// summary: | ||||
| 			//		private utility to handle placing an array of nodes relative to another node. | ||||
| 			// description: | ||||
| 			//		Allows for cloning the nodes in the array, and for | ||||
| 			//		optionally parsing widgets, if ary._runParse is true. | ||||
|  | ||||
| 			//Avoid a disallowed operation if trying to do an innerHTML on a non-element node. | ||||
| 			if(refNode.nodeType != 1 && position == "only"){ | ||||
| 				return; | ||||
| 			} | ||||
| 			var rNode = refNode, tempNode; | ||||
|  | ||||
| 			//Always cycle backwards in case the array is really a | ||||
| 			//DOM NodeList and the DOM operations take it out of the live collection. | ||||
| 			var length = ary.length; | ||||
| 			for(var i = length - 1; i >= 0; i--){ | ||||
| 				var node = (useClone ? this._cloneNode(ary[i]) : ary[i]); | ||||
|  | ||||
| 				//If need widget parsing, use a temp node, instead of waiting after inserting into | ||||
| 				//real DOM because we need to start widget parsing at one node up from current node, | ||||
| 				//which could cause some already parsed widgets to be parsed again. | ||||
| 				if(ary._runParse && dojo.parser && dojo.parser.parse){ | ||||
| 					if(!tempNode){ | ||||
| 						tempNode = rNode.ownerDocument.createElement("div"); | ||||
| 					} | ||||
| 					tempNode.appendChild(node); | ||||
| 					dojo.parser.parse(tempNode); | ||||
| 					node = tempNode.firstChild; | ||||
| 					while(tempNode.firstChild){ | ||||
| 						tempNode.removeChild(tempNode.firstChild); | ||||
| 					} | ||||
| 				} | ||||
|  | ||||
| 				if(i == length - 1){ | ||||
| 					domCtr.place(node, rNode, position); | ||||
| 				}else{ | ||||
| 					rNode.parentNode.insertBefore(node, rNode); | ||||
| 				} | ||||
| 				rNode = node; | ||||
| 			} | ||||
| 		}, | ||||
|  | ||||
|  | ||||
| 		position: aam(domGeom.position), | ||||
| 		/*===== | ||||
| 		position: function(){ | ||||
| 			// summary: | ||||
| 			//		Returns border-box objects (x/y/w/h) of all elements in a node list | ||||
| 			//		as an Array (*not* a NodeList). Acts like `dojo.position`, though | ||||
| 			//		assumes the node passed is each node in this list. | ||||
|  | ||||
| 			return dojo.map(this, dojo.position); // Array | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		attr: awc(getSet(domAttr), magicGuard), | ||||
| 		/*===== | ||||
| 		attr: function(property, value){ | ||||
| 			// summary: | ||||
| 			//		gets or sets the DOM attribute for every element in the | ||||
| 			//		NodeList. See also `dojo.attr` | ||||
| 			// property: String | ||||
| 			//		the attribute to get/set | ||||
| 			// value: String? | ||||
| 			//		optional. The value to set the property to | ||||
| 			// returns: | ||||
| 			//		if no value is passed, the result is an array of attribute values | ||||
| 			//		If a value is passed, the return is this NodeList | ||||
| 			// example: | ||||
| 			//		Make all nodes with a particular class focusable: | ||||
| 			//	|	dojo.query(".focusable").attr("tabIndex", -1); | ||||
| 			// example: | ||||
| 			//		Disable a group of buttons: | ||||
| 			//	|	dojo.query("button.group").attr("disabled", true); | ||||
| 			// example: | ||||
| 			//		innerHTML can be assigned or retrieved as well: | ||||
| 			//	|	// get the innerHTML (as an array) for each list item | ||||
| 			//	|	var ih = dojo.query("li.replaceable").attr("innerHTML"); | ||||
| 			return; // dojo/NodeList|Array | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		style: awc(getSet(domStyle), magicGuard), | ||||
| 		/*===== | ||||
| 		style: function(property, value){ | ||||
| 			// summary: | ||||
| 			//		gets or sets the CSS property for every element in the NodeList | ||||
| 			// property: String | ||||
| 			//		the CSS property to get/set, in JavaScript notation | ||||
| 			//		("lineHieght" instead of "line-height") | ||||
| 			// value: String? | ||||
| 			//		optional. The value to set the property to | ||||
| 			// returns: | ||||
| 			//		if no value is passed, the result is an array of strings. | ||||
| 			//		If a value is passed, the return is this NodeList | ||||
| 			return; // dojo/NodeList | ||||
| 			return; // Array | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		addClass: aafe(domCls.add), | ||||
| 		/*===== | ||||
| 		addClass: function(className){ | ||||
| 			// summary: | ||||
| 			//		adds the specified class to every node in the list | ||||
| 			// className: String|Array | ||||
| 			//		A String class name to add, or several space-separated class names, | ||||
| 			//		or an array of class names. | ||||
| 			return; // dojo/NodeList | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		removeClass: aafe(domCls.remove), | ||||
| 		/*===== | ||||
| 		removeClass: function(className){ | ||||
| 			// summary: | ||||
| 			//		removes the specified class from every node in the list | ||||
| 			// className: String|Array? | ||||
| 			//		An optional String class name to remove, or several space-separated | ||||
| 			//		class names, or an array of class names. If omitted, all class names | ||||
| 			//		will be deleted. | ||||
| 			// returns: | ||||
| 			//		this list | ||||
| 			return; // dojo/NodeList | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		toggleClass: aafe(domCls.toggle), | ||||
| 		/*===== | ||||
| 		toggleClass: function(className, condition){ | ||||
| 			// summary: | ||||
| 			//		Adds a class to node if not present, or removes if present. | ||||
| 			//		Pass a boolean condition if you want to explicitly add or remove. | ||||
| 			// condition: Boolean? | ||||
| 			//		If passed, true means to add the class, false means to remove. | ||||
| 			// className: String | ||||
| 			//		the CSS class to add | ||||
| 			return; // dojo/NodeList | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		replaceClass: aafe(domCls.replace), | ||||
| 		/*===== | ||||
| 		replaceClass: function(addClassStr, removeClassStr){ | ||||
| 			// summary: | ||||
| 			//		Replaces one or more classes on a node if not present. | ||||
| 			//		Operates more quickly than calling `removeClass()` and `addClass()` | ||||
| 			// addClassStr: String|Array | ||||
| 			//		A String class name to add, or several space-separated class names, | ||||
| 			//		or an array of class names. | ||||
| 			// removeClassStr: String|Array? | ||||
| 			//		A String class name to remove, or several space-separated class names, | ||||
| 			//		or an array of class names. | ||||
| 			return; // dojo/NodeList | ||||
| 		 }, | ||||
| 		 =====*/ | ||||
|  | ||||
| 		empty: aafe(domCtr.empty), | ||||
| 		/*===== | ||||
| 		empty: function(){ | ||||
| 			// summary: | ||||
| 			//		clears all content from each node in the list. Effectively | ||||
| 			//		equivalent to removing all child nodes from every item in | ||||
| 			//		the list. | ||||
| 			return this.forEach("item.innerHTML='';"); // dojo/NodeList | ||||
| 			// FIXME: should we be checking for and/or disposing of widgets below these nodes? | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		removeAttr: aafe(domAttr.remove), | ||||
| 		/*===== | ||||
| 		 removeAttr: function(name){ | ||||
| 			// summary: | ||||
| 			//		Removes an attribute from each node in the list. | ||||
| 			// name: String | ||||
| 			//		the name of the attribute to remove | ||||
| 			return;		// dojo/NodeList | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		marginBox: aam(domGeom.getMarginBox), | ||||
| 		/*===== | ||||
| 		marginBox: function(){ | ||||
| 			// summary: | ||||
| 			//		Returns margin-box size of nodes | ||||
| 		 	return; // dojo/NodeList | ||||
| 		 }, | ||||
| 		 =====*/ | ||||
|  | ||||
| 		// FIXME: connectPublisher()? connectRunOnce()? | ||||
|  | ||||
| 		/* | ||||
| 		destroy: function(){ | ||||
| 			// summary: | ||||
| 			//		destroys every item in the list. | ||||
| 			this.forEach(d.destroy); | ||||
| 			// FIXME: should we be checking for and/or disposing of widgets below these nodes? | ||||
| 		}, | ||||
| 		*/ | ||||
|  | ||||
| 		place: function(/*String||Node*/ queryOrNode, /*String*/ position){ | ||||
| 			// summary: | ||||
| 			//		places elements of this node list relative to the first element matched | ||||
| 			//		by queryOrNode. Returns the original NodeList. See: `dojo.place` | ||||
| 			// queryOrNode: | ||||
| 			//		may be a string representing any valid CSS3 selector or a DOM node. | ||||
| 			//		In the selector case, only the first matching element will be used | ||||
| 			//		for relative positioning. | ||||
| 			// position: | ||||
| 			//		can be one of: | ||||
| 			// | ||||
| 			//		-	"last" (default) | ||||
| 			//		-	"first" | ||||
| 			//		-	"before" | ||||
| 			//		-	"after" | ||||
| 			//		-	"only" | ||||
| 			//		-	"replace" | ||||
| 			// | ||||
| 			//		or an offset in the childNodes property | ||||
| 			var item = query(queryOrNode)[0]; | ||||
| 			return this.forEach(function(node){ domCtr.place(node, item, position); }); // dojo/NodeList | ||||
| 		}, | ||||
|  | ||||
| 		orphan: function(/*String?*/ filter){ | ||||
| 			// summary: | ||||
| 			//		removes elements in this list that match the filter | ||||
| 			//		from their parents and returns them as a new NodeList. | ||||
| 			// filter: | ||||
| 			//		CSS selector like ".foo" or "div > span" | ||||
| 			// returns: | ||||
| 			//		NodeList containing the orphaned elements | ||||
| 			return (filter ? query._filterResult(this, filter) : this).forEach(orphan); // dojo/NodeList | ||||
| 		}, | ||||
|  | ||||
| 		adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){ | ||||
| 			// summary: | ||||
| 			//		places any/all elements in queryOrListOrNode at a | ||||
| 			//		position relative to the first element in this list. | ||||
| 			//		Returns a dojo/NodeList of the adopted elements. | ||||
| 			// queryOrListOrNode: | ||||
| 			//		a DOM node or a query string or a query result. | ||||
| 			//		Represents the nodes to be adopted relative to the | ||||
| 			//		first element of this NodeList. | ||||
| 			// position: | ||||
| 			//		can be one of: | ||||
| 			// | ||||
| 			//		-	"last" (default) | ||||
| 			//		-	"first" | ||||
| 			//		-	"before" | ||||
| 			//		-	"after" | ||||
| 			//		-	"only" | ||||
| 			//		-	"replace" | ||||
| 			// | ||||
| 			//		or an offset in the childNodes property | ||||
| 			return query(queryOrListOrNode).place(this[0], position)._stash(this);	// dojo/NodeList | ||||
| 		}, | ||||
|  | ||||
| 		// FIXME: do we need this? | ||||
| 		query: function(/*String*/ queryStr){ | ||||
| 			// summary: | ||||
| 			//		Returns a new list whose members match the passed query, | ||||
| 			//		assuming elements of the current NodeList as the root for | ||||
| 			//		each search. | ||||
| 			// example: | ||||
| 			//		assume a DOM created by this markup: | ||||
| 			//	|	<div id="foo"> | ||||
| 			//	|		<p> | ||||
| 			//	|			bacon is tasty, <span>dontcha think?</span> | ||||
| 			//	|		</p> | ||||
| 			//	|	</div> | ||||
| 			//	|	<div id="bar"> | ||||
| 			//	|		<p>great comedians may not be funny <span>in person</span></p> | ||||
| 			//	|	</div> | ||||
| 			//		If we are presented with the following definition for a NodeList: | ||||
| 			//	|	var l = new NodeList(dojo.byId("foo"), dojo.byId("bar")); | ||||
| 			//		it's possible to find all span elements under paragraphs | ||||
| 			//		contained by these elements with this sub-query: | ||||
| 			//	|	var spans = l.query("p span"); | ||||
|  | ||||
| 			// FIXME: probably slow | ||||
| 			if(!queryStr){ return this; } | ||||
| 			var ret = new NodeList; | ||||
| 			this.map(function(node){ | ||||
| 				// FIXME: why would we ever get undefined here? | ||||
| 				query(queryStr, node).forEach(function(subNode){ | ||||
| 					if(subNode !== undefined){ | ||||
| 						ret.push(subNode); | ||||
| 					} | ||||
| 				}); | ||||
| 			}); | ||||
| 			return ret._stash(this);	// dojo/NodeList | ||||
| 		}, | ||||
|  | ||||
| 		filter: function(/*String|Function*/ filter){ | ||||
| 			// summary: | ||||
| 			//		"masks" the built-in javascript filter() method (supported | ||||
| 			//		in Dojo via `dojo.filter`) to support passing a simple | ||||
| 			//		string filter in addition to supporting filtering function | ||||
| 			//		objects. | ||||
| 			// filter: | ||||
| 			//		If a string, a CSS rule like ".thinger" or "div > span". | ||||
| 			// example: | ||||
| 			//		"regular" JS filter syntax as exposed in dojo.filter: | ||||
| 			//		|	dojo.query("*").filter(function(item){ | ||||
| 			//		|		// highlight every paragraph | ||||
| 			//		|		return (item.nodeName == "p"); | ||||
| 			//		|	}).style("backgroundColor", "yellow"); | ||||
| 			// example: | ||||
| 			//		the same filtering using a CSS selector | ||||
| 			//		|	dojo.query("*").filter("p").styles("backgroundColor", "yellow"); | ||||
|  | ||||
| 			var a = arguments, items = this, start = 0; | ||||
| 			if(typeof filter == "string"){ // inline'd type check | ||||
| 				items = query._filterResult(this, a[0]); | ||||
| 				if(a.length == 1){ | ||||
| 					// if we only got a string query, pass back the filtered results | ||||
| 					return items._stash(this); // dojo/NodeList | ||||
| 				} | ||||
| 				// if we got a callback, run it over the filtered items | ||||
| 				start = 1; | ||||
| 			} | ||||
| 			return this._wrap(array.filter(items, a[start], a[start + 1]), this);	// dojo/NodeList | ||||
| 		}, | ||||
|  | ||||
| 		/* | ||||
| 		// FIXME: should this be "copyTo" and include parenting info? | ||||
| 		clone: function(){ | ||||
| 			// summary: | ||||
| 			//		creates node clones of each element of this list | ||||
| 			//		and returns a new list containing the clones | ||||
| 		}, | ||||
| 		*/ | ||||
|  | ||||
| 		addContent: function(/*String||DomNode||Object||dojo/NodeList*/ content, /*String||Integer?*/ position){ | ||||
| 			// summary: | ||||
| 			//		add a node, NodeList or some HTML as a string to every item in the | ||||
| 			//		list.  Returns the original list. | ||||
| 			// description: | ||||
| 			//		a copy of the HTML content is added to each item in the | ||||
| 			//		list, with an optional position argument. If no position | ||||
| 			//		argument is provided, the content is appended to the end of | ||||
| 			//		each item. | ||||
| 			// content: | ||||
| 			//		DOM node, HTML in string format, a NodeList or an Object. If a DOM node or | ||||
| 			//		NodeList, the content will be cloned if the current NodeList has more than one | ||||
| 			//		element. Only the DOM nodes are cloned, no event handlers. If it is an Object, | ||||
| 			//		it should be an object with at "template" String property that has the HTML string | ||||
| 			//		to insert. If dojo.string has already been dojo.required, then dojo.string.substitute | ||||
| 			//		will be used on the "template" to generate the final HTML string. Other allowed | ||||
| 			//		properties on the object are: "parse" if the HTML | ||||
| 			//		string should be parsed for widgets (dojo.require("dojo.parser") to get that | ||||
| 			//		option to work), and "templateFunc" if a template function besides dojo.string.substitute | ||||
| 			//		should be used to transform the "template". | ||||
| 			// position: | ||||
| 			//		can be one of: | ||||
| 			// | ||||
| 			//		-	"last"||"end" (default) | ||||
| 			//		-	"first||"start" | ||||
| 			//		-	"before" | ||||
| 			//		-	"after" | ||||
| 			//		-	"replace" (replaces nodes in this NodeList with new content) | ||||
| 			//		-	"only" (removes other children of the nodes so new content is the only child) | ||||
| 			// | ||||
| 			//		or an offset in the childNodes property | ||||
| 			// example: | ||||
| 			//		appends content to the end if the position is omitted | ||||
| 			//	|	dojo.query("h3 > p").addContent("hey there!"); | ||||
| 			// example: | ||||
| 			//		add something to the front of each element that has a | ||||
| 			//		"thinger" property: | ||||
| 			//	|	dojo.query("[thinger]").addContent("...", "first"); | ||||
| 			// example: | ||||
| 			//		adds a header before each element of the list | ||||
| 			//	|	dojo.query(".note").addContent("<h4>NOTE:</h4>", "before"); | ||||
| 			// example: | ||||
| 			//		add a clone of a DOM node to the end of every element in | ||||
| 			//		the list, removing it from its existing parent. | ||||
| 			//	|	dojo.query(".note").addContent(dojo.byId("foo")); | ||||
| 			// example: | ||||
| 			//		Append nodes from a templatized string. | ||||
| 			// |	dojo.require("dojo.string"); | ||||
| 			// |	dojo.query(".note").addContent({ | ||||
| 			// |		template: '<b>${id}: </b><span>${name}</span>', | ||||
| 			// |		id: "user332", | ||||
| 			// |		name: "Mr. Anderson" | ||||
| 			// |	}); | ||||
| 			// example: | ||||
| 			//		Append nodes from a templatized string that also has widgets parsed. | ||||
| 			// |	dojo.require("dojo.string"); | ||||
| 			// |	dojo.require("dojo.parser"); | ||||
| 			// |	var notes = dojo.query(".note").addContent({ | ||||
| 			// |		template: '<button dojoType="dijit/form/Button">${text}</button>', | ||||
| 			// |		parse: true, | ||||
| 			// |		text: "Send" | ||||
| 			// |	}); | ||||
| 			content = this._normalize(content, this[0]); | ||||
| 			for(var i = 0, node; (node = this[i]); i++){ | ||||
| 				if(content.length){ | ||||
| 					this._place(content, node, position, i > 0); | ||||
| 				}else{ | ||||
| 					// if it is an empty array, we empty the target node | ||||
| 					domCtr.empty(node); | ||||
| 				} | ||||
| 			} | ||||
| 			return this; // dojo/NodeList | ||||
| 		} | ||||
| 	}); | ||||
|  | ||||
| 	return NodeList; | ||||
| }); | ||||
							
								
								
									
										213
									
								
								debian/missing-sources/dojo/Stateful.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								debian/missing-sources/dojo/Stateful.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,213 @@ | ||||
| define(["./_base/declare", "./_base/lang", "./_base/array", "./when"], function(declare, lang, array, when){ | ||||
| 	// module: | ||||
| 	//		dojo/Stateful | ||||
|  | ||||
| return declare("dojo.Stateful", null, { | ||||
| 	// summary: | ||||
| 	//		Base class for objects that provide named properties with optional getter/setter | ||||
| 	//		control and the ability to watch for property changes | ||||
| 	// | ||||
| 	//		The class also provides the functionality to auto-magically manage getters | ||||
| 	//		and setters for object attributes/properties. | ||||
| 	//		 | ||||
| 	//		Getters and Setters should follow the format of _xxxGetter or _xxxSetter where  | ||||
| 	//		the xxx is a name of the attribute to handle.  So an attribute of "foo"  | ||||
| 	//		would have a custom getter of _fooGetter and a custom setter of _fooSetter. | ||||
| 	// | ||||
| 	// example: | ||||
| 	//	|	var obj = new dojo.Stateful(); | ||||
| 	//	|	obj.watch("foo", function(){ | ||||
| 	//	|		console.log("foo changed to " + this.get("foo")); | ||||
| 	//	|	}); | ||||
| 	//	|	obj.set("foo","bar"); | ||||
|  | ||||
| 	// _attrPairNames: Hash | ||||
| 	//		Used across all instances a hash to cache attribute names and their getter  | ||||
| 	//		and setter names. | ||||
| 	_attrPairNames: {}, | ||||
|  | ||||
| 	_getAttrNames: function(name){ | ||||
| 		// summary: | ||||
| 		//		Helper function for get() and set(). | ||||
| 		//		Caches attribute name values so we don't do the string ops every time. | ||||
| 		// tags: | ||||
| 		//		private | ||||
|  | ||||
| 		var apn = this._attrPairNames; | ||||
| 		if(apn[name]){ return apn[name]; } | ||||
| 		return (apn[name] = { | ||||
| 			s: "_" + name + "Setter", | ||||
| 			g: "_" + name + "Getter" | ||||
| 		}); | ||||
| 	}, | ||||
|  | ||||
| 	postscript: function(/*Object?*/ params){ | ||||
| 		// Automatic setting of params during construction | ||||
| 		if (params){ this.set(params); } | ||||
| 	}, | ||||
|  | ||||
| 	_get: function(name, names){ | ||||
| 		// summary: | ||||
| 		//		Private function that does a get based off a hash of names | ||||
| 		// names: | ||||
| 		//		Hash of names of custom attributes | ||||
| 		return typeof this[names.g] === "function" ? this[names.g]() : this[name]; | ||||
| 	}, | ||||
| 	get: function(/*String*/name){ | ||||
| 		// summary: | ||||
| 		//		Get a property on a Stateful instance. | ||||
| 		// name: | ||||
| 		//		The property to get. | ||||
| 		// returns: | ||||
| 		//		The property value on this Stateful instance. | ||||
| 		// description: | ||||
| 		//		Get a named property on a Stateful object. The property may | ||||
| 		//		potentially be retrieved via a getter method in subclasses. In the base class | ||||
| 		//		this just retrieves the object's property. | ||||
| 		//		For example: | ||||
| 		//	|	stateful = new dojo.Stateful({foo: 3}); | ||||
| 		//	|	stateful.get("foo") // returns 3 | ||||
| 		//	|	stateful.foo // returns 3 | ||||
|  | ||||
| 		return this._get(name, this._getAttrNames(name)); //Any | ||||
| 	}, | ||||
| 	set: function(/*String*/name, /*Object*/value){ | ||||
| 		// summary: | ||||
| 		//		Set a property on a Stateful instance | ||||
| 		// name: | ||||
| 		//		The property to set. | ||||
| 		// value: | ||||
| 		//		The value to set in the property. | ||||
| 		// returns: | ||||
| 		//		The function returns this dojo.Stateful instance. | ||||
| 		// description: | ||||
| 		//		Sets named properties on a stateful object and notifies any watchers of | ||||
| 		//		the property. A programmatic setter may be defined in subclasses. | ||||
| 		//		For example: | ||||
| 		//	|	stateful = new dojo.Stateful(); | ||||
| 		//	|	stateful.watch(function(name, oldValue, value){ | ||||
| 		//	|		// this will be called on the set below | ||||
| 		//	|	} | ||||
| 		//	|	stateful.set(foo, 5); | ||||
| 		// | ||||
| 		//	set() may also be called with a hash of name/value pairs, ex: | ||||
| 		//	|	myObj.set({ | ||||
| 		//	|		foo: "Howdy", | ||||
| 		//	|		bar: 3 | ||||
| 		//	|	}) | ||||
| 		//	This is equivalent to calling set(foo, "Howdy") and set(bar, 3) | ||||
|  | ||||
| 		// If an object is used, iterate through object | ||||
| 		if(typeof name === "object"){ | ||||
| 			for(var x in name){ | ||||
| 				if(name.hasOwnProperty(x) && x !="_watchCallbacks"){ | ||||
| 					this.set(x, name[x]); | ||||
| 				} | ||||
| 			} | ||||
| 			return this; | ||||
| 		} | ||||
|  | ||||
| 		var names = this._getAttrNames(name), | ||||
| 			oldValue = this._get(name, names), | ||||
| 			setter = this[names.s], | ||||
| 			result; | ||||
| 		if(typeof setter === "function"){ | ||||
| 			// use the explicit setter | ||||
| 			result = setter.apply(this, Array.prototype.slice.call(arguments, 1)); | ||||
| 		}else{ | ||||
| 			// no setter so set attribute directly | ||||
| 			this[name] = value; | ||||
| 		} | ||||
| 		if(this._watchCallbacks){ | ||||
| 			var self = this; | ||||
| 			// If setter returned a promise, wait for it to complete, otherwise call watches immediatly | ||||
| 			when(result, function(){ | ||||
| 				self._watchCallbacks(name, oldValue, value); | ||||
| 			}); | ||||
| 		} | ||||
| 		return this; // dojo/Stateful | ||||
| 	}, | ||||
| 	_changeAttrValue: function(name, value){ | ||||
| 		// summary: | ||||
| 		//		Internal helper for directly changing an attribute value. | ||||
| 		// | ||||
| 		// name: String | ||||
| 		//		The property to set. | ||||
| 		// value: Mixed | ||||
| 		//		The value to set in the property. | ||||
| 		// | ||||
| 		// description: | ||||
| 		//		Directly change the value of an attribute on an object, bypassing any  | ||||
| 		//		accessor setter.  Also handles the calling of watch and emitting events.  | ||||
| 		//		It is designed to be used by descendent class when there are two values  | ||||
| 		//		of attributes that are linked, but calling .set() is not appropriate. | ||||
|  | ||||
| 		var oldValue = this.get(name); | ||||
| 		this[name] = value; | ||||
| 		if(this._watchCallbacks){ | ||||
| 			this._watchCallbacks(name, oldValue, value); | ||||
| 		} | ||||
| 		return this; // dojo/Stateful | ||||
| 	}, | ||||
| 	watch: function(/*String?*/name, /*Function*/callback){ | ||||
| 		// summary: | ||||
| 		//		Watches a property for changes | ||||
| 		// name: | ||||
| 		//		Indicates the property to watch. This is optional (the callback may be the | ||||
| 		//		only parameter), and if omitted, all the properties will be watched | ||||
| 		// returns: | ||||
| 		//		An object handle for the watch. The unwatch method of this object | ||||
| 		//		can be used to discontinue watching this property: | ||||
| 		//		|	var watchHandle = obj.watch("foo", callback); | ||||
| 		//		|	watchHandle.unwatch(); // callback won't be called now | ||||
| 		// callback: | ||||
| 		//		The function to execute when the property changes. This will be called after | ||||
| 		//		the property has been changed. The callback will be called with the |this| | ||||
| 		//		set to the instance, the first argument as the name of the property, the | ||||
| 		//		second argument as the old value and the third argument as the new value. | ||||
|  | ||||
| 		var callbacks = this._watchCallbacks; | ||||
| 		if(!callbacks){ | ||||
| 			var self = this; | ||||
| 			callbacks = this._watchCallbacks = function(name, oldValue, value, ignoreCatchall){ | ||||
| 				var notify = function(propertyCallbacks){ | ||||
| 					if(propertyCallbacks){ | ||||
| 						propertyCallbacks = propertyCallbacks.slice(); | ||||
| 						for(var i = 0, l = propertyCallbacks.length; i < l; i++){ | ||||
| 							propertyCallbacks[i].call(self, name, oldValue, value); | ||||
| 						} | ||||
| 					} | ||||
| 				}; | ||||
| 				notify(callbacks['_' + name]); | ||||
| 				if(!ignoreCatchall){ | ||||
| 					notify(callbacks["*"]); // the catch-all | ||||
| 				} | ||||
| 			}; // we use a function instead of an object so it will be ignored by JSON conversion | ||||
| 		} | ||||
| 		if(!callback && typeof name === "function"){ | ||||
| 			callback = name; | ||||
| 			name = "*"; | ||||
| 		}else{ | ||||
| 			// prepend with dash to prevent name conflicts with function (like "name" property) | ||||
| 			name = '_' + name; | ||||
| 		} | ||||
| 		var propertyCallbacks = callbacks[name]; | ||||
| 		if(typeof propertyCallbacks !== "object"){ | ||||
| 			propertyCallbacks = callbacks[name] = []; | ||||
| 		} | ||||
| 		propertyCallbacks.push(callback); | ||||
|  | ||||
| 		// TODO: Remove unwatch in 2.0 | ||||
| 		var handle = {}; | ||||
| 		handle.unwatch = handle.remove = function(){ | ||||
| 			var index = array.indexOf(propertyCallbacks, callback); | ||||
| 			if(index > -1){ | ||||
| 				propertyCallbacks.splice(index, 1); | ||||
| 			} | ||||
| 		}; | ||||
| 		return handle; //Object | ||||
| 	} | ||||
|  | ||||
| }); | ||||
|  | ||||
| }); | ||||
							
								
								
									
										383
									
								
								debian/missing-sources/dojo/_base/Deferred.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										383
									
								
								debian/missing-sources/dojo/_base/Deferred.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,383 @@ | ||||
| define([ | ||||
| 	"./kernel", | ||||
| 	"../Deferred", | ||||
| 	"../promise/Promise", | ||||
| 	"../errors/CancelError", | ||||
| 	"../has", | ||||
| 	"./lang", | ||||
| 	"../when" | ||||
| ], function(dojo, NewDeferred, Promise, CancelError, has, lang, when){ | ||||
| 	// module: | ||||
| 	//		dojo/_base/Deferred | ||||
|  | ||||
| 	var mutator = function(){}; | ||||
| 	var freeze = Object.freeze || function(){}; | ||||
| 	// A deferred provides an API for creating and resolving a promise. | ||||
| 	var Deferred = dojo.Deferred = function(/*Function?*/ canceller){ | ||||
| 		// summary: | ||||
| 		//		Deprecated.   This module defines the legacy dojo/_base/Deferred API. | ||||
| 		//		New code should use dojo/Deferred instead. | ||||
| 		// description: | ||||
| 		//		The Deferred API is based on the concept of promises that provide a | ||||
| 		//		generic interface into the eventual completion of an asynchronous action. | ||||
| 		//		The motivation for promises fundamentally is about creating a | ||||
| 		//		separation of concerns that allows one to achieve the same type of | ||||
| 		//		call patterns and logical data flow in asynchronous code as can be | ||||
| 		//		achieved in synchronous code. Promises allows one | ||||
| 		//		to be able to call a function purely with arguments needed for | ||||
| 		//		execution, without conflating the call with concerns of whether it is | ||||
| 		//		sync or async. One shouldn't need to alter a call's arguments if the | ||||
| 		//		implementation switches from sync to async (or vice versa). By having | ||||
| 		//		async functions return promises, the concerns of making the call are | ||||
| 		//		separated from the concerns of asynchronous interaction (which are | ||||
| 		//		handled by the promise). | ||||
| 		// | ||||
| 		//		The Deferred is a type of promise that provides methods for fulfilling the | ||||
| 		//		promise with a successful result or an error. The most important method for | ||||
| 		//		working with Dojo's promises is the then() method, which follows the | ||||
| 		//		CommonJS proposed promise API. An example of using a Dojo promise: | ||||
| 		// | ||||
| 		//		|	var resultingPromise = someAsyncOperation.then(function(result){ | ||||
| 		//		|		... handle result ... | ||||
| 		//		|	}, | ||||
| 		//		|	function(error){ | ||||
| 		//		|		... handle error ... | ||||
| 		//		|	}); | ||||
| 		// | ||||
| 		//		The .then() call returns a new promise that represents the result of the | ||||
| 		//		execution of the callback. The callbacks will never affect the original promises value. | ||||
| 		// | ||||
| 		//		The Deferred instances also provide the following functions for backwards compatibility: | ||||
| 		// | ||||
| 		//		- addCallback(handler) | ||||
| 		//		- addErrback(handler) | ||||
| 		//		- callback(result) | ||||
| 		//		- errback(result) | ||||
| 		// | ||||
| 		//		Callbacks are allowed to return promises themselves, so | ||||
| 		//		you can build complicated sequences of events with ease. | ||||
| 		// | ||||
| 		//		The creator of the Deferred may specify a canceller.  The canceller | ||||
| 		//		is a function that will be called if Deferred.cancel is called | ||||
| 		//		before the Deferred fires. You can use this to implement clean | ||||
| 		//		aborting of an XMLHttpRequest, etc. Note that cancel will fire the | ||||
| 		//		deferred with a CancelledError (unless your canceller returns | ||||
| 		//		another kind of error), so the errbacks should be prepared to | ||||
| 		//		handle that error for cancellable Deferreds. | ||||
| 		// example: | ||||
| 		//	|	var deferred = new Deferred(); | ||||
| 		//	|	setTimeout(function(){ deferred.callback({success: true}); }, 1000); | ||||
| 		//	|	return deferred; | ||||
| 		// example: | ||||
| 		//		Deferred objects are often used when making code asynchronous. It | ||||
| 		//		may be easiest to write functions in a synchronous manner and then | ||||
| 		//		split code using a deferred to trigger a response to a long-lived | ||||
| 		//		operation. For example, instead of register a callback function to | ||||
| 		//		denote when a rendering operation completes, the function can | ||||
| 		//		simply return a deferred: | ||||
| 		// | ||||
| 		//		|	// callback style: | ||||
| 		//		|	function renderLotsOfData(data, callback){ | ||||
| 		//		|		var success = false | ||||
| 		//		|		try{ | ||||
| 		//		|			for(var x in data){ | ||||
| 		//		|				renderDataitem(data[x]); | ||||
| 		//		|			} | ||||
| 		//		|			success = true; | ||||
| 		//		|		}catch(e){ } | ||||
| 		//		|		if(callback){ | ||||
| 		//		|			callback(success); | ||||
| 		//		|		} | ||||
| 		//		|	} | ||||
| 		// | ||||
| 		//		|	// using callback style | ||||
| 		//		|	renderLotsOfData(someDataObj, function(success){ | ||||
| 		//		|		// handles success or failure | ||||
| 		//		|		if(!success){ | ||||
| 		//		|			promptUserToRecover(); | ||||
| 		//		|		} | ||||
| 		//		|	}); | ||||
| 		//		|	// NOTE: no way to add another callback here!! | ||||
| 		// example: | ||||
| 		//		Using a Deferred doesn't simplify the sending code any, but it | ||||
| 		//		provides a standard interface for callers and senders alike, | ||||
| 		//		providing both with a simple way to service multiple callbacks for | ||||
| 		//		an operation and freeing both sides from worrying about details | ||||
| 		//		such as "did this get called already?". With Deferreds, new | ||||
| 		//		callbacks can be added at any time. | ||||
| 		// | ||||
| 		//		|	// Deferred style: | ||||
| 		//		|	function renderLotsOfData(data){ | ||||
| 		//		|		var d = new Deferred(); | ||||
| 		//		|		try{ | ||||
| 		//		|			for(var x in data){ | ||||
| 		//		|				renderDataitem(data[x]); | ||||
| 		//		|			} | ||||
| 		//		|			d.callback(true); | ||||
| 		//		|		}catch(e){ | ||||
| 		//		|			d.errback(new Error("rendering failed")); | ||||
| 		//		|		} | ||||
| 		//		|		return d; | ||||
| 		//		|	} | ||||
| 		// | ||||
| 		//		|	// using Deferred style | ||||
| 		//		|	renderLotsOfData(someDataObj).then(null, function(){ | ||||
| 		//		|		promptUserToRecover(); | ||||
| 		//		|	}); | ||||
| 		//		|	// NOTE: addErrback and addCallback both return the Deferred | ||||
| 		//		|	// again, so we could chain adding callbacks or save the | ||||
| 		//		|	// deferred for later should we need to be notified again. | ||||
| 		// example: | ||||
| 		//		In this example, renderLotsOfData is synchronous and so both | ||||
| 		//		versions are pretty artificial. Putting the data display on a | ||||
| 		//		timeout helps show why Deferreds rock: | ||||
| 		// | ||||
| 		//		|	// Deferred style and async func | ||||
| 		//		|	function renderLotsOfData(data){ | ||||
| 		//		|		var d = new Deferred(); | ||||
| 		//		|		setTimeout(function(){ | ||||
| 		//		|			try{ | ||||
| 		//		|				for(var x in data){ | ||||
| 		//		|					renderDataitem(data[x]); | ||||
| 		//		|				} | ||||
| 		//		|				d.callback(true); | ||||
| 		//		|			}catch(e){ | ||||
| 		//		|				d.errback(new Error("rendering failed")); | ||||
| 		//		|			} | ||||
| 		//		|		}, 100); | ||||
| 		//		|		return d; | ||||
| 		//		|	} | ||||
| 		// | ||||
| 		//		|	// using Deferred style | ||||
| 		//		|	renderLotsOfData(someDataObj).then(null, function(){ | ||||
| 		//		|		promptUserToRecover(); | ||||
| 		//		|	}); | ||||
| 		// | ||||
| 		//		Note that the caller doesn't have to change his code at all to | ||||
| 		//		handle the asynchronous case. | ||||
|  | ||||
| 		var result, finished, canceled, fired, isError, head, nextListener; | ||||
| 		var promise = (this.promise = new Promise()); | ||||
|  | ||||
| 		function complete(value){ | ||||
| 			if(finished){ | ||||
| 				throw new Error("This deferred has already been resolved"); | ||||
| 			} | ||||
| 			result = value; | ||||
| 			finished = true; | ||||
| 			notify(); | ||||
| 		} | ||||
| 		function notify(){ | ||||
| 			var mutated; | ||||
| 			while(!mutated && nextListener){ | ||||
| 				var listener = nextListener; | ||||
| 				nextListener = nextListener.next; | ||||
| 				if((mutated = (listener.progress == mutator))){ // assignment and check | ||||
| 					finished = false; | ||||
| 				} | ||||
|  | ||||
| 				var func = (isError ? listener.error : listener.resolved); | ||||
| 				if(has("config-useDeferredInstrumentation")){ | ||||
| 					if(isError && NewDeferred.instrumentRejected){ | ||||
| 						NewDeferred.instrumentRejected(result, !!func); | ||||
| 					} | ||||
| 				} | ||||
| 				if(func){ | ||||
| 					try{ | ||||
| 						var newResult = func(result); | ||||
| 						if (newResult && typeof newResult.then === "function"){ | ||||
| 							newResult.then(lang.hitch(listener.deferred, "resolve"), lang.hitch(listener.deferred, "reject"), lang.hitch(listener.deferred, "progress")); | ||||
| 							continue; | ||||
| 						} | ||||
| 						var unchanged = mutated && newResult === undefined; | ||||
| 						if(mutated && !unchanged){ | ||||
| 							isError = newResult instanceof Error; | ||||
| 						} | ||||
| 						listener.deferred[unchanged && isError ? "reject" : "resolve"](unchanged ? result : newResult); | ||||
| 					}catch(e){ | ||||
| 						listener.deferred.reject(e); | ||||
| 					} | ||||
| 				}else{ | ||||
| 					if(isError){ | ||||
| 						listener.deferred.reject(result); | ||||
| 					}else{ | ||||
| 						listener.deferred.resolve(result); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		this.isResolved = promise.isResolved = function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the deferred has been resolved. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			return fired == 0; | ||||
| 		}; | ||||
|  | ||||
| 		this.isRejected = promise.isRejected = function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the deferred has been rejected. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			return fired == 1; | ||||
| 		}; | ||||
|  | ||||
| 		this.isFulfilled = promise.isFulfilled = function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the deferred has been resolved or rejected. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			return fired >= 0; | ||||
| 		}; | ||||
|  | ||||
| 		this.isCanceled = promise.isCanceled = function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the deferred has been canceled. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			return canceled; | ||||
| 		}; | ||||
|  | ||||
| 		// calling resolve will resolve the promise | ||||
| 		this.resolve = this.callback = function(value){ | ||||
| 			// summary: | ||||
| 			//		Fulfills the Deferred instance successfully with the provide value | ||||
| 			this.fired = fired = 0; | ||||
| 			this.results = [value, null]; | ||||
| 			complete(value); | ||||
| 		}; | ||||
|  | ||||
|  | ||||
| 		// calling error will indicate that the promise failed | ||||
| 		this.reject = this.errback = function(error){ | ||||
| 			// summary: | ||||
| 			//		Fulfills the Deferred instance as an error with the provided error | ||||
| 			isError = true; | ||||
| 			this.fired = fired = 1; | ||||
| 			if(has("config-useDeferredInstrumentation")){ | ||||
| 				if(NewDeferred.instrumentRejected){ | ||||
| 					NewDeferred.instrumentRejected(error, !!nextListener); | ||||
| 				} | ||||
| 			} | ||||
| 			complete(error); | ||||
| 			this.results = [null, error]; | ||||
| 		}; | ||||
| 		// call progress to provide updates on the progress on the completion of the promise | ||||
| 		this.progress = function(update){ | ||||
| 			// summary: | ||||
| 			//		Send progress events to all listeners | ||||
| 			var listener = nextListener; | ||||
| 			while(listener){ | ||||
| 				var progress = listener.progress; | ||||
| 				progress && progress(update); | ||||
| 				listener = listener.next; | ||||
| 			} | ||||
| 		}; | ||||
| 		this.addCallbacks = function(callback, errback){ | ||||
| 			// summary: | ||||
| 			//		Adds callback and error callback for this deferred instance. | ||||
| 			// callback: Function? | ||||
| 			//		The callback attached to this deferred object. | ||||
| 			// errback: Function? | ||||
| 			//		The error callback attached to this deferred object. | ||||
| 			// returns: | ||||
| 			//		Returns this deferred object. | ||||
| 			this.then(callback, errback, mutator); | ||||
| 			return this;	// Deferred | ||||
| 		}; | ||||
| 		// provide the implementation of the promise | ||||
| 		promise.then = this.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){ | ||||
| 			// summary: | ||||
| 			//		Adds a fulfilledHandler, errorHandler, and progressHandler to be called for | ||||
| 			//		completion of a promise. The fulfilledHandler is called when the promise | ||||
| 			//		is fulfilled. The errorHandler is called when a promise fails. The | ||||
| 			//		progressHandler is called for progress events. All arguments are optional | ||||
| 			//		and non-function values are ignored. The progressHandler is not only an | ||||
| 			//		optional argument, but progress events are purely optional. Promise | ||||
| 			//		providers are not required to ever create progress events. | ||||
| 			// | ||||
| 			//		This function will return a new promise that is fulfilled when the given | ||||
| 			//		fulfilledHandler or errorHandler callback is finished. This allows promise | ||||
| 			//		operations to be chained together. The value returned from the callback | ||||
| 			//		handler is the fulfillment value for the returned promise. If the callback | ||||
| 			//		throws an error, the returned promise will be moved to failed state. | ||||
| 			// | ||||
| 			// returns: | ||||
| 			//		Returns a new promise that represents the result of the | ||||
| 			//		execution of the callback. The callbacks will never affect the original promises value. | ||||
| 			// example: | ||||
| 			//		An example of using a CommonJS compliant promise: | ||||
| 			//		|	asyncComputeTheAnswerToEverything(). | ||||
| 			//		|		then(addTwo). | ||||
| 			//		|		then(printResult, onError); | ||||
| 			//		|	>44 | ||||
| 			// | ||||
| 			var returnDeferred = progressCallback == mutator ? this : new Deferred(promise.cancel); | ||||
| 			var listener = { | ||||
| 				resolved: resolvedCallback, | ||||
| 				error: errorCallback, | ||||
| 				progress: progressCallback, | ||||
| 				deferred: returnDeferred | ||||
| 			}; | ||||
| 			if(nextListener){ | ||||
| 				head = head.next = listener; | ||||
| 			} | ||||
| 			else{ | ||||
| 				nextListener = head = listener; | ||||
| 			} | ||||
| 			if(finished){ | ||||
| 				notify(); | ||||
| 			} | ||||
| 			return returnDeferred.promise; // Promise | ||||
| 		}; | ||||
| 		var deferred = this; | ||||
| 		promise.cancel = this.cancel = function(){ | ||||
| 			// summary: | ||||
| 			//		Cancels the asynchronous operation | ||||
| 			if(!finished){ | ||||
| 				var error = canceller && canceller(deferred); | ||||
| 				if(!finished){ | ||||
| 					if (!(error instanceof Error)){ | ||||
| 						error = new CancelError(error); | ||||
| 					} | ||||
| 					error.log = false; | ||||
| 					deferred.reject(error); | ||||
| 				} | ||||
| 			} | ||||
| 			canceled = true; | ||||
| 		}; | ||||
| 		freeze(promise); | ||||
| 	}; | ||||
| 	lang.extend(Deferred, { | ||||
| 		addCallback: function(/*Function*/ callback){ | ||||
| 			// summary: | ||||
| 			//		Adds successful callback for this deferred instance. | ||||
| 			// returns: | ||||
| 			//		Returns this deferred object. | ||||
| 			return this.addCallbacks(lang.hitch.apply(dojo, arguments));	// Deferred | ||||
| 		}, | ||||
|  | ||||
| 		addErrback: function(/*Function*/ errback){ | ||||
| 			// summary: | ||||
| 			//		Adds error callback for this deferred instance. | ||||
| 			// returns: | ||||
| 			//		Returns this deferred object. | ||||
| 			return this.addCallbacks(null, lang.hitch.apply(dojo, arguments));	// Deferred | ||||
| 		}, | ||||
|  | ||||
| 		addBoth: function(/*Function*/ callback){ | ||||
| 			// summary: | ||||
| 			//		Add handler as both successful callback and error callback for this deferred instance. | ||||
| 			// returns: | ||||
| 			//		Returns this deferred object. | ||||
| 			var enclosed = lang.hitch.apply(dojo, arguments); | ||||
| 			return this.addCallbacks(enclosed, enclosed);	// Deferred | ||||
| 		}, | ||||
| 		fired: -1 | ||||
| 	}); | ||||
|  | ||||
| 	Deferred.when = dojo.when = when; | ||||
|  | ||||
| 	return Deferred; | ||||
| }); | ||||
							
								
								
									
										350
									
								
								debian/missing-sources/dojo/_base/array.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										350
									
								
								debian/missing-sources/dojo/_base/array.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,350 @@ | ||||
| define(["./kernel", "../has", "./lang"], function(dojo, has, lang){ | ||||
| 	// module: | ||||
| 	//		dojo/_base/array | ||||
|  | ||||
| 	// our old simple function builder stuff | ||||
| 	var cache = {}, u; | ||||
|  | ||||
| 	function buildFn(fn){ | ||||
| 		return cache[fn] = new Function("item", "index", "array", fn); // Function | ||||
| 	} | ||||
| 	// magic snippet: if(typeof fn == "string") fn = cache[fn] || buildFn(fn); | ||||
|  | ||||
| 	// every & some | ||||
|  | ||||
| 	function everyOrSome(some){ | ||||
| 		var every = !some; | ||||
| 		return function(a, fn, o){ | ||||
| 			var i = 0, l = a && a.length || 0, result; | ||||
| 			if(l && typeof a == "string") a = a.split(""); | ||||
| 			if(typeof fn == "string") fn = cache[fn] || buildFn(fn); | ||||
| 			if(o){ | ||||
| 				for(; i < l; ++i){ | ||||
| 					result = !fn.call(o, a[i], i, a); | ||||
| 					if(some ^ result){ | ||||
| 						return !result; | ||||
| 					} | ||||
| 				} | ||||
| 			}else{ | ||||
| 				for(; i < l; ++i){ | ||||
| 					result = !fn(a[i], i, a); | ||||
| 					if(some ^ result){ | ||||
| 						return !result; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			return every; // Boolean | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	// indexOf, lastIndexOf | ||||
|  | ||||
| 	function index(up){ | ||||
| 		var delta = 1, lOver = 0, uOver = 0; | ||||
| 		if(!up){ | ||||
| 			delta = lOver = uOver = -1; | ||||
| 		} | ||||
| 		return function(a, x, from, last){ | ||||
| 			if(last && delta > 0){ | ||||
| 				// TODO: why do we use a non-standard signature? why do we need "last"? | ||||
| 				return array.lastIndexOf(a, x, from); | ||||
| 			} | ||||
| 			var l = a && a.length || 0, end = up ? l + uOver : lOver, i; | ||||
| 			if(from === u){ | ||||
| 				i = up ? lOver : l + uOver; | ||||
| 			}else{ | ||||
| 				if(from < 0){ | ||||
| 					i = l + from; | ||||
| 					if(i < 0){ | ||||
| 						i = lOver; | ||||
| 					} | ||||
| 				}else{ | ||||
| 					i = from >= l ? l + uOver : from; | ||||
| 				} | ||||
| 			} | ||||
| 			if(l && typeof a == "string") a = a.split(""); | ||||
| 			for(; i != end; i += delta){ | ||||
| 				if(a[i] == x){ | ||||
| 					return i; // Number | ||||
| 				} | ||||
| 			} | ||||
| 			return -1; // Number | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	var array = { | ||||
| 		// summary: | ||||
| 		//		The Javascript v1.6 array extensions. | ||||
|  | ||||
| 		every: everyOrSome(false), | ||||
| 		/*===== | ||||
| 		 every: function(arr, callback, thisObject){ | ||||
| 			 // summary: | ||||
| 			 //		Determines whether or not every item in arr satisfies the | ||||
| 			 //		condition implemented by callback. | ||||
| 			 // arr: Array|String | ||||
| 			 //		the array to iterate on. If a string, operates on individual characters. | ||||
| 			 // callback: Function|String | ||||
| 			 //		a function is invoked with three arguments: item, index, | ||||
| 			 //		and array and returns true if the condition is met. | ||||
| 			 // thisObject: Object? | ||||
| 			 //		may be used to scope the call to callback | ||||
| 			 // returns: Boolean | ||||
| 			 // description: | ||||
| 			 //		This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when | ||||
| 			 //		run over sparse arrays, this implementation passes the "holes" in the sparse array to | ||||
| 			 //		the callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array. | ||||
| 			 //		For more details, see: | ||||
| 			 //		https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/every | ||||
| 			 // example: | ||||
| 			 //	|	// returns false | ||||
| 			 //	|	array.every([1, 2, 3, 4], function(item){ return item>1; }); | ||||
| 			 // example: | ||||
| 			 //	|	// returns true | ||||
| 			 //	|	array.every([1, 2, 3, 4], function(item){ return item>0; }); | ||||
| 		 }, | ||||
| 		 =====*/ | ||||
|  | ||||
| 		some: everyOrSome(true), | ||||
| 		/*===== | ||||
| 		some: function(arr, callback, thisObject){ | ||||
| 			// summary: | ||||
| 			//		Determines whether or not any item in arr satisfies the | ||||
| 			//		condition implemented by callback. | ||||
| 			// arr: Array|String | ||||
| 			//		the array to iterate over. If a string, operates on individual characters. | ||||
| 			// callback: Function|String | ||||
| 			//		a function is invoked with three arguments: item, index, | ||||
| 			//		and array and returns true if the condition is met. | ||||
| 			// thisObject: Object? | ||||
| 			//		may be used to scope the call to callback | ||||
| 			// returns: Boolean | ||||
| 			// description: | ||||
| 			//		This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when | ||||
| 			//		run over sparse arrays, this implementation passes the "holes" in the sparse array to | ||||
| 			//		the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array. | ||||
| 			//		For more details, see: | ||||
| 			//		https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some | ||||
| 			// example: | ||||
| 			//	| // is true | ||||
| 			//	| array.some([1, 2, 3, 4], function(item){ return item>1; }); | ||||
| 			// example: | ||||
| 			//	| // is false | ||||
| 			//	| array.some([1, 2, 3, 4], function(item){ return item<1; }); | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		indexOf: index(true), | ||||
| 		/*===== | ||||
| 		indexOf: function(arr, value, fromIndex, findLast){ | ||||
| 			// summary: | ||||
| 			//		locates the first index of the provided value in the | ||||
| 			//		passed array. If the value is not found, -1 is returned. | ||||
| 			// description: | ||||
| 			//		This method corresponds to the JavaScript 1.6 Array.indexOf method, with two differences: | ||||
| 			// | ||||
| 			//		1. when run over sparse arrays, the Dojo function invokes the callback for every index | ||||
| 			//		   whereas JavaScript 1.6's indexOf skips the holes in the sparse array. | ||||
| 			//		2. uses equality (==) rather than strict equality (===) | ||||
| 			// | ||||
| 			//		For details on this method, see: | ||||
| 			//		https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf | ||||
| 			// arr: Array | ||||
| 			// value: Object | ||||
| 			// fromIndex: Integer? | ||||
| 			// findLast: Boolean? | ||||
| 			//		Makes indexOf() work like lastIndexOf().  Used internally; not meant for external usage. | ||||
| 			// returns: Number | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		lastIndexOf: index(false), | ||||
| 		/*===== | ||||
| 		lastIndexOf: function(arr, value, fromIndex){ | ||||
| 			// summary: | ||||
| 			//		locates the last index of the provided value in the passed | ||||
| 			//		array. If the value is not found, -1 is returned. | ||||
| 			// description: | ||||
| 		 	//		This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with two differences: | ||||
| 		 	// | ||||
| 		 	//		1. when run over sparse arrays, the Dojo function invokes the callback for every index | ||||
| 		 	//		   whereas JavaScript 1.6's lasIndexOf skips the holes in the sparse array. | ||||
| 		 	//		2. uses equality (==) rather than strict equality (===) | ||||
| 		 	// | ||||
| 		 	//		For details on this method, see: | ||||
| 		 	//		https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf | ||||
| 			// arr: Array, | ||||
| 			// value: Object, | ||||
| 			// fromIndex: Integer? | ||||
| 			// returns: Number | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		forEach: function(arr, callback, thisObject){ | ||||
| 			// summary: | ||||
| 			//		for every item in arr, callback is invoked. Return values are ignored. | ||||
| 			//		If you want to break out of the loop, consider using array.every() or array.some(). | ||||
| 			//		forEach does not allow breaking out of the loop over the items in arr. | ||||
| 			// arr: | ||||
| 			//		the array to iterate over. If a string, operates on individual characters. | ||||
| 			// callback: | ||||
| 			//		a function is invoked with three arguments: item, index, and array | ||||
| 			// thisObject: | ||||
| 			//		may be used to scope the call to callback | ||||
| 			// description: | ||||
| 			//		This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when | ||||
| 			//		run over sparse arrays, this implementation passes the "holes" in the sparse array to | ||||
| 			//		the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array. | ||||
| 			//		For more details, see: | ||||
| 			//		https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach | ||||
| 			// example: | ||||
| 			//	| // log out all members of the array: | ||||
| 			//	| array.forEach( | ||||
| 			//	|		[ "thinger", "blah", "howdy", 10 ], | ||||
| 			//	|		function(item){ | ||||
| 			//	|			console.log(item); | ||||
| 			//	|		} | ||||
| 			//	| ); | ||||
| 			// example: | ||||
| 			//	| // log out the members and their indexes | ||||
| 			//	| array.forEach( | ||||
| 			//	|		[ "thinger", "blah", "howdy", 10 ], | ||||
| 			//	|		function(item, idx, arr){ | ||||
| 			//	|			console.log(item, "at index:", idx); | ||||
| 			//	|		} | ||||
| 			//	| ); | ||||
| 			// example: | ||||
| 			//	| // use a scoped object member as the callback | ||||
| 			//	| | ||||
| 			//	| var obj = { | ||||
| 			//	|		prefix: "logged via obj.callback:", | ||||
| 			//	|		callback: function(item){ | ||||
| 			//	|			console.log(this.prefix, item); | ||||
| 			//	|		} | ||||
| 			//	| }; | ||||
| 			//	| | ||||
| 			//	| // specifying the scope function executes the callback in that scope | ||||
| 			//	| array.forEach( | ||||
| 			//	|		[ "thinger", "blah", "howdy", 10 ], | ||||
| 			//	|		obj.callback, | ||||
| 			//	|		obj | ||||
| 			//	| ); | ||||
| 			//	| | ||||
| 			//	| // alternately, we can accomplish the same thing with lang.hitch() | ||||
| 			//	| array.forEach( | ||||
| 			//	|		[ "thinger", "blah", "howdy", 10 ], | ||||
| 			//	|		lang.hitch(obj, "callback") | ||||
| 			//	| ); | ||||
| 			// arr: Array|String | ||||
| 			// callback: Function|String | ||||
| 			// thisObject: Object? | ||||
|  | ||||
| 			var i = 0, l = arr && arr.length || 0; | ||||
| 			if(l && typeof arr == "string") arr = arr.split(""); | ||||
| 			if(typeof callback == "string") callback = cache[callback] || buildFn(callback); | ||||
| 			if(thisObject){ | ||||
| 				for(; i < l; ++i){ | ||||
| 					callback.call(thisObject, arr[i], i, arr); | ||||
| 				} | ||||
| 			}else{ | ||||
| 				for(; i < l; ++i){ | ||||
| 					callback(arr[i], i, arr); | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
|  | ||||
| 		map: function(arr, callback, thisObject, Ctr){ | ||||
| 			// summary: | ||||
| 			//		applies callback to each element of arr and returns | ||||
| 			//		an Array with the results | ||||
| 			// arr: Array|String | ||||
| 			//		the array to iterate on. If a string, operates on | ||||
| 			//		individual characters. | ||||
| 			// callback: Function|String | ||||
| 			//		a function is invoked with three arguments, (item, index, | ||||
| 			//		array),	 and returns a value | ||||
| 			// thisObject: Object? | ||||
| 			//		may be used to scope the call to callback | ||||
| 			// returns: Array | ||||
| 			// description: | ||||
| 			//		This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when | ||||
| 			//		run over sparse arrays, this implementation passes the "holes" in the sparse array to | ||||
| 			//		the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array. | ||||
| 			//		For more details, see: | ||||
| 			//		https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map | ||||
| 			// example: | ||||
| 			//	| // returns [2, 3, 4, 5] | ||||
| 			//	| array.map([1, 2, 3, 4], function(item){ return item+1 }); | ||||
|  | ||||
| 			// TODO: why do we have a non-standard signature here? do we need "Ctr"? | ||||
| 			var i = 0, l = arr && arr.length || 0, out = new (Ctr || Array)(l); | ||||
| 			if(l && typeof arr == "string") arr = arr.split(""); | ||||
| 			if(typeof callback == "string") callback = cache[callback] || buildFn(callback); | ||||
| 			if(thisObject){ | ||||
| 				for(; i < l; ++i){ | ||||
| 					out[i] = callback.call(thisObject, arr[i], i, arr); | ||||
| 				} | ||||
| 			}else{ | ||||
| 				for(; i < l; ++i){ | ||||
| 					out[i] = callback(arr[i], i, arr); | ||||
| 				} | ||||
| 			} | ||||
| 			return out; // Array | ||||
| 		}, | ||||
|  | ||||
| 		filter: function(arr, callback, thisObject){ | ||||
| 			// summary: | ||||
| 			//		Returns a new Array with those items from arr that match the | ||||
| 			//		condition implemented by callback. | ||||
| 			// arr: Array | ||||
| 			//		the array to iterate over. | ||||
| 			// callback: Function|String | ||||
| 			//		a function that is invoked with three arguments (item, | ||||
| 			//		index, array). The return of this function is expected to | ||||
| 			//		be a boolean which determines whether the passed-in item | ||||
| 			//		will be included in the returned array. | ||||
| 			// thisObject: Object? | ||||
| 			//		may be used to scope the call to callback | ||||
| 			// returns: Array | ||||
| 			// description: | ||||
| 			//		This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when | ||||
| 			//		run over sparse arrays, this implementation passes the "holes" in the sparse array to | ||||
| 			//		the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. | ||||
| 			//		For more details, see: | ||||
| 			//		https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter | ||||
| 			// example: | ||||
| 			//	| // returns [2, 3, 4] | ||||
| 			//	| array.filter([1, 2, 3, 4], function(item){ return item>1; }); | ||||
|  | ||||
| 			// TODO: do we need "Ctr" here like in map()? | ||||
| 			var i = 0, l = arr && arr.length || 0, out = [], value; | ||||
| 			if(l && typeof arr == "string") arr = arr.split(""); | ||||
| 			if(typeof callback == "string") callback = cache[callback] || buildFn(callback); | ||||
| 			if(thisObject){ | ||||
| 				for(; i < l; ++i){ | ||||
| 					value = arr[i]; | ||||
| 					if(callback.call(thisObject, value, i, arr)){ | ||||
| 						out.push(value); | ||||
| 					} | ||||
| 				} | ||||
| 			}else{ | ||||
| 				for(; i < l; ++i){ | ||||
| 					value = arr[i]; | ||||
| 					if(callback(value, i, arr)){ | ||||
| 						out.push(value); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			return out; // Array | ||||
| 		}, | ||||
|  | ||||
| 		clearCache: function(){ | ||||
| 			cache = {}; | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
|  | ||||
| 	has("extend-dojo") && lang.mixin(dojo, array); | ||||
|  | ||||
| 	return array; | ||||
| }); | ||||
							
								
								
									
										193
									
								
								debian/missing-sources/dojo/_base/config.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								debian/missing-sources/dojo/_base/config.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,193 @@ | ||||
| define(["../has", "require"], function(has, require){ | ||||
| 	// module: | ||||
| 	//		dojo/_base/config | ||||
|  | ||||
| /*===== | ||||
| return { | ||||
| 	// summary: | ||||
| 	//		This module defines the user configuration during bootstrap. | ||||
| 	// description: | ||||
| 	//		By defining user configuration as a module value, an entire configuration can be specified in a build, | ||||
| 	//		thereby eliminating the need for sniffing and or explicitly setting in the global variable dojoConfig. | ||||
| 	//		Also, when multiple instances of dojo exist in a single application, each will necessarily be located | ||||
| 	//		at an unique absolute module identifier as given by the package configuration. Implementing configuration | ||||
| 	//		as a module allows for specifying unique, per-instance configurations. | ||||
| 	// example: | ||||
| 	//		Create a second instance of dojo with a different, instance-unique configuration (assume the loader and | ||||
| 	//		dojo.js are already loaded). | ||||
| 	//		|	// specify a configuration that creates a new instance of dojo at the absolute module identifier "myDojo" | ||||
| 	//		|	require({ | ||||
| 	//		|		packages:[{ | ||||
| 	//		|			name:"myDojo", | ||||
| 	//		|			location:".", //assume baseUrl points to dojo.js | ||||
| 	//		|		}] | ||||
| 	//		|	}); | ||||
| 	//		| | ||||
| 	//		|	// specify a configuration for the myDojo instance | ||||
| 	//		|	define("myDojo/config", { | ||||
| 	//		|		// normal configuration variables go here, e.g., | ||||
| 	//		|		locale:"fr-ca" | ||||
| 	//		|	}); | ||||
| 	//		| | ||||
| 	//		|	// load and use the new instance of dojo | ||||
| 	//		|	require(["myDojo"], function(dojo){ | ||||
| 	//		|		// dojo is the new instance of dojo | ||||
| 	//		|		// use as required | ||||
| 	//		|	}); | ||||
|  | ||||
| 	// isDebug: Boolean | ||||
| 	//		Defaults to `false`. If set to `true`, ensures that Dojo provides | ||||
| 	//		extended debugging feedback via Firebug. If Firebug is not available | ||||
| 	//		on your platform, setting `isDebug` to `true` will force Dojo to | ||||
| 	//		pull in (and display) the version of Firebug Lite which is | ||||
| 	//		integrated into the Dojo distribution, thereby always providing a | ||||
| 	//		debugging/logging console when `isDebug` is enabled. Note that | ||||
| 	//		Firebug's `console.*` methods are ALWAYS defined by Dojo. If | ||||
| 	//		`isDebug` is false and you are on a platform without Firebug, these | ||||
| 	//		methods will be defined as no-ops. | ||||
| 	isDebug: false, | ||||
|  | ||||
| 	// locale: String | ||||
| 	//		The locale to assume for loading localized resources in this page, | ||||
| 	//		specified according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt). | ||||
| 	//		Must be specified entirely in lowercase, e.g. `en-us` and `zh-cn`. | ||||
| 	//		See the documentation for `dojo.i18n` and `dojo.requireLocalization` | ||||
| 	//		for details on loading localized resources. If no locale is specified, | ||||
| 	//		Dojo assumes the locale of the user agent, according to `navigator.userLanguage` | ||||
| 	//		or `navigator.language` properties. | ||||
| 	locale: undefined, | ||||
|  | ||||
| 	// extraLocale: Array | ||||
| 	//		No default value. Specifies additional locales whose | ||||
| 	//		resources should also be loaded alongside the default locale when | ||||
| 	//		calls to `dojo.requireLocalization()` are processed. | ||||
| 	extraLocale: undefined, | ||||
|  | ||||
| 	// baseUrl: String | ||||
| 	//		The directory in which `dojo.js` is located. Under normal | ||||
| 	//		conditions, Dojo auto-detects the correct location from which it | ||||
| 	//		was loaded. You may need to manually configure `baseUrl` in cases | ||||
| 	//		where you have renamed `dojo.js` or in which `<base>` tags confuse | ||||
| 	//		some browsers (e.g. IE 6). The variable `dojo.baseUrl` is assigned | ||||
| 	//		either the value of `djConfig.baseUrl` if one is provided or the | ||||
| 	//		auto-detected root if not. Other modules are located relative to | ||||
| 	//		this path. The path should end in a slash. | ||||
| 	baseUrl: undefined, | ||||
|  | ||||
| 	// modulePaths: [deprecated] Object | ||||
| 	//		A map of module names to paths relative to `dojo.baseUrl`. The | ||||
| 	//		key/value pairs correspond directly to the arguments which | ||||
| 	//		`dojo.registerModulePath` accepts. Specifying | ||||
| 	//		`djConfig.modulePaths = { "foo": "../../bar" }` is the equivalent | ||||
| 	//		of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple | ||||
| 	//		modules may be configured via `djConfig.modulePaths`. | ||||
| 	modulePaths: {}, | ||||
|  | ||||
| 	// addOnLoad: Function|Array | ||||
| 	//		Adds a callback via dojo/ready. Useful when Dojo is added after | ||||
| 	//		the page loads and djConfig.afterOnLoad is true. Supports the same | ||||
| 	//		arguments as dojo/ready. When using a function reference, use | ||||
| 	//		`djConfig.addOnLoad = function(){};`. For object with function name use | ||||
| 	//		`djConfig.addOnLoad = [myObject, "functionName"];` and for object with | ||||
| 	//		function reference use | ||||
| 	//		`djConfig.addOnLoad = [myObject, function(){}];` | ||||
| 	addOnLoad: null, | ||||
|  | ||||
| 	// parseOnLoad: Boolean | ||||
| 	//		Run the parser after the page is loaded | ||||
| 	parseOnLoad: false, | ||||
|  | ||||
| 	// require: String[] | ||||
| 	//		An array of module names to be loaded immediately after dojo.js has been included | ||||
| 	//		in a page. | ||||
| 	require: [], | ||||
|  | ||||
| 	// defaultDuration: Number | ||||
| 	//		Default duration, in milliseconds, for wipe and fade animations within dijits. | ||||
| 	//		Assigned to dijit.defaultDuration. | ||||
| 	defaultDuration: 200, | ||||
|  | ||||
| 	// dojoBlankHtmlUrl: String | ||||
| 	//		Used by some modules to configure an empty iframe. Used by dojo/io/iframe and | ||||
| 	//		dojo/back, and dijit/popup support in IE where an iframe is needed to make sure native | ||||
| 	//		controls do not bleed through the popups. Normally this configuration variable | ||||
| 	//		does not need to be set, except when using cross-domain/CDN Dojo builds. | ||||
| 	//		Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl` | ||||
| 	//		to the path on your domain your copy of blank.html. | ||||
| 	dojoBlankHtmlUrl: undefined, | ||||
|  | ||||
| 	// ioPublish: Boolean? | ||||
| 	//		Set this to true to enable publishing of topics for the different phases of | ||||
| 	//		IO operations. Publishing is done via dojo/topic.publish(). See dojo/main.__IoPublish for a list | ||||
| 	//		of topics that are published. | ||||
| 	ioPublish: false, | ||||
|  | ||||
| 	// useCustomLogger: Anything? | ||||
| 	//		If set to a value that evaluates to true such as a string or array and | ||||
| 	//		isDebug is true and Firebug is not available or running, then it bypasses | ||||
| 	//		the creation of Firebug Lite allowing you to define your own console object. | ||||
| 	useCustomLogger: undefined, | ||||
|  | ||||
| 	// transparentColor: Array | ||||
| 	//		Array containing the r, g, b components used as transparent color in dojo.Color; | ||||
| 	//		if undefined, [255,255,255] (white) will be used. | ||||
| 	transparentColor: undefined, | ||||
| 	 | ||||
| 	// deps: Function|Array | ||||
| 	//		Defines dependencies to be used before the loader has been loaded. | ||||
| 	//		When provided, they cause the loader to execute require(deps, callback)  | ||||
| 	//		once it has finished loading. Should be used with callback. | ||||
| 	deps: undefined, | ||||
| 	 | ||||
| 	// callback: Function|Array | ||||
| 	//		Defines a callback to be used when dependencies are defined before  | ||||
| 	//		the loader has been loaded. When provided, they cause the loader to  | ||||
| 	//		execute require(deps, callback) once it has finished loading.  | ||||
| 	//		Should be used with deps. | ||||
| 	callback: undefined, | ||||
| 	 | ||||
| 	// deferredInstrumentation: Boolean | ||||
| 	//		Whether deferred instrumentation should be loaded or included | ||||
| 	//		in builds. | ||||
| 	deferredInstrumentation: true, | ||||
|  | ||||
| 	// useDeferredInstrumentation: Boolean|String | ||||
| 	//		Whether the deferred instrumentation should be used. | ||||
| 	// | ||||
| 	//		* `"report-rejections"`: report each rejection as it occurs. | ||||
| 	//		* `true` or `1` or `"report-unhandled-rejections"`: wait 1 second | ||||
| 	//			in an attempt to detect unhandled rejections. | ||||
| 	useDeferredInstrumentation: "report-unhandled-rejections" | ||||
| }; | ||||
| =====*/ | ||||
|  | ||||
| 	var result = {}; | ||||
| 	if(has("dojo-config-api")){ | ||||
| 		// must be the dojo loader; take a shallow copy of require.rawConfig | ||||
| 		var src = require.rawConfig, p; | ||||
| 		for(p in src){ | ||||
| 			result[p] = src[p]; | ||||
| 		} | ||||
| 	}else{ | ||||
| 		var adviseHas = function(featureSet, prefix, booting){ | ||||
| 			for(p in featureSet){ | ||||
| 				p!="has" && has.add(prefix + p, featureSet[p], 0, booting); | ||||
| 			} | ||||
| 		}; | ||||
| 		result = has("dojo-loader") ? | ||||
| 			// must be a built version of the dojo loader; all config stuffed in require.rawConfig | ||||
| 			require.rawConfig : | ||||
| 			// a foreign loader | ||||
| 			this.dojoConfig || this.djConfig || {}; | ||||
| 		adviseHas(result, "config", 1); | ||||
| 		adviseHas(result.has, "", 1); | ||||
| 	} | ||||
|  | ||||
| 	if(!result.locale && typeof navigator != "undefined"){ | ||||
| 		// Default locale for browsers. | ||||
| 		result.locale = (navigator.language || navigator.userLanguage).toLowerCase(); | ||||
| 	} | ||||
|  | ||||
| 	return result; | ||||
| }); | ||||
|  | ||||
							
								
								
									
										374
									
								
								debian/missing-sources/dojo/_base/connect.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										374
									
								
								debian/missing-sources/dojo/_base/connect.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,374 @@ | ||||
| define(["./kernel", "../on", "../topic", "../aspect", "./event", "../mouse", "./sniff", "./lang", "../keys"], function(dojo, on, hub, aspect, eventModule, mouse, has, lang){ | ||||
| // module: | ||||
| //		dojo/_base/connect | ||||
|  | ||||
| has.add("events-keypress-typed", function(){ // keypresses should only occur a printable character is hit | ||||
| 	var testKeyEvent = {charCode: 0}; | ||||
| 	try{ | ||||
| 		testKeyEvent = document.createEvent("KeyboardEvent"); | ||||
| 		(testKeyEvent.initKeyboardEvent || testKeyEvent.initKeyEvent).call(testKeyEvent, "keypress", true, true, null, false, false, false, false, 9, 3); | ||||
| 	}catch(e){} | ||||
| 	return testKeyEvent.charCode == 0 && !has("opera"); | ||||
| }); | ||||
|  | ||||
| function connect_(obj, event, context, method, dontFix){ | ||||
| 	method = lang.hitch(context, method); | ||||
| 	if(!obj || !(obj.addEventListener || obj.attachEvent)){ | ||||
| 		// it is a not a DOM node and we are using the dojo.connect style of treating a | ||||
| 		// method like an event, must go right to aspect | ||||
| 		return aspect.after(obj || dojo.global, event, method, true); | ||||
| 	} | ||||
| 	if(typeof event == "string" && event.substring(0, 2) == "on"){ | ||||
| 		event = event.substring(2); | ||||
| 	} | ||||
| 	if(!obj){ | ||||
| 		obj = dojo.global; | ||||
| 	} | ||||
| 	if(!dontFix){ | ||||
| 		switch(event){ | ||||
| 			// dojo.connect has special handling for these event types | ||||
| 			case "keypress": | ||||
| 				event = keypress; | ||||
| 				break; | ||||
| 			case "mouseenter": | ||||
| 				event = mouse.enter; | ||||
| 				break; | ||||
| 			case "mouseleave": | ||||
| 				event = mouse.leave; | ||||
| 				break; | ||||
| 		} | ||||
| 	} | ||||
| 	return on(obj, event, method, dontFix); | ||||
| } | ||||
|  | ||||
| var _punctMap = { | ||||
| 	106:42, | ||||
| 	111:47, | ||||
| 	186:59, | ||||
| 	187:43, | ||||
| 	188:44, | ||||
| 	189:45, | ||||
| 	190:46, | ||||
| 	191:47, | ||||
| 	192:96, | ||||
| 	219:91, | ||||
| 	220:92, | ||||
| 	221:93, | ||||
| 	222:39, | ||||
| 	229:113 | ||||
| }; | ||||
| var evtCopyKey = has("mac") ? "metaKey" : "ctrlKey"; | ||||
|  | ||||
|  | ||||
| var _synthesizeEvent = function(evt, props){ | ||||
| 	var faux = lang.mixin({}, evt, props); | ||||
| 	setKeyChar(faux); | ||||
| 	// FIXME: would prefer to use lang.hitch: lang.hitch(evt, evt.preventDefault); | ||||
| 	// but it throws an error when preventDefault is invoked on Safari | ||||
| 	// does Event.preventDefault not support "apply" on Safari? | ||||
| 	faux.preventDefault = function(){ evt.preventDefault(); }; | ||||
| 	faux.stopPropagation = function(){ evt.stopPropagation(); }; | ||||
| 	return faux; | ||||
| }; | ||||
| function setKeyChar(evt){ | ||||
| 	evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; | ||||
| 	evt.charOrCode = evt.keyChar || evt.keyCode; | ||||
| } | ||||
| var keypress; | ||||
| if(has("events-keypress-typed")){ | ||||
| 	// this emulates Firefox's keypress behavior where every keydown can correspond to a keypress | ||||
| 	var _trySetKeyCode = function(e, code){ | ||||
| 		try{ | ||||
| 			// squelch errors when keyCode is read-only | ||||
| 			// (e.g. if keyCode is ctrl or shift) | ||||
| 			return (e.keyCode = code); | ||||
| 		}catch(e){ | ||||
| 			return 0; | ||||
| 		} | ||||
| 	}; | ||||
| 	keypress = function(object, listener){ | ||||
| 		var keydownSignal = on(object, "keydown", function(evt){ | ||||
| 			// munge key/charCode | ||||
| 			var k=evt.keyCode; | ||||
| 			// These are Windows Virtual Key Codes | ||||
| 			// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp | ||||
| 			var unprintable = (k!=13) && k!=32 && (k!=27||!has("ie")) && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222) && k!=229; | ||||
| 			// synthesize keypress for most unprintables and CTRL-keys | ||||
| 			if(unprintable||evt.ctrlKey){ | ||||
| 				var c = unprintable ? 0 : k; | ||||
| 				if(evt.ctrlKey){ | ||||
| 					if(k==3 || k==13){ | ||||
| 						return listener.call(evt.currentTarget, evt); // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively | ||||
| 					}else if(c>95 && c<106){ | ||||
| 						c -= 48; // map CTRL-[numpad 0-9] to ASCII | ||||
| 					}else if((!evt.shiftKey)&&(c>=65&&c<=90)){ | ||||
| 						c += 32; // map CTRL-[A-Z] to lowercase | ||||
| 					}else{ | ||||
| 						c = _punctMap[c] || c; // map other problematic CTRL combinations to ASCII | ||||
| 					} | ||||
| 				} | ||||
| 				// simulate a keypress event | ||||
| 				var faux = _synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); | ||||
| 				listener.call(evt.currentTarget, faux); | ||||
| 				if(has("ie")){ | ||||
| 					_trySetKeyCode(evt, faux.keyCode); | ||||
| 				} | ||||
| 			} | ||||
| 		}); | ||||
| 		var keypressSignal = on(object, "keypress", function(evt){ | ||||
| 			var c = evt.charCode; | ||||
| 			c = c>=32 ? c : 0; | ||||
| 			evt = _synthesizeEvent(evt, {charCode: c, faux: true}); | ||||
| 			return listener.call(this, evt); | ||||
| 		}); | ||||
| 		return { | ||||
| 			remove: function(){ | ||||
| 				keydownSignal.remove(); | ||||
| 				keypressSignal.remove(); | ||||
| 			} | ||||
| 		}; | ||||
| 	}; | ||||
| }else{ | ||||
| 	if(has("opera")){ | ||||
| 		keypress = function(object, listener){ | ||||
| 			return on(object, "keypress", function(evt){ | ||||
| 				var c = evt.which; | ||||
| 				if(c==3){ | ||||
| 					c=99; // Mozilla maps CTRL-BREAK to CTRL-c | ||||
| 				} | ||||
| 				// can't trap some keys at all, like INSERT and DELETE | ||||
| 				// there is no differentiating info between DELETE and ".", or INSERT and "-" | ||||
| 				c = c<32 && !evt.shiftKey ? 0 : c; | ||||
| 				if(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){ | ||||
| 					// lowercase CTRL-[A-Z] keys | ||||
| 					c += 32; | ||||
| 				} | ||||
| 				return listener.call(this, _synthesizeEvent(evt, { charCode: c })); | ||||
| 			}); | ||||
| 		}; | ||||
| 	}else{ | ||||
| 		keypress = function(object, listener){ | ||||
| 			return on(object, "keypress", function(evt){ | ||||
| 				setKeyChar(evt); | ||||
| 				return listener.call(this, evt); | ||||
| 			}); | ||||
| 		}; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| var connect = { | ||||
| 	// summary: | ||||
| 	//		This module defines the dojo.connect API. | ||||
| 	//		This modules also provides keyboard event handling helpers. | ||||
| 	//		This module exports an extension event for emulating Firefox's keypress handling. | ||||
| 	//		However, this extension event exists primarily for backwards compatibility and | ||||
| 	//		is not recommended. WebKit and IE uses an alternate keypress handling (only | ||||
| 	//		firing for printable characters, to distinguish from keydown events), and most | ||||
| 	//		consider the WebKit/IE behavior more desirable. | ||||
|  | ||||
| 	_keypress:keypress, | ||||
|  | ||||
| 	connect:function(obj, event, context, method, dontFix){ | ||||
| 		// summary: | ||||
| 		//		`dojo.connect` is a deprecated event handling and delegation method in | ||||
| 		//		Dojo. It allows one function to "listen in" on the execution of | ||||
| 		//		any other, triggering the second whenever the first is called. Many | ||||
| 		//		listeners may be attached to a function, and source functions may | ||||
| 		//		be either regular function calls or DOM events. | ||||
| 		// | ||||
| 		// description: | ||||
| 		//		Connects listeners to actions, so that after event fires, a | ||||
| 		//		listener is called with the same arguments passed to the original | ||||
| 		//		function. | ||||
| 		// | ||||
| 		//		Since `dojo.connect` allows the source of events to be either a | ||||
| 		//		"regular" JavaScript function or a DOM event, it provides a uniform | ||||
| 		//		interface for listening to all the types of events that an | ||||
| 		//		application is likely to deal with though a single, unified | ||||
| 		//		interface. DOM programmers may want to think of it as | ||||
| 		//		"addEventListener for everything and anything". | ||||
| 		// | ||||
| 		//		When setting up a connection, the `event` parameter must be a | ||||
| 		//		string that is the name of the method/event to be listened for. If | ||||
| 		//		`obj` is null, `kernel.global` is assumed, meaning that connections | ||||
| 		//		to global methods are supported but also that you may inadvertently | ||||
| 		//		connect to a global by passing an incorrect object name or invalid | ||||
| 		//		reference. | ||||
| 		// | ||||
| 		//		`dojo.connect` generally is forgiving. If you pass the name of a | ||||
| 		//		function or method that does not yet exist on `obj`, connect will | ||||
| 		//		not fail, but will instead set up a stub method. Similarly, null | ||||
| 		//		arguments may simply be omitted such that fewer than 4 arguments | ||||
| 		//		may be required to set up a connection See the examples for details. | ||||
| 		// | ||||
| 		//		The return value is a handle that is needed to | ||||
| 		//		remove this connection with `dojo.disconnect`. | ||||
| 		// | ||||
| 		// obj: Object? | ||||
| 		//		The source object for the event function. | ||||
| 		//		Defaults to `kernel.global` if null. | ||||
| 		//		If obj is a DOM node, the connection is delegated | ||||
| 		//		to the DOM event manager (unless dontFix is true). | ||||
| 		// | ||||
| 		// event: String | ||||
| 		//		String name of the event function in obj. | ||||
| 		//		I.e. identifies a property `obj[event]`. | ||||
| 		// | ||||
| 		// context: Object|null | ||||
| 		//		The object that method will receive as "this". | ||||
| 		// | ||||
| 		//		If context is null and method is a function, then method | ||||
| 		//		inherits the context of event. | ||||
| 		// | ||||
| 		//		If method is a string then context must be the source | ||||
| 		//		object object for method (context[method]). If context is null, | ||||
| 		//		kernel.global is used. | ||||
| 		// | ||||
| 		// method: String|Function | ||||
| 		//		A function reference, or name of a function in context. | ||||
| 		//		The function identified by method fires after event does. | ||||
| 		//		method receives the same arguments as the event. | ||||
| 		//		See context argument comments for information on method's scope. | ||||
| 		// | ||||
| 		// dontFix: Boolean? | ||||
| 		//		If obj is a DOM node, set dontFix to true to prevent delegation | ||||
| 		//		of this connection to the DOM event manager. | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		When obj.onchange(), do ui.update(): | ||||
| 		//	|	dojo.connect(obj, "onchange", ui, "update"); | ||||
| 		//	|	dojo.connect(obj, "onchange", ui, ui.update); // same | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Using return value for disconnect: | ||||
| 		//	|	var link = dojo.connect(obj, "onchange", ui, "update"); | ||||
| 		//	|	... | ||||
| 		//	|	dojo.disconnect(link); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		When onglobalevent executes, watcher.handler is invoked: | ||||
| 		//	|	dojo.connect(null, "onglobalevent", watcher, "handler"); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		When ob.onCustomEvent executes, customEventHandler is invoked: | ||||
| 		//	|	dojo.connect(ob, "onCustomEvent", null, "customEventHandler"); | ||||
| 		//	|	dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		When ob.onCustomEvent executes, customEventHandler is invoked | ||||
| 		//		with the same scope (this): | ||||
| 		//	|	dojo.connect(ob, "onCustomEvent", null, customEventHandler); | ||||
| 		//	|	dojo.connect(ob, "onCustomEvent", customEventHandler); // same | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		When globalEvent executes, globalHandler is invoked | ||||
| 		//		with the same scope (this): | ||||
| 		//	|	dojo.connect(null, "globalEvent", null, globalHandler); | ||||
| 		//	|	dojo.connect("globalEvent", globalHandler); // same | ||||
|  | ||||
| 		// normalize arguments | ||||
| 		var a=arguments, args=[], i=0; | ||||
| 		// if a[0] is a String, obj was omitted | ||||
| 		args.push(typeof a[0] == "string" ? null : a[i++], a[i++]); | ||||
| 		// if the arg-after-next is a String or Function, context was NOT omitted | ||||
| 		var a1 = a[i+1]; | ||||
| 		args.push(typeof a1 == "string" || typeof a1 == "function" ? a[i++] : null, a[i++]); | ||||
| 		// absorb any additional arguments | ||||
| 		for(var l=a.length; i<l; i++){	args.push(a[i]); } | ||||
| 		return connect_.apply(this, args); | ||||
| 	}, | ||||
|  | ||||
| 	disconnect:function(handle){ | ||||
| 		// summary: | ||||
| 		//		Remove a link created by dojo.connect. | ||||
| 		// description: | ||||
| 		//		Removes the connection between event and the method referenced by handle. | ||||
| 		// handle: Handle | ||||
| 		//		the return value of the dojo.connect call that created the connection. | ||||
|  | ||||
| 		if(handle){ | ||||
| 			handle.remove(); | ||||
| 		} | ||||
| 	}, | ||||
|  | ||||
| 	subscribe:function(topic, context, method){ | ||||
| 		// summary: | ||||
| 		//		Attach a listener to a named topic. The listener function is invoked whenever the | ||||
| 		//		named topic is published (see: dojo.publish). | ||||
| 		//		Returns a handle which is needed to unsubscribe this listener. | ||||
| 		// topic: String | ||||
| 		//		The topic to which to subscribe. | ||||
| 		// context: Object? | ||||
| 		//		Scope in which method will be invoked, or null for default scope. | ||||
| 		// method: String|Function | ||||
| 		//		The name of a function in context, or a function reference. This is the function that | ||||
| 		//		is invoked when topic is published. | ||||
| 		// example: | ||||
| 		//	|	dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }); | ||||
| 		//	|	dojo.publish("alerts", [ "read this", "hello world" ]); | ||||
| 		return hub.subscribe(topic, lang.hitch(context, method)); | ||||
| 	}, | ||||
|  | ||||
| 	publish:function(topic, args){ | ||||
| 		// summary: | ||||
| 		//		Invoke all listener method subscribed to topic. | ||||
| 		// topic: String | ||||
| 		//		The name of the topic to publish. | ||||
| 		// args: Array? | ||||
| 		//		An array of arguments. The arguments will be applied | ||||
| 		//		to each topic subscriber (as first class parameters, via apply). | ||||
| 		// example: | ||||
| 		//	|	dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; | ||||
| 		//	|	dojo.publish("alerts", [ "read this", "hello world" ]); | ||||
| 		return hub.publish.apply(hub, [topic].concat(args)); | ||||
| 	}, | ||||
|  | ||||
| 	connectPublisher:function(topic, obj, event){ | ||||
| 		// summary: | ||||
| 		//		Ensure that every time obj.event() is called, a message is published | ||||
| 		//		on the topic. Returns a handle which can be passed to | ||||
| 		//		dojo.disconnect() to disable subsequent automatic publication on | ||||
| 		//		the topic. | ||||
| 		// topic: String | ||||
| 		//		The name of the topic to publish. | ||||
| 		// obj: Object? | ||||
| 		//		The source object for the event function. Defaults to kernel.global | ||||
| 		//		if null. | ||||
| 		// event: String | ||||
| 		//		The name of the event function in obj. | ||||
| 		//		I.e. identifies a property obj[event]. | ||||
| 		// example: | ||||
| 		//	|	dojo.connectPublisher("/ajax/start", dojo, "xhrGet"); | ||||
| 		var pf = function(){ connect.publish(topic, arguments); }; | ||||
| 		return event ? connect.connect(obj, event, pf) : connect.connect(obj, pf); //Handle | ||||
| 	}, | ||||
|  | ||||
| 	isCopyKey: function(e){ | ||||
| 		// summary: | ||||
| 		//		Checks an event for the copy key (meta on Mac, and ctrl anywhere else) | ||||
| 		// e: Event | ||||
| 		//		Event object to examine | ||||
| 		return e[evtCopyKey];	// Boolean | ||||
| 	} | ||||
| }; | ||||
|  | ||||
| connect.unsubscribe = connect.disconnect; | ||||
| /*===== | ||||
|  connect.unsubscribe = function(handle){ | ||||
| 	 // summary: | ||||
| 	 //		Remove a topic listener. | ||||
| 	 // handle: Handle | ||||
| 	 //		The handle returned from a call to subscribe. | ||||
| 	 // example: | ||||
| 	 //	|	var alerter = dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; | ||||
| 	 //	|	... | ||||
| 	 //	|	dojo.unsubscribe(alerter); | ||||
|  }; | ||||
|  =====*/ | ||||
|  | ||||
| has("extend-dojo") && lang.mixin(dojo, connect); | ||||
| return connect; | ||||
|  | ||||
| }); | ||||
|  | ||||
|  | ||||
							
								
								
									
										1089
									
								
								debian/missing-sources/dojo/_base/declare.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1089
									
								
								debian/missing-sources/dojo/_base/declare.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										59
									
								
								debian/missing-sources/dojo/_base/event.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								debian/missing-sources/dojo/_base/event.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| define(["./kernel", "../on", "../has", "../dom-geometry"], function(dojo, on, has, dom){ | ||||
| 	// module: | ||||
| 	//		dojo/_base/event | ||||
|  | ||||
| 	if(on._fixEvent){ | ||||
| 		var fixEvent = on._fixEvent; | ||||
| 		on._fixEvent = function(evt, se){ | ||||
| 			// add some additional normalization for back-compat, this isn't in on.js because it is somewhat more expensive | ||||
| 			evt = fixEvent(evt, se); | ||||
| 			if(evt){ | ||||
| 				dom.normalizeEvent(evt); | ||||
| 			} | ||||
| 			return evt; | ||||
| 		};		 | ||||
| 	} | ||||
| 	 | ||||
| 	var ret = { | ||||
| 		// summary: | ||||
| 		//		This module defines dojo DOM event API.   Usually you should use dojo/on, and evt.stopPropagation() + | ||||
| 		//		evt.preventDefault(), rather than this module. | ||||
|  | ||||
| 		fix: function(/*Event*/ evt, /*DOMNode*/ sender){ | ||||
| 			// summary: | ||||
| 			//		normalizes properties on the event object including event | ||||
| 			//		bubbling methods, keystroke normalization, and x/y positions | ||||
| 			// evt: Event | ||||
| 			//		native event object | ||||
| 			// sender: DOMNode | ||||
| 			//		node to treat as "currentTarget" | ||||
| 			if(on._fixEvent){ | ||||
| 				return on._fixEvent(evt, sender); | ||||
| 			} | ||||
| 			return evt;	// Event | ||||
| 		}, | ||||
| 	 | ||||
| 		stop: function(/*Event*/ evt){ | ||||
| 			// summary: | ||||
| 			//		prevents propagation and clobbers the default action of the | ||||
| 			//		passed event | ||||
| 			// evt: Event | ||||
| 			//		The event object. If omitted, window.event is used on IE. | ||||
| 			if(has("dom-addeventlistener") || (evt && evt.preventDefault)){ | ||||
| 				evt.preventDefault(); | ||||
| 				evt.stopPropagation(); | ||||
| 			}else{ | ||||
| 				evt = evt || window.event; | ||||
| 				evt.cancelBubble = true; | ||||
| 				on._preventDefault.call(evt); | ||||
| 			} | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	if(has("extend-dojo")){ | ||||
| 		dojo.fixEvent = ret.fix; | ||||
| 		dojo.stopEvent = ret.stop; | ||||
| 	} | ||||
|  | ||||
| 	return ret; | ||||
| }); | ||||
							
								
								
									
										299
									
								
								debian/missing-sources/dojo/_base/kernel.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										299
									
								
								debian/missing-sources/dojo/_base/kernel.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,299 @@ | ||||
| define(["../has", "./config", "require", "module"], function(has, config, require, module){ | ||||
| 	// module: | ||||
| 	//		dojo/_base/kernel | ||||
|  | ||||
| 	// This module is the foundational module of the dojo boot sequence; it defines the dojo object. | ||||
|  | ||||
| 	var | ||||
| 		// loop variables for this module | ||||
| 		i, p, | ||||
|  | ||||
| 		// create dojo, dijit, and dojox | ||||
| 		// FIXME: in 2.0 remove dijit, dojox being created by dojo | ||||
| 		dijit = {}, | ||||
| 		dojox = {}, | ||||
| 		dojo = { | ||||
| 			// summary: | ||||
| 			//		This module is the foundational module of the dojo boot sequence; it defines the dojo object. | ||||
|  | ||||
| 			// notice dojo takes ownership of the value of the config module | ||||
| 			config:config, | ||||
| 			global:this, | ||||
| 			dijit:dijit, | ||||
| 			dojox:dojox | ||||
| 		}; | ||||
|  | ||||
|  | ||||
| 	// Configure the scope map. For a 100% AMD application, the scope map is not needed other than to provide | ||||
| 	// a _scopeName property for the dojo, dijit, and dojox root object so those packages can create | ||||
| 	// unique names in the global space. | ||||
| 	// | ||||
| 	// Built, legacy modules use the scope map to allow those modules to be expressed as if dojo, dijit, and dojox, | ||||
| 	// where global when in fact they are either global under different names or not global at all. In v1.6-, the | ||||
| 	// config variable "scopeMap" was used to map names as used within a module to global names. This has been | ||||
| 	// subsumed by the AMD map configuration variable which can relocate packages to different names. For backcompat, | ||||
| 	// only the "*" mapping is supported. See http://livedocs.dojotoolkit.org/developer/design/loader#legacy-cross-domain-mode for details. | ||||
| 	// | ||||
| 	// The following computations contort the packageMap for this dojo instance into a scopeMap. | ||||
| 	var scopeMap = | ||||
| 			// a map from a name used in a legacy module to the (global variable name, object addressed by that name) | ||||
| 			// always map dojo, dijit, and dojox | ||||
| 			{ | ||||
| 				dojo:["dojo", dojo], | ||||
| 				dijit:["dijit", dijit], | ||||
| 				dojox:["dojox", dojox] | ||||
| 			}, | ||||
|  | ||||
| 		packageMap = | ||||
| 			// the package map for this dojo instance; note, a foreign loader or no pacakgeMap results in the above default config | ||||
| 			(require.map && require.map[module.id.match(/[^\/]+/)[0]]), | ||||
|  | ||||
| 		item; | ||||
|  | ||||
|  | ||||
| 	// process all mapped top-level names for this instance of dojo | ||||
| 	for(p in packageMap){ | ||||
| 		if(scopeMap[p]){ | ||||
| 			// mapped dojo, dijit, or dojox | ||||
| 			scopeMap[p][0] = packageMap[p]; | ||||
| 		}else{ | ||||
| 			// some other top-level name | ||||
| 			scopeMap[p] = [packageMap[p], {}]; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// publish those names to _scopeName and, optionally, the global namespace | ||||
| 	for(p in scopeMap){ | ||||
| 		item = scopeMap[p]; | ||||
| 		item[1]._scopeName = item[0]; | ||||
| 		if(!config.noGlobals){ | ||||
| 			this[item[0]] = item[1]; | ||||
| 		} | ||||
| 	} | ||||
| 	dojo.scopeMap = scopeMap; | ||||
|  | ||||
| 	/*===== dojo.__docParserConfigureScopeMap(scopeMap); =====*/ | ||||
|  | ||||
| 	// FIXME: dojo.baseUrl and dojo.config.baseUrl should be deprecated | ||||
| 	dojo.baseUrl = dojo.config.baseUrl = require.baseUrl; | ||||
| 	dojo.isAsync = !has("dojo-loader") || require.async; | ||||
| 	dojo.locale = config.locale; | ||||
|  | ||||
| 	var rev = "$Rev: 43d05c6 $".match(/\d+/); | ||||
| 	dojo.version = { | ||||
| 		// summary: | ||||
| 		//		Version number of the Dojo Toolkit | ||||
| 		// description: | ||||
| 		//		Hash about the version, including | ||||
| 		// | ||||
| 		//		- major: Integer: Major version. If total version is "1.2.0beta1", will be 1 | ||||
| 		//		- minor: Integer: Minor version. If total version is "1.2.0beta1", will be 2 | ||||
| 		//		- patch: Integer: Patch version. If total version is "1.2.0beta1", will be 0 | ||||
| 		//		- flag: String: Descriptor flag. If total version is "1.2.0beta1", will be "beta1" | ||||
| 		//		- revision: Number: The SVN rev from which dojo was pulled | ||||
|  | ||||
| 		major: 1, minor: 9, patch: 1, flag: "", | ||||
| 		revision: rev ? +rev[0] : NaN, | ||||
| 		toString: function(){ | ||||
| 			var v = dojo.version; | ||||
| 			return v.major + "." + v.minor + "." + v.patch + v.flag + " (" + v.revision + ")";	// String | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	// If has("extend-dojo") is truthy, then as a dojo module is defined it should push it's definitions | ||||
| 	// into the dojo object, and conversely. In 2.0, it will likely be unusual to augment another object | ||||
| 	// as a result of defining a module. This has feature gives a way to force 2.0 behavior as the code | ||||
| 	// is migrated. Absent specific advice otherwise, set extend-dojo to truthy. | ||||
| 	has.add("extend-dojo", 1); | ||||
|  | ||||
|  | ||||
| 	(Function("d", "d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}"))(dojo); | ||||
| 	/*===== | ||||
| 	dojo.eval = function(scriptText){ | ||||
| 		// summary: | ||||
| 		//		A legacy method created for use exclusively by internal Dojo methods. Do not use this method | ||||
| 		//		directly unless you understand its possibly-different implications on the platforms your are targeting. | ||||
| 		// description: | ||||
| 		//		Makes an attempt to evaluate scriptText in the global scope. The function works correctly for browsers | ||||
| 		//		that support indirect eval. | ||||
| 		// | ||||
| 		//		As usual, IE does not. On IE, the only way to implement global eval is to | ||||
| 		//		use execScript. Unfortunately, execScript does not return a value and breaks some current usages of dojo.eval. | ||||
| 		//		This implementation uses the technique of executing eval in the scope of a function that is a single scope | ||||
| 		//		frame below the global scope; thereby coming close to the global scope. Note carefully that | ||||
| 		// | ||||
| 		//		dojo.eval("var pi = 3.14;"); | ||||
| 		// | ||||
| 		//		will define global pi in non-IE environments, but define pi only in a temporary local scope for IE. If you want | ||||
| 		//		to define a global variable using dojo.eval, write something like | ||||
| 		// | ||||
| 		//		dojo.eval("window.pi = 3.14;") | ||||
| 		// scriptText: | ||||
| 		//		The text to evaluation. | ||||
| 		// returns: | ||||
| 		//		The result of the evaluation. Often `undefined` | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
|  | ||||
| 	if(has("host-rhino")){ | ||||
| 		dojo.exit = function(exitcode){ | ||||
| 			quit(exitcode); | ||||
| 		}; | ||||
| 	}else{ | ||||
| 		dojo.exit = function(){ | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	has.add("dojo-guarantee-console", | ||||
| 		// ensure that console.log, console.warn, etc. are defined | ||||
| 		1 | ||||
| 	); | ||||
| 	if(has("dojo-guarantee-console")){ | ||||
| 		typeof console != "undefined" || (console = {}); | ||||
| 		//	Be careful to leave 'log' always at the end | ||||
| 		var cn = [ | ||||
| 			"assert", "count", "debug", "dir", "dirxml", "error", "group", | ||||
| 			"groupEnd", "info", "profile", "profileEnd", "time", "timeEnd", | ||||
| 			"trace", "warn", "log" | ||||
| 		]; | ||||
| 		var tn; | ||||
| 		i = 0; | ||||
| 		while((tn = cn[i++])){ | ||||
| 			if(!console[tn]){ | ||||
| 				(function(){ | ||||
| 					var tcn = tn + ""; | ||||
| 					console[tcn] = ('log' in console) ? function(){ | ||||
| 						var a = Array.apply({}, arguments); | ||||
| 						a.unshift(tcn + ":"); | ||||
| 						console["log"](a.join(" ")); | ||||
| 					} : function(){}; | ||||
| 					console[tcn]._fake = true; | ||||
| 				})(); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	has.add("dojo-debug-messages", | ||||
| 		// include dojo.deprecated/dojo.experimental implementations | ||||
| 		!!config.isDebug | ||||
| 	); | ||||
| 	dojo.deprecated = dojo.experimental =  function(){}; | ||||
| 	if(has("dojo-debug-messages")){ | ||||
| 		dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){ | ||||
| 			// summary: | ||||
| 			//		Log a debug message to indicate that a behavior has been | ||||
| 			//		deprecated. | ||||
| 			// behaviour: String | ||||
| 			//		The API or behavior being deprecated. Usually in the form | ||||
| 			//		of "myApp.someFunction()". | ||||
| 			// extra: String? | ||||
| 			//		Text to append to the message. Often provides advice on a | ||||
| 			//		new function or facility to achieve the same goal during | ||||
| 			//		the deprecation period. | ||||
| 			// removal: String? | ||||
| 			//		Text to indicate when in the future the behavior will be | ||||
| 			//		removed. Usually a version number. | ||||
| 			// example: | ||||
| 			//	| dojo.deprecated("myApp.getTemp()", "use myApp.getLocaleTemp() instead", "1.0"); | ||||
|  | ||||
| 			var message = "DEPRECATED: " + behaviour; | ||||
| 			if(extra){ message += " " + extra; } | ||||
| 			if(removal){ message += " -- will be removed in version: " + removal; } | ||||
| 			console.warn(message); | ||||
| 		}; | ||||
|  | ||||
| 		dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ | ||||
| 			// summary: | ||||
| 			//		Marks code as experimental. | ||||
| 			// description: | ||||
| 			//		This can be used to mark a function, file, or module as | ||||
| 			//		experimental.	 Experimental code is not ready to be used, and the | ||||
| 			//		APIs are subject to change without notice.	Experimental code may be | ||||
| 			//		completed deleted without going through the normal deprecation | ||||
| 			//		process. | ||||
| 			// moduleName: String | ||||
| 			//		The name of a module, or the name of a module file or a specific | ||||
| 			//		function | ||||
| 			// extra: String? | ||||
| 			//		some additional message for the user | ||||
| 			// example: | ||||
| 			//	| dojo.experimental("dojo.data.Result"); | ||||
| 			// example: | ||||
| 			//	| dojo.experimental("dojo.weather.toKelvin()", "PENDING approval from NOAA"); | ||||
|  | ||||
| 			var message = "EXPERIMENTAL: " + moduleName + " -- APIs subject to change without notice."; | ||||
| 			if(extra){ message += " " + extra; } | ||||
| 			console.warn(message); | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	has.add("dojo-modulePaths", | ||||
| 		// consume dojo.modulePaths processing | ||||
| 		1 | ||||
| 	); | ||||
| 	if(has("dojo-modulePaths")){ | ||||
| 		// notice that modulePaths won't be applied to any require's before the dojo/_base/kernel factory is run; | ||||
| 		// this is the v1.6- behavior. | ||||
| 		if(config.modulePaths){ | ||||
| 			dojo.deprecated("dojo.modulePaths", "use paths configuration"); | ||||
| 			var paths = {}; | ||||
| 			for(p in config.modulePaths){ | ||||
| 				paths[p.replace(/\./g, "/")] = config.modulePaths[p]; | ||||
| 			} | ||||
| 			require({paths:paths}); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	has.add("dojo-moduleUrl", | ||||
| 		// include dojo.moduleUrl | ||||
| 		1 | ||||
| 	); | ||||
| 	if(has("dojo-moduleUrl")){ | ||||
| 		dojo.moduleUrl = function(/*String*/module, /*String?*/url){ | ||||
| 			// summary: | ||||
| 			//		Returns a URL relative to a module. | ||||
| 			// example: | ||||
| 			//	|	var pngPath = dojo.moduleUrl("acme","images/small.png"); | ||||
| 			//	|	console.dir(pngPath); // list the object properties | ||||
| 			//	|	// create an image and set it's source to pngPath's value: | ||||
| 			//	|	var img = document.createElement("img"); | ||||
| 			//	|	img.src = pngPath; | ||||
| 			//	|	// add our image to the document | ||||
| 			//	|	dojo.body().appendChild(img); | ||||
| 			// example: | ||||
| 			//		you may de-reference as far as you like down the package | ||||
| 			//		hierarchy.  This is sometimes handy to avoid lenghty relative | ||||
| 			//		urls or for building portable sub-packages. In this example, | ||||
| 			//		the `acme.widget` and `acme.util` directories may be located | ||||
| 			//		under different roots (see `dojo.registerModulePath`) but the | ||||
| 			//		the modules which reference them can be unaware of their | ||||
| 			//		relative locations on the filesystem: | ||||
| 			//	|	// somewhere in a configuration block | ||||
| 			//	|	dojo.registerModulePath("acme.widget", "../../acme/widget"); | ||||
| 			//	|	dojo.registerModulePath("acme.util", "../../util"); | ||||
| 			//	| | ||||
| 			//	|	// ... | ||||
| 			//	| | ||||
| 			//	|	// code in a module using acme resources | ||||
| 			//	|	var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); | ||||
| 			//	|	var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); | ||||
|  | ||||
| 			dojo.deprecated("dojo.moduleUrl()", "use require.toUrl", "2.0"); | ||||
|  | ||||
| 			// require.toUrl requires a filetype; therefore, just append the suffix "/*.*" to guarantee a filetype, then | ||||
| 			// remove the suffix from the result. This way clients can request a url w/out a filetype. This should be | ||||
| 			// rare, but it maintains backcompat for the v1.x line (note: dojo.moduleUrl will be removed in v2.0). | ||||
| 			// Notice * is an illegal filename so it won't conflict with any real path map that may exist the paths config. | ||||
| 			var result = null; | ||||
| 			if(module){ | ||||
| 				result = require.toUrl(module.replace(/\./g, "/") + (url ? ("/" + url) : "") + "/*.*").replace(/\/\*\.\*/, "") + (url ? "" : "/"); | ||||
| 			} | ||||
| 			return result; | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	dojo._hasResource = {}; // for backward compatibility with layers built with 1.6 tooling | ||||
|  | ||||
| 	return dojo; | ||||
| }); | ||||
							
								
								
									
										605
									
								
								debian/missing-sources/dojo/_base/lang.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										605
									
								
								debian/missing-sources/dojo/_base/lang.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,605 @@ | ||||
| define(["./kernel", "../has", "../sniff"], function(dojo, has){ | ||||
| 	// module: | ||||
| 	//		dojo/_base/lang | ||||
|  | ||||
| 	has.add("bug-for-in-skips-shadowed", function(){ | ||||
| 		// if true, the for-in iterator skips object properties that exist in Object's prototype (IE 6 - ?) | ||||
| 		for(var i in {toString: 1}){ | ||||
| 			return 0; | ||||
| 		} | ||||
| 		return 1; | ||||
| 	}); | ||||
|  | ||||
| 	// Helper methods | ||||
| 	var _extraNames = | ||||
| 			has("bug-for-in-skips-shadowed") ? | ||||
| 				"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor".split(".") : [], | ||||
|  | ||||
| 		_extraLen = _extraNames.length, | ||||
|  | ||||
| 		getProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){ | ||||
| 			var p, i = 0, dojoGlobal = dojo.global; | ||||
| 			if(!context){ | ||||
| 				if(!parts.length){ | ||||
| 					return dojoGlobal; | ||||
| 				}else{ | ||||
| 					p = parts[i++]; | ||||
| 					try{ | ||||
| 						context = dojo.scopeMap[p] && dojo.scopeMap[p][1]; | ||||
| 					}catch(e){} | ||||
| 					context = context || (p in dojoGlobal ? dojoGlobal[p] : (create ? dojoGlobal[p] = {} : undefined)); | ||||
| 				} | ||||
| 			} | ||||
| 			while(context && (p = parts[i++])){ | ||||
| 				context = (p in context ? context[p] : (create ? context[p] = {} : undefined)); | ||||
| 			} | ||||
| 			return context; // mixed | ||||
| 		}, | ||||
|  | ||||
| 		opts = Object.prototype.toString, | ||||
|  | ||||
| 		efficient = function(obj, offset, startWith){ | ||||
| 			return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0)); | ||||
| 		}, | ||||
|  | ||||
| 		_pattern = /\{([^\}]+)\}/g; | ||||
|  | ||||
| 	// Module export | ||||
| 	var lang = { | ||||
| 		// summary: | ||||
| 		//		This module defines Javascript language extensions. | ||||
|  | ||||
| 		// _extraNames: String[] | ||||
| 		//		Lists property names that must be explicitly processed during for-in iteration | ||||
| 		//		in environments that have has("bug-for-in-skips-shadowed") true. | ||||
| 		_extraNames:_extraNames, | ||||
|  | ||||
| 		_mixin: function(dest, source, copyFunc){ | ||||
| 			// summary: | ||||
| 			//		Copies/adds all properties of source to dest; returns dest. | ||||
| 			// dest: Object | ||||
| 			//		The object to which to copy/add all properties contained in source. | ||||
| 			// source: Object | ||||
| 			//		The object from which to draw all properties to copy into dest. | ||||
| 			// copyFunc: Function? | ||||
| 			//		The process used to copy/add a property in source; defaults to the Javascript assignment operator. | ||||
| 			// returns: | ||||
| 			//		dest, as modified | ||||
| 			// description: | ||||
| 			//		All properties, including functions (sometimes termed "methods"), excluding any non-standard extensions | ||||
| 			//		found in Object.prototype, are copied/added to dest. Copying/adding each particular property is | ||||
| 			//		delegated to copyFunc (if any); copyFunc defaults to the Javascript assignment operator if not provided. | ||||
| 			//		Notice that by default, _mixin executes a so-called "shallow copy" and aggregate types are copied/added by reference. | ||||
| 			var name, s, i, empty = {}; | ||||
| 			for(name in source){ | ||||
| 				// the (!(name in empty) || empty[name] !== s) condition avoids copying properties in "source" | ||||
| 				// inherited from Object.prototype.	 For example, if dest has a custom toString() method, | ||||
| 				// don't overwrite it with the toString() method that source inherited from Object.prototype | ||||
| 				s = source[name]; | ||||
| 				if(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){ | ||||
| 					dest[name] = copyFunc ? copyFunc(s) : s; | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if(has("bug-for-in-skips-shadowed")){ | ||||
| 				if(source){ | ||||
| 					for(i = 0; i < _extraLen; ++i){ | ||||
| 						name = _extraNames[i]; | ||||
| 						s = source[name]; | ||||
| 						if(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){ | ||||
| 							dest[name] = copyFunc ? copyFunc(s) : s; | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			return dest; // Object | ||||
| 		}, | ||||
|  | ||||
| 		mixin: function(dest, sources){ | ||||
| 			// summary: | ||||
| 			//		Copies/adds all properties of one or more sources to dest; returns dest. | ||||
| 			// dest: Object | ||||
| 			//		The object to which to copy/add all properties contained in source. If dest is falsy, then | ||||
| 			//		a new object is manufactured before copying/adding properties begins. | ||||
| 			// sources: Object... | ||||
| 			//		One of more objects from which to draw all properties to copy into dest. sources are processed | ||||
| 			//		left-to-right and if more than one of these objects contain the same property name, the right-most | ||||
| 			//		value "wins". | ||||
| 			// returns: Object | ||||
| 			//		dest, as modified | ||||
| 			// description: | ||||
| 			//		All properties, including functions (sometimes termed "methods"), excluding any non-standard extensions | ||||
| 			//		found in Object.prototype, are copied/added from sources to dest. sources are processed left to right. | ||||
| 			//		The Javascript assignment operator is used to copy/add each property; therefore, by default, mixin | ||||
| 			//		executes a so-called "shallow copy" and aggregate types are copied/added by reference. | ||||
| 			// example: | ||||
| 			//		make a shallow copy of an object | ||||
| 			//	|	var copy = lang.mixin({}, source); | ||||
| 			// example: | ||||
| 			//		many class constructors often take an object which specifies | ||||
| 			//		values to be configured on the object. In this case, it is | ||||
| 			//		often simplest to call `lang.mixin` on the `this` object: | ||||
| 			//	|	declare("acme.Base", null, { | ||||
| 			//	|		constructor: function(properties){ | ||||
| 			//	|			// property configuration: | ||||
| 			//	|			lang.mixin(this, properties); | ||||
| 			//	| | ||||
| 			//	|			console.log(this.quip); | ||||
| 			//	|			//	... | ||||
| 			//	|		}, | ||||
| 			//	|		quip: "I wasn't born yesterday, you know - I've seen movies.", | ||||
| 			//	|		// ... | ||||
| 			//	|	}); | ||||
| 			//	| | ||||
| 			//	|	// create an instance of the class and configure it | ||||
| 			//	|	var b = new acme.Base({quip: "That's what it does!" }); | ||||
| 			// example: | ||||
| 			//		copy in properties from multiple objects | ||||
| 			//	|	var flattened = lang.mixin( | ||||
| 			//	|		{ | ||||
| 			//	|			name: "Frylock", | ||||
| 			//	|			braces: true | ||||
| 			//	|		}, | ||||
| 			//	|		{ | ||||
| 			//	|			name: "Carl Brutanananadilewski" | ||||
| 			//	|		} | ||||
| 			//	|	); | ||||
| 			//	| | ||||
| 			//	|	// will print "Carl Brutanananadilewski" | ||||
| 			//	|	console.log(flattened.name); | ||||
| 			//	|	// will print "true" | ||||
| 			//	|	console.log(flattened.braces); | ||||
|  | ||||
| 			if(!dest){ dest = {}; } | ||||
| 			for(var i = 1, l = arguments.length; i < l; i++){ | ||||
| 				lang._mixin(dest, arguments[i]); | ||||
| 			} | ||||
| 			return dest; // Object | ||||
| 		}, | ||||
|  | ||||
| 		setObject: function(name, value, context){ | ||||
| 			// summary: | ||||
| 			//		Set a property from a dot-separated string, such as "A.B.C" | ||||
| 			// description: | ||||
| 			//		Useful for longer api chains where you have to test each object in | ||||
| 			//		the chain, or when you have an object reference in string format. | ||||
| 			//		Objects are created as needed along `path`. Returns the passed | ||||
| 			//		value if setting is successful or `undefined` if not. | ||||
| 			// name: String | ||||
| 			//		Path to a property, in the form "A.B.C". | ||||
| 			// value: anything | ||||
| 			//		value or object to place at location given by name | ||||
| 			// context: Object? | ||||
| 			//		Optional. Object to use as root of path. Defaults to | ||||
| 			//		`dojo.global`. | ||||
| 			// example: | ||||
| 			//		set the value of `foo.bar.baz`, regardless of whether | ||||
| 			//		intermediate objects already exist: | ||||
| 			//	| lang.setObject("foo.bar.baz", value); | ||||
| 			// example: | ||||
| 			//		without `lang.setObject`, we often see code like this: | ||||
| 			//	| // ensure that intermediate objects are available | ||||
| 			//	| if(!obj["parent"]){ obj.parent = {}; } | ||||
| 			//	| if(!obj.parent["child"]){ obj.parent.child = {}; } | ||||
| 			//	| // now we can safely set the property | ||||
| 			//	| obj.parent.child.prop = "some value"; | ||||
| 			//		whereas with `lang.setObject`, we can shorten that to: | ||||
| 			//	| lang.setObject("parent.child.prop", "some value", obj); | ||||
|  | ||||
| 			var parts = name.split("."), p = parts.pop(), obj = getProp(parts, true, context); | ||||
| 			return obj && p ? (obj[p] = value) : undefined; // Object | ||||
| 		}, | ||||
|  | ||||
| 		getObject: function(name, create, context){ | ||||
| 			// summary: | ||||
| 			//		Get a property from a dot-separated string, such as "A.B.C" | ||||
| 			// description: | ||||
| 			//		Useful for longer api chains where you have to test each object in | ||||
| 			//		the chain, or when you have an object reference in string format. | ||||
| 			// name: String | ||||
| 			//		Path to an property, in the form "A.B.C". | ||||
| 			// create: Boolean? | ||||
| 			//		Optional. Defaults to `false`. If `true`, Objects will be | ||||
| 			//		created at any point along the 'path' that is undefined. | ||||
| 			// context: Object? | ||||
| 			//		Optional. Object to use as root of path. Defaults to | ||||
| 			//		'dojo.global'. Null may be passed. | ||||
| 			return getProp(name.split("."), create, context); // Object | ||||
| 		}, | ||||
|  | ||||
| 		exists: function(name, obj){ | ||||
| 			// summary: | ||||
| 			//		determine if an object supports a given method | ||||
| 			// description: | ||||
| 			//		useful for longer api chains where you have to test each object in | ||||
| 			//		the chain. Useful for object and method detection. | ||||
| 			// name: String | ||||
| 			//		Path to an object, in the form "A.B.C". | ||||
| 			// obj: Object? | ||||
| 			//		Object to use as root of path. Defaults to | ||||
| 			//		'dojo.global'. Null may be passed. | ||||
| 			// example: | ||||
| 			//	| // define an object | ||||
| 			//	| var foo = { | ||||
| 			//	|		bar: { } | ||||
| 			//	| }; | ||||
| 			//	| | ||||
| 			//	| // search the global scope | ||||
| 			//	| lang.exists("foo.bar"); // true | ||||
| 			//	| lang.exists("foo.bar.baz"); // false | ||||
| 			//	| | ||||
| 			//	| // search from a particular scope | ||||
| 			//	| lang.exists("bar", foo); // true | ||||
| 			//	| lang.exists("bar.baz", foo); // false | ||||
| 			return lang.getObject(name, false, obj) !== undefined; // Boolean | ||||
| 		}, | ||||
|  | ||||
| 		// Crockford (ish) functions | ||||
|  | ||||
| 		isString: function(it){ | ||||
| 			// summary: | ||||
| 			//		Return true if it is a String | ||||
| 			// it: anything | ||||
| 			//		Item to test. | ||||
| 			return (typeof it == "string" || it instanceof String); // Boolean | ||||
| 		}, | ||||
|  | ||||
| 		isArray: function(it){ | ||||
| 			// summary: | ||||
| 			//		Return true if it is an Array. | ||||
| 			//		Does not work on Arrays created in other windows. | ||||
| 			// it: anything | ||||
| 			//		Item to test. | ||||
| 			return it && (it instanceof Array || typeof it == "array"); // Boolean | ||||
| 		}, | ||||
|  | ||||
| 		isFunction: function(it){ | ||||
| 			// summary: | ||||
| 			//		Return true if it is a Function | ||||
| 			// it: anything | ||||
| 			//		Item to test. | ||||
| 			return opts.call(it) === "[object Function]"; | ||||
| 		}, | ||||
|  | ||||
| 		isObject: function(it){ | ||||
| 			// summary: | ||||
| 			//		Returns true if it is a JavaScript object (or an Array, a Function | ||||
| 			//		or null) | ||||
| 			// it: anything | ||||
| 			//		Item to test. | ||||
| 			return it !== undefined && | ||||
| 				(it === null || typeof it == "object" || lang.isArray(it) || lang.isFunction(it)); // Boolean | ||||
| 		}, | ||||
|  | ||||
| 		isArrayLike: function(it){ | ||||
| 			// summary: | ||||
| 			//		similar to isArray() but more permissive | ||||
| 			// it: anything | ||||
| 			//		Item to test. | ||||
| 			// returns: | ||||
| 			//		If it walks like a duck and quacks like a duck, return `true` | ||||
| 			// description: | ||||
| 			//		Doesn't strongly test for "arrayness".  Instead, settles for "isn't | ||||
| 			//		a string or number and has a length property". Arguments objects | ||||
| 			//		and DOM collections will return true when passed to | ||||
| 			//		isArrayLike(), but will return false when passed to | ||||
| 			//		isArray(). | ||||
| 			return it && it !== undefined && // Boolean | ||||
| 				// keep out built-in constructors (Number, String, ...) which have length | ||||
| 				// properties | ||||
| 				!lang.isString(it) && !lang.isFunction(it) && | ||||
| 				!(it.tagName && it.tagName.toLowerCase() == 'form') && | ||||
| 				(lang.isArray(it) || isFinite(it.length)); | ||||
| 		}, | ||||
|  | ||||
| 		isAlien: function(it){ | ||||
| 			// summary: | ||||
| 			//		Returns true if it is a built-in function or some other kind of | ||||
| 			//		oddball that *should* report as a function but doesn't | ||||
| 			return it && !lang.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean | ||||
| 		}, | ||||
|  | ||||
| 		extend: function(ctor, props){ | ||||
| 			// summary: | ||||
| 			//		Adds all properties and methods of props to constructor's | ||||
| 			//		prototype, making them available to all instances created with | ||||
| 			//		constructor. | ||||
| 			// ctor: Object | ||||
| 			//		Target constructor to extend. | ||||
| 			// props: Object | ||||
| 			//		One or more objects to mix into ctor.prototype | ||||
| 			for(var i=1, l=arguments.length; i<l; i++){ | ||||
| 				lang._mixin(ctor.prototype, arguments[i]); | ||||
| 			} | ||||
| 			return ctor; // Object | ||||
| 		}, | ||||
|  | ||||
| 		_hitchArgs: function(scope, method){ | ||||
| 			var pre = lang._toArray(arguments, 2); | ||||
| 			var named = lang.isString(method); | ||||
| 			return function(){ | ||||
| 				// arrayify arguments | ||||
| 				var args = lang._toArray(arguments); | ||||
| 				// locate our method | ||||
| 				var f = named ? (scope||dojo.global)[method] : method; | ||||
| 				// invoke with collected args | ||||
| 				return f && f.apply(scope || this, pre.concat(args)); // mixed | ||||
| 			}; // Function | ||||
| 		}, | ||||
|  | ||||
| 		hitch: function(scope, method){ | ||||
| 			// summary: | ||||
| 			//		Returns a function that will only ever execute in the a given scope. | ||||
| 			//		This allows for easy use of object member functions | ||||
| 			//		in callbacks and other places in which the "this" keyword may | ||||
| 			//		otherwise not reference the expected scope. | ||||
| 			//		Any number of default positional arguments may be passed as parameters | ||||
| 			//		beyond "method". | ||||
| 			//		Each of these values will be used to "placehold" (similar to curry) | ||||
| 			//		for the hitched function. | ||||
| 			// scope: Object | ||||
| 			//		The scope to use when method executes. If method is a string, | ||||
| 			//		scope is also the object containing method. | ||||
| 			// method: Function|String... | ||||
| 			//		A function to be hitched to scope, or the name of the method in | ||||
| 			//		scope to be hitched. | ||||
| 			// example: | ||||
| 			//	|	lang.hitch(foo, "bar")(); | ||||
| 			//		runs foo.bar() in the scope of foo | ||||
| 			// example: | ||||
| 			//	|	lang.hitch(foo, myFunction); | ||||
| 			//		returns a function that runs myFunction in the scope of foo | ||||
| 			// example: | ||||
| 			//		Expansion on the default positional arguments passed along from | ||||
| 			//		hitch. Passed args are mixed first, additional args after. | ||||
| 			//	|	var foo = { bar: function(a, b, c){ console.log(a, b, c); } }; | ||||
| 			//	|	var fn = lang.hitch(foo, "bar", 1, 2); | ||||
| 			//	|	fn(3); // logs "1, 2, 3" | ||||
| 			// example: | ||||
| 			//	|	var foo = { bar: 2 }; | ||||
| 			//	|	lang.hitch(foo, function(){ this.bar = 10; })(); | ||||
| 			//		execute an anonymous function in scope of foo | ||||
| 			if(arguments.length > 2){ | ||||
| 				return lang._hitchArgs.apply(dojo, arguments); // Function | ||||
| 			} | ||||
| 			if(!method){ | ||||
| 				method = scope; | ||||
| 				scope = null; | ||||
| 			} | ||||
| 			if(lang.isString(method)){ | ||||
| 				scope = scope || dojo.global; | ||||
| 				if(!scope[method]){ throw(['lang.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); } | ||||
| 				return function(){ return scope[method].apply(scope, arguments || []); }; // Function | ||||
| 			} | ||||
| 			return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function | ||||
| 		}, | ||||
|  | ||||
| 		delegate: (function(){ | ||||
| 			// boodman/crockford delegation w/ cornford optimization | ||||
| 			function TMP(){} | ||||
| 			return function(obj, props){ | ||||
| 				TMP.prototype = obj; | ||||
| 				var tmp = new TMP(); | ||||
| 				TMP.prototype = null; | ||||
| 				if(props){ | ||||
| 					lang._mixin(tmp, props); | ||||
| 				} | ||||
| 				return tmp; // Object | ||||
| 			}; | ||||
| 		})(), | ||||
| 		/*===== | ||||
| 		delegate: function(obj, props){ | ||||
| 			// summary: | ||||
| 			//		Returns a new object which "looks" to obj for properties which it | ||||
| 			//		does not have a value for. Optionally takes a bag of properties to | ||||
| 			//		seed the returned object with initially. | ||||
| 			// description: | ||||
| 			//		This is a small implementation of the Boodman/Crockford delegation | ||||
| 			//		pattern in JavaScript. An intermediate object constructor mediates | ||||
| 			//		the prototype chain for the returned object, using it to delegate | ||||
| 			//		down to obj for property lookup when object-local lookup fails. | ||||
| 			//		This can be thought of similarly to ES4's "wrap", save that it does | ||||
| 			//		not act on types but rather on pure objects. | ||||
| 			// obj: Object | ||||
| 			//		The object to delegate to for properties not found directly on the | ||||
| 			//		return object or in props. | ||||
| 			// props: Object... | ||||
| 			//		an object containing properties to assign to the returned object | ||||
| 			// returns: | ||||
| 			//		an Object of anonymous type | ||||
| 			// example: | ||||
| 			//	|	var foo = { bar: "baz" }; | ||||
| 			//	|	var thinger = lang.delegate(foo, { thud: "xyzzy"}); | ||||
| 			//	|	thinger.bar == "baz"; // delegated to foo | ||||
| 			//	|	foo.thud == undefined; // by definition | ||||
| 			//	|	thinger.thud == "xyzzy"; // mixed in from props | ||||
| 			//	|	foo.bar = "thonk"; | ||||
| 			//	|	thinger.bar == "thonk"; // still delegated to foo's bar | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		_toArray: has("ie") ? | ||||
| 			(function(){ | ||||
| 				function slow(obj, offset, startWith){ | ||||
| 					var arr = startWith||[]; | ||||
| 					for(var x = offset || 0; x < obj.length; x++){ | ||||
| 						arr.push(obj[x]); | ||||
| 					} | ||||
| 					return arr; | ||||
| 				} | ||||
| 				return function(obj){ | ||||
| 					return ((obj.item) ? slow : efficient).apply(this, arguments); | ||||
| 				}; | ||||
| 			})() : efficient, | ||||
| 		/*===== | ||||
| 		 _toArray: function(obj, offset, startWith){ | ||||
| 			 // summary: | ||||
| 			 //		Converts an array-like object (i.e. arguments, DOMCollection) to an | ||||
| 			 //		array. Returns a new Array with the elements of obj. | ||||
| 			 // obj: Object | ||||
| 			 //		the object to "arrayify". We expect the object to have, at a | ||||
| 			 //		minimum, a length property which corresponds to integer-indexed | ||||
| 			 //		properties. | ||||
| 			 // offset: Number? | ||||
| 			 //		the location in obj to start iterating from. Defaults to 0. | ||||
| 			 //		Optional. | ||||
| 			 // startWith: Array? | ||||
| 			 //		An array to pack with the properties of obj. If provided, | ||||
| 			 //		properties in obj are appended at the end of startWith and | ||||
| 			 //		startWith is the returned array. | ||||
| 		 }, | ||||
| 		 =====*/ | ||||
|  | ||||
| 		partial: function(/*Function|String*/ method /*, ...*/){ | ||||
| 			// summary: | ||||
| 			//		similar to hitch() except that the scope object is left to be | ||||
| 			//		whatever the execution context eventually becomes. | ||||
| 			// description: | ||||
| 			//		Calling lang.partial is the functional equivalent of calling: | ||||
| 			//		|	lang.hitch(null, funcName, ...); | ||||
| 			// method: | ||||
| 			//		The function to "wrap" | ||||
| 			var arr = [ null ]; | ||||
| 			return lang.hitch.apply(dojo, arr.concat(lang._toArray(arguments))); // Function | ||||
| 		}, | ||||
|  | ||||
| 		clone: function(/*anything*/ src){ | ||||
| 			// summary: | ||||
| 			//		Clones objects (including DOM nodes) and all children. | ||||
| 			//		Warning: do not clone cyclic structures. | ||||
| 			// src: | ||||
| 			//		The object to clone | ||||
| 			if(!src || typeof src != "object" || lang.isFunction(src)){ | ||||
| 				// null, undefined, any non-object, or function | ||||
| 				return src;	// anything | ||||
| 			} | ||||
| 			if(src.nodeType && "cloneNode" in src){ | ||||
| 				// DOM Node | ||||
| 				return src.cloneNode(true); // Node | ||||
| 			} | ||||
| 			if(src instanceof Date){ | ||||
| 				// Date | ||||
| 				return new Date(src.getTime());	// Date | ||||
| 			} | ||||
| 			if(src instanceof RegExp){ | ||||
| 				// RegExp | ||||
| 				return new RegExp(src);   // RegExp | ||||
| 			} | ||||
| 			var r, i, l; | ||||
| 			if(lang.isArray(src)){ | ||||
| 				// array | ||||
| 				r = []; | ||||
| 				for(i = 0, l = src.length; i < l; ++i){ | ||||
| 					if(i in src){ | ||||
| 						r.push(lang.clone(src[i])); | ||||
| 					} | ||||
| 				} | ||||
| 				// we don't clone functions for performance reasons | ||||
| 				//		}else if(d.isFunction(src)){ | ||||
| 				//			// function | ||||
| 				//			r = function(){ return src.apply(this, arguments); }; | ||||
| 			}else{ | ||||
| 				// generic objects | ||||
| 				r = src.constructor ? new src.constructor() : {}; | ||||
| 			} | ||||
| 			return lang._mixin(r, src, lang.clone); | ||||
| 		}, | ||||
|  | ||||
|  | ||||
| 		trim: String.prototype.trim ? | ||||
| 			function(str){ return str.trim(); } : | ||||
| 			function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }, | ||||
| 		/*===== | ||||
| 		 trim: function(str){ | ||||
| 			 // summary: | ||||
| 			 //		Trims whitespace from both sides of the string | ||||
| 			 // str: String | ||||
| 			 //		String to be trimmed | ||||
| 			 // returns: String | ||||
| 			 //		Returns the trimmed string | ||||
| 			 // description: | ||||
| 			 //		This version of trim() was selected for inclusion into the base due | ||||
| 			 //		to its compact size and relatively good performance | ||||
| 			 //		(see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript) | ||||
| 			 //		Uses String.prototype.trim instead, if available. | ||||
| 			 //		The fastest but longest version of this function is located at | ||||
| 			 //		lang.string.trim() | ||||
| 		 }, | ||||
| 		 =====*/ | ||||
|  | ||||
| 		replace: function(tmpl, map, pattern){ | ||||
| 			// summary: | ||||
| 			//		Performs parameterized substitutions on a string. Throws an | ||||
| 			//		exception if any parameter is unmatched. | ||||
| 			// tmpl: String | ||||
| 			//		String to be used as a template. | ||||
| 			// map: Object|Function | ||||
| 			//		If an object, it is used as a dictionary to look up substitutions. | ||||
| 			//		If a function, it is called for every substitution with following parameters: | ||||
| 			//		a whole match, a name, an offset, and the whole template | ||||
| 			//		string (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace | ||||
| 			//		for more details). | ||||
| 			// pattern: RegEx? | ||||
| 			//		Optional regular expression objects that overrides the default pattern. | ||||
| 			//		Must be global and match one item. The default is: /\{([^\}]+)\}/g, | ||||
| 			//		which matches patterns like that: "{xxx}", where "xxx" is any sequence | ||||
| 			//		of characters, which doesn't include "}". | ||||
| 			// returns: String | ||||
| 			//		Returns the substituted string. | ||||
| 			// example: | ||||
| 			//	|	// uses a dictionary for substitutions: | ||||
| 			//	|	lang.replace("Hello, {name.first} {name.last} AKA {nick}!", | ||||
| 			//	|		{ | ||||
| 			//	|			nick: "Bob", | ||||
| 			//	|			name: { | ||||
| 			//	|				first:	"Robert", | ||||
| 			//	|				middle: "X", | ||||
| 			//	|				last:		"Cringely" | ||||
| 			//	|			} | ||||
| 			//	|		}); | ||||
| 			//	|	// returns: Hello, Robert Cringely AKA Bob! | ||||
| 			// example: | ||||
| 			//	|	// uses an array for substitutions: | ||||
| 			//	|	lang.replace("Hello, {0} {2}!", | ||||
| 			//	|		["Robert", "X", "Cringely"]); | ||||
| 			//	|	// returns: Hello, Robert Cringely! | ||||
| 			// example: | ||||
| 			//	|	// uses a function for substitutions: | ||||
| 			//	|	function sum(a){ | ||||
| 			//	|		var t = 0; | ||||
| 			//	|		arrayforEach(a, function(x){ t += x; }); | ||||
| 			//	|		return t; | ||||
| 			//	|	} | ||||
| 			//	|	lang.replace( | ||||
| 			//	|		"{count} payments averaging {avg} USD per payment.", | ||||
| 			//	|		lang.hitch( | ||||
| 			//	|			{ payments: [11, 16, 12] }, | ||||
| 			//	|			function(_, key){ | ||||
| 			//	|				switch(key){ | ||||
| 			//	|					case "count": return this.payments.length; | ||||
| 			//	|					case "min":		return Math.min.apply(Math, this.payments); | ||||
| 			//	|					case "max":		return Math.max.apply(Math, this.payments); | ||||
| 			//	|					case "sum":		return sum(this.payments); | ||||
| 			//	|					case "avg":		return sum(this.payments) / this.payments.length; | ||||
| 			//	|				} | ||||
| 			//	|			} | ||||
| 			//	|		) | ||||
| 			//	|	); | ||||
| 			//	|	// prints: 3 payments averaging 13 USD per payment. | ||||
| 			// example: | ||||
| 			//	|	// uses an alternative PHP-like pattern for substitutions: | ||||
| 			//	|	lang.replace("Hello, ${0} ${2}!", | ||||
| 			//	|		["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g); | ||||
| 			//	|	// returns: Hello, Robert Cringely! | ||||
|  | ||||
| 			return tmpl.replace(pattern || _pattern, lang.isFunction(map) ? | ||||
| 				map : function(_, k){ return lang.getObject(k, false, map); }); | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	has("extend-dojo") && lang.mixin(dojo, lang); | ||||
|  | ||||
| 	return lang; | ||||
| }); | ||||
|  | ||||
							
								
								
									
										93
									
								
								debian/missing-sources/dojo/_base/sniff.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								debian/missing-sources/dojo/_base/sniff.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| define(["./kernel", "./lang", "../sniff"], function(dojo, lang, has){ | ||||
| 	// module: | ||||
| 	//		dojo/_base/sniff | ||||
|  | ||||
| 	/*===== | ||||
| 	return { | ||||
| 		// summary: | ||||
| 		//		Deprecated.   New code should use dojo/sniff. | ||||
| 		//		This module populates the dojo browser version sniffing properties like dojo.isIE. | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
| 	if(!has("host-browser")){ | ||||
| 		return has; | ||||
| 	} | ||||
|  | ||||
| 	// no idea what this is for, or if it's used | ||||
| 	dojo._name = "browser"; | ||||
|  | ||||
| 	lang.mixin(dojo, { | ||||
| 		// isBrowser: Boolean | ||||
| 		//		True if the client is a web-browser | ||||
| 		isBrowser: true, | ||||
|  | ||||
| 		// isFF: Number|undefined | ||||
| 		//		Version as a Number if client is FireFox. undefined otherwise. Corresponds to | ||||
| 		//		major detected FireFox version (1.5, 2, 3, etc.) | ||||
| 		isFF: has("ff"), | ||||
|  | ||||
| 		// isIE: Number|undefined | ||||
| 		//		Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to | ||||
| 		//		major detected IE version (6, 7, 8, etc.) | ||||
| 		isIE: has("ie"), | ||||
|  | ||||
| 		// isKhtml: Number|undefined | ||||
| 		//		Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major | ||||
| 		//		detected version. | ||||
| 		isKhtml: has("khtml"), | ||||
|  | ||||
| 		// isWebKit: Number|undefined | ||||
| 		//		Version as a Number if client is a WebKit-derived browser (Konqueror, | ||||
| 		//		Safari, Chrome, etc.). undefined otherwise. | ||||
| 		isWebKit: has("webkit"), | ||||
|  | ||||
| 		// isMozilla: Number|undefined | ||||
| 		//		Version as a Number if client is a Mozilla-based browser (Firefox, | ||||
| 		//		SeaMonkey). undefined otherwise. Corresponds to major detected version. | ||||
| 		isMozilla: has("mozilla"), | ||||
| 		// isMoz: Number|undefined | ||||
| 		//		Version as a Number if client is a Mozilla-based browser (Firefox, | ||||
| 		//		SeaMonkey). undefined otherwise. Corresponds to major detected version. | ||||
| 		isMoz: has("mozilla"), | ||||
|  | ||||
| 		// isOpera: Number|undefined | ||||
| 		//		Version as a Number if client is Opera. undefined otherwise. Corresponds to | ||||
| 		//		major detected version. | ||||
| 		isOpera: has("opera"), | ||||
|  | ||||
| 		// isSafari: Number|undefined | ||||
| 		//		Version as a Number if client is Safari or iPhone. undefined otherwise. | ||||
| 		isSafari: has("safari"), | ||||
|  | ||||
| 		// isChrome: Number|undefined | ||||
| 		//		Version as a Number if client is Chrome browser. undefined otherwise. | ||||
| 		isChrome: has("chrome"), | ||||
|  | ||||
| 		// isMac: Boolean | ||||
| 		//		True if the client runs on Mac | ||||
| 		isMac: has("mac"), | ||||
|  | ||||
| 		// isIos: Number|undefined | ||||
| 		//		Version as a Number if client is iPhone, iPod, or iPad. undefined otherwise. | ||||
| 		isIos: has("ios"), | ||||
|  | ||||
| 		// isAndroid: Number|undefined | ||||
| 		//		Version as a Number if client is android browser. undefined otherwise. | ||||
| 		isAndroid: has("android"), | ||||
|  | ||||
| 		// isWii: Boolean | ||||
| 		//		True if client is Wii | ||||
| 		isWii: has("wii"), | ||||
|  | ||||
| 		// isQuirks: Boolean | ||||
| 		//		Page is in quirks mode. | ||||
| 		isQuirks: has("quirks"), | ||||
|  | ||||
| 		// isAir: Boolean | ||||
| 		//		True if client is Adobe Air | ||||
| 		isAir: has("air") | ||||
| 	}); | ||||
|  | ||||
| 	return has; | ||||
| }); | ||||
							
								
								
									
										134
									
								
								debian/missing-sources/dojo/_base/window.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								debian/missing-sources/dojo/_base/window.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,134 @@ | ||||
| define(["./kernel", "./lang", "../sniff"], function(dojo, lang, has){ | ||||
| // module: | ||||
| //		dojo/_base/window | ||||
|  | ||||
| var ret = { | ||||
| 	// summary: | ||||
| 	//		API to save/set/restore the global/document scope. | ||||
|  | ||||
| 	global: dojo.global, | ||||
| 	/*===== | ||||
| 	 global: { | ||||
| 		 // summary: | ||||
| 		 //		Alias for the current window. 'global' can be modified | ||||
| 		 //		for temporary context shifting. See also withGlobal(). | ||||
| 		 // description: | ||||
| 		 //		Use this rather than referring to 'window' to ensure your code runs | ||||
| 		 //		correctly in managed contexts. | ||||
| 	 }, | ||||
| 	 =====*/ | ||||
|  | ||||
| 	doc: this["document"] || null, | ||||
| 	/*===== | ||||
| 	doc: { | ||||
| 		// summary: | ||||
| 		//		Alias for the current document. 'doc' can be modified | ||||
| 		//		for temporary context shifting. See also withDoc(). | ||||
| 		// description: | ||||
| 		//		Use this rather than referring to 'window.document' to ensure your code runs | ||||
| 		//		correctly in managed contexts. | ||||
| 		// example: | ||||
| 		//	|	n.appendChild(dojo.doc.createElement('div')); | ||||
| 	}, | ||||
| 	=====*/ | ||||
|  | ||||
| 	body: function(/*Document?*/ doc){ | ||||
| 		// summary: | ||||
| 		//		Return the body element of the specified document or of dojo/_base/window::doc. | ||||
| 		// example: | ||||
| 		//	|	win.body().appendChild(dojo.doc.createElement('div')); | ||||
|  | ||||
| 		// Note: document.body is not defined for a strict xhtml document | ||||
| 		// Would like to memoize this, but dojo.doc can change vi dojo.withDoc(). | ||||
| 		doc = doc || dojo.doc; | ||||
| 		return doc.body || doc.getElementsByTagName("body")[0]; // Node | ||||
| 	}, | ||||
|  | ||||
| 	setContext: function(/*Object*/ globalObject, /*DocumentElement*/ globalDocument){ | ||||
| 		// summary: | ||||
| 		//		changes the behavior of many core Dojo functions that deal with | ||||
| 		//		namespace and DOM lookup, changing them to work in a new global | ||||
| 		//		context (e.g., an iframe). The varibles dojo.global and dojo.doc | ||||
| 		//		are modified as a result of calling this function and the result of | ||||
| 		//		`dojo.body()` likewise differs. | ||||
| 		dojo.global = ret.global = globalObject; | ||||
| 		dojo.doc = ret.doc = globalDocument; | ||||
| 	}, | ||||
|  | ||||
| 	withGlobal: function(	/*Object*/ globalObject, | ||||
| 							/*Function*/ callback, | ||||
| 							/*Object?*/ thisObject, | ||||
| 							/*Array?*/ cbArguments){ | ||||
| 		// summary: | ||||
| 		//		Invoke callback with globalObject as dojo.global and | ||||
| 		//		globalObject.document as dojo.doc. | ||||
| 		// description: | ||||
| 		//		Invoke callback with globalObject as dojo.global and | ||||
| 		//		globalObject.document as dojo.doc. If provided, globalObject | ||||
| 		//		will be executed in the context of object thisObject | ||||
| 		//		When callback() returns or throws an error, the dojo.global | ||||
| 		//		and dojo.doc will be restored to its previous state. | ||||
|  | ||||
| 		var oldGlob = dojo.global; | ||||
| 		try{ | ||||
| 			dojo.global = ret.global = globalObject; | ||||
| 			return ret.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments); | ||||
| 		}finally{ | ||||
| 			dojo.global = ret.global = oldGlob; | ||||
| 		} | ||||
| 	}, | ||||
|  | ||||
| 	withDoc: function(	/*DocumentElement*/ documentObject, | ||||
| 						/*Function*/ callback, | ||||
| 						/*Object?*/ thisObject, | ||||
| 						/*Array?*/ cbArguments){ | ||||
| 		// summary: | ||||
| 		//		Invoke callback with documentObject as dojo/_base/window::doc. | ||||
| 		// description: | ||||
| 		//		Invoke callback with documentObject as dojo/_base/window::doc. If provided, | ||||
| 		//		callback will be executed in the context of object thisObject | ||||
| 		//		When callback() returns or throws an error, the dojo/_base/window::doc will | ||||
| 		//		be restored to its previous state. | ||||
|  | ||||
| 		var oldDoc = ret.doc, | ||||
| 			oldQ = has("quirks"), | ||||
| 			oldIE = has("ie"), isIE, mode, pwin; | ||||
|  | ||||
| 		try{ | ||||
| 			dojo.doc = ret.doc = documentObject; | ||||
| 			// update dojo.isQuirks and the value of the has feature "quirks". | ||||
| 			// remove setting dojo.isQuirks and dojo.isIE for 2.0 | ||||
| 			dojo.isQuirks = has.add("quirks", dojo.doc.compatMode == "BackCompat", true, true); // no need to check for QuirksMode which was Opera 7 only | ||||
|  | ||||
| 			if(has("ie")){ | ||||
| 				if((pwin = documentObject.parentWindow) && pwin.navigator){ | ||||
| 					// re-run IE detection logic and update dojo.isIE / has("ie") | ||||
| 					// (the only time parentWindow/navigator wouldn't exist is if we were not | ||||
| 					// passed an actual legitimate document object) | ||||
| 					isIE = parseFloat(pwin.navigator.appVersion.split("MSIE ")[1]) || undefined; | ||||
| 					mode = documentObject.documentMode; | ||||
| 					if(mode && mode != 5 && Math.floor(isIE) != mode){ | ||||
| 						isIE = mode; | ||||
| 					} | ||||
| 					dojo.isIE = has.add("ie", isIE, true, true); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if(thisObject && typeof callback == "string"){ | ||||
| 				callback = thisObject[callback]; | ||||
| 			} | ||||
|  | ||||
| 			return callback.apply(thisObject, cbArguments || []); | ||||
| 		}finally{ | ||||
| 			dojo.doc = ret.doc = oldDoc; | ||||
| 			dojo.isQuirks = has.add("quirks", oldQ, true, true); | ||||
| 			dojo.isIE = has.add("ie", oldIE, true, true); | ||||
| 		} | ||||
| 	} | ||||
| }; | ||||
|  | ||||
| has("extend-dojo") && lang.mixin(dojo, ret); | ||||
|  | ||||
| return ret; | ||||
|  | ||||
| }); | ||||
							
								
								
									
										223
									
								
								debian/missing-sources/dojo/aspect.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										223
									
								
								debian/missing-sources/dojo/aspect.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,223 @@ | ||||
| define([], function(){ | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/aspect | ||||
|  | ||||
| 	"use strict"; | ||||
| 	var undefined, nextId = 0; | ||||
| 	function advise(dispatcher, type, advice, receiveArguments){ | ||||
| 		var previous = dispatcher[type]; | ||||
| 		var around = type == "around"; | ||||
| 		var signal; | ||||
| 		if(around){ | ||||
| 			var advised = advice(function(){ | ||||
| 				return previous.advice(this, arguments); | ||||
| 			}); | ||||
| 			signal = { | ||||
| 				remove: function(){ | ||||
| 					if(advised){ | ||||
| 						advised = dispatcher = advice = null; | ||||
| 					} | ||||
| 				}, | ||||
| 				advice: function(target, args){ | ||||
| 					return advised ? | ||||
| 						advised.apply(target, args) :  // called the advised function | ||||
| 						previous.advice(target, args); // cancelled, skip to next one | ||||
| 				} | ||||
| 			}; | ||||
| 		}else{ | ||||
| 			// create the remove handler | ||||
| 			signal = { | ||||
| 				remove: function(){ | ||||
| 					if(signal.advice){ | ||||
| 						var previous = signal.previous; | ||||
| 						var next = signal.next; | ||||
| 						if(!next && !previous){ | ||||
| 							delete dispatcher[type]; | ||||
| 						}else{ | ||||
| 							if(previous){ | ||||
| 								previous.next = next; | ||||
| 							}else{ | ||||
| 								dispatcher[type] = next; | ||||
| 							} | ||||
| 							if(next){ | ||||
| 								next.previous = previous; | ||||
| 							} | ||||
| 						} | ||||
|  | ||||
| 						// remove the advice to signal that this signal has been removed | ||||
| 						dispatcher = advice = signal.advice = null; | ||||
| 					} | ||||
| 				}, | ||||
| 				id: nextId++, | ||||
| 				advice: advice, | ||||
| 				receiveArguments: receiveArguments | ||||
| 			}; | ||||
| 		} | ||||
| 		if(previous && !around){ | ||||
| 			if(type == "after"){ | ||||
| 				// add the listener to the end of the list | ||||
| 				// note that we had to change this loop a little bit to workaround a bizarre IE10 JIT bug | ||||
| 				while(previous.next && (previous = previous.next)){} | ||||
| 				previous.next = signal; | ||||
| 				signal.previous = previous; | ||||
| 			}else if(type == "before"){ | ||||
| 				// add to beginning | ||||
| 				dispatcher[type] = signal; | ||||
| 				signal.next = previous; | ||||
| 				previous.previous = signal; | ||||
| 			} | ||||
| 		}else{ | ||||
| 			// around or first one just replaces | ||||
| 			dispatcher[type] = signal; | ||||
| 		} | ||||
| 		return signal; | ||||
| 	} | ||||
| 	function aspect(type){ | ||||
| 		return function(target, methodName, advice, receiveArguments){ | ||||
| 			var existing = target[methodName], dispatcher; | ||||
| 			if(!existing || existing.target != target){ | ||||
| 				// no dispatcher in place | ||||
| 				target[methodName] = dispatcher = function(){ | ||||
| 					var executionId = nextId; | ||||
| 					// before advice | ||||
| 					var args = arguments; | ||||
| 					var before = dispatcher.before; | ||||
| 					while(before){ | ||||
| 						args = before.advice.apply(this, args) || args; | ||||
| 						before = before.next; | ||||
| 					} | ||||
| 					// around advice | ||||
| 					if(dispatcher.around){ | ||||
| 						var results = dispatcher.around.advice(this, args); | ||||
| 					} | ||||
| 					// after advice | ||||
| 					var after = dispatcher.after; | ||||
| 					while(after && after.id < executionId){ | ||||
| 						if(after.receiveArguments){ | ||||
| 							var newResults = after.advice.apply(this, args); | ||||
| 							// change the return value only if a new value was returned | ||||
| 							results = newResults === undefined ? results : newResults; | ||||
| 						}else{ | ||||
| 							results = after.advice.call(this, results, args); | ||||
| 						} | ||||
| 						after = after.next; | ||||
| 					} | ||||
| 					return results; | ||||
| 				}; | ||||
| 				if(existing){ | ||||
| 					dispatcher.around = {advice: function(target, args){ | ||||
| 						return existing.apply(target, args); | ||||
| 					}}; | ||||
| 				} | ||||
| 				dispatcher.target = target; | ||||
| 			} | ||||
| 			var results = advise((dispatcher || existing), type, advice, receiveArguments); | ||||
| 			advice = null; | ||||
| 			return results; | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	// TODOC: after/before/around return object | ||||
|  | ||||
| 	var after = aspect("after"); | ||||
| 	/*===== | ||||
| 	after = function(target, methodName, advice, receiveArguments){ | ||||
| 		// summary: | ||||
| 		//		The "after" export of the aspect module is a function that can be used to attach | ||||
| 		//		"after" advice to a method. This function will be executed after the original method | ||||
| 		//		is executed. By default the function will be called with a single argument, the return | ||||
| 		//		value of the original method, or the the return value of the last executed advice (if a previous one exists). | ||||
| 		//		The fourth (optional) argument can be set to true to so the function receives the original | ||||
| 		//		arguments (from when the original method was called) rather than the return value. | ||||
| 		//		If there are multiple "after" advisors, they are executed in the order they were registered. | ||||
| 		// target: Object | ||||
| 		//		This is the target object | ||||
| 		// methodName: String | ||||
| 		//		This is the name of the method to attach to. | ||||
| 		// advice: Function | ||||
| 		//		This is function to be called after the original method | ||||
| 		// receiveArguments: Boolean? | ||||
| 		//		If this is set to true, the advice function receives the original arguments (from when the original mehtod | ||||
| 		//		was called) rather than the return value of the original/previous method. | ||||
| 		// returns: | ||||
| 		//		A signal object that can be used to cancel the advice. If remove() is called on this signal object, it will | ||||
| 		//		stop the advice function from being executed. | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
| 	var before = aspect("before"); | ||||
| 	/*===== | ||||
| 	before = function(target, methodName, advice){ | ||||
| 		// summary: | ||||
| 		//		The "before" export of the aspect module is a function that can be used to attach | ||||
| 		//		"before" advice to a method. This function will be executed before the original method | ||||
| 		//		is executed. This function will be called with the arguments used to call the method. | ||||
| 		//		This function may optionally return an array as the new arguments to use to call | ||||
| 		//		the original method (or the previous, next-to-execute before advice, if one exists). | ||||
| 		//		If the before method doesn't return anything (returns undefined) the original arguments | ||||
| 		//		will be preserved. | ||||
| 		//		If there are multiple "before" advisors, they are executed in the reverse order they were registered. | ||||
| 		// target: Object | ||||
| 		//		This is the target object | ||||
| 		// methodName: String | ||||
| 		//		This is the name of the method to attach to. | ||||
| 		// advice: Function | ||||
| 		//		This is function to be called before the original method | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
| 	var around = aspect("around"); | ||||
| 	/*===== | ||||
| 	 around = function(target, methodName, advice){ | ||||
| 		// summary: | ||||
| 		//		The "around" export of the aspect module is a function that can be used to attach | ||||
| 		//		"around" advice to a method. The advisor function is immediately executed when | ||||
| 		//		the around() is called, is passed a single argument that is a function that can be | ||||
| 		//		called to continue execution of the original method (or the next around advisor). | ||||
| 		//		The advisor function should return a function, and this function will be called whenever | ||||
| 		//		the method is called. It will be called with the arguments used to call the method. | ||||
| 		//		Whatever this function returns will be returned as the result of the method call (unless after advise changes it). | ||||
| 		// example: | ||||
| 		//		If there are multiple "around" advisors, the most recent one is executed first, | ||||
| 		//		which can then delegate to the next one and so on. For example: | ||||
| 		//		|	around(obj, "foo", function(originalFoo){ | ||||
| 		//		|		return function(){ | ||||
| 		//		|			var start = new Date().getTime(); | ||||
| 		//		|			var results = originalFoo.apply(this, arguments); // call the original | ||||
| 		//		|			var end = new Date().getTime(); | ||||
| 		//		|			console.log("foo execution took " + (end - start) + " ms"); | ||||
| 		//		|			return results; | ||||
| 		//		|		}; | ||||
| 		//		|	}); | ||||
| 		// target: Object | ||||
| 		//		This is the target object | ||||
| 		// methodName: String | ||||
| 		//		This is the name of the method to attach to. | ||||
| 		// advice: Function | ||||
| 		//		This is function to be called around the original method | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
| 	return { | ||||
| 		// summary: | ||||
| 		//		provides aspect oriented programming functionality, allowing for | ||||
| 		//		one to add before, around, or after advice on existing methods. | ||||
| 		// example: | ||||
| 		//	|	define(["dojo/aspect"], function(aspect){ | ||||
| 		//	|		var signal = aspect.after(targetObject, "methodName", function(someArgument){ | ||||
| 		//	|			this will be called when targetObject.methodName() is called, after the original function is called | ||||
| 		//	|		}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	The returned signal object can be used to cancel the advice. | ||||
| 		//	|	signal.remove(); // this will stop the advice from being executed anymore | ||||
| 		//	|	aspect.before(targetObject, "methodName", function(someArgument){ | ||||
| 		//	|		// this will be called when targetObject.methodName() is called, before the original function is called | ||||
| 		//	|	 }); | ||||
|  | ||||
| 		before: before, | ||||
| 		around: around, | ||||
| 		after: after | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										1997
									
								
								debian/missing-sources/dojo/dojo.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1997
									
								
								debian/missing-sources/dojo/dojo.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										220
									
								
								debian/missing-sources/dojo/dom-attr.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								debian/missing-sources/dojo/dom-attr.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,220 @@ | ||||
| define(["exports", "./sniff", "./_base/lang", "./dom", "./dom-style", "./dom-prop"], | ||||
| 		function(exports, has, lang, dom, style, prop){ | ||||
| 	// module: | ||||
| 	//		dojo/dom-attr | ||||
| 	// summary: | ||||
| 	//		This module defines the core dojo DOM attributes API. | ||||
|  | ||||
| 	// TODOC: summary not showing up in output see https://github.com/csnover/js-doc-parse/issues/42 | ||||
|  | ||||
| 	// ============================= | ||||
| 	// Element attribute Functions | ||||
| 	// ============================= | ||||
|  | ||||
| 	// This module will be obsolete soon. Use dojo/prop instead. | ||||
|  | ||||
| 	// dojo.attr() should conform to http://www.w3.org/TR/DOM-Level-2-Core/ | ||||
|  | ||||
| 	// attribute-related functions (to be obsolete soon) | ||||
|  | ||||
| 	var forcePropNames = { | ||||
| 			innerHTML:	1, | ||||
| 			className:	1, | ||||
| 			htmlFor:	has("ie"), | ||||
| 			value:		1 | ||||
| 		}, | ||||
| 		attrNames = { | ||||
| 			// original attribute names | ||||
| 			classname: "class", | ||||
| 			htmlfor: "for", | ||||
| 			// for IE | ||||
| 			tabindex: "tabIndex", | ||||
| 			readonly: "readOnly" | ||||
| 		}; | ||||
|  | ||||
| 	function _hasAttr(node, name){ | ||||
| 		var attr = node.getAttributeNode && node.getAttributeNode(name); | ||||
| 		return attr && attr.specified; // Boolean | ||||
| 	} | ||||
|  | ||||
| 	// There is a difference in the presence of certain properties and their default values | ||||
| 	// between browsers. For example, on IE "disabled" is present on all elements, | ||||
| 	// but it is value is "false"; "tabIndex" of <div> returns 0 by default on IE, yet other browsers | ||||
| 	// can return -1. | ||||
|  | ||||
| 	exports.has = function hasAttr(/*DOMNode|String*/ node, /*String*/ name){ | ||||
| 		// summary: | ||||
| 		//		Returns true if the requested attribute is specified on the | ||||
| 		//		given element, and false otherwise. | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or reference to the element to check | ||||
| 		// name: String | ||||
| 		//		the name of the attribute | ||||
| 		// returns: Boolean | ||||
| 		//		true if the requested attribute is specified on the | ||||
| 		//		given element, and false otherwise | ||||
|  | ||||
| 		var lc = name.toLowerCase(); | ||||
| 		return forcePropNames[prop.names[lc] || name] || _hasAttr(dom.byId(node), attrNames[lc] || name);	// Boolean | ||||
| 	}; | ||||
|  | ||||
| 	exports.get = function getAttr(/*DOMNode|String*/ node, /*String*/ name){ | ||||
| 		// summary: | ||||
| 		//		Gets an attribute on an HTML element. | ||||
| 		// description: | ||||
| 		//		Handles normalized getting of attributes on DOM Nodes. | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or reference to the element to get the attribute on | ||||
| 		// name: String | ||||
| 		//		the name of the attribute to get. | ||||
| 		// returns: | ||||
| 		//		the value of the requested attribute or null if that attribute does not have a specified or | ||||
| 		//		default value; | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	|	// get the current value of the "foo" attribute on a node | ||||
| 		//	|	dojo.getAttr(dojo.byId("nodeId"), "foo"); | ||||
| 		//	|	// or we can just pass the id: | ||||
| 		//	|	dojo.getAttr("nodeId", "foo"); | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var lc = name.toLowerCase(), | ||||
| 			propName = prop.names[lc] || name, | ||||
| 			forceProp = forcePropNames[propName], | ||||
| 			value = node[propName];		// should we access this attribute via a property or via getAttribute()? | ||||
|  | ||||
| 		if(forceProp && typeof value != "undefined"){ | ||||
| 			// node's property | ||||
| 			return value;	// Anything | ||||
| 		} | ||||
| 		if(propName != "href" && (typeof value == "boolean" || lang.isFunction(value))){ | ||||
| 			// node's property | ||||
| 			return value;	// Anything | ||||
| 		} | ||||
| 		// node's attribute | ||||
| 		// we need _hasAttr() here to guard against IE returning a default value | ||||
| 		var attrName = attrNames[lc] || name; | ||||
| 		return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything | ||||
| 	}; | ||||
|  | ||||
| 	exports.set = function setAttr(/*DOMNode|String*/ node, /*String|Object*/ name, /*String?*/ value){ | ||||
| 		// summary: | ||||
| 		//		Sets an attribute on an HTML element. | ||||
| 		// description: | ||||
| 		//		Handles normalized setting of attributes on DOM Nodes. | ||||
| 		// | ||||
| 		//		When passing functions as values, note that they will not be | ||||
| 		//		directly assigned to slots on the node, but rather the default | ||||
| 		//		behavior will be removed and the new behavior will be added | ||||
| 		//		using `dojo.connect()`, meaning that event handler properties | ||||
| 		//		will be normalized and that some caveats with regards to | ||||
| 		//		non-standard behaviors for onsubmit apply. Namely that you | ||||
| 		//		should cancel form submission using `dojo.stopEvent()` on the | ||||
| 		//		passed event object instead of returning a boolean value from | ||||
| 		//		the handler itself. | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or reference to the element to set the attribute on | ||||
| 		// name: String|Object | ||||
| 		//		the name of the attribute to set, or a hash of key-value pairs to set. | ||||
| 		// value: String? | ||||
| 		//		the value to set for the attribute, if the name is a string. | ||||
| 		// returns: | ||||
| 		//		the DOM node | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	|	// use attr() to set the tab index | ||||
| 		//	|	dojo.setAttr("nodeId", "tabIndex", 3); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	Set multiple values at once, including event handlers: | ||||
| 		//	|	dojo.setAttr("formId", { | ||||
| 		//	|		"foo": "bar", | ||||
| 		//	|		"tabIndex": -1, | ||||
| 		//	|		"method": "POST", | ||||
| 		//	|		"onsubmit": function(e){ | ||||
| 		//	|			// stop submitting the form. Note that the IE behavior | ||||
| 		//	|			// of returning true or false will have no effect here | ||||
| 		//	|			// since our handler is connect()ed to the built-in | ||||
| 		//	|			// onsubmit behavior and so we need to use | ||||
| 		//	|			// dojo.stopEvent() to ensure that the submission | ||||
| 		//	|			// doesn't proceed. | ||||
| 		//	|			dojo.stopEvent(e); | ||||
| 		//	| | ||||
| 		//	|			// submit the form with Ajax | ||||
| 		//	|			dojo.xhrPost({ form: "formId" }); | ||||
| 		//	|		} | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	Style is s special case: Only set with an object hash of styles | ||||
| 		//	|	dojo.setAttr("someNode",{ | ||||
| 		//	|		id:"bar", | ||||
| 		//	|		style:{ | ||||
| 		//	|			width:"200px", height:"100px", color:"#000" | ||||
| 		//	|		} | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	Again, only set style as an object hash of styles: | ||||
| 		//	|	var obj = { color:"#fff", backgroundColor:"#000" }; | ||||
| 		//	|	dojo.setAttr("someNode", "style", obj); | ||||
| 		//	| | ||||
| 		//	|	// though shorter to use `dojo.style()` in this case: | ||||
| 		//	|	dojo.setStyle("someNode", obj); | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		if(arguments.length == 2){ // inline'd type check | ||||
| 			// the object form of setter: the 2nd argument is a dictionary | ||||
| 			for(var x in name){ | ||||
| 				exports.set(node, x, name[x]); | ||||
| 			} | ||||
| 			return node; // DomNode | ||||
| 		} | ||||
| 		var lc = name.toLowerCase(), | ||||
| 			propName = prop.names[lc] || name, | ||||
| 			forceProp = forcePropNames[propName]; | ||||
| 		if(propName == "style" && typeof value != "string"){ // inline'd type check | ||||
| 			// special case: setting a style | ||||
| 			style.set(node, value); | ||||
| 			return node; // DomNode | ||||
| 		} | ||||
| 		if(forceProp || typeof value == "boolean" || lang.isFunction(value)){ | ||||
| 			return prop.set(node, name, value); | ||||
| 		} | ||||
| 		// node's attribute | ||||
| 		node.setAttribute(attrNames[lc] || name, value); | ||||
| 		return node; // DomNode | ||||
| 	}; | ||||
|  | ||||
| 	exports.remove = function removeAttr(/*DOMNode|String*/ node, /*String*/ name){ | ||||
| 		// summary: | ||||
| 		//		Removes an attribute from an HTML element. | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or reference to the element to remove the attribute from | ||||
| 		// name: String | ||||
| 		//		the name of the attribute to remove | ||||
|  | ||||
| 		dom.byId(node).removeAttribute(attrNames[name.toLowerCase()] || name); | ||||
| 	}; | ||||
|  | ||||
| 	exports.getNodeProp = function getNodeProp(/*DomNode|String*/ node, /*String*/ name){ | ||||
| 		// summary: | ||||
| 		//		Returns an effective value of a property or an attribute. | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or reference to the element to remove the attribute from | ||||
| 		// name: String | ||||
| 		//		the name of the attribute | ||||
| 		// returns: | ||||
| 		//		the value of the attribute | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var lc = name.toLowerCase(), propName = prop.names[lc] || name; | ||||
| 		if((propName in node) && propName != "href"){ | ||||
| 			// node's property | ||||
| 			return node[propName];	// Anything | ||||
| 		} | ||||
| 		// node's attribute | ||||
| 		var attrName = attrNames[lc] || name; | ||||
| 		return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										326
									
								
								debian/missing-sources/dojo/dom-class.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										326
									
								
								debian/missing-sources/dojo/dom-class.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,326 @@ | ||||
| define(["./_base/lang", "./_base/array", "./dom"], function(lang, array, dom){ | ||||
| 	// module: | ||||
| 	//		dojo/dom-class | ||||
|  | ||||
| 	var className = "className"; | ||||
|  | ||||
| 	/* Part I of classList-based implementation is preserved here for posterity | ||||
| 	var classList = "classList"; | ||||
| 	has.add("dom-classList", function(){ | ||||
| 		return classList in document.createElement("p"); | ||||
| 	}); | ||||
| 	*/ | ||||
|  | ||||
| 	// ============================= | ||||
| 	// (CSS) Class Functions | ||||
| 	// ============================= | ||||
|  | ||||
| 	var cls, // exports object | ||||
| 		spaces = /\s+/, a1 = [""]; | ||||
|  | ||||
| 	function str2array(s){ | ||||
| 		if(typeof s == "string" || s instanceof String){ | ||||
| 			if(s && !spaces.test(s)){ | ||||
| 				a1[0] = s; | ||||
| 				return a1; | ||||
| 			} | ||||
| 			var a = s.split(spaces); | ||||
| 			if(a.length && !a[0]){ | ||||
| 				a.shift(); | ||||
| 			} | ||||
| 			if(a.length && !a[a.length - 1]){ | ||||
| 				a.pop(); | ||||
| 			} | ||||
| 			return a; | ||||
| 		} | ||||
| 		// assumed to be an array | ||||
| 		if(!s){ | ||||
| 			return []; | ||||
| 		} | ||||
| 		return array.filter(s, function(x){ return x; }); | ||||
| 	} | ||||
|  | ||||
| 	/* Part II of classList-based implementation is preserved here for posterity | ||||
| 	if(has("dom-classList")){ | ||||
| 		// new classList version | ||||
| 		cls = { | ||||
| 			contains: function containsClass(node, classStr){ | ||||
| 				var clslst = classStr && dom.byId(node)[classList]; | ||||
| 				return clslst && clslst.contains(classStr); // Boolean | ||||
| 			}, | ||||
|  | ||||
| 			add: function addClass(node, classStr){ | ||||
| 				node = dom.byId(node); | ||||
| 				classStr = str2array(classStr); | ||||
| 				for(var i = 0, len = classStr.length; i < len; ++i){ | ||||
| 					node[classList].add(classStr[i]); | ||||
| 				} | ||||
| 			}, | ||||
|  | ||||
| 			remove: function removeClass(node, classStr){ | ||||
| 				node = dom.byId(node); | ||||
| 				if(classStr === undefined){ | ||||
| 					node[className] = ""; | ||||
| 				}else{ | ||||
| 					classStr = str2array(classStr); | ||||
| 					for(var i = 0, len = classStr.length; i < len; ++i){ | ||||
| 						node[classList].remove(classStr[i]); | ||||
| 					} | ||||
| 				} | ||||
| 			}, | ||||
|  | ||||
| 			replace: function replaceClass(node, addClassStr, removeClassStr){ | ||||
| 				node = dom.byId(node); | ||||
| 				if(removeClassStr === undefined){ | ||||
| 					node[className] = ""; | ||||
| 				}else{ | ||||
| 					removeClassStr = str2array(removeClassStr); | ||||
| 					for(var i = 0, len = removeClassStr.length; i < len; ++i){ | ||||
| 						node[classList].remove(removeClassStr[i]); | ||||
| 					} | ||||
| 				} | ||||
| 				addClassStr = str2array(addClassStr); | ||||
| 				for(i = 0, len = addClassStr.length; i < len; ++i){ | ||||
| 					node[classList].add(addClassStr[i]); | ||||
| 				} | ||||
| 			}, | ||||
|  | ||||
| 			toggle: function toggleClass(node, classStr, condition){ | ||||
| 				node = dom.byId(node); | ||||
| 				if(condition === undefined){ | ||||
| 					classStr = str2array(classStr); | ||||
| 					for(var i = 0, len = classStr.length; i < len; ++i){ | ||||
| 						node[classList].toggle(classStr[i]); | ||||
| 					} | ||||
| 				}else{ | ||||
| 					cls[condition ? "add" : "remove"](node, classStr); | ||||
| 				} | ||||
| 				return condition;   // Boolean | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	*/ | ||||
|  | ||||
| 	// regular DOM version | ||||
| 	var fakeNode = {};  // for effective replacement | ||||
| 	cls = { | ||||
| 		// summary: | ||||
| 		//		This module defines the core dojo DOM class API. | ||||
|  | ||||
| 		contains: function containsClass(/*DomNode|String*/ node, /*String*/ classStr){ | ||||
| 			// summary: | ||||
| 			//		Returns whether or not the specified classes are a portion of the | ||||
| 			//		class list currently applied to the node. | ||||
| 			// node: String|DOMNode | ||||
| 			//		String ID or DomNode reference to check the class for. | ||||
| 			// classStr: String | ||||
| 			//		A string class name to look for. | ||||
| 			// example: | ||||
| 			//		Do something if a node with id="someNode" has class="aSillyClassName" present | ||||
| 			//	|	if(dojo.hasClass("someNode","aSillyClassName")){ ... } | ||||
|  | ||||
| 			return ((" " + dom.byId(node)[className] + " ").indexOf(" " + classStr + " ") >= 0); // Boolean | ||||
| 		}, | ||||
|  | ||||
| 		add: function addClass(/*DomNode|String*/ node, /*String|Array*/ classStr){ | ||||
| 			// summary: | ||||
| 			//		Adds the specified classes to the end of the class list on the | ||||
| 			//		passed node. Will not re-apply duplicate classes. | ||||
| 			// | ||||
| 			// node: String|DOMNode | ||||
| 			//		String ID or DomNode reference to add a class string too | ||||
| 			// | ||||
| 			// classStr: String|Array | ||||
| 			//		A String class name to add, or several space-separated class names, | ||||
| 			//		or an array of class names. | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Add a class to some node: | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.add("someNode", "anewClass"); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Add two classes at once: | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.add("someNode", "firstClass secondClass"); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Add two classes at once (using array): | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.add("someNode", ["firstClass", "secondClass"]); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Available in `dojo/NodeList` for multiple additions | ||||
| 			//	|	require(["dojo/query"], function(query){ | ||||
| 			//	|		query("ul > li").addClass("firstLevel"); | ||||
| 			//	|	}); | ||||
|  | ||||
| 			node = dom.byId(node); | ||||
| 			classStr = str2array(classStr); | ||||
| 			var cls = node[className], oldLen; | ||||
| 			cls = cls ? " " + cls + " " : " "; | ||||
| 			oldLen = cls.length; | ||||
| 			for(var i = 0, len = classStr.length, c; i < len; ++i){ | ||||
| 				c = classStr[i]; | ||||
| 				if(c && cls.indexOf(" " + c + " ") < 0){ | ||||
| 					cls += c + " "; | ||||
| 				} | ||||
| 			} | ||||
| 			if(oldLen < cls.length){ | ||||
| 				node[className] = cls.substr(1, cls.length - 2); | ||||
| 			} | ||||
| 		}, | ||||
|  | ||||
| 		remove: function removeClass(/*DomNode|String*/ node, /*String|Array?*/ classStr){ | ||||
| 			// summary: | ||||
| 			//		Removes the specified classes from node. No `contains()` | ||||
| 			//		check is required. | ||||
| 			// | ||||
| 			// node: String|DOMNode | ||||
| 			//		String ID or DomNode reference to remove the class from. | ||||
| 			// | ||||
| 			// classStr: String|Array | ||||
| 			//		An optional String class name to remove, or several space-separated | ||||
| 			//		class names, or an array of class names. If omitted, all class names | ||||
| 			//		will be deleted. | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Remove a class from some node: | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.remove("someNode", "firstClass"); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Remove two classes from some node: | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.remove("someNode", "firstClass secondClass"); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Remove two classes from some node (using array): | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.remove("someNode", ["firstClass", "secondClass"]); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Remove all classes from some node: | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.remove("someNode"); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Available in `dojo/NodeList` for multiple removal | ||||
| 			//	|	require(["dojo/query"], function(query){ | ||||
| 			//	|		query("ul > li").removeClass("foo"); | ||||
| 			//	|	}); | ||||
|  | ||||
| 			node = dom.byId(node); | ||||
| 			var cls; | ||||
| 			if(classStr !== undefined){ | ||||
| 				classStr = str2array(classStr); | ||||
| 				cls = " " + node[className] + " "; | ||||
| 				for(var i = 0, len = classStr.length; i < len; ++i){ | ||||
| 					cls = cls.replace(" " + classStr[i] + " ", " "); | ||||
| 				} | ||||
| 				cls = lang.trim(cls); | ||||
| 			}else{ | ||||
| 				cls = ""; | ||||
| 			} | ||||
| 			if(node[className] != cls){ node[className] = cls; } | ||||
| 		}, | ||||
|  | ||||
| 		replace: function replaceClass(/*DomNode|String*/ node, /*String|Array*/ addClassStr, /*String|Array?*/ removeClassStr){ | ||||
| 			// summary: | ||||
| 			//		Replaces one or more classes on a node if not present. | ||||
| 			//		Operates more quickly than calling dojo.removeClass and dojo.addClass | ||||
| 			// | ||||
| 			// node: String|DOMNode | ||||
| 			//		String ID or DomNode reference to remove the class from. | ||||
| 			// | ||||
| 			// addClassStr: String|Array | ||||
| 			//		A String class name to add, or several space-separated class names, | ||||
| 			//		or an array of class names. | ||||
| 			// | ||||
| 			// removeClassStr: String|Array? | ||||
| 			//		A String class name to remove, or several space-separated class names, | ||||
| 			//		or an array of class names. | ||||
| 			// | ||||
| 			// example: | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.replace("someNode", "add1 add2", "remove1 remove2"); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//	Replace all classes with addMe | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.replace("someNode", "addMe"); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//	Available in `dojo/NodeList` for multiple toggles | ||||
| 			//	|	require(["dojo/query"], function(query){ | ||||
| 			//	|		query(".findMe").replaceClass("addMe", "removeMe"); | ||||
| 			//	|	}); | ||||
|  | ||||
| 			node = dom.byId(node); | ||||
| 			fakeNode[className] = node[className]; | ||||
| 			cls.remove(fakeNode, removeClassStr); | ||||
| 			cls.add(fakeNode, addClassStr); | ||||
| 			if(node[className] !== fakeNode[className]){ | ||||
| 				node[className] = fakeNode[className]; | ||||
| 			} | ||||
| 		}, | ||||
|  | ||||
| 		toggle: function toggleClass(/*DomNode|String*/ node, /*String|Array*/ classStr, /*Boolean?*/ condition){ | ||||
| 			// summary: | ||||
| 			//		Adds a class to node if not present, or removes if present. | ||||
| 			//		Pass a boolean condition if you want to explicitly add or remove. | ||||
| 			//		Returns the condition that was specified directly or indirectly. | ||||
| 			// | ||||
| 			// node: String|DOMNode | ||||
| 			//		String ID or DomNode reference to toggle a class string | ||||
| 			// | ||||
| 			// classStr: String|Array | ||||
| 			//		A String class name to toggle, or several space-separated class names, | ||||
| 			//		or an array of class names. | ||||
| 			// | ||||
| 			// condition: | ||||
| 			//		If passed, true means to add the class, false means to remove. | ||||
| 			//		Otherwise dojo.hasClass(node, classStr) is used to detect the class presence. | ||||
| 			// | ||||
| 			// example: | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.toggle("someNode", "hovered"); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Forcefully add a class | ||||
| 			//	|	require(["dojo/dom-class"], function(domClass){ | ||||
| 			//	|		domClass.toggle("someNode", "hovered", true); | ||||
| 			//	|	}); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Available in `dojo/NodeList` for multiple toggles | ||||
| 			//	|	require(["dojo/query"], function(query){ | ||||
| 			//	|		query(".toggleMe").toggleClass("toggleMe"); | ||||
| 			//	|	}); | ||||
|  | ||||
| 			node = dom.byId(node); | ||||
| 			if(condition === undefined){ | ||||
| 				classStr = str2array(classStr); | ||||
| 				for(var i = 0, len = classStr.length, c; i < len; ++i){ | ||||
| 					c = classStr[i]; | ||||
| 					cls[cls.contains(node, c) ? "remove" : "add"](node, c); | ||||
| 				} | ||||
| 			}else{ | ||||
| 				cls[condition ? "add" : "remove"](node, classStr); | ||||
| 			} | ||||
| 			return condition;   // Boolean | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	return cls; | ||||
| }); | ||||
							
								
								
									
										360
									
								
								debian/missing-sources/dojo/dom-construct.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										360
									
								
								debian/missing-sources/dojo/dom-construct.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,360 @@ | ||||
| define(["exports", "./_base/kernel", "./sniff", "./_base/window", "./dom", "./dom-attr"], | ||||
| 		function(exports, dojo, has, win, dom, attr){ | ||||
| 	// module: | ||||
| 	//		dojo/dom-construct | ||||
| 	// summary: | ||||
| 	//		This module defines the core dojo DOM construction API. | ||||
|  | ||||
| 	// TODOC: summary not showing up in output, see https://github.com/csnover/js-doc-parse/issues/42 | ||||
|  | ||||
| 	// support stuff for toDom() | ||||
| 	var tagWrap = { | ||||
| 			option: ["select"], | ||||
| 			tbody: ["table"], | ||||
| 			thead: ["table"], | ||||
| 			tfoot: ["table"], | ||||
| 			tr: ["table", "tbody"], | ||||
| 			td: ["table", "tbody", "tr"], | ||||
| 			th: ["table", "thead", "tr"], | ||||
| 			legend: ["fieldset"], | ||||
| 			caption: ["table"], | ||||
| 			colgroup: ["table"], | ||||
| 			col: ["table", "colgroup"], | ||||
| 			li: ["ul"] | ||||
| 		}, | ||||
| 		reTag = /<\s*([\w\:]+)/, | ||||
| 		masterNode = {}, masterNum = 0, | ||||
| 		masterName = "__" + dojo._scopeName + "ToDomId"; | ||||
|  | ||||
| 	// generate start/end tag strings to use | ||||
| 	// for the injection for each special tag wrap case. | ||||
| 	for(var param in tagWrap){ | ||||
| 		if(tagWrap.hasOwnProperty(param)){ | ||||
| 			var tw = tagWrap[param]; | ||||
| 			tw.pre = param == "option" ? '<select multiple="multiple">' : "<" + tw.join("><") + ">"; | ||||
| 			tw.post = "</" + tw.reverse().join("></") + ">"; | ||||
| 			// the last line is destructive: it reverses the array, | ||||
| 			// but we don't care at this point | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	var html5domfix; | ||||
| 	if(has("ie") <= 8){ | ||||
| 		html5domfix = function(doc){ | ||||
| 			doc.__dojo_html5_tested = "yes"; | ||||
| 			var div = create('div', {innerHTML: "<nav>a</nav>", style: {visibility: "hidden"}}, doc.body); | ||||
| 			if(div.childNodes.length !== 1){ | ||||
| 				('abbr article aside audio canvas details figcaption figure footer header ' + | ||||
| 				'hgroup mark meter nav output progress section summary time video').replace( | ||||
| 					/\b\w+\b/g, function(n){ | ||||
| 						doc.createElement(n); | ||||
| 					} | ||||
| 				); | ||||
| 			} | ||||
| 			destroy(div); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	function _insertBefore(/*DomNode*/ node, /*DomNode*/ ref){ | ||||
| 		var parent = ref.parentNode; | ||||
| 		if(parent){ | ||||
| 			parent.insertBefore(node, ref); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	function _insertAfter(/*DomNode*/ node, /*DomNode*/ ref){ | ||||
| 		// summary: | ||||
| 		//		Try to insert node after ref | ||||
| 		var parent = ref.parentNode; | ||||
| 		if(parent){ | ||||
| 			if(parent.lastChild == ref){ | ||||
| 				parent.appendChild(node); | ||||
| 			}else{ | ||||
| 				parent.insertBefore(node, ref.nextSibling); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	exports.toDom = function toDom(frag, doc){ | ||||
| 		// summary: | ||||
| 		//		instantiates an HTML fragment returning the corresponding DOM. | ||||
| 		// frag: String | ||||
| 		//		the HTML fragment | ||||
| 		// doc: DocumentNode? | ||||
| 		//		optional document to use when creating DOM nodes, defaults to | ||||
| 		//		dojo.doc if not specified. | ||||
| 		// returns: | ||||
| 		//		Document fragment, unless it's a single node in which case it returns the node itself | ||||
| 		// example: | ||||
| 		//		Create a table row: | ||||
| 		//	|	var tr = dojo.toDom("<tr><td>First!</td></tr>"); | ||||
|  | ||||
| 		doc = doc || win.doc; | ||||
| 		var masterId = doc[masterName]; | ||||
| 		if(!masterId){ | ||||
| 			doc[masterName] = masterId = ++masterNum + ""; | ||||
| 			masterNode[masterId] = doc.createElement("div"); | ||||
| 		} | ||||
|  | ||||
| 		if(has("ie") <= 8){ | ||||
| 			if(!doc.__dojo_html5_tested && doc.body){ | ||||
| 				html5domfix(doc); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// make sure the frag is a string. | ||||
| 		frag += ""; | ||||
|  | ||||
| 		// find the starting tag, and get node wrapper | ||||
| 		var match = frag.match(reTag), | ||||
| 			tag = match ? match[1].toLowerCase() : "", | ||||
| 			master = masterNode[masterId], | ||||
| 			wrap, i, fc, df; | ||||
| 		if(match && tagWrap[tag]){ | ||||
| 			wrap = tagWrap[tag]; | ||||
| 			master.innerHTML = wrap.pre + frag + wrap.post; | ||||
| 			for(i = wrap.length; i; --i){ | ||||
| 				master = master.firstChild; | ||||
| 			} | ||||
| 		}else{ | ||||
| 			master.innerHTML = frag; | ||||
| 		} | ||||
|  | ||||
| 		// one node shortcut => return the node itself | ||||
| 		if(master.childNodes.length == 1){ | ||||
| 			return master.removeChild(master.firstChild); // DOMNode | ||||
| 		} | ||||
|  | ||||
| 		// return multiple nodes as a document fragment | ||||
| 		df = doc.createDocumentFragment(); | ||||
| 		while((fc = master.firstChild)){ // intentional assignment | ||||
| 			df.appendChild(fc); | ||||
| 		} | ||||
| 		return df; // DocumentFragment | ||||
| 	}; | ||||
|  | ||||
| 	exports.place = function place(/*DOMNode|String*/ node, /*DOMNode|String*/ refNode, /*String|Number?*/ position){ | ||||
| 		// summary: | ||||
| 		//		Attempt to insert node into the DOM, choosing from various positioning options. | ||||
| 		//		Returns the first argument resolved to a DOM node. | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or node reference, or HTML fragment starting with "<" to place relative to refNode | ||||
| 		// refNode: DOMNode|String | ||||
| 		//		id or node reference to use as basis for placement | ||||
| 		// position: String|Number? | ||||
| 		//		string noting the position of node relative to refNode or a | ||||
| 		//		number indicating the location in the childNodes collection of refNode. | ||||
| 		//		Accepted string values are: | ||||
| 		// | ||||
| 		//		- before | ||||
| 		//		- after | ||||
| 		//		- replace | ||||
| 		//		- only | ||||
| 		//		- first | ||||
| 		//		- last | ||||
| 		// | ||||
| 		//		"first" and "last" indicate positions as children of refNode, "replace" replaces refNode, | ||||
| 		//		"only" replaces all children.  position defaults to "last" if not specified | ||||
| 		// returns: DOMNode | ||||
| 		//		Returned values is the first argument resolved to a DOM node. | ||||
| 		// | ||||
| 		//		.place() is also a method of `dojo/NodeList`, allowing `dojo.query` node lookups. | ||||
| 		// example: | ||||
| 		//		Place a node by string id as the last child of another node by string id: | ||||
| 		//	|	dojo.place("someNode", "anotherNode"); | ||||
| 		// example: | ||||
| 		//		Place a node by string id before another node by string id | ||||
| 		//	|	dojo.place("someNode", "anotherNode", "before"); | ||||
| 		// example: | ||||
| 		//		Create a Node, and place it in the body element (last child): | ||||
| 		//	|	dojo.place("<div></div>", dojo.body()); | ||||
| 		// example: | ||||
| 		//		Put a new LI as the first child of a list by id: | ||||
| 		//	|	dojo.place("<li></li>", "someUl", "first"); | ||||
|  | ||||
| 		refNode = dom.byId(refNode); | ||||
| 		if(typeof node == "string"){ // inline'd type check | ||||
| 			node = /^\s*</.test(node) ? exports.toDom(node, refNode.ownerDocument) : dom.byId(node); | ||||
| 		} | ||||
| 		if(typeof position == "number"){ // inline'd type check | ||||
| 			var cn = refNode.childNodes; | ||||
| 			if(!cn.length || cn.length <= position){ | ||||
| 				refNode.appendChild(node); | ||||
| 			}else{ | ||||
| 				_insertBefore(node, cn[position < 0 ? 0 : position]); | ||||
| 			} | ||||
| 		}else{ | ||||
| 			switch(position){ | ||||
| 				case "before": | ||||
| 					_insertBefore(node, refNode); | ||||
| 					break; | ||||
| 				case "after": | ||||
| 					_insertAfter(node, refNode); | ||||
| 					break; | ||||
| 				case "replace": | ||||
| 					refNode.parentNode.replaceChild(node, refNode); | ||||
| 					break; | ||||
| 				case "only": | ||||
| 					exports.empty(refNode); | ||||
| 					refNode.appendChild(node); | ||||
| 					break; | ||||
| 				case "first": | ||||
| 					if(refNode.firstChild){ | ||||
| 						_insertBefore(node, refNode.firstChild); | ||||
| 						break; | ||||
| 					} | ||||
| 					// else fallthrough... | ||||
| 				default: // aka: last | ||||
| 					refNode.appendChild(node); | ||||
| 			} | ||||
| 		} | ||||
| 		return node; // DomNode | ||||
| 	}; | ||||
|  | ||||
| 	var create = exports.create = function create(/*DOMNode|String*/ tag, /*Object*/ attrs, /*DOMNode|String?*/ refNode, /*String?*/ pos){ | ||||
| 		// summary: | ||||
| 		//		Create an element, allowing for optional attribute decoration | ||||
| 		//		and placement. | ||||
| 		// description: | ||||
| 		//		A DOM Element creation function. A shorthand method for creating a node or | ||||
| 		//		a fragment, and allowing for a convenient optional attribute setting step, | ||||
| 		//		as well as an optional DOM placement reference. | ||||
| 		// | ||||
| 		//		Attributes are set by passing the optional object through `dojo.setAttr`. | ||||
| 		//		See `dojo.setAttr` for noted caveats and nuances, and API if applicable. | ||||
| 		// | ||||
| 		//		Placement is done via `dojo.place`, assuming the new node to be the action | ||||
| 		//		node, passing along the optional reference node and position. | ||||
| 		// tag: DOMNode|String | ||||
| 		//		A string of the element to create (eg: "div", "a", "p", "li", "script", "br"), | ||||
| 		//		or an existing DOM node to process. | ||||
| 		// attrs: Object | ||||
| 		//		An object-hash of attributes to set on the newly created node. | ||||
| 		//		Can be null, if you don't want to set any attributes/styles. | ||||
| 		//		See: `dojo.setAttr` for a description of available attributes. | ||||
| 		// refNode: DOMNode|String? | ||||
| 		//		Optional reference node. Used by `dojo.place` to place the newly created | ||||
| 		//		node somewhere in the dom relative to refNode. Can be a DomNode reference | ||||
| 		//		or String ID of a node. | ||||
| 		// pos: String? | ||||
| 		//		Optional positional reference. Defaults to "last" by way of `dojo.place`, | ||||
| 		//		though can be set to "first","after","before","last", "replace" or "only" | ||||
| 		//		to further control the placement of the new node relative to the refNode. | ||||
| 		//		'refNode' is required if a 'pos' is specified. | ||||
| 		// example: | ||||
| 		//		Create a DIV: | ||||
| 		//	|	var n = dojo.create("div"); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Create a DIV with content: | ||||
| 		//	|	var n = dojo.create("div", { innerHTML:"<p>hi</p>" }); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Place a new DIV in the BODY, with no attributes set | ||||
| 		//	|	var n = dojo.create("div", null, dojo.body()); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Create an UL, and populate it with LI's. Place the list as the first-child of a | ||||
| 		//		node with id="someId": | ||||
| 		//	|	var ul = dojo.create("ul", null, "someId", "first"); | ||||
| 		//	|	var items = ["one", "two", "three", "four"]; | ||||
| 		//	|	dojo.forEach(items, function(data){ | ||||
| 		//	|		dojo.create("li", { innerHTML: data }, ul); | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Create an anchor, with an href. Place in BODY: | ||||
| 		//	|	dojo.create("a", { href:"foo.html", title:"Goto FOO!" }, dojo.body()); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Create a `dojo/NodeList()` from a new element (for syntactic sugar): | ||||
| 		//	|	dojo.query(dojo.create('div')) | ||||
| 		//	|		.addClass("newDiv") | ||||
| 		//	|		.onclick(function(e){ console.log('clicked', e.target) }) | ||||
| 		//	|		.place("#someNode"); // redundant, but cleaner. | ||||
|  | ||||
| 		var doc = win.doc; | ||||
| 		if(refNode){ | ||||
| 			refNode = dom.byId(refNode); | ||||
| 			doc = refNode.ownerDocument; | ||||
| 		} | ||||
| 		if(typeof tag == "string"){ // inline'd type check | ||||
| 			tag = doc.createElement(tag); | ||||
| 		} | ||||
| 		if(attrs){ attr.set(tag, attrs); } | ||||
| 		if(refNode){ exports.place(tag, refNode, pos); } | ||||
| 		return tag; // DomNode | ||||
| 	}; | ||||
|  | ||||
| 	function _empty(/*DomNode*/ node){ | ||||
| 		if(node.canHaveChildren){ | ||||
| 			try{ | ||||
| 				// fast path | ||||
| 				node.innerHTML = ""; | ||||
| 				return; | ||||
| 			}catch(e){ | ||||
| 				// innerHTML is readOnly (e.g. TABLE (sub)elements in quirks mode) | ||||
| 				// Fall through (saves bytes) | ||||
| 			} | ||||
| 		} | ||||
| 		// SVG/strict elements don't support innerHTML/canHaveChildren, and OBJECT/APPLET elements in quirks node have canHaveChildren=false | ||||
| 		for(var c; c = node.lastChild;){ // intentional assignment | ||||
| 			_destroy(c, node); // destroy is better than removeChild so TABLE subelements are removed in proper order | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	exports.empty = function empty(/*DOMNode|String*/ node){ | ||||
| 		 // summary: | ||||
| 		 //		safely removes all children of the node. | ||||
| 		 // node: DOMNode|String | ||||
| 		 //		a reference to a DOM node or an id. | ||||
| 		 // example: | ||||
| 		 //		Destroy node's children byId: | ||||
| 		 //	|	dojo.empty("someId"); | ||||
| 		 // | ||||
| 		 // example: | ||||
| 		 //		Destroy all nodes' children in a list by reference: | ||||
| 		 //	|	dojo.query(".someNode").forEach(dojo.empty); | ||||
|  | ||||
| 		_empty(dom.byId(node)); | ||||
| 	}; | ||||
|  | ||||
|  | ||||
| 	function _destroy(/*DomNode*/ node, /*DomNode*/ parent){ | ||||
| 		// in IE quirks, node.canHaveChildren can be false but firstChild can be non-null (OBJECT/APPLET) | ||||
| 		if(node.firstChild){ | ||||
| 			_empty(node); | ||||
| 		} | ||||
| 		if(parent){ | ||||
| 			// removeNode(false) doesn't leak in IE 6+, but removeChild() and removeNode(true) are known to leak under IE 8- while 9+ is TBD. | ||||
| 			// In IE quirks mode, PARAM nodes as children of OBJECT/APPLET nodes have a removeNode method that does nothing and | ||||
| 			// the parent node has canHaveChildren=false even though removeChild correctly removes the PARAM children. | ||||
| 			// In IE, SVG/strict nodes don't have a removeNode method nor a canHaveChildren boolean. | ||||
| 			has("ie") && parent.canHaveChildren && "removeNode" in node ? node.removeNode(false) : parent.removeChild(node); | ||||
| 		} | ||||
| 	} | ||||
| 	var destroy = exports.destroy = function destroy(/*DOMNode|String*/ node){ | ||||
| 		// summary: | ||||
| 		//		Removes a node from its parent, clobbering it and all of its | ||||
| 		//		children. | ||||
| 		// | ||||
| 		// description: | ||||
| 		//		Removes a node from its parent, clobbering it and all of its | ||||
| 		//		children. Function only works with DomNodes, and returns nothing. | ||||
| 		// | ||||
| 		// node: DOMNode|String | ||||
| 		//		A String ID or DomNode reference of the element to be destroyed | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Destroy a node byId: | ||||
| 		//	|	dojo.destroy("someId"); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Destroy all nodes in a list by reference: | ||||
| 		//	|	dojo.query(".someNode").forEach(dojo.destroy); | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		if(!node){ return; } | ||||
| 		_destroy(node, node.parentNode); | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										605
									
								
								debian/missing-sources/dojo/dom-geometry.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										605
									
								
								debian/missing-sources/dojo/dom-geometry.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,605 @@ | ||||
| define(["./sniff", "./_base/window","./dom", "./dom-style"], | ||||
| 		function(has, win, dom, style){ | ||||
| 	// module: | ||||
| 	//		dojo/dom-geometry | ||||
|  | ||||
| 	// the result object | ||||
| 	var geom = { | ||||
| 		// summary: | ||||
| 		//		This module defines the core dojo DOM geometry API. | ||||
| 	}; | ||||
|  | ||||
| 	// Box functions will assume this model. | ||||
| 	// On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode. | ||||
| 	// Can be set to change behavior of box setters. | ||||
|  | ||||
| 	// can be either: | ||||
| 	//	"border-box" | ||||
| 	//	"content-box" (default) | ||||
| 	geom.boxModel = "content-box"; | ||||
|  | ||||
| 	// We punt per-node box mode testing completely. | ||||
| 	// If anybody cares, we can provide an additional (optional) unit | ||||
| 	// that overrides existing code to include per-node box sensitivity. | ||||
|  | ||||
| 	// Opera documentation claims that Opera 9 uses border-box in BackCompat mode. | ||||
| 	// but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box. | ||||
| 	// IIRC, earlier versions of Opera did in fact use border-box. | ||||
| 	// Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault. | ||||
|  | ||||
| 	if(has("ie") /*|| has("opera")*/){ | ||||
| 		// client code may have to adjust if compatMode varies across iframes | ||||
| 		geom.boxModel = document.compatMode == "BackCompat" ? "border-box" : "content-box"; | ||||
| 	} | ||||
|  | ||||
| 	geom.getPadExtents = function getPadExtents(/*DomNode*/ node, /*Object*/ computedStyle){ | ||||
| 		// summary: | ||||
| 		//		Returns object with special values specifically useful for node | ||||
| 		//		fitting. | ||||
| 		// description: | ||||
| 		//		Returns an object with `w`, `h`, `l`, `t` properties: | ||||
| 		//	|		l/t/r/b = left/top/right/bottom padding (respectively) | ||||
| 		//	|		w = the total of the left and right padding | ||||
| 		//	|		h = the total of the top and bottom padding | ||||
| 		//		If 'node' has position, l/t forms the origin for child nodes. | ||||
| 		//		The w/h are used for calculating boxes. | ||||
| 		//		Normally application code will not need to invoke this | ||||
| 		//		directly, and will use the ...box... functions instead. | ||||
| 		// node: DOMNode | ||||
| 		// computedStyle: Object? | ||||
| 		//		This parameter accepts computed styles object. | ||||
| 		//		If this parameter is omitted, the functions will call | ||||
| 		//		dojo.getComputedStyle to get one. It is a better way, calling | ||||
| 		//		dojo.computedStyle once, and then pass the reference to this | ||||
| 		//		computedStyle parameter. Wherever possible, reuse the returned | ||||
| 		//		object of dojo/dom-style.getComputedStyle(). | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var s = computedStyle || style.getComputedStyle(node), px = style.toPixelValue, | ||||
| 			l = px(node, s.paddingLeft), t = px(node, s.paddingTop), r = px(node, s.paddingRight), b = px(node, s.paddingBottom); | ||||
| 		return {l: l, t: t, r: r, b: b, w: l + r, h: t + b}; | ||||
| 	}; | ||||
|  | ||||
| 	var none = "none"; | ||||
|  | ||||
| 	geom.getBorderExtents = function getBorderExtents(/*DomNode*/ node, /*Object*/ computedStyle){ | ||||
| 		// summary: | ||||
| 		//		returns an object with properties useful for noting the border | ||||
| 		//		dimensions. | ||||
| 		// description: | ||||
| 		//		- l/t/r/b = the sum of left/top/right/bottom border (respectively) | ||||
| 		//		- w = the sum of the left and right border | ||||
| 		//		- h = the sum of the top and bottom border | ||||
| 		// | ||||
| 		//		The w/h are used for calculating boxes. | ||||
| 		//		Normally application code will not need to invoke this | ||||
| 		//		directly, and will use the ...box... functions instead. | ||||
| 		// node: DOMNode | ||||
| 		// computedStyle: Object? | ||||
| 		//		This parameter accepts computed styles object. | ||||
| 		//		If this parameter is omitted, the functions will call | ||||
| 		//		dojo.getComputedStyle to get one. It is a better way, calling | ||||
| 		//		dojo.computedStyle once, and then pass the reference to this | ||||
| 		//		computedStyle parameter. Wherever possible, reuse the returned | ||||
| 		//		object of dojo/dom-style.getComputedStyle(). | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var px = style.toPixelValue, s = computedStyle || style.getComputedStyle(node), | ||||
| 			l = s.borderLeftStyle != none ? px(node, s.borderLeftWidth) : 0, | ||||
| 			t = s.borderTopStyle != none ? px(node, s.borderTopWidth) : 0, | ||||
| 			r = s.borderRightStyle != none ? px(node, s.borderRightWidth) : 0, | ||||
| 			b = s.borderBottomStyle != none ? px(node, s.borderBottomWidth) : 0; | ||||
| 		return {l: l, t: t, r: r, b: b, w: l + r, h: t + b}; | ||||
| 	}; | ||||
|  | ||||
| 	geom.getPadBorderExtents = function getPadBorderExtents(/*DomNode*/ node, /*Object*/ computedStyle){ | ||||
| 		// summary: | ||||
| 		//		Returns object with properties useful for box fitting with | ||||
| 		//		regards to padding. | ||||
| 		// description: | ||||
| 		//		- l/t/r/b = the sum of left/top/right/bottom padding and left/top/right/bottom border (respectively) | ||||
| 		//		- w = the sum of the left and right padding and border | ||||
| 		//		- h = the sum of the top and bottom padding and border | ||||
| 		// | ||||
| 		//		The w/h are used for calculating boxes. | ||||
| 		//		Normally application code will not need to invoke this | ||||
| 		//		directly, and will use the ...box... functions instead. | ||||
| 		// node: DOMNode | ||||
| 		// computedStyle: Object? | ||||
| 		//		This parameter accepts computed styles object. | ||||
| 		//		If this parameter is omitted, the functions will call | ||||
| 		//		dojo.getComputedStyle to get one. It is a better way, calling | ||||
| 		//		dojo.computedStyle once, and then pass the reference to this | ||||
| 		//		computedStyle parameter. Wherever possible, reuse the returned | ||||
| 		//		object of dojo/dom-style.getComputedStyle(). | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var s = computedStyle || style.getComputedStyle(node), | ||||
| 			p = geom.getPadExtents(node, s), | ||||
| 			b = geom.getBorderExtents(node, s); | ||||
| 		return { | ||||
| 			l: p.l + b.l, | ||||
| 			t: p.t + b.t, | ||||
| 			r: p.r + b.r, | ||||
| 			b: p.b + b.b, | ||||
| 			w: p.w + b.w, | ||||
| 			h: p.h + b.h | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	geom.getMarginExtents = function getMarginExtents(node, computedStyle){ | ||||
| 		// summary: | ||||
| 		//		returns object with properties useful for box fitting with | ||||
| 		//		regards to box margins (i.e., the outer-box). | ||||
| 		// | ||||
| 		//		- l/t = marginLeft, marginTop, respectively | ||||
| 		//		- w = total width, margin inclusive | ||||
| 		//		- h = total height, margin inclusive | ||||
| 		// | ||||
| 		//		The w/h are used for calculating boxes. | ||||
| 		//		Normally application code will not need to invoke this | ||||
| 		//		directly, and will use the ...box... functions instead. | ||||
| 		// node: DOMNode | ||||
| 		// computedStyle: Object? | ||||
| 		//		This parameter accepts computed styles object. | ||||
| 		//		If this parameter is omitted, the functions will call | ||||
| 		//		dojo.getComputedStyle to get one. It is a better way, calling | ||||
| 		//		dojo.computedStyle once, and then pass the reference to this | ||||
| 		//		computedStyle parameter. Wherever possible, reuse the returned | ||||
| 		//		object of dojo/dom-style.getComputedStyle(). | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var s = computedStyle || style.getComputedStyle(node), px = style.toPixelValue, | ||||
| 			l = px(node, s.marginLeft), t = px(node, s.marginTop), r = px(node, s.marginRight), b = px(node, s.marginBottom); | ||||
| 		return {l: l, t: t, r: r, b: b, w: l + r, h: t + b}; | ||||
| 	}; | ||||
|  | ||||
| 	// Box getters work in any box context because offsetWidth/clientWidth | ||||
| 	// are invariant wrt box context | ||||
| 	// | ||||
| 	// They do *not* work for display: inline objects that have padding styles | ||||
| 	// because the user agent ignores padding (it's bogus styling in any case) | ||||
| 	// | ||||
| 	// Be careful with IMGs because they are inline or block depending on | ||||
| 	// browser and browser mode. | ||||
|  | ||||
| 	// Although it would be easier to read, there are not separate versions of | ||||
| 	// _getMarginBox for each browser because: | ||||
| 	// 1. the branching is not expensive | ||||
| 	// 2. factoring the shared code wastes cycles (function call overhead) | ||||
| 	// 3. duplicating the shared code wastes bytes | ||||
|  | ||||
| 	geom.getMarginBox = function getMarginBox(/*DomNode*/ node, /*Object*/ computedStyle){ | ||||
| 		// summary: | ||||
| 		//		returns an object that encodes the width, height, left and top | ||||
| 		//		positions of the node's margin box. | ||||
| 		// node: DOMNode | ||||
| 		// computedStyle: Object? | ||||
| 		//		This parameter accepts computed styles object. | ||||
| 		//		If this parameter is omitted, the functions will call | ||||
| 		//		dojo.getComputedStyle to get one. It is a better way, calling | ||||
| 		//		dojo.computedStyle once, and then pass the reference to this | ||||
| 		//		computedStyle parameter. Wherever possible, reuse the returned | ||||
| 		//		object of dojo/dom-style.getComputedStyle(). | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var s = computedStyle || style.getComputedStyle(node), me = geom.getMarginExtents(node, s), | ||||
| 			l = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode, px = style.toPixelValue, pcs; | ||||
| 		if(has("mozilla")){ | ||||
| 			// Mozilla: | ||||
| 			// If offsetParent has a computed overflow != visible, the offsetLeft is decreased | ||||
| 			// by the parent's border. | ||||
| 			// We don't want to compute the parent's style, so instead we examine node's | ||||
| 			// computed left/top which is more stable. | ||||
| 			var sl = parseFloat(s.left), st = parseFloat(s.top); | ||||
| 			if(!isNaN(sl) && !isNaN(st)){ | ||||
| 				l = sl; | ||||
| 				t = st; | ||||
| 			}else{ | ||||
| 				// If child's computed left/top are not parseable as a number (e.g. "auto"), we | ||||
| 				// have no choice but to examine the parent's computed style. | ||||
| 				if(p && p.style){ | ||||
| 					pcs = style.getComputedStyle(p); | ||||
| 					if(pcs.overflow != "visible"){ | ||||
| 						l += pcs.borderLeftStyle != none ? px(node, pcs.borderLeftWidth) : 0; | ||||
| 						t += pcs.borderTopStyle != none ? px(node, pcs.borderTopWidth) : 0; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}else if(has("opera") || (has("ie") == 8 && !has("quirks"))){ | ||||
| 			// On Opera and IE 8, offsetLeft/Top includes the parent's border | ||||
| 			if(p){ | ||||
| 				pcs = style.getComputedStyle(p); | ||||
| 				l -= pcs.borderLeftStyle != none ? px(node, pcs.borderLeftWidth) : 0; | ||||
| 				t -= pcs.borderTopStyle != none ? px(node, pcs.borderTopWidth) : 0; | ||||
| 			} | ||||
| 		} | ||||
| 		return {l: l, t: t, w: node.offsetWidth + me.w, h: node.offsetHeight + me.h}; | ||||
| 	}; | ||||
|  | ||||
| 	geom.getContentBox = function getContentBox(node, computedStyle){ | ||||
| 		// summary: | ||||
| 		//		Returns an object that encodes the width, height, left and top | ||||
| 		//		positions of the node's content box, irrespective of the | ||||
| 		//		current box model. | ||||
| 		// node: DOMNode | ||||
| 		// computedStyle: Object? | ||||
| 		//		This parameter accepts computed styles object. | ||||
| 		//		If this parameter is omitted, the functions will call | ||||
| 		//		dojo.getComputedStyle to get one. It is a better way, calling | ||||
| 		//		dojo.computedStyle once, and then pass the reference to this | ||||
| 		//		computedStyle parameter. Wherever possible, reuse the returned | ||||
| 		//		object of dojo/dom-style.getComputedStyle(). | ||||
|  | ||||
| 		// clientWidth/Height are important since the automatically account for scrollbars | ||||
| 		// fallback to offsetWidth/Height for special cases (see #3378) | ||||
| 		node = dom.byId(node); | ||||
| 		var s = computedStyle || style.getComputedStyle(node), w = node.clientWidth, h, | ||||
| 			pe = geom.getPadExtents(node, s), be = geom.getBorderExtents(node, s); | ||||
| 		if(!w){ | ||||
| 			w = node.offsetWidth; | ||||
| 			h = node.offsetHeight; | ||||
| 		}else{ | ||||
| 			h = node.clientHeight; | ||||
| 			be.w = be.h = 0; | ||||
| 		} | ||||
| 		// On Opera, offsetLeft includes the parent's border | ||||
| 		if(has("opera")){ | ||||
| 			pe.l += be.l; | ||||
| 			pe.t += be.t; | ||||
| 		} | ||||
| 		return {l: pe.l, t: pe.t, w: w - pe.w - be.w, h: h - pe.h - be.h}; | ||||
| 	}; | ||||
|  | ||||
| 	// Box setters depend on box context because interpretation of width/height styles | ||||
| 	// vary wrt box context. | ||||
| 	// | ||||
| 	// The value of boxModel is used to determine box context. | ||||
| 	// boxModel can be set directly to change behavior. | ||||
| 	// | ||||
| 	// Beware of display: inline objects that have padding styles | ||||
| 	// because the user agent ignores padding (it's a bogus setup anyway) | ||||
| 	// | ||||
| 	// Be careful with IMGs because they are inline or block depending on | ||||
| 	// browser and browser mode. | ||||
| 	// | ||||
| 	// Elements other than DIV may have special quirks, like built-in | ||||
| 	// margins or padding, or values not detectable via computedStyle. | ||||
| 	// In particular, margins on TABLE do not seems to appear | ||||
| 	// at all in computedStyle on Mozilla. | ||||
|  | ||||
| 	function setBox(/*DomNode*/ node, /*Number?*/ l, /*Number?*/ t, /*Number?*/ w, /*Number?*/ h, /*String?*/ u){ | ||||
| 		// summary: | ||||
| 		//		sets width/height/left/top in the current (native) box-model | ||||
| 		//		dimensions. Uses the unit passed in u. | ||||
| 		// node: | ||||
| 		//		DOM Node reference. Id string not supported for performance | ||||
| 		//		reasons. | ||||
| 		// l: | ||||
| 		//		left offset from parent. | ||||
| 		// t: | ||||
| 		//		top offset from parent. | ||||
| 		// w: | ||||
| 		//		width in current box model. | ||||
| 		// h: | ||||
| 		//		width in current box model. | ||||
| 		// u: | ||||
| 		//		unit measure to use for other measures. Defaults to "px". | ||||
| 		u = u || "px"; | ||||
| 		var s = node.style; | ||||
| 		if(!isNaN(l)){ | ||||
| 			s.left = l + u; | ||||
| 		} | ||||
| 		if(!isNaN(t)){ | ||||
| 			s.top = t + u; | ||||
| 		} | ||||
| 		if(w >= 0){ | ||||
| 			s.width = w + u; | ||||
| 		} | ||||
| 		if(h >= 0){ | ||||
| 			s.height = h + u; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	function isButtonTag(/*DomNode*/ node){ | ||||
| 		// summary: | ||||
| 		//		True if the node is BUTTON or INPUT.type="button". | ||||
| 		return node.tagName.toLowerCase() == "button" || | ||||
| 			node.tagName.toLowerCase() == "input" && (node.getAttribute("type") || "").toLowerCase() == "button"; // boolean | ||||
| 	} | ||||
|  | ||||
| 	function usesBorderBox(/*DomNode*/ node){ | ||||
| 		// summary: | ||||
| 		//		True if the node uses border-box layout. | ||||
|  | ||||
| 		// We could test the computed style of node to see if a particular box | ||||
| 		// has been specified, but there are details and we choose not to bother. | ||||
|  | ||||
| 		// TABLE and BUTTON (and INPUT type=button) are always border-box by default. | ||||
| 		// If you have assigned a different box to either one via CSS then | ||||
| 		// box functions will break. | ||||
|  | ||||
| 		return geom.boxModel == "border-box" || node.tagName.toLowerCase() == "table" || isButtonTag(node); // boolean | ||||
| 	} | ||||
|  | ||||
| 	geom.setContentSize = function setContentSize(/*DomNode*/ node, /*Object*/ box, /*Object*/ computedStyle){ | ||||
| 		// summary: | ||||
| 		//		Sets the size of the node's contents, irrespective of margins, | ||||
| 		//		padding, or borders. | ||||
| 		// node: DOMNode | ||||
| 		// box: Object | ||||
| 		//		hash with optional "w", and "h" properties for "width", and "height" | ||||
| 		//		respectively. All specified properties should have numeric values in whole pixels. | ||||
| 		// computedStyle: Object? | ||||
| 		//		This parameter accepts computed styles object. | ||||
| 		//		If this parameter is omitted, the functions will call | ||||
| 		//		dojo.getComputedStyle to get one. It is a better way, calling | ||||
| 		//		dojo.computedStyle once, and then pass the reference to this | ||||
| 		//		computedStyle parameter. Wherever possible, reuse the returned | ||||
| 		//		object of dojo/dom-style.getComputedStyle(). | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var w = box.w, h = box.h; | ||||
| 		if(usesBorderBox(node)){ | ||||
| 			var pb = geom.getPadBorderExtents(node, computedStyle); | ||||
| 			if(w >= 0){ | ||||
| 				w += pb.w; | ||||
| 			} | ||||
| 			if(h >= 0){ | ||||
| 				h += pb.h; | ||||
| 			} | ||||
| 		} | ||||
| 		setBox(node, NaN, NaN, w, h); | ||||
| 	}; | ||||
|  | ||||
| 	var nilExtents = {l: 0, t: 0, w: 0, h: 0}; | ||||
|  | ||||
| 	geom.setMarginBox = function setMarginBox(/*DomNode*/ node, /*Object*/ box, /*Object*/ computedStyle){ | ||||
| 		// summary: | ||||
| 		//		sets the size of the node's margin box and placement | ||||
| 		//		(left/top), irrespective of box model. Think of it as a | ||||
| 		//		passthrough to setBox that handles box-model vagaries for | ||||
| 		//		you. | ||||
| 		// node: DOMNode | ||||
| 		// box: Object | ||||
| 		//		hash with optional "l", "t", "w", and "h" properties for "left", "right", "width", and "height" | ||||
| 		//		respectively. All specified properties should have numeric values in whole pixels. | ||||
| 		// computedStyle: Object? | ||||
| 		//		This parameter accepts computed styles object. | ||||
| 		//		If this parameter is omitted, the functions will call | ||||
| 		//		dojo.getComputedStyle to get one. It is a better way, calling | ||||
| 		//		dojo.computedStyle once, and then pass the reference to this | ||||
| 		//		computedStyle parameter. Wherever possible, reuse the returned | ||||
| 		//		object of dojo/dom-style.getComputedStyle(). | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var s = computedStyle || style.getComputedStyle(node), w = box.w, h = box.h, | ||||
| 		// Some elements have special padding, margin, and box-model settings. | ||||
| 		// To use box functions you may need to set padding, margin explicitly. | ||||
| 		// Controlling box-model is harder, in a pinch you might set dojo/dom-geometry.boxModel. | ||||
| 			pb = usesBorderBox(node) ? nilExtents : geom.getPadBorderExtents(node, s), | ||||
| 			mb = geom.getMarginExtents(node, s); | ||||
| 		if(has("webkit")){ | ||||
| 			// on Safari (3.1.2), button nodes with no explicit size have a default margin | ||||
| 			// setting an explicit size eliminates the margin. | ||||
| 			// We have to swizzle the width to get correct margin reading. | ||||
| 			if(isButtonTag(node)){ | ||||
| 				var ns = node.style; | ||||
| 				if(w >= 0 && !ns.width){ | ||||
| 					ns.width = "4px"; | ||||
| 				} | ||||
| 				if(h >= 0 && !ns.height){ | ||||
| 					ns.height = "4px"; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if(w >= 0){ | ||||
| 			w = Math.max(w - pb.w - mb.w, 0); | ||||
| 		} | ||||
| 		if(h >= 0){ | ||||
| 			h = Math.max(h - pb.h - mb.h, 0); | ||||
| 		} | ||||
| 		setBox(node, box.l, box.t, w, h); | ||||
| 	}; | ||||
|  | ||||
| 	// ============================= | ||||
| 	// Positioning | ||||
| 	// ============================= | ||||
|  | ||||
| 	geom.isBodyLtr = function isBodyLtr(/*Document?*/ doc){ | ||||
| 		// summary: | ||||
| 		//		Returns true if the current language is left-to-right, and false otherwise. | ||||
| 		// doc: Document? | ||||
| 		//		Optional document to query.   If unspecified, use win.doc. | ||||
| 		// returns: Boolean | ||||
|  | ||||
| 		doc = doc || win.doc; | ||||
| 		return (win.body(doc).dir || doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean | ||||
| 	}; | ||||
|  | ||||
| 	geom.docScroll = function docScroll(/*Document?*/ doc){ | ||||
| 		// summary: | ||||
| 		//		Returns an object with {node, x, y} with corresponding offsets. | ||||
| 		// doc: Document? | ||||
| 		//		Optional document to query.   If unspecified, use win.doc. | ||||
| 		// returns: Object | ||||
|  | ||||
| 		doc = doc || win.doc; | ||||
| 		var node = win.doc.parentWindow || win.doc.defaultView;   // use UI window, not dojo.global window.   TODO: use dojo/window::get() except for circular dependency problem | ||||
| 		return "pageXOffset" in node ? {x: node.pageXOffset, y: node.pageYOffset } : | ||||
| 			(node = has("quirks") ? win.body(doc) : doc.documentElement) && | ||||
| 				{x: geom.fixIeBiDiScrollLeft(node.scrollLeft || 0, doc), y: node.scrollTop || 0 }; | ||||
| 	}; | ||||
|  | ||||
| 	if(has("ie")){ | ||||
| 		geom.getIeDocumentElementOffset = function getIeDocumentElementOffset(/*Document?*/ doc){ | ||||
| 			// summary: | ||||
| 			//		returns the offset in x and y from the document body to the | ||||
| 			//		visual edge of the page for IE | ||||
| 			// doc: Document? | ||||
| 			//		Optional document to query.   If unspecified, use win.doc. | ||||
| 			// description: | ||||
| 			//		The following values in IE contain an offset: | ||||
| 			//	|		event.clientX | ||||
| 			//	|		event.clientY | ||||
| 			//	|		node.getBoundingClientRect().left | ||||
| 			//	|		node.getBoundingClientRect().top | ||||
| 			//		But other position related values do not contain this offset, | ||||
| 			//		such as node.offsetLeft, node.offsetTop, node.style.left and | ||||
| 			//		node.style.top. The offset is always (2, 2) in LTR direction. | ||||
| 			//		When the body is in RTL direction, the offset counts the width | ||||
| 			//		of left scroll bar's width.  This function computes the actual | ||||
| 			//		offset. | ||||
|  | ||||
| 			//NOTE: assumes we're being called in an IE browser | ||||
|  | ||||
| 			doc = doc || win.doc; | ||||
| 			var de = doc.documentElement; // only deal with HTML element here, position() handles body/quirks | ||||
|  | ||||
| 			if(has("ie") < 8){ | ||||
| 				var r = de.getBoundingClientRect(), // works well for IE6+ | ||||
| 					l = r.left, t = r.top; | ||||
| 				if(has("ie") < 7){ | ||||
| 					l += de.clientLeft;	// scrollbar size in strict/RTL, or, | ||||
| 					t += de.clientTop;	// HTML border size in strict | ||||
| 				} | ||||
| 				return { | ||||
| 					x: l < 0 ? 0 : l, // FRAME element border size can lead to inaccurate negative values | ||||
| 					y: t < 0 ? 0 : t | ||||
| 				}; | ||||
| 			}else{ | ||||
| 				return { | ||||
| 					x: 0, | ||||
| 					y: 0 | ||||
| 				}; | ||||
| 			} | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	geom.fixIeBiDiScrollLeft = function fixIeBiDiScrollLeft(/*Integer*/ scrollLeft, /*Document?*/ doc){ | ||||
| 		// summary: | ||||
| 		//		In RTL direction, scrollLeft should be a negative value, but IE | ||||
| 		//		returns a positive one. All codes using documentElement.scrollLeft | ||||
| 		//		must call this function to fix this error, otherwise the position | ||||
| 		//		will offset to right when there is a horizontal scrollbar. | ||||
| 		// scrollLeft: Number | ||||
| 		// doc: Document? | ||||
| 		//		Optional document to query.   If unspecified, use win.doc. | ||||
| 		// returns: Number | ||||
|  | ||||
| 		// In RTL direction, scrollLeft should be a negative value, but IE | ||||
| 		// returns a positive one. All codes using documentElement.scrollLeft | ||||
| 		// must call this function to fix this error, otherwise the position | ||||
| 		// will offset to right when there is a horizontal scrollbar. | ||||
|  | ||||
| 		doc = doc || win.doc; | ||||
| 		var ie = has("ie"); | ||||
| 		if(ie && !geom.isBodyLtr(doc)){ | ||||
| 			var qk = has("quirks"), | ||||
| 				de = qk ? win.body(doc) : doc.documentElement, | ||||
| 				pwin = win.global;	// TODO: use winUtils.get(doc) after resolving circular dependency b/w dom-geometry.js and dojo/window.js | ||||
| 			if(ie == 6 && !qk && pwin.frameElement && de.scrollHeight > de.clientHeight){ | ||||
| 				scrollLeft += de.clientLeft; // workaround ie6+strict+rtl+iframe+vertical-scrollbar bug where clientWidth is too small by clientLeft pixels | ||||
| 			} | ||||
| 			return (ie < 8 || qk) ? (scrollLeft + de.clientWidth - de.scrollWidth) : -scrollLeft; // Integer | ||||
| 		} | ||||
| 		return scrollLeft; // Integer | ||||
| 	}; | ||||
|  | ||||
| 	geom.position = function(/*DomNode*/ node, /*Boolean?*/ includeScroll){ | ||||
| 		// summary: | ||||
| 		//		Gets the position and size of the passed element relative to | ||||
| 		//		the viewport (if includeScroll==false), or relative to the | ||||
| 		//		document root (if includeScroll==true). | ||||
| 		// | ||||
| 		// description: | ||||
| 		//		Returns an object of the form: | ||||
| 		//		`{ x: 100, y: 300, w: 20, h: 15 }`. | ||||
| 		//		If includeScroll==true, the x and y values will include any | ||||
| 		//		document offsets that may affect the position relative to the | ||||
| 		//		viewport. | ||||
| 		//		Uses the border-box model (inclusive of border and padding but | ||||
| 		//		not margin).  Does not act as a setter. | ||||
| 		// node: DOMNode|String | ||||
| 		// includeScroll: Boolean? | ||||
| 		// returns: Object | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var	db = win.body(node.ownerDocument), | ||||
| 			ret = node.getBoundingClientRect(); | ||||
| 		ret = {x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top}; | ||||
|  | ||||
| 		if(has("ie") < 9){ | ||||
| 			// On IE<9 there's a 2px offset that we need to adjust for, see dojo.getIeDocumentElementOffset() | ||||
| 			var offset = geom.getIeDocumentElementOffset(node.ownerDocument); | ||||
|  | ||||
| 			// fixes the position in IE, quirks mode | ||||
| 			ret.x -= offset.x + (has("quirks") ? db.clientLeft + db.offsetLeft : 0); | ||||
| 			ret.y -= offset.y + (has("quirks") ? db.clientTop + db.offsetTop : 0); | ||||
| 		} | ||||
|  | ||||
| 		// account for document scrolling | ||||
| 		// if offsetParent is used, ret value already includes scroll position | ||||
| 		// so we may have to actually remove that value if !includeScroll | ||||
| 		if(includeScroll){ | ||||
| 			var scroll = geom.docScroll(node.ownerDocument); | ||||
| 			ret.x += scroll.x; | ||||
| 			ret.y += scroll.y; | ||||
| 		} | ||||
|  | ||||
| 		return ret; // Object | ||||
| 	}; | ||||
|  | ||||
| 	// random "private" functions wildly used throughout the toolkit | ||||
|  | ||||
| 	geom.getMarginSize = function getMarginSize(/*DomNode*/ node, /*Object*/ computedStyle){ | ||||
| 		// summary: | ||||
| 		//		returns an object that encodes the width and height of | ||||
| 		//		the node's margin box | ||||
| 		// node: DOMNode|String | ||||
| 		// computedStyle: Object? | ||||
| 		//		This parameter accepts computed styles object. | ||||
| 		//		If this parameter is omitted, the functions will call | ||||
| 		//		dojo.getComputedStyle to get one. It is a better way, calling | ||||
| 		//		dojo.computedStyle once, and then pass the reference to this | ||||
| 		//		computedStyle parameter. Wherever possible, reuse the returned | ||||
| 		//		object of dojo/dom-style.getComputedStyle(). | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var me = geom.getMarginExtents(node, computedStyle || style.getComputedStyle(node)); | ||||
| 		var size = node.getBoundingClientRect(); | ||||
| 		return { | ||||
| 			w: (size.right - size.left) + me.w, | ||||
| 			h: (size.bottom - size.top) + me.h | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	geom.normalizeEvent = function(event){ | ||||
| 		// summary: | ||||
| 		//		Normalizes the geometry of a DOM event, normalizing the pageX, pageY, | ||||
| 		//		offsetX, offsetY, layerX, and layerX properties | ||||
| 		// event: Object | ||||
| 		if(!("layerX" in event)){ | ||||
| 			event.layerX = event.offsetX; | ||||
| 			event.layerY = event.offsetY; | ||||
| 		} | ||||
| 		if(!has("dom-addeventlistener")){ | ||||
| 			// old IE version | ||||
| 			// FIXME: scroll position query is duped from dojo.html to | ||||
| 			// avoid dependency on that entire module. Now that HTML is in | ||||
| 			// Base, we should convert back to something similar there. | ||||
| 			var se = event.target; | ||||
| 			var doc = (se && se.ownerDocument) || document; | ||||
| 			// DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used | ||||
| 			// here rather than document.body | ||||
| 			var docBody = has("quirks") ? doc.body : doc.documentElement; | ||||
| 			var offset = geom.getIeDocumentElementOffset(doc); | ||||
| 			event.pageX = event.clientX + geom.fixIeBiDiScrollLeft(docBody.scrollLeft || 0, doc) - offset.x; | ||||
| 			event.pageY = event.clientY + (docBody.scrollTop || 0) - offset.y; | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	// TODO: evaluate separate getters/setters for position and sizes? | ||||
|  | ||||
| 	return geom; | ||||
| }); | ||||
							
								
								
									
										180
									
								
								debian/missing-sources/dojo/dom-prop.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								debian/missing-sources/dojo/dom-prop.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,180 @@ | ||||
| define(["exports", "./_base/kernel", "./sniff", "./_base/lang", "./dom", "./dom-style", "./dom-construct", "./_base/connect"], | ||||
| 		function(exports, dojo, has, lang, dom, style, ctr, conn){ | ||||
| 	// module: | ||||
| 	//		dojo/dom-prop | ||||
| 	// summary: | ||||
| 	//		This module defines the core dojo DOM properties API. | ||||
|  | ||||
| 	// TODOC: summary not showing up in output, see https://github.com/csnover/js-doc-parse/issues/42 | ||||
|  | ||||
| 	// ============================= | ||||
| 	// Element properties Functions | ||||
| 	// ============================= | ||||
|  | ||||
| 	// helper to connect events | ||||
| 	var _evtHdlrMap = {}, _ctr = 0, _attrId = dojo._scopeName + "attrid"; | ||||
|  | ||||
| 	exports.names = { | ||||
| 		// properties renamed to avoid clashes with reserved words | ||||
| 		"class": "className", | ||||
| 		"for": "htmlFor", | ||||
| 		// properties written as camelCase | ||||
| 		tabindex: "tabIndex", | ||||
| 		readonly: "readOnly", | ||||
| 		colspan: "colSpan", | ||||
| 		frameborder: "frameBorder", | ||||
| 		rowspan: "rowSpan", | ||||
| 		valuetype: "valueType" | ||||
| 	}; | ||||
|  | ||||
| 	exports.get = function getProp(/*DOMNode|String*/ node, /*String*/ name){ | ||||
| 		// summary: | ||||
| 		//		Gets a property on an HTML element. | ||||
| 		// description: | ||||
| 		//		Handles normalized getting of properties on DOM nodes. | ||||
| 		// | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or reference to the element to get the property on | ||||
| 		// name: String | ||||
| 		//		the name of the property to get. | ||||
| 		// returns: | ||||
| 		//		the value of the requested property or its default value | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	|	// get the current value of the "foo" property on a node | ||||
| 		//	|	dojo.getProp(dojo.byId("nodeId"), "foo"); | ||||
| 		//	|	// or we can just pass the id: | ||||
| 		//	|	dojo.getProp("nodeId", "foo"); | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var lc = name.toLowerCase(), propName = exports.names[lc] || name; | ||||
| 		return node[propName];	// Anything | ||||
| 	}; | ||||
|  | ||||
| 	exports.set = function setProp(/*DOMNode|String*/ node, /*String|Object*/ name, /*String?*/ value){ | ||||
| 		// summary: | ||||
| 		//		Sets a property on an HTML element. | ||||
| 		// description: | ||||
| 		//		Handles normalized setting of properties on DOM nodes. | ||||
| 		// | ||||
| 		//		When passing functions as values, note that they will not be | ||||
| 		//		directly assigned to slots on the node, but rather the default | ||||
| 		//		behavior will be removed and the new behavior will be added | ||||
| 		//		using `dojo.connect()`, meaning that event handler properties | ||||
| 		//		will be normalized and that some caveats with regards to | ||||
| 		//		non-standard behaviors for onsubmit apply. Namely that you | ||||
| 		//		should cancel form submission using `dojo.stopEvent()` on the | ||||
| 		//		passed event object instead of returning a boolean value from | ||||
| 		//		the handler itself. | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or reference to the element to set the property on | ||||
| 		// name: String|Object | ||||
| 		//		the name of the property to set, or a hash object to set | ||||
| 		//		multiple properties at once. | ||||
| 		// value: String? | ||||
| 		//		The value to set for the property | ||||
| 		// returns: | ||||
| 		//		the DOM node | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	|	// use prop() to set the tab index | ||||
| 		//	|	dojo.setProp("nodeId", "tabIndex", 3); | ||||
| 		//	| | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	Set multiple values at once, including event handlers: | ||||
| 		//	|	dojo.setProp("formId", { | ||||
| 		//	|		"foo": "bar", | ||||
| 		//	|		"tabIndex": -1, | ||||
| 		//	|		"method": "POST", | ||||
| 		//	|		"onsubmit": function(e){ | ||||
| 		//	|			// stop submitting the form. Note that the IE behavior | ||||
| 		//	|			// of returning true or false will have no effect here | ||||
| 		//	|			// since our handler is connect()ed to the built-in | ||||
| 		//	|			// onsubmit behavior and so we need to use | ||||
| 		//	|			// dojo.stopEvent() to ensure that the submission | ||||
| 		//	|			// doesn't proceed. | ||||
| 		//	|			dojo.stopEvent(e); | ||||
| 		//	| | ||||
| 		//	|			// submit the form with Ajax | ||||
| 		//	|			dojo.xhrPost({ form: "formId" }); | ||||
| 		//	|		} | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	Style is s special case: Only set with an object hash of styles | ||||
| 		//	|	dojo.setProp("someNode",{ | ||||
| 		//	|		id:"bar", | ||||
| 		//	|		style:{ | ||||
| 		//	|			width:"200px", height:"100px", color:"#000" | ||||
| 		//	|		} | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	Again, only set style as an object hash of styles: | ||||
| 		//	|	var obj = { color:"#fff", backgroundColor:"#000" }; | ||||
| 		//	|	dojo.setProp("someNode", "style", obj); | ||||
| 		//	| | ||||
| 		//	|	// though shorter to use `dojo.style()` in this case: | ||||
| 		//	|	dojo.style("someNode", obj); | ||||
|  | ||||
| 		node = dom.byId(node); | ||||
| 		var l = arguments.length; | ||||
| 		if(l == 2 && typeof name != "string"){ // inline'd type check | ||||
| 			// the object form of setter: the 2nd argument is a dictionary | ||||
| 			for(var x in name){ | ||||
| 				exports.set(node, x, name[x]); | ||||
| 			} | ||||
| 			return node; // DomNode | ||||
| 		} | ||||
| 		var lc = name.toLowerCase(), propName = exports.names[lc] || name; | ||||
| 		if(propName == "style" && typeof value != "string"){ // inline'd type check | ||||
| 			// special case: setting a style | ||||
| 			style.set(node, value); | ||||
| 			return node; // DomNode | ||||
| 		} | ||||
| 		if(propName == "innerHTML"){ | ||||
| 			// special case: assigning HTML | ||||
| 			// the hash lists elements with read-only innerHTML on IE | ||||
| 			if(has("ie") && node.tagName.toLowerCase() in {col: 1, colgroup: 1, | ||||
| 						table: 1, tbody: 1, tfoot: 1, thead: 1, tr: 1, title: 1}){ | ||||
| 				ctr.empty(node); | ||||
| 				node.appendChild(ctr.toDom(value, node.ownerDocument)); | ||||
| 			}else{ | ||||
| 				node[propName] = value; | ||||
| 			} | ||||
| 			return node; // DomNode | ||||
| 		} | ||||
| 		if(lang.isFunction(value)){ | ||||
| 			// special case: assigning an event handler | ||||
| 			// clobber if we can | ||||
| 			var attrId = node[_attrId]; | ||||
| 			if(!attrId){ | ||||
| 				attrId = _ctr++; | ||||
| 				node[_attrId] = attrId; | ||||
| 			} | ||||
| 			if(!_evtHdlrMap[attrId]){ | ||||
| 				_evtHdlrMap[attrId] = {}; | ||||
| 			} | ||||
| 			var h = _evtHdlrMap[attrId][propName]; | ||||
| 			if(h){ | ||||
| 				//h.remove(); | ||||
| 				conn.disconnect(h); | ||||
| 			}else{ | ||||
| 				try{ | ||||
| 					delete node[propName]; | ||||
| 				}catch(e){} | ||||
| 			} | ||||
| 			// ensure that event objects are normalized, etc. | ||||
| 			if(value){ | ||||
| 				//_evtHdlrMap[attrId][propName] = on(node, propName, value); | ||||
| 				_evtHdlrMap[attrId][propName] = conn.connect(node, propName, value); | ||||
| 			}else{ | ||||
| 				node[propName] = null; | ||||
| 			} | ||||
| 			return node; // DomNode | ||||
| 		} | ||||
| 		node[propName] = value; | ||||
| 		return node;	// DomNode | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										312
									
								
								debian/missing-sources/dojo/dom-style.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										312
									
								
								debian/missing-sources/dojo/dom-style.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,312 @@ | ||||
| define(["./sniff", "./dom"], function(has, dom){ | ||||
| 	// module: | ||||
| 	//		dojo/dom-style | ||||
|  | ||||
| 	// ============================= | ||||
| 	// Style Functions | ||||
| 	// ============================= | ||||
|  | ||||
| 	// getComputedStyle drives most of the style code. | ||||
| 	// Wherever possible, reuse the returned object. | ||||
| 	// | ||||
| 	// API functions below that need to access computed styles accept an | ||||
| 	// optional computedStyle parameter. | ||||
| 	// If this parameter is omitted, the functions will call getComputedStyle themselves. | ||||
| 	// This way, calling code can access computedStyle once, and then pass the reference to | ||||
| 	// multiple API functions. | ||||
|  | ||||
| 	// Although we normally eschew argument validation at this | ||||
| 	// level, here we test argument 'node' for (duck)type, | ||||
| 	// by testing nodeType, ecause 'document' is the 'parentNode' of 'body' | ||||
| 	// it is frequently sent to this function even | ||||
| 	// though it is not Element. | ||||
| 	var getComputedStyle, style = { | ||||
| 		// summary: | ||||
| 		//		This module defines the core dojo DOM style API. | ||||
| 	}; | ||||
| 	if(has("webkit")){ | ||||
| 		getComputedStyle = function(/*DomNode*/ node){ | ||||
| 			var s; | ||||
| 			if(node.nodeType == 1){ | ||||
| 				var dv = node.ownerDocument.defaultView; | ||||
| 				s = dv.getComputedStyle(node, null); | ||||
| 				if(!s && node.style){ | ||||
| 					node.style.display = ""; | ||||
| 					s = dv.getComputedStyle(node, null); | ||||
| 				} | ||||
| 			} | ||||
| 			return s || {}; | ||||
| 		}; | ||||
| 	}else if(has("ie") && (has("ie") < 9 || has("quirks"))){ | ||||
| 		getComputedStyle = function(node){ | ||||
| 			// IE (as of 7) doesn't expose Element like sane browsers | ||||
| 			// currentStyle can be null on IE8! | ||||
| 			return node.nodeType == 1 /* ELEMENT_NODE*/ && node.currentStyle ? node.currentStyle : {}; | ||||
| 		}; | ||||
| 	}else{ | ||||
| 		getComputedStyle = function(node){ | ||||
| 			return node.nodeType == 1 /* ELEMENT_NODE*/ ? | ||||
| 				node.ownerDocument.defaultView.getComputedStyle(node, null) : {}; | ||||
| 		}; | ||||
| 	} | ||||
| 	style.getComputedStyle = getComputedStyle; | ||||
| 	/*===== | ||||
| 	style.getComputedStyle = function(node){ | ||||
| 		// summary: | ||||
| 		//		Returns a "computed style" object. | ||||
| 		// | ||||
| 		// description: | ||||
| 		//		Gets a "computed style" object which can be used to gather | ||||
| 		//		information about the current state of the rendered node. | ||||
| 		// | ||||
| 		//		Note that this may behave differently on different browsers. | ||||
| 		//		Values may have different formats and value encodings across | ||||
| 		//		browsers. | ||||
| 		// | ||||
| 		//		Note also that this method is expensive.  Wherever possible, | ||||
| 		//		reuse the returned object. | ||||
| 		// | ||||
| 		//		Use the dojo.style() method for more consistent (pixelized) | ||||
| 		//		return values. | ||||
| 		// | ||||
| 		// node: DOMNode | ||||
| 		//		A reference to a DOM node. Does NOT support taking an | ||||
| 		//		ID string for speed reasons. | ||||
| 		// example: | ||||
| 		//	|	dojo.getComputedStyle(dojo.byId('foo')).borderWidth; | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Reusing the returned object, avoiding multiple lookups: | ||||
| 		//	|	var cs = dojo.getComputedStyle(dojo.byId("someNode")); | ||||
| 		//	|	var w = cs.width, h = cs.height; | ||||
| 		return; // CSS2Properties | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
| 	var toPixel; | ||||
| 	if(!has("ie")){ | ||||
| 		toPixel = function(element, value){ | ||||
| 			// style values can be floats, client code may want | ||||
| 			// to round for integer pixels. | ||||
| 			return parseFloat(value) || 0; | ||||
| 		}; | ||||
| 	}else{ | ||||
| 		toPixel = function(element, avalue){ | ||||
| 			if(!avalue){ return 0; } | ||||
| 			// on IE7, medium is usually 4 pixels | ||||
| 			if(avalue == "medium"){ return 4; } | ||||
| 			// style values can be floats, client code may | ||||
| 			// want to round this value for integer pixels. | ||||
| 			if(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); } | ||||
| 			var s = element.style, rs = element.runtimeStyle, cs = element.currentStyle, | ||||
| 				sLeft = s.left, rsLeft = rs.left; | ||||
| 			rs.left = cs.left; | ||||
| 			try{ | ||||
| 				// 'avalue' may be incompatible with style.left, which can cause IE to throw | ||||
| 				// this has been observed for border widths using "thin", "medium", "thick" constants | ||||
| 				// those particular constants could be trapped by a lookup | ||||
| 				// but perhaps there are more | ||||
| 				s.left = avalue; | ||||
| 				avalue = s.pixelLeft; | ||||
| 			}catch(e){ | ||||
| 				avalue = 0; | ||||
| 			} | ||||
| 			s.left = sLeft; | ||||
| 			rs.left = rsLeft; | ||||
| 			return avalue; | ||||
| 		}; | ||||
| 	} | ||||
| 	style.toPixelValue = toPixel; | ||||
| 	/*===== | ||||
| 	style.toPixelValue = function(node, value){ | ||||
| 		// summary: | ||||
| 		//		converts style value to pixels on IE or return a numeric value. | ||||
| 		// node: DOMNode | ||||
| 		// value: String | ||||
| 		// returns: Number | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
| 	// FIXME: there opacity quirks on FF that we haven't ported over. Hrm. | ||||
|  | ||||
| 	var astr = "DXImageTransform.Microsoft.Alpha"; | ||||
| 	var af = function(n, f){ | ||||
| 		try{ | ||||
| 			return n.filters.item(astr); | ||||
| 		}catch(e){ | ||||
| 			return f ? {} : null; | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	var _getOpacity = | ||||
| 		has("ie") < 9 || (has("ie") < 10 && has("quirks")) ? function(node){ | ||||
| 			try{ | ||||
| 				return af(node).Opacity / 100; // Number | ||||
| 			}catch(e){ | ||||
| 				return 1; // Number | ||||
| 			} | ||||
| 		} : | ||||
| 		function(node){ | ||||
| 			return getComputedStyle(node).opacity; | ||||
| 		}; | ||||
|  | ||||
| 	var _setOpacity = | ||||
| 		has("ie") < 9 || (has("ie") < 10 && has("quirks")) ? function(/*DomNode*/ node, /*Number*/ opacity){ | ||||
| 			if(opacity === ""){ opacity = 1; } | ||||
| 			var ov = opacity * 100, fullyOpaque = opacity === 1; | ||||
|  | ||||
| 			// on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661), | ||||
| 			// but still update the opacity value so we can get a correct reading if it is read later: | ||||
| 			// af(node, 1).Enabled = !fullyOpaque; | ||||
|  | ||||
| 			if(fullyOpaque){ | ||||
| 				node.style.zoom = ""; | ||||
| 				if(af(node)){ | ||||
| 					node.style.filter = node.style.filter.replace( | ||||
| 						new RegExp("\\s*progid:" + astr + "\\([^\\)]+?\\)", "i"), ""); | ||||
| 				} | ||||
| 			}else{ | ||||
| 				node.style.zoom = 1; | ||||
| 				if(af(node)){ | ||||
| 					af(node, 1).Opacity = ov; | ||||
| 				}else{ | ||||
| 					node.style.filter += " progid:" + astr + "(Opacity=" + ov + ")"; | ||||
| 				} | ||||
| 				af(node, 1).Enabled = true; | ||||
| 			} | ||||
|  | ||||
| 			if(node.tagName.toLowerCase() == "tr"){ | ||||
| 				for(var td = node.firstChild; td; td = td.nextSibling){ | ||||
| 					if(td.tagName.toLowerCase() == "td"){ | ||||
| 						_setOpacity(td, opacity); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			return opacity; | ||||
| 		} : | ||||
| 		function(node, opacity){ | ||||
| 			return node.style.opacity = opacity; | ||||
| 		}; | ||||
|  | ||||
| 	var _pixelNamesCache = { | ||||
| 		left: true, top: true | ||||
| 	}; | ||||
| 	var _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border | ||||
| 	function _toStyleValue(node, type, value){ | ||||
| 		//TODO: should we really be doing string case conversion here? Should we cache it? Need to profile! | ||||
| 		type = type.toLowerCase(); | ||||
| 		if(has("ie")){ | ||||
| 			if(value == "auto"){ | ||||
| 				if(type == "height"){ return node.offsetHeight; } | ||||
| 				if(type == "width"){ return node.offsetWidth; } | ||||
| 			} | ||||
| 			if(type == "fontweight"){ | ||||
| 				switch(value){ | ||||
| 					case 700: return "bold"; | ||||
| 					case 400: | ||||
| 					default: return "normal"; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if(!(type in _pixelNamesCache)){ | ||||
| 			_pixelNamesCache[type] = _pixelRegExp.test(type); | ||||
| 		} | ||||
| 		return _pixelNamesCache[type] ? toPixel(node, value) : value; | ||||
| 	} | ||||
|  | ||||
| 	var _floatAliases = {cssFloat: 1, styleFloat: 1, "float": 1}; | ||||
|  | ||||
| 	// public API | ||||
|  | ||||
| 	style.get = function getStyle(/*DOMNode|String*/ node, /*String?*/ name){ | ||||
| 		// summary: | ||||
| 		//		Accesses styles on a node. | ||||
| 		// description: | ||||
| 		//		Getting the style value uses the computed style for the node, so the value | ||||
| 		//		will be a calculated value, not just the immediate node.style value. | ||||
| 		//		Also when getting values, use specific style names, | ||||
| 		//		like "borderBottomWidth" instead of "border" since compound values like | ||||
| 		//		"border" are not necessarily reflected as expected. | ||||
| 		//		If you want to get node dimensions, use `dojo.marginBox()`, | ||||
| 		//		`dojo.contentBox()` or `dojo.position()`. | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or reference to node to get style for | ||||
| 		// name: String? | ||||
| 		//		the style property to get | ||||
| 		// example: | ||||
| 		//		Passing only an ID or node returns the computed style object of | ||||
| 		//		the node: | ||||
| 		//	|	dojo.getStyle("thinger"); | ||||
| 		// example: | ||||
| 		//		Passing a node and a style property returns the current | ||||
| 		//		normalized, computed value for that property: | ||||
| 		//	|	dojo.getStyle("thinger", "opacity"); // 1 by default | ||||
|  | ||||
| 		var n = dom.byId(node), l = arguments.length, op = (name == "opacity"); | ||||
| 		if(l == 2 && op){ | ||||
| 			return _getOpacity(n); | ||||
| 		} | ||||
| 		name = _floatAliases[name] ? "cssFloat" in n.style ? "cssFloat" : "styleFloat" : name; | ||||
| 		var s = style.getComputedStyle(n); | ||||
| 		return (l == 1) ? s : _toStyleValue(n, name, s[name] || n.style[name]); /* CSS2Properties||String||Number */ | ||||
| 	}; | ||||
|  | ||||
| 	style.set = function setStyle(/*DOMNode|String*/ node, /*String|Object*/ name, /*String?*/ value){ | ||||
| 		// summary: | ||||
| 		//		Sets styles on a node. | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or reference to node to set style for | ||||
| 		// name: String|Object | ||||
| 		//		the style property to set in DOM-accessor format | ||||
| 		//		("borderWidth", not "border-width") or an object with key/value | ||||
| 		//		pairs suitable for setting each property. | ||||
| 		// value: String? | ||||
| 		//		If passed, sets value on the node for style, handling | ||||
| 		//		cross-browser concerns.  When setting a pixel value, | ||||
| 		//		be sure to include "px" in the value. For instance, top: "200px". | ||||
| 		//		Otherwise, in some cases, some browsers will not apply the style. | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Passing a node, a style property, and a value changes the | ||||
| 		//		current display of the node and returns the new computed value | ||||
| 		//	|	dojo.setStyle("thinger", "opacity", 0.5); // == 0.5 | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node: | ||||
| 		//	|	dojo.setStyle("thinger", { | ||||
| 		//	|		"opacity": 0.5, | ||||
| 		//	|		"border": "3px solid black", | ||||
| 		//	|		"height": "300px" | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		When the CSS style property is hyphenated, the JavaScript property is camelCased. | ||||
| 		//		font-size becomes fontSize, and so on. | ||||
| 		//	|	dojo.setStyle("thinger",{ | ||||
| 		//	|		fontSize:"14pt", | ||||
| 		//	|		letterSpacing:"1.2em" | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		dojo/NodeList implements .style() using the same syntax, omitting the "node" parameter, calling | ||||
| 		//		dojo.style() on every element of the list. See: `dojo.query()` and `dojo/NodeList` | ||||
| 		//	|	dojo.query(".someClassName").style("visibility","hidden"); | ||||
| 		//	|	// or | ||||
| 		//	|	dojo.query("#baz > div").style({ | ||||
| 		//	|		opacity:0.75, | ||||
| 		//	|		fontSize:"13pt" | ||||
| 		//	|	}); | ||||
|  | ||||
| 		var n = dom.byId(node), l = arguments.length, op = (name == "opacity"); | ||||
| 		name = _floatAliases[name] ? "cssFloat" in n.style ? "cssFloat" : "styleFloat" : name; | ||||
| 		if(l == 3){ | ||||
| 			return op ? _setOpacity(n, value) : n.style[name] = value; // Number | ||||
| 		} | ||||
| 		for(var x in name){ | ||||
| 			style.set(node, x, name[x]); | ||||
| 		} | ||||
| 		return style.getComputedStyle(n); | ||||
| 	}; | ||||
|  | ||||
| 	return style; | ||||
| }); | ||||
							
								
								
									
										185
									
								
								debian/missing-sources/dojo/dom.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								debian/missing-sources/dojo/dom.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,185 @@ | ||||
| define(["./sniff", "./_base/window"], | ||||
| 		function(has, win){ | ||||
| 	// module: | ||||
| 	//		dojo/dom | ||||
|  | ||||
| 	// FIXME: need to add unit tests for all the semi-public methods | ||||
|  | ||||
| 	if(has("ie") <= 7){ | ||||
| 		try{ | ||||
| 			document.execCommand("BackgroundImageCache", false, true); | ||||
| 		}catch(e){ | ||||
| 			// sane browsers don't have cache "issues" | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// ============================= | ||||
| 	// DOM Functions | ||||
| 	// ============================= | ||||
|  | ||||
| 	// the result object | ||||
| 	var dom = { | ||||
| 		// summary: | ||||
| 		//		This module defines the core dojo DOM API. | ||||
| 	}; | ||||
|  | ||||
| 	if(has("ie")){ | ||||
| 		dom.byId = function(id, doc){ | ||||
| 			if(typeof id != "string"){ | ||||
| 				return id; | ||||
| 			} | ||||
| 			var _d = doc || win.doc, te = id && _d.getElementById(id); | ||||
| 			// attributes.id.value is better than just id in case the | ||||
| 			// user has a name=id inside a form | ||||
| 			if(te && (te.attributes.id.value == id || te.id == id)){ | ||||
| 				return te; | ||||
| 			}else{ | ||||
| 				var eles = _d.all[id]; | ||||
| 				if(!eles || eles.nodeName){ | ||||
| 					eles = [eles]; | ||||
| 				} | ||||
| 				// if more than 1, choose first with the correct id | ||||
| 				var i = 0; | ||||
| 				while((te = eles[i++])){ | ||||
| 					if((te.attributes && te.attributes.id && te.attributes.id.value == id) || te.id == id){ | ||||
| 						return te; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}; | ||||
| 	}else{ | ||||
| 		dom.byId = function(id, doc){ | ||||
| 			// inline'd type check. | ||||
| 			// be sure to return null per documentation, to match IE branch. | ||||
| 			return ((typeof id == "string") ? (doc || win.doc).getElementById(id) : id) || null; // DOMNode | ||||
| 		}; | ||||
| 	} | ||||
| 	/*===== | ||||
| 	 dom.byId = function(id, doc){ | ||||
| 		 // summary: | ||||
| 		 //		Returns DOM node with matching `id` attribute or falsy value (ex: null or undefined) | ||||
| 		 //		if not found.  If `id` is a DomNode, this function is a no-op. | ||||
| 		 // | ||||
| 		 // id: String|DOMNode | ||||
| 		 //		A string to match an HTML id attribute or a reference to a DOM Node | ||||
| 		 // | ||||
| 		 // doc: Document? | ||||
| 		 //		Document to work in. Defaults to the current value of | ||||
| 		 //		dojo.doc.  Can be used to retrieve | ||||
| 		 //		node references from other documents. | ||||
| 		 // | ||||
| 		 // example: | ||||
| 		 //		Look up a node by ID: | ||||
| 		 //	|	var n = dojo.byId("foo"); | ||||
| 		 // | ||||
| 		 // example: | ||||
| 		 //		Check if a node exists, and use it. | ||||
| 		 //	|	var n = dojo.byId("bar"); | ||||
| 		 //	|	if(n){ doStuff() ... } | ||||
| 		 // | ||||
| 		 // example: | ||||
| 		 //		Allow string or DomNode references to be passed to a custom function: | ||||
| 		 //	|	var foo = function(nodeOrId){ | ||||
| 		 //	|		nodeOrId = dojo.byId(nodeOrId); | ||||
| 		 //	|		// ... more stuff | ||||
| 		 //	|	} | ||||
| 	 }; | ||||
| 	 =====*/ | ||||
|  | ||||
| 	dom.isDescendant = function(/*DOMNode|String*/ node, /*DOMNode|String*/ ancestor){ | ||||
| 		// summary: | ||||
| 		//		Returns true if node is a descendant of ancestor | ||||
| 		// node: DOMNode|String | ||||
| 		//		string id or node reference to test | ||||
| 		// ancestor: DOMNode|String | ||||
| 		//		string id or node reference of potential parent to test against | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Test is node id="bar" is a descendant of node id="foo" | ||||
| 		//	|	if(dojo.isDescendant("bar", "foo")){ ... } | ||||
|  | ||||
| 		try{ | ||||
| 			node = dom.byId(node); | ||||
| 			ancestor = dom.byId(ancestor); | ||||
| 			while(node){ | ||||
| 				if(node == ancestor){ | ||||
| 					return true; // Boolean | ||||
| 				} | ||||
| 				node = node.parentNode; | ||||
| 			} | ||||
| 		}catch(e){ /* squelch, return false */ } | ||||
| 		return false; // Boolean | ||||
| 	}; | ||||
|  | ||||
|  | ||||
| 	// TODO: do we need setSelectable in the base? | ||||
|  | ||||
| 	// Add feature test for user-select CSS property | ||||
| 	// (currently known to work in all but IE < 10 and Opera) | ||||
| 	has.add("css-user-select", function(global, doc, element){ | ||||
| 		// Avoid exception when dom.js is loaded in non-browser environments | ||||
| 		if(!element){ return false; } | ||||
| 		 | ||||
| 		var style = element.style; | ||||
| 		var prefixes = ["Khtml", "O", "ms", "Moz", "Webkit"], | ||||
| 			i = prefixes.length, | ||||
| 			name = "userSelect", | ||||
| 			prefix; | ||||
|  | ||||
| 		// Iterate prefixes from most to least likely | ||||
| 		do{ | ||||
| 			if(typeof style[name] !== "undefined"){ | ||||
| 				// Supported; return property name | ||||
| 				return name; | ||||
| 			} | ||||
| 		}while(i-- && (name = prefixes[i] + "UserSelect")); | ||||
|  | ||||
| 		// Not supported if we didn't return before now | ||||
| 		return false; | ||||
| 	}); | ||||
|  | ||||
| 	/*===== | ||||
| 	dom.setSelectable = function(node, selectable){ | ||||
| 		// summary: | ||||
| 		//		Enable or disable selection on a node | ||||
| 		// node: DOMNode|String | ||||
| 		//		id or reference to node | ||||
| 		// selectable: Boolean | ||||
| 		//		state to put the node in. false indicates unselectable, true | ||||
| 		//		allows selection. | ||||
| 		// example: | ||||
| 		//		Make the node id="bar" unselectable | ||||
| 		//	|	dojo.setSelectable("bar"); | ||||
| 		// example: | ||||
| 		//		Make the node id="bar" selectable | ||||
| 		//	|	dojo.setSelectable("bar", true); | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
| 	var cssUserSelect = has("css-user-select"); | ||||
| 	dom.setSelectable = cssUserSelect ? function(node, selectable){ | ||||
| 		// css-user-select returns a (possibly vendor-prefixed) CSS property name | ||||
| 		dom.byId(node).style[cssUserSelect] = selectable ? "" : "none"; | ||||
| 	} : function(node, selectable){ | ||||
| 		node = dom.byId(node); | ||||
|  | ||||
| 		// (IE < 10 / Opera) Fall back to setting/removing the | ||||
| 		// unselectable attribute on the element and all its children | ||||
| 		var nodes = node.getElementsByTagName("*"), | ||||
| 			i = nodes.length; | ||||
|  | ||||
| 		if(selectable){ | ||||
| 			node.removeAttribute("unselectable"); | ||||
| 			while(i--){ | ||||
| 				nodes[i].removeAttribute("unselectable"); | ||||
| 			} | ||||
| 		}else{ | ||||
| 			node.setAttribute("unselectable", "on"); | ||||
| 			while(i--){ | ||||
| 				nodes[i].setAttribute("unselectable", "on"); | ||||
| 			} | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	return dom; | ||||
| }); | ||||
							
								
								
									
										124
									
								
								debian/missing-sources/dojo/domReady.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								debian/missing-sources/dojo/domReady.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,124 @@ | ||||
| define(['./has'], function(has){ | ||||
| 	var global = this, | ||||
| 		doc = document, | ||||
| 		readyStates = { 'loaded': 1, 'complete': 1 }, | ||||
| 		fixReadyState = typeof doc.readyState != "string", | ||||
| 		ready = !!readyStates[doc.readyState], | ||||
| 		readyQ = [], | ||||
| 		recursiveGuard; | ||||
|  | ||||
| 	function domReady(callback){ | ||||
| 		// summary: | ||||
| 		//		Plugin to delay require()/define() callback from firing until the DOM has finished loading. | ||||
| 		readyQ.push(callback); | ||||
| 		if(ready){ processQ(); } | ||||
| 	} | ||||
| 	domReady.load = function(id, req, load){ | ||||
| 		domReady(load); | ||||
| 	}; | ||||
|  | ||||
| 	// Export queue so that ready() can check if it's empty or not. | ||||
| 	domReady._Q = readyQ; | ||||
| 	domReady._onQEmpty = function(){ | ||||
| 		// summary: | ||||
| 		//		Private method overridden by dojo/ready, to notify when everything in the | ||||
| 		//		domReady queue has been processed.  Do not use directly. | ||||
| 		//		Will be removed in 2.0, along with domReady._Q. | ||||
| 	}; | ||||
|  | ||||
| 	// For FF <= 3.5 | ||||
| 	if(fixReadyState){ doc.readyState = "loading"; } | ||||
|  | ||||
| 	function processQ(){ | ||||
| 		// Calls all functions in the queue in order, unless processQ() is already running, in which case just return | ||||
|  | ||||
| 		if(recursiveGuard){ return; } | ||||
| 		recursiveGuard = true; | ||||
|  | ||||
| 		while(readyQ.length){ | ||||
| 			try{ | ||||
| 				(readyQ.shift())(doc); | ||||
| 			}catch(err){ | ||||
| 				console.log("Error on domReady callback: " + err); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		recursiveGuard = false; | ||||
|  | ||||
| 		// Notification for dojo/ready.  Remove for 2.0. | ||||
| 		// Note that this could add more tasks to the ready queue. | ||||
| 		domReady._onQEmpty(); | ||||
| 	} | ||||
|  | ||||
| 	if(!ready){ | ||||
| 		var tests = [], | ||||
| 			detectReady = function(evt){ | ||||
| 				evt = evt || global.event; | ||||
| 				if(ready || (evt.type == "readystatechange" && !readyStates[doc.readyState])){ return; } | ||||
|  | ||||
| 				// For FF <= 3.5 | ||||
| 				if(fixReadyState){ doc.readyState = "complete"; } | ||||
|  | ||||
| 				ready = 1; | ||||
| 				processQ(); | ||||
| 			}, | ||||
| 			on = function(node, event){ | ||||
| 				node.addEventListener(event, detectReady, false); | ||||
| 				readyQ.push(function(){ node.removeEventListener(event, detectReady, false); }); | ||||
| 			}; | ||||
|  | ||||
| 		if(!has("dom-addeventlistener")){ | ||||
| 			on = function(node, event){ | ||||
| 				event = "on" + event; | ||||
| 				node.attachEvent(event, detectReady); | ||||
| 				readyQ.push(function(){ node.detachEvent(event, detectReady); }); | ||||
| 			}; | ||||
|  | ||||
| 			var div = doc.createElement("div"); | ||||
| 			try{ | ||||
| 				if(div.doScroll && global.frameElement === null){ | ||||
| 					// the doScroll test is only useful if we're in the top-most frame | ||||
| 					tests.push(function(){ | ||||
| 						// Derived with permission from Diego Perini's IEContentLoaded | ||||
| 						// http://javascript.nwbox.com/IEContentLoaded/ | ||||
| 						try{ | ||||
| 							div.doScroll("left"); | ||||
| 							return 1; | ||||
| 						}catch(e){} | ||||
| 					}); | ||||
| 				} | ||||
| 			}catch(e){} | ||||
| 		} | ||||
|  | ||||
| 		on(doc, "DOMContentLoaded"); | ||||
| 		on(global, "load"); | ||||
|  | ||||
| 		if("onreadystatechange" in doc){ | ||||
| 			on(doc, "readystatechange"); | ||||
| 		}else if(!fixReadyState){ | ||||
| 			// if the ready state property exists and there's | ||||
| 			// no readystatechange event, poll for the state | ||||
| 			// to change | ||||
| 			tests.push(function(){ | ||||
| 				return readyStates[doc.readyState]; | ||||
| 			}); | ||||
| 		} | ||||
|  | ||||
| 		if(tests.length){ | ||||
| 			var poller = function(){ | ||||
| 				if(ready){ return; } | ||||
| 				var i = tests.length; | ||||
| 				while(i--){ | ||||
| 					if(tests[i]()){ | ||||
| 						detectReady("poller"); | ||||
| 						return; | ||||
| 					} | ||||
| 				} | ||||
| 				setTimeout(poller, 30); | ||||
| 			}; | ||||
| 			poller(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return domReady; | ||||
| }); | ||||
							
								
								
									
										13
									
								
								debian/missing-sources/dojo/errors/CancelError.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								debian/missing-sources/dojo/errors/CancelError.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| define(["./create"], function(create){ | ||||
| 	// module: | ||||
| 	//		dojo/errors/CancelError | ||||
|  | ||||
| 	/*===== | ||||
| 	return function(){ | ||||
| 		// summary: | ||||
| 		//		Default error if a promise is canceled without a reason. | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
| 	return create("CancelError", null, null, { dojoType: "cancel" }); | ||||
| }); | ||||
							
								
								
									
										41
									
								
								debian/missing-sources/dojo/errors/create.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								debian/missing-sources/dojo/errors/create.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| define(["../_base/lang"], function(lang){ | ||||
| 	return function(name, ctor, base, props){ | ||||
| 		base = base || Error; | ||||
|  | ||||
| 		var ErrorCtor = function(message){ | ||||
| 			if(base === Error){ | ||||
| 				if(Error.captureStackTrace){ | ||||
| 					Error.captureStackTrace(this, ErrorCtor); | ||||
| 				} | ||||
|  | ||||
| 				// Error.call() operates on the returned error | ||||
| 				// object rather than operating on |this| | ||||
| 				var err = Error.call(this, message), | ||||
| 					prop; | ||||
|  | ||||
| 				// Copy own properties from err to |this| | ||||
| 				for(prop in err){ | ||||
| 					if(err.hasOwnProperty(prop)){ | ||||
| 						this[prop] = err[prop]; | ||||
| 					} | ||||
| 				} | ||||
|  | ||||
| 				// messsage is non-enumerable in ES5 | ||||
| 				this.message = message; | ||||
| 				// stack is non-enumerable in at least Firefox | ||||
| 				this.stack = err.stack; | ||||
| 			}else{ | ||||
| 				base.apply(this, arguments); | ||||
| 			} | ||||
| 			if(ctor){ | ||||
| 				ctor.apply(this, arguments); | ||||
| 			} | ||||
| 		}; | ||||
|  | ||||
| 		ErrorCtor.prototype = lang.delegate(base.prototype, props); | ||||
| 		ErrorCtor.prototype.name = name; | ||||
| 		ErrorCtor.prototype.constructor = ErrorCtor; | ||||
|  | ||||
| 		return ErrorCtor; | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										173
									
								
								debian/missing-sources/dojo/has.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								debian/missing-sources/dojo/has.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,173 @@ | ||||
| define(["require", "module"], function(require, module){ | ||||
| 	// module: | ||||
| 	//		dojo/has | ||||
| 	// summary: | ||||
| 	//		Defines the has.js API and several feature tests used by dojo. | ||||
| 	// description: | ||||
| 	//		This module defines the has API as described by the project has.js with the following additional features: | ||||
| 	// | ||||
| 	//		- the has test cache is exposed at has.cache. | ||||
| 	//		- the method has.add includes a forth parameter that controls whether or not existing tests are replaced | ||||
| 	//		- the loader's has cache may be optionally copied into this module's has cahce. | ||||
| 	// | ||||
| 	//		This module adopted from https://github.com/phiggins42/has.js; thanks has.js team! | ||||
|  | ||||
| 	// try to pull the has implementation from the loader; both the dojo loader and bdLoad provide one | ||||
| 	// if using a foreign loader, then the has cache may be initialized via the config object for this module | ||||
| 	// WARNING: if a foreign loader defines require.has to be something other than the has.js API, then this implementation fail | ||||
| 	var has = require.has || function(){}; | ||||
| 	if(!has("dojo-has-api")){ | ||||
| 		var | ||||
| 			isBrowser = | ||||
| 				// the most fundamental decision: are we in the browser? | ||||
| 				typeof window != "undefined" && | ||||
| 				typeof location != "undefined" && | ||||
| 				typeof document != "undefined" && | ||||
| 				window.location == location && window.document == document, | ||||
|  | ||||
| 			// has API variables | ||||
| 			global = this, | ||||
| 			doc = isBrowser && document, | ||||
| 			element = doc && doc.createElement("DiV"), | ||||
| 			cache = (module.config && module.config()) || {}; | ||||
|  | ||||
| 		has = function(name){ | ||||
| 			// summary: | ||||
| 			//		Return the current value of the named feature. | ||||
| 			// | ||||
| 			// name: String|Integer | ||||
| 			//		The name (if a string) or identifier (if an integer) of the feature to test. | ||||
| 			// | ||||
| 			// description: | ||||
| 			//		Returns the value of the feature named by name. The feature must have been | ||||
| 			//		previously added to the cache by has.add. | ||||
|  | ||||
| 			return typeof cache[name] == "function" ? (cache[name] = cache[name](global, doc, element)) : cache[name]; // Boolean | ||||
| 		}; | ||||
|  | ||||
| 		has.cache = cache; | ||||
|  | ||||
| 		has.add = function(name, test, now, force){ | ||||
| 			// summary: | ||||
| 			//	 	Register a new feature test for some named feature. | ||||
| 			// name: String|Integer | ||||
| 			//	 	The name (if a string) or identifier (if an integer) of the feature to test. | ||||
| 			// test: Function | ||||
| 			//		 A test function to register. If a function, queued for testing until actually | ||||
| 			//		 needed. The test function should return a boolean indicating | ||||
| 			//	 	the presence of a feature or bug. | ||||
| 			// now: Boolean? | ||||
| 			//		 Optional. Omit if `test` is not a function. Provides a way to immediately | ||||
| 			//		 run the test and cache the result. | ||||
| 			// force: Boolean? | ||||
| 			//	 	Optional. If the test already exists and force is truthy, then the existing | ||||
| 			//	 	test will be replaced; otherwise, add does not replace an existing test (that | ||||
| 			//	 	is, by default, the first test advice wins). | ||||
| 			// example: | ||||
| 			//		A redundant test, testFn with immediate execution: | ||||
| 			//	|	has.add("javascript", function(){ return true; }, true); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Again with the redundantness. You can do this in your tests, but we should | ||||
| 			//		not be doing this in any internal has.js tests | ||||
| 			//	|	has.add("javascript", true); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		Three things are passed to the testFunction. `global`, `document`, and a generic element | ||||
| 			//		from which to work your test should the need arise. | ||||
| 			//	|	has.add("bug-byid", function(g, d, el){ | ||||
| 			//	|		// g	== global, typically window, yadda yadda | ||||
| 			//	|		// d	== document object | ||||
| 			//	|		// el == the generic element. a `has` element. | ||||
| 			//	|		return false; // fake test, byid-when-form-has-name-matching-an-id is slightly longer | ||||
| 			//	|	}); | ||||
|  | ||||
| 			(typeof cache[name]=="undefined" || force) && (cache[name]= test); | ||||
| 			return now && has(name); | ||||
| 		}; | ||||
|  | ||||
| 		// since we're operating under a loader that doesn't provide a has API, we must explicitly initialize | ||||
| 		// has as it would have otherwise been initialized by the dojo loader; use has.add to the builder | ||||
| 		// can optimize these away iff desired | ||||
| 		has.add("host-browser", isBrowser); | ||||
| 		has.add("dom", isBrowser); | ||||
| 		has.add("dojo-dom-ready-api", 1); | ||||
| 		has.add("dojo-sniff", 1); | ||||
| 	} | ||||
|  | ||||
| 	if(has("host-browser")){ | ||||
| 		// Common application level tests | ||||
| 		has.add("dom-addeventlistener", !!document.addEventListener); | ||||
| 		has.add("touch", "ontouchstart" in document || window.navigator.msMaxTouchPoints > 0); | ||||
| 		// I don't know if any of these tests are really correct, just a rough guess | ||||
| 		has.add("device-width", screen.availWidth || innerWidth); | ||||
|  | ||||
| 		// Tests for DOMNode.attributes[] behavior: | ||||
| 		//	 - dom-attributes-explicit - attributes[] only lists explicitly user specified attributes | ||||
| 		//	 - dom-attributes-specified-flag (IE8) - need to check attr.specified flag to skip attributes user didn't specify | ||||
| 		//	 - Otherwise, in IE6-7. attributes[] will list hundreds of values, so need to do outerHTML to get attrs instead. | ||||
| 		var form = document.createElement("form"); | ||||
| 		has.add("dom-attributes-explicit", form.attributes.length == 0); // W3C | ||||
| 		has.add("dom-attributes-specified-flag", form.attributes.length > 0 && form.attributes.length < 40);	// IE8 | ||||
| 	} | ||||
|  | ||||
| 	has.clearElement = function(element){ | ||||
| 		// summary: | ||||
| 		//	 Deletes the contents of the element passed to test functions. | ||||
| 		element.innerHTML= ""; | ||||
| 		return element; | ||||
| 	}; | ||||
|  | ||||
| 	has.normalize = function(id, toAbsMid){ | ||||
| 		// summary: | ||||
| 		//	 Resolves id into a module id based on possibly-nested tenary expression that branches on has feature test value(s). | ||||
| 		// | ||||
| 		// toAbsMid: Function | ||||
| 		//	 Resolves a relative module id into an absolute module id | ||||
| 		var | ||||
| 			tokens = id.match(/[\?:]|[^:\?]*/g), i = 0, | ||||
| 			get = function(skip){ | ||||
| 				var term = tokens[i++]; | ||||
| 				if(term == ":"){ | ||||
| 					// empty string module name, resolves to 0 | ||||
| 					return 0; | ||||
| 				}else{ | ||||
| 					// postfixed with a ? means it is a feature to branch on, the term is the name of the feature | ||||
| 					if(tokens[i++] == "?"){ | ||||
| 						if(!skip && has(term)){ | ||||
| 							// matched the feature, get the first value from the options | ||||
| 							return get(); | ||||
| 						}else{ | ||||
| 							// did not match, get the second value, passing over the first | ||||
| 							get(true); | ||||
| 							return get(skip); | ||||
| 						} | ||||
| 					} | ||||
| 					// a module | ||||
| 					return term || 0; | ||||
| 				} | ||||
| 			}; | ||||
| 		id = get(); | ||||
| 		return id && toAbsMid(id); | ||||
| 	}; | ||||
|  | ||||
| 	has.load = function(id, parentRequire, loaded){ | ||||
| 		// summary: | ||||
| 		//		Conditional loading of AMD modules based on a has feature test value. | ||||
| 		// id: String | ||||
| 		//		Gives the resolved module id to load. | ||||
| 		// parentRequire: Function | ||||
| 		//		The loader require function with respect to the module that contained the plugin resource in it's | ||||
| 		//		dependency list. | ||||
| 		// loaded: Function | ||||
| 		//	 Callback to loader that consumes result of plugin demand. | ||||
|  | ||||
| 		if(id){ | ||||
| 			parentRequire([id], loaded); | ||||
| 		}else{ | ||||
| 			loaded(); | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	return has; | ||||
| }); | ||||
							
								
								
									
										256
									
								
								debian/missing-sources/dojo/hash.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										256
									
								
								debian/missing-sources/dojo/hash.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,256 @@ | ||||
| define(["./_base/kernel", "require", "./_base/config", "./aspect", "./_base/lang", "./topic", "./domReady", "./sniff"], | ||||
| 	function(dojo, require, config, aspect, lang, topic, domReady, has){ | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/hash | ||||
|  | ||||
| 	dojo.hash = function(/* String? */ hash, /* Boolean? */ replace){ | ||||
| 		// summary: | ||||
| 		//		Gets or sets the hash string in the browser URL. | ||||
| 		// description: | ||||
| 		//		Handles getting and setting of location.hash. | ||||
| 		// | ||||
| 		//		 - If no arguments are passed, acts as a getter. | ||||
| 		//		 - If a string is passed, acts as a setter. | ||||
| 		// hash: | ||||
| 		//		the hash is set - #string. | ||||
| 		// replace: | ||||
| 		//		If true, updates the hash value in the current history | ||||
| 		//		state instead of creating a new history state. | ||||
| 		// returns: | ||||
| 		//		when used as a getter, returns the current hash string. | ||||
| 		//		when used as a setter, returns the new hash string. | ||||
| 		// example: | ||||
| 		//	|	topic.subscribe("/dojo/hashchange", context, callback); | ||||
| 		//	| | ||||
| 		//	|	function callback (hashValue){ | ||||
| 		//	|		// do something based on the hash value. | ||||
| 		//	|	} | ||||
|  | ||||
| 		// getter | ||||
| 		if(!arguments.length){ | ||||
| 			return _getHash(); | ||||
| 		} | ||||
| 		// setter | ||||
| 		if(hash.charAt(0) == "#"){ | ||||
| 			hash = hash.substring(1); | ||||
| 		} | ||||
| 		if(replace){ | ||||
| 			_replace(hash); | ||||
| 		}else{ | ||||
| 			location.href = "#" + hash; | ||||
| 		} | ||||
| 		return hash; // String | ||||
| 	}; | ||||
|  | ||||
| 	// Global vars | ||||
| 	var _recentHash, _ieUriMonitor, _connect, | ||||
| 		_pollFrequency = config.hashPollFrequency || 100; | ||||
|  | ||||
| 	//Internal functions | ||||
| 	function _getSegment(str, delimiter){ | ||||
| 		var i = str.indexOf(delimiter); | ||||
| 		return (i >= 0) ? str.substring(i+1) : ""; | ||||
| 	} | ||||
|  | ||||
| 	function _getHash(){ | ||||
| 		return _getSegment(location.href, "#"); | ||||
| 	} | ||||
|  | ||||
| 	function _dispatchEvent(){ | ||||
| 		topic.publish("/dojo/hashchange", _getHash()); | ||||
| 	} | ||||
|  | ||||
| 	function _pollLocation(){ | ||||
| 		if(_getHash() === _recentHash){ | ||||
| 			return; | ||||
| 		} | ||||
| 		_recentHash = _getHash(); | ||||
| 		_dispatchEvent(); | ||||
| 	} | ||||
|  | ||||
| 	function _replace(hash){ | ||||
| 		if(_ieUriMonitor){ | ||||
| 			if(_ieUriMonitor.isTransitioning()){ | ||||
| 				setTimeout(lang.hitch(null,_replace,hash), _pollFrequency); | ||||
| 				return; | ||||
| 			} | ||||
| 			var href = _ieUriMonitor.iframe.location.href; | ||||
| 			var index = href.indexOf('?'); | ||||
| 			// main frame will detect and update itself | ||||
| 			_ieUriMonitor.iframe.location.replace(href.substring(0, index) + "?" + hash); | ||||
| 			return; | ||||
| 		} | ||||
| 		location.replace("#"+hash); | ||||
| 		!_connect && _pollLocation(); | ||||
| 	} | ||||
|  | ||||
| 	function IEUriMonitor(){ | ||||
| 		// summary: | ||||
| 		//		Determine if the browser's URI has changed or if the user has pressed the | ||||
| 		//		back or forward button. If so, call _dispatchEvent. | ||||
| 		// | ||||
| 		// description: | ||||
| 		//		IE doesn't add changes to the URI's hash into the history unless the hash | ||||
| 		//		value corresponds to an actual named anchor in the document. To get around | ||||
| 		//		this IE difference, we use a background IFrame to maintain a back-forward | ||||
| 		//		history, by updating the IFrame's query string to correspond to the | ||||
| 		//		value of the main browser location's hash value. | ||||
| 		// | ||||
| 		//		E.g. if the value of the browser window's location changes to | ||||
| 		// | ||||
| 		//		#action=someAction | ||||
| 		// | ||||
| 		//		... then we'd update the IFrame's source to: | ||||
| 		// | ||||
| 		//		?action=someAction | ||||
| 		// | ||||
| 		//		This design leads to a somewhat complex state machine, which is | ||||
| 		//		described below: | ||||
| 		// | ||||
| 		//		####s1 | ||||
| 		// | ||||
| 		//		Stable state - neither the window's location has changed nor | ||||
| 		//		has the IFrame's location. Note that this is the 99.9% case, so | ||||
| 		//		we optimize for it. | ||||
| 		// | ||||
| 		//		Transitions: s1, s2, s3 | ||||
| 		// | ||||
| 		//		####s2 | ||||
| 		// | ||||
| 		//		Window's location changed - when a user clicks a hyperlink or | ||||
| 		//		code programmatically changes the window's URI. | ||||
| 		// | ||||
| 		//		Transitions: s4 | ||||
| 		// | ||||
| 		//		####s3 | ||||
| 		// | ||||
| 		//		Iframe's location changed as a result of user pressing back or | ||||
| 		//		forward - when the user presses back or forward, the location of | ||||
| 		//		the background's iframe changes to the previous or next value in | ||||
| 		//		its history. | ||||
| 		// | ||||
| 		//		Transitions: s1 | ||||
| 		// | ||||
| 		//		####s4 | ||||
| 		// | ||||
| 		//		IEUriMonitor has programmatically changed the location of the | ||||
| 		//		background iframe, but it's location hasn't yet changed. In this | ||||
| 		//		case we do nothing because we need to wait for the iframe's | ||||
| 		//		location to reflect its actual state. | ||||
| 		// | ||||
| 		//		Transitions: s4, s5 | ||||
| 		// | ||||
| 		//		####s5 | ||||
| 		// | ||||
| 		//		IEUriMonitor has programmatically changed the location of the | ||||
| 		//		background iframe, and the iframe's location has caught up with | ||||
| 		//		reality. In this case we need to transition to s1. | ||||
| 		// | ||||
| 		//		Transitions: s1 | ||||
| 		// | ||||
| 		//		The hashchange event is always dispatched on the transition back to s1. | ||||
|  | ||||
|  | ||||
| 		// create and append iframe | ||||
| 		var ifr = document.createElement("iframe"), | ||||
| 			IFRAME_ID = "dojo-hash-iframe", | ||||
| 			ifrSrc = config.dojoBlankHtmlUrl || require.toUrl("./resources/blank.html"); | ||||
|  | ||||
| 		if(config.useXDomain && !config.dojoBlankHtmlUrl){ | ||||
| 			console.warn("dojo.hash: When using cross-domain Dojo builds," | ||||
| 				+ " please save dojo/resources/blank.html to your domain and set djConfig.dojoBlankHtmlUrl" | ||||
| 				+ " to the path on your domain to blank.html"); | ||||
| 		} | ||||
|  | ||||
| 		ifr.id = IFRAME_ID; | ||||
| 		ifr.src = ifrSrc + "?" + _getHash(); | ||||
| 		ifr.style.display = "none"; | ||||
| 		document.body.appendChild(ifr); | ||||
|  | ||||
| 		this.iframe = dojo.global[IFRAME_ID]; | ||||
| 		var recentIframeQuery, transitioning, expectedIFrameQuery, docTitle, ifrOffline, | ||||
| 			iframeLoc = this.iframe.location; | ||||
|  | ||||
| 		function resetState(){ | ||||
| 			_recentHash = _getHash(); | ||||
| 			recentIframeQuery = ifrOffline ? _recentHash : _getSegment(iframeLoc.href, "?"); | ||||
| 			transitioning = false; | ||||
| 			expectedIFrameQuery = null; | ||||
| 		} | ||||
|  | ||||
| 		this.isTransitioning = function(){ | ||||
| 			return transitioning; | ||||
| 		}; | ||||
|  | ||||
| 		this.pollLocation = function(){ | ||||
| 			if(!ifrOffline){ | ||||
| 				try{ | ||||
| 					//see if we can access the iframe's location without a permission denied error | ||||
| 					var iframeSearch = _getSegment(iframeLoc.href, "?"); | ||||
| 					//good, the iframe is same origin (no thrown exception) | ||||
| 					if(document.title != docTitle){ //sync title of main window with title of iframe. | ||||
| 						docTitle = this.iframe.document.title = document.title; | ||||
| 					} | ||||
| 				}catch(e){ | ||||
| 					//permission denied - server cannot be reached. | ||||
| 					ifrOffline = true; | ||||
| 					console.error("dojo.hash: Error adding history entry. Server unreachable."); | ||||
| 				} | ||||
| 			} | ||||
| 			var hash = _getHash(); | ||||
| 			if(transitioning && _recentHash === hash){ | ||||
| 				// we're in an iframe transition (s4 or s5) | ||||
| 				if(ifrOffline || iframeSearch === expectedIFrameQuery){ | ||||
| 					// s5 (iframe caught up to main window or iframe offline), transition back to s1 | ||||
| 					resetState(); | ||||
| 					_dispatchEvent(); | ||||
| 				}else{ | ||||
| 					// s4 (waiting for iframe to catch up to main window) | ||||
| 					setTimeout(lang.hitch(this,this.pollLocation),0); | ||||
| 					return; | ||||
| 				} | ||||
| 			}else if(_recentHash === hash && (ifrOffline || recentIframeQuery === iframeSearch)){ | ||||
| 				// we're in stable state (s1, iframe query == main window hash), do nothing | ||||
| 			}else{ | ||||
| 				// the user has initiated a URL change somehow. | ||||
| 				// sync iframe query <-> main window hash | ||||
| 				if(_recentHash !== hash){ | ||||
| 					// s2 (main window location changed), set iframe url and transition to s4 | ||||
| 					_recentHash = hash; | ||||
| 					transitioning = true; | ||||
| 					expectedIFrameQuery = hash; | ||||
| 					ifr.src = ifrSrc + "?" + expectedIFrameQuery; | ||||
| 					ifrOffline = false; //we're updating the iframe src - set offline to false so we can check again on next poll. | ||||
| 					setTimeout(lang.hitch(this,this.pollLocation),0); //yielded transition to s4 while iframe reloads. | ||||
| 					return; | ||||
| 				}else if(!ifrOffline){ | ||||
| 					// s3 (iframe location changed via back/forward button), set main window url and transition to s1. | ||||
| 					location.href = "#" + iframeLoc.search.substring(1); | ||||
| 					resetState(); | ||||
| 					_dispatchEvent(); | ||||
| 				} | ||||
| 			} | ||||
| 			setTimeout(lang.hitch(this,this.pollLocation), _pollFrequency); | ||||
| 		}; | ||||
| 		resetState(); // initialize state (transition to s1) | ||||
| 		setTimeout(lang.hitch(this,this.pollLocation), _pollFrequency); | ||||
| 	} | ||||
| 	domReady(function(){ | ||||
| 		if("onhashchange" in dojo.global && (!has("ie") || (has("ie") >= 8 && document.compatMode != "BackCompat"))){	//need this IE browser test because "onhashchange" exists in IE8 in IE7 mode | ||||
| 			_connect = aspect.after(dojo.global,"onhashchange",_dispatchEvent, true); | ||||
| 		}else{ | ||||
| 			if(document.addEventListener){ // Non-IE | ||||
| 				_recentHash = _getHash(); | ||||
| 				setInterval(_pollLocation, _pollFrequency); //Poll the window location for changes | ||||
| 			}else if(document.attachEvent){ // IE7- | ||||
| 				//Use hidden iframe in versions of IE that don't have onhashchange event | ||||
| 				_ieUriMonitor = new IEUriMonitor(); | ||||
| 			} | ||||
| 			// else non-supported browser, do nothing. | ||||
| 		} | ||||
| 	}); | ||||
|  | ||||
| 	return dojo.hash; | ||||
|  | ||||
| }); | ||||
							
								
								
									
										97
									
								
								debian/missing-sources/dojo/io-query.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								debian/missing-sources/dojo/io-query.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| define(["./_base/lang"], function(lang){ | ||||
|  | ||||
| // module: | ||||
| //		dojo/io-query | ||||
|  | ||||
| var backstop = {}; | ||||
|  | ||||
| return { | ||||
| // summary: | ||||
| //		This module defines query string processing functions. | ||||
|  | ||||
| 	objectToQuery: function objectToQuery(/*Object*/ map){ | ||||
| 		// summary: | ||||
|         //		takes a name/value mapping object and returns a string representing | ||||
|         //		a URL-encoded version of that object. | ||||
|         // example: | ||||
|         //		this object: | ||||
|         // | ||||
|         //	|	{ | ||||
|         //	|		blah: "blah", | ||||
|         //	|		multi: [ | ||||
|         //	|			"thud", | ||||
|         //	|			"thonk" | ||||
|         //	|		] | ||||
|         //	|	}; | ||||
|         // | ||||
|         //		yields the following query string: | ||||
|         // | ||||
|         //	|	"blah=blah&multi=thud&multi=thonk" | ||||
|  | ||||
|         // FIXME: need to implement encodeAscii!! | ||||
|         var enc = encodeURIComponent, pairs = []; | ||||
|         for(var name in map){ | ||||
|             var value = map[name]; | ||||
|             if(value != backstop[name]){ | ||||
|                 var assign = enc(name) + "="; | ||||
|                 if(lang.isArray(value)){ | ||||
|                     for(var i = 0, l = value.length; i < l; ++i){ | ||||
|                         pairs.push(assign + enc(value[i])); | ||||
|                     } | ||||
|                 }else{ | ||||
|                     pairs.push(assign + enc(value)); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return pairs.join("&"); // String | ||||
|     }, | ||||
|  | ||||
| 	queryToObject: function queryToObject(/*String*/ str){ | ||||
|         // summary: | ||||
|         //		Create an object representing a de-serialized query section of a | ||||
|         //		URL. Query keys with multiple values are returned in an array. | ||||
|         // | ||||
|         // example: | ||||
|         //		This string: | ||||
|         // | ||||
|         //	|		"foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" | ||||
|         // | ||||
|         //		results in this object structure: | ||||
|         // | ||||
|         //	|		{ | ||||
|         //	|			foo: [ "bar", "baz" ], | ||||
|         //	|			thinger: " spaces =blah", | ||||
|         //	|			zonk: "blarg" | ||||
|         //	|		} | ||||
|         // | ||||
|         //		Note that spaces and other urlencoded entities are correctly | ||||
|         //		handled. | ||||
|  | ||||
|         // FIXME: should we grab the URL string if we're not passed one? | ||||
|         var dec = decodeURIComponent, qp = str.split("&"), ret = {}, name, val; | ||||
|         for(var i = 0, l = qp.length, item; i < l; ++i){ | ||||
|             item = qp[i]; | ||||
|             if(item.length){ | ||||
|                 var s = item.indexOf("="); | ||||
|                 if(s < 0){ | ||||
|                     name = dec(item); | ||||
|                     val = ""; | ||||
|                 }else{ | ||||
|                     name = dec(item.slice(0, s)); | ||||
|                     val  = dec(item.slice(s + 1)); | ||||
|                 } | ||||
|                 if(typeof ret[name] == "string"){ // inline'd type check | ||||
|                     ret[name] = [ret[name]]; | ||||
|                 } | ||||
|  | ||||
|                 if(lang.isArray(ret[name])){ | ||||
|                     ret[name].push(val); | ||||
|                 }else{ | ||||
|                     ret[name] = val; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return ret; // Object | ||||
|     } | ||||
| }; | ||||
| }); | ||||
							
								
								
									
										77
									
								
								debian/missing-sources/dojo/keys.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								debian/missing-sources/dojo/keys.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| define(["./_base/kernel", "./sniff"], function(dojo, has){ | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/keys | ||||
|  | ||||
| 	return dojo.keys = { | ||||
| 		// summary: | ||||
| 		//		Definitions for common key values.  Client code should test keyCode against these named constants, | ||||
| 		//		as the actual codes can vary by browser. | ||||
|  | ||||
| 		BACKSPACE: 8, | ||||
| 		TAB: 9, | ||||
| 		CLEAR: 12, | ||||
| 		ENTER: 13, | ||||
| 		SHIFT: 16, | ||||
| 		CTRL: 17, | ||||
| 		ALT: 18, | ||||
| 		META: has("webkit") ? 91 : 224,		// the apple key on macs | ||||
| 		PAUSE: 19, | ||||
| 		CAPS_LOCK: 20, | ||||
| 		ESCAPE: 27, | ||||
| 		SPACE: 32, | ||||
| 		PAGE_UP: 33, | ||||
| 		PAGE_DOWN: 34, | ||||
| 		END: 35, | ||||
| 		HOME: 36, | ||||
| 		LEFT_ARROW: 37, | ||||
| 		UP_ARROW: 38, | ||||
| 		RIGHT_ARROW: 39, | ||||
| 		DOWN_ARROW: 40, | ||||
| 		INSERT: 45, | ||||
| 		DELETE: 46, | ||||
| 		HELP: 47, | ||||
| 		LEFT_WINDOW: 91, | ||||
| 		RIGHT_WINDOW: 92, | ||||
| 		SELECT: 93, | ||||
| 		NUMPAD_0: 96, | ||||
| 		NUMPAD_1: 97, | ||||
| 		NUMPAD_2: 98, | ||||
| 		NUMPAD_3: 99, | ||||
| 		NUMPAD_4: 100, | ||||
| 		NUMPAD_5: 101, | ||||
| 		NUMPAD_6: 102, | ||||
| 		NUMPAD_7: 103, | ||||
| 		NUMPAD_8: 104, | ||||
| 		NUMPAD_9: 105, | ||||
| 		NUMPAD_MULTIPLY: 106, | ||||
| 		NUMPAD_PLUS: 107, | ||||
| 		NUMPAD_ENTER: 108, | ||||
| 		NUMPAD_MINUS: 109, | ||||
| 		NUMPAD_PERIOD: 110, | ||||
| 		NUMPAD_DIVIDE: 111, | ||||
| 		F1: 112, | ||||
| 		F2: 113, | ||||
| 		F3: 114, | ||||
| 		F4: 115, | ||||
| 		F5: 116, | ||||
| 		F6: 117, | ||||
| 		F7: 118, | ||||
| 		F8: 119, | ||||
| 		F9: 120, | ||||
| 		F10: 121, | ||||
| 		F11: 122, | ||||
| 		F12: 123, | ||||
| 		F13: 124, | ||||
| 		F14: 125, | ||||
| 		F15: 126, | ||||
| 		NUM_LOCK: 144, | ||||
| 		SCROLL_LOCK: 145, | ||||
| 		UP_DPAD: 175, | ||||
| 		DOWN_DPAD: 176, | ||||
| 		LEFT_DPAD: 177, | ||||
| 		RIGHT_DPAD: 178, | ||||
| 		// virtual key mapping | ||||
| 		copyKey: has("mac") && !has("air") ? (has("safari") ? 91 : 224 ) : 17 | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										171
									
								
								debian/missing-sources/dojo/mouse.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								debian/missing-sources/dojo/mouse.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,171 @@ | ||||
| define(["./_base/kernel", "./on", "./has", "./dom", "./_base/window"], function(dojo, on, has, dom, win){ | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/mouse | ||||
|  | ||||
|     has.add("dom-quirks", win.doc && win.doc.compatMode == "BackCompat"); | ||||
| 	has.add("events-mouseenter", win.doc && "onmouseenter" in win.doc.createElement("div")); | ||||
| 	has.add("events-mousewheel", win.doc && 'onmousewheel' in win.doc); | ||||
|  | ||||
| 	var mouseButtons; | ||||
| 	if((has("dom-quirks") && has("ie")) || !has("dom-addeventlistener")){ | ||||
| 		mouseButtons = { | ||||
| 			LEFT:   1, | ||||
| 			MIDDLE: 4, | ||||
| 			RIGHT:  2, | ||||
| 			// helper functions | ||||
| 			isButton: function(e, button){ return e.button & button; }, | ||||
| 			isLeft:   function(e){ return e.button & 1; }, | ||||
| 			isMiddle: function(e){ return e.button & 4; }, | ||||
| 			isRight:  function(e){ return e.button & 2; } | ||||
| 		}; | ||||
| 	}else{ | ||||
| 		mouseButtons = { | ||||
| 			LEFT:   0, | ||||
| 			MIDDLE: 1, | ||||
| 			RIGHT:  2, | ||||
| 			// helper functions | ||||
| 			isButton: function(e, button){ return e.button == button; }, | ||||
| 			isLeft:   function(e){ return e.button == 0; }, | ||||
| 			isMiddle: function(e){ return e.button == 1; }, | ||||
| 			isRight:  function(e){ return e.button == 2; } | ||||
| 		}; | ||||
| 	} | ||||
| 	dojo.mouseButtons = mouseButtons; | ||||
|  | ||||
| /*===== | ||||
| 	dojo.mouseButtons = { | ||||
| 		// LEFT: Number | ||||
| 		//		Numeric value of the left mouse button for the platform. | ||||
| 		LEFT:   0, | ||||
| 		// MIDDLE: Number | ||||
| 		//		Numeric value of the middle mouse button for the platform. | ||||
| 		MIDDLE: 1, | ||||
| 		// RIGHT: Number | ||||
| 		//		Numeric value of the right mouse button for the platform. | ||||
| 		RIGHT:  2, | ||||
|  | ||||
| 		isButton: function(e, button){ | ||||
| 			// summary: | ||||
| 			//		Checks an event object for a pressed button | ||||
| 			// e: Event | ||||
| 			//		Event object to examine | ||||
| 			// button: Number | ||||
| 			//		The button value (example: dojo.mouseButton.LEFT) | ||||
| 			return e.button == button; // Boolean | ||||
| 		}, | ||||
| 		isLeft: function(e){ | ||||
| 			// summary: | ||||
| 			//		Checks an event object for the pressed left button | ||||
| 			// e: Event | ||||
| 			//		Event object to examine | ||||
| 			return e.button == 0; // Boolean | ||||
| 		}, | ||||
| 		isMiddle: function(e){ | ||||
| 			// summary: | ||||
| 			//		Checks an event object for the pressed middle button | ||||
| 			// e: Event | ||||
| 			//		Event object to examine | ||||
| 			return e.button == 1; // Boolean | ||||
| 		}, | ||||
| 		isRight: function(e){ | ||||
| 			// summary: | ||||
| 			//		Checks an event object for the pressed right button | ||||
| 			// e: Event | ||||
| 			//		Event object to examine | ||||
| 			return e.button == 2; // Boolean | ||||
| 		} | ||||
| 	}; | ||||
| =====*/ | ||||
|  | ||||
| 	function eventHandler(type, selectHandler){ | ||||
| 		// emulation of mouseenter/leave with mouseover/out using descendant checking | ||||
| 		var handler = function(node, listener){ | ||||
| 			return on(node, type, function(evt){ | ||||
| 				if(selectHandler){ | ||||
| 					return selectHandler(evt, listener); | ||||
| 				} | ||||
| 				if(!dom.isDescendant(evt.relatedTarget, node)){ | ||||
| 					return listener.call(this, evt); | ||||
| 				} | ||||
| 			}); | ||||
| 		}; | ||||
| 		handler.bubble = function(select){ | ||||
| 			return eventHandler(type, function(evt, listener){ | ||||
| 				// using a selector, use the select function to determine if the mouse moved inside the selector and was previously outside the selector | ||||
| 				var target = select(evt.target); | ||||
| 				var relatedTarget = evt.relatedTarget; | ||||
| 				if(target && (target != (relatedTarget && relatedTarget.nodeType == 1 && select(relatedTarget)))){ | ||||
| 					return listener.call(target, evt); | ||||
| 				}  | ||||
| 			}); | ||||
| 		}; | ||||
| 		return handler; | ||||
| 	} | ||||
| 	var wheel; | ||||
| 	if(has("events-mousewheel")){ | ||||
| 		wheel = 'mousewheel'; | ||||
| 	}else{ //firefox | ||||
| 		wheel = function(node, listener){ | ||||
| 			return on(node, 'DOMMouseScroll', function(evt){ | ||||
| 				evt.wheelDelta = -evt.detail; | ||||
| 				listener.call(this, evt); | ||||
| 			}); | ||||
| 		}; | ||||
| 	} | ||||
| 	return { | ||||
| 		// summary: | ||||
| 		//		This module provide mouse event handling utility functions and exports | ||||
| 		//		mouseenter and mouseleave event emulation. | ||||
| 		// example: | ||||
| 		//		To use these events, you register a mouseenter like this: | ||||
| 		//		|	define(["dojo/on", dojo/mouse"], function(on, mouse){ | ||||
| 		//		|		on(targetNode, mouse.enter, function(event){ | ||||
| 		//		|			dojo.addClass(targetNode, "highlighted"); | ||||
| 		//		|		}); | ||||
| 		//		|		on(targetNode, mouse.leave, function(event){ | ||||
| 		//		|			dojo.removeClass(targetNode, "highlighted"); | ||||
| 		//		|		}); | ||||
|  | ||||
| 		_eventHandler: eventHandler,		// for dojo/touch | ||||
|  | ||||
| 		// enter: Synthetic Event | ||||
| 		//		This is an extension event for the mouseenter that IE provides, emulating the | ||||
| 		//		behavior on other browsers. | ||||
| 		enter: eventHandler("mouseover"), | ||||
|  | ||||
| 		// leave: Synthetic Event | ||||
| 		//		This is an extension event for the mouseleave that IE provides, emulating the | ||||
| 		//		behavior on other browsers. | ||||
| 		leave: eventHandler("mouseout"), | ||||
|  | ||||
| 		// wheel: Normalized Mouse Wheel Event | ||||
| 		//		This is an extension event for the mousewheel that non-Mozilla browsers provide, | ||||
| 		//		emulating the behavior on Mozilla based browsers. | ||||
| 		wheel: wheel, | ||||
|  | ||||
| 		isLeft: mouseButtons.isLeft, | ||||
| 		/*===== | ||||
| 		isLeft: function(){ | ||||
| 			// summary: | ||||
| 			//		Test an event object (from a mousedown event) to see if the left button was pressed. | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		isMiddle: mouseButtons.isMiddle, | ||||
| 		/*===== | ||||
| 		 isMiddle: function(){ | ||||
| 			 // summary: | ||||
| 			 //		Test an event object (from a mousedown event) to see if the middle button was pressed. | ||||
| 		 }, | ||||
| 		 =====*/ | ||||
|  | ||||
| 		isRight: mouseButtons.isRight | ||||
| 		/*===== | ||||
| 		 , isRight: function(){ | ||||
| 			 // summary: | ||||
| 			 //		Test an event object (from a mousedown event) to see if the right button was pressed. | ||||
| 		 } | ||||
| 		 =====*/ | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										531
									
								
								debian/missing-sources/dojo/on.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										531
									
								
								debian/missing-sources/dojo/on.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,531 @@ | ||||
| define(["./has!dom-addeventlistener?:./aspect", "./_base/kernel", "./sniff"], function(aspect, dojo, has){ | ||||
|  | ||||
| 	"use strict"; | ||||
| 	if(has("dom")){ // check to make sure we are in a browser, this module should work anywhere | ||||
| 		var major = window.ScriptEngineMajorVersion; | ||||
| 		has.add("jscript", major && (major() + ScriptEngineMinorVersion() / 10)); | ||||
| 		has.add("event-orientationchange", has("touch") && !has("android")); // TODO: how do we detect this? | ||||
| 		has.add("event-stopimmediatepropagation", window.Event && !!window.Event.prototype && !!window.Event.prototype.stopImmediatePropagation); | ||||
| 		has.add("event-focusin", function(global, doc, element){ | ||||
| 			// All browsers except firefox support focusin, but too hard to feature test webkit since element.onfocusin | ||||
| 			// is undefined.  Just return true for IE and use fallback path for other browsers. | ||||
| 			return !!element.attachEvent; | ||||
| 		}); | ||||
| 	} | ||||
| 	var on = function(target, type, listener, dontFix){ | ||||
| 		// summary: | ||||
| 		//		A function that provides core event listening functionality. With this function | ||||
| 		//		you can provide a target, event type, and listener to be notified of | ||||
| 		//		future matching events that are fired. | ||||
| 		// target: Element|Object | ||||
| 		//		This is the target object or DOM element that to receive events from | ||||
| 		// type: String|Function | ||||
| 		//		This is the name of the event to listen for or an extension event type. | ||||
| 		// listener: Function | ||||
| 		//		This is the function that should be called when the event fires. | ||||
| 		// returns: Object | ||||
| 		//		An object with a remove() method that can be used to stop listening for this | ||||
| 		//		event. | ||||
| 		// description: | ||||
| 		//		To listen for "click" events on a button node, we can do: | ||||
| 		//		|	define(["dojo/on"], function(listen){ | ||||
| 		//		|		on(button, "click", clickHandler); | ||||
| 		//		|		... | ||||
| 		//		Evented JavaScript objects can also have their own events. | ||||
| 		//		|	var obj = new Evented; | ||||
| 		//		|	on(obj, "foo", fooHandler); | ||||
| 		//		And then we could publish a "foo" event: | ||||
| 		//		|	on.emit(obj, "foo", {key: "value"}); | ||||
| 		//		We can use extension events as well. For example, you could listen for a tap gesture: | ||||
| 		//		|	define(["dojo/on", "dojo/gesture/tap", function(listen, tap){ | ||||
| 		//		|		on(button, tap, tapHandler); | ||||
| 		//		|		... | ||||
| 		//		which would trigger fooHandler. Note that for a simple object this is equivalent to calling: | ||||
| 		//		|	obj.onfoo({key:"value"}); | ||||
| 		//		If you use on.emit on a DOM node, it will use native event dispatching when possible. | ||||
|  | ||||
| 		if(typeof target.on == "function" && typeof type != "function" && !target.nodeType){ | ||||
| 			// delegate to the target's on() method, so it can handle it's own listening if it wants (unless it  | ||||
| 			// is DOM node and we may be dealing with jQuery or Prototype's incompatible addition to the | ||||
| 			// Element prototype  | ||||
| 			return target.on(type, listener); | ||||
| 		} | ||||
| 		// delegate to main listener code | ||||
| 		return on.parse(target, type, listener, addListener, dontFix, this); | ||||
| 	}; | ||||
| 	on.pausable =  function(target, type, listener, dontFix){ | ||||
| 		// summary: | ||||
| 		//		This function acts the same as on(), but with pausable functionality. The | ||||
| 		//		returned signal object has pause() and resume() functions. Calling the | ||||
| 		//		pause() method will cause the listener to not be called for future events. Calling the | ||||
| 		//		resume() method will cause the listener to again be called for future events. | ||||
| 		var paused; | ||||
| 		var signal = on(target, type, function(){ | ||||
| 			if(!paused){ | ||||
| 				return listener.apply(this, arguments); | ||||
| 			} | ||||
| 		}, dontFix); | ||||
| 		signal.pause = function(){ | ||||
| 			paused = true; | ||||
| 		}; | ||||
| 		signal.resume = function(){ | ||||
| 			paused = false; | ||||
| 		}; | ||||
| 		return signal; | ||||
| 	}; | ||||
| 	on.once = function(target, type, listener, dontFix){ | ||||
| 		// summary: | ||||
| 		//		This function acts the same as on(), but will only call the listener once. The  | ||||
| 		//		listener will be called for the first | ||||
| 		//		event that takes place and then listener will automatically be removed. | ||||
| 		var signal = on(target, type, function(){ | ||||
| 			// remove this listener | ||||
| 			signal.remove(); | ||||
| 			// proceed to call the listener | ||||
| 			return listener.apply(this, arguments); | ||||
| 		}); | ||||
| 		return signal; | ||||
| 	}; | ||||
| 	on.parse = function(target, type, listener, addListener, dontFix, matchesTarget){ | ||||
| 		if(type.call){ | ||||
| 			// event handler function | ||||
| 			// on(node, touch.press, touchListener); | ||||
| 			return type.call(matchesTarget, target, listener); | ||||
| 		} | ||||
|  | ||||
| 		if(type.indexOf(",") > -1){ | ||||
| 			// we allow comma delimited event names, so you can register for multiple events at once | ||||
| 			var events = type.split(/\s*,\s*/); | ||||
| 			var handles = []; | ||||
| 			var i = 0; | ||||
| 			var eventName; | ||||
| 			while(eventName = events[i++]){ | ||||
| 				handles.push(addListener(target, eventName, listener, dontFix, matchesTarget)); | ||||
| 			} | ||||
| 			handles.remove = function(){ | ||||
| 				for(var i = 0; i < handles.length; i++){ | ||||
| 					handles[i].remove(); | ||||
| 				} | ||||
| 			}; | ||||
| 			return handles; | ||||
| 		} | ||||
| 		return addListener(target, type, listener, dontFix, matchesTarget); | ||||
| 	}; | ||||
| 	var touchEvents = /^touch/; | ||||
| 	function addListener(target, type, listener, dontFix, matchesTarget){ | ||||
| 		// event delegation: | ||||
| 		var selector = type.match(/(.*):(.*)/); | ||||
| 		// if we have a selector:event, the last one is interpreted as an event, and we use event delegation | ||||
| 		if(selector){ | ||||
| 			type = selector[2]; | ||||
| 			selector = selector[1]; | ||||
| 			// create the extension event for selectors and directly call it | ||||
| 			return on.selector(selector, type).call(matchesTarget, target, listener); | ||||
| 		} | ||||
| 		// test to see if it a touch event right now, so we don't have to do it every time it fires | ||||
| 		if(has("touch")){ | ||||
| 			if(touchEvents.test(type)){ | ||||
| 				// touch event, fix it | ||||
| 				listener = fixTouchListener(listener); | ||||
| 			} | ||||
| 			if(!has("event-orientationchange") && (type == "orientationchange")){ | ||||
| 				//"orientationchange" not supported <= Android 2.1,  | ||||
| 				//but works through "resize" on window | ||||
| 				type = "resize";  | ||||
| 				target = window; | ||||
| 				listener = fixTouchListener(listener); | ||||
| 			}  | ||||
| 		} | ||||
| 		if(addStopImmediate){ | ||||
| 			// add stopImmediatePropagation if it doesn't exist | ||||
| 			listener = addStopImmediate(listener); | ||||
| 		} | ||||
| 		// normal path, the target is |this| | ||||
| 		if(target.addEventListener){ | ||||
| 			// the target has addEventListener, which should be used if available (might or might not be a node, non-nodes can implement this method as well) | ||||
| 			// check for capture conversions | ||||
| 			var capture = type in captures, | ||||
| 				adjustedType = capture ? captures[type] : type; | ||||
| 			target.addEventListener(adjustedType, listener, capture); | ||||
| 			// create and return the signal | ||||
| 			return { | ||||
| 				remove: function(){ | ||||
| 					target.removeEventListener(adjustedType, listener, capture); | ||||
| 				} | ||||
| 			}; | ||||
| 		} | ||||
| 		type = "on" + type; | ||||
| 		if(fixAttach && target.attachEvent){ | ||||
| 			return fixAttach(target, type, listener); | ||||
| 		} | ||||
| 		throw new Error("Target must be an event emitter"); | ||||
| 	} | ||||
|  | ||||
| 	on.selector = function(selector, eventType, children){ | ||||
| 		// summary: | ||||
| 		//		Creates a new extension event with event delegation. This is based on | ||||
| 		//		the provided event type (can be extension event) that | ||||
| 		//		only calls the listener when the CSS selector matches the target of the event. | ||||
| 		// | ||||
| 		//		The application must require() an appropriate level of dojo/query to handle the selector. | ||||
| 		// selector: | ||||
| 		//		The CSS selector to use for filter events and determine the |this| of the event listener. | ||||
| 		// eventType: | ||||
| 		//		The event to listen for | ||||
| 		// children: | ||||
| 		//		Indicates if children elements of the selector should be allowed. This defaults to  | ||||
| 		//		true | ||||
| 		// example: | ||||
| 		// |	require(["dojo/on", "dojo/mouse", "dojo/query!css2"], function(listen, mouse){ | ||||
| 		// |		on(node, on.selector(".my-class", mouse.enter), handlerForMyHover); | ||||
| 		return function(target, listener){ | ||||
| 			// if the selector is function, use it to select the node, otherwise use the matches method | ||||
| 			var matchesTarget = typeof selector == "function" ? {matches: selector} : this, | ||||
| 				bubble = eventType.bubble; | ||||
| 			function select(eventTarget){ | ||||
| 				// see if we have a valid matchesTarget or default to dojo.query | ||||
| 				matchesTarget = matchesTarget && matchesTarget.matches ? matchesTarget : dojo.query; | ||||
| 				// there is a selector, so make sure it matches | ||||
| 				while(!matchesTarget.matches(eventTarget, selector, target)){ | ||||
| 					if(eventTarget == target || children === false || !(eventTarget = eventTarget.parentNode) || eventTarget.nodeType != 1){ // intentional assignment | ||||
| 						return; | ||||
| 					} | ||||
| 				} | ||||
| 				return eventTarget; | ||||
| 			} | ||||
| 			if(bubble){ | ||||
| 				// the event type doesn't naturally bubble, but has a bubbling form, use that, and give it the selector so it can perform the select itself | ||||
| 				return on(target, bubble(select), listener); | ||||
| 			} | ||||
| 			// standard event delegation | ||||
| 			return on(target, eventType, function(event){ | ||||
| 				// call select to see if we match | ||||
| 				var eventTarget = select(event.target); | ||||
| 				// if it matches we call the listener | ||||
| 				return eventTarget && listener.call(eventTarget, event); | ||||
| 			}); | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	function syntheticPreventDefault(){ | ||||
| 		this.cancelable = false; | ||||
| 		this.defaultPrevented = true; | ||||
| 	} | ||||
| 	function syntheticStopPropagation(){ | ||||
| 		this.bubbles = false; | ||||
| 	} | ||||
| 	var slice = [].slice, | ||||
| 		syntheticDispatch = on.emit = function(target, type, event){ | ||||
| 		// summary: | ||||
| 		//		Fires an event on the target object. | ||||
| 		// target: | ||||
| 		//		The target object to fire the event on. This can be a DOM element or a plain  | ||||
| 		//		JS object. If the target is a DOM element, native event emitting mechanisms | ||||
| 		//		are used when possible. | ||||
| 		// type: | ||||
| 		//		The event type name. You can emulate standard native events like "click" and  | ||||
| 		//		"mouseover" or create custom events like "open" or "finish". | ||||
| 		// event: | ||||
| 		//		An object that provides the properties for the event. See https://developer.mozilla.org/en/DOM/event.initEvent  | ||||
| 		//		for some of the properties. These properties are copied to the event object. | ||||
| 		//		Of particular importance are the cancelable and bubbles properties. The | ||||
| 		//		cancelable property indicates whether or not the event has a default action | ||||
| 		//		that can be cancelled. The event is cancelled by calling preventDefault() on | ||||
| 		//		the event object. The bubbles property indicates whether or not the | ||||
| 		//		event will bubble up the DOM tree. If bubbles is true, the event will be called | ||||
| 		//		on the target and then each parent successively until the top of the tree | ||||
| 		//		is reached or stopPropagation() is called. Both bubbles and cancelable  | ||||
| 		//		default to false. | ||||
| 		// returns: | ||||
| 		//		If the event is cancelable and the event is not cancelled, | ||||
| 		//		emit will return true. If the event is cancelable and the event is cancelled, | ||||
| 		//		emit will return false. | ||||
| 		// details: | ||||
| 		//		Note that this is designed to emit events for listeners registered through | ||||
| 		//		dojo/on. It should actually work with any event listener except those | ||||
| 		//		added through IE's attachEvent (IE8 and below's non-W3C event emitting | ||||
| 		//		doesn't support custom event types). It should work with all events registered | ||||
| 		//		through dojo/on. Also note that the emit method does do any default | ||||
| 		//		action, it only returns a value to indicate if the default action should take | ||||
| 		//		place. For example, emitting a keypress event would not cause a character | ||||
| 		//		to appear in a textbox. | ||||
| 		// example: | ||||
| 		//		To fire our own click event | ||||
| 		//	|	on.emit(dojo.byId("button"), "click", { | ||||
| 		//	|		cancelable: true, | ||||
| 		//	|		bubbles: true, | ||||
| 		//	|		screenX: 33, | ||||
| 		//	|		screenY: 44 | ||||
| 		//	|	}); | ||||
| 		//		We can also fire our own custom events: | ||||
| 		//	|	on.emit(dojo.byId("slider"), "slide", { | ||||
| 		//	|		cancelable: true, | ||||
| 		//	|		bubbles: true, | ||||
| 		//	|		direction: "left-to-right" | ||||
| 		//	|	}); | ||||
| 		var args = slice.call(arguments, 2); | ||||
| 		var method = "on" + type; | ||||
| 		if("parentNode" in target){ | ||||
| 			// node (or node-like), create event controller methods | ||||
| 			var newEvent = args[0] = {}; | ||||
| 			for(var i in event){ | ||||
| 				newEvent[i] = event[i]; | ||||
| 			} | ||||
| 			newEvent.preventDefault = syntheticPreventDefault; | ||||
| 			newEvent.stopPropagation = syntheticStopPropagation; | ||||
| 			newEvent.target = target; | ||||
| 			newEvent.type = type; | ||||
| 			event = newEvent; | ||||
| 		} | ||||
| 		do{ | ||||
| 			// call any node which has a handler (note that ideally we would try/catch to simulate normal event propagation but that causes too much pain for debugging) | ||||
| 			target[method] && target[method].apply(target, args); | ||||
| 			// and then continue up the parent node chain if it is still bubbling (if started as bubbles and stopPropagation hasn't been called) | ||||
| 		}while(event && event.bubbles && (target = target.parentNode)); | ||||
| 		return event && event.cancelable && event; // if it is still true (was cancelable and was cancelled), return the event to indicate default action should happen | ||||
| 	}; | ||||
| 	var captures = has("event-focusin") ? {} : {focusin: "focus", focusout: "blur"}; | ||||
| 	if(!has("event-stopimmediatepropagation")){ | ||||
| 		var stopImmediatePropagation =function(){ | ||||
| 			this.immediatelyStopped = true; | ||||
| 			this.modified = true; // mark it as modified so the event will be cached in IE | ||||
| 		}; | ||||
| 		var addStopImmediate = function(listener){ | ||||
| 			return function(event){ | ||||
| 				if(!event.immediatelyStopped){// check to make sure it hasn't been stopped immediately | ||||
| 					event.stopImmediatePropagation = stopImmediatePropagation; | ||||
| 					return listener.apply(this, arguments); | ||||
| 				} | ||||
| 			}; | ||||
| 		} | ||||
| 	}  | ||||
| 	if(has("dom-addeventlistener")){ | ||||
| 		// emitter that works with native event handling | ||||
| 		on.emit = function(target, type, event){ | ||||
| 			if(target.dispatchEvent && document.createEvent){ | ||||
| 				// use the native event emitting mechanism if it is available on the target object | ||||
| 				// create a generic event				 | ||||
| 				// we could create branch into the different types of event constructors, but  | ||||
| 				// that would be a lot of extra code, with little benefit that I can see, seems  | ||||
| 				// best to use the generic constructor and copy properties over, making it  | ||||
| 				// easy to have events look like the ones created with specific initializers | ||||
| 				var nativeEvent = target.ownerDocument.createEvent("HTMLEvents"); | ||||
| 				nativeEvent.initEvent(type, !!event.bubbles, !!event.cancelable); | ||||
| 				// and copy all our properties over | ||||
| 				for(var i in event){ | ||||
| 					if(!(i in nativeEvent)){ | ||||
| 						nativeEvent[i] = event[i]; | ||||
| 					} | ||||
| 				} | ||||
| 				return target.dispatchEvent(nativeEvent) && nativeEvent; | ||||
| 			} | ||||
| 			return syntheticDispatch.apply(on, arguments); // emit for a non-node | ||||
| 		}; | ||||
| 	}else{ | ||||
| 		// no addEventListener, basically old IE event normalization | ||||
| 		on._fixEvent = function(evt, sender){ | ||||
| 			// summary: | ||||
| 			//		normalizes properties on the event object including event | ||||
| 			//		bubbling methods, keystroke normalization, and x/y positions | ||||
| 			// evt: | ||||
| 			//		native event object | ||||
| 			// sender: | ||||
| 			//		node to treat as "currentTarget" | ||||
| 			if(!evt){ | ||||
| 				var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; | ||||
| 				evt = w.event; | ||||
| 			} | ||||
| 			if(!evt){return evt;} | ||||
| 			try{ | ||||
| 				if(lastEvent && evt.type == lastEvent.type  && evt.srcElement == lastEvent.target){ | ||||
| 					// should be same event, reuse event object (so it can be augmented); | ||||
| 					// accessing evt.srcElement rather than evt.target since evt.target not set on IE until fixup below | ||||
| 					evt = lastEvent; | ||||
| 				} | ||||
| 			}catch(e){ | ||||
| 				// will occur on IE on lastEvent.type reference if lastEvent points to a previous event that already | ||||
| 				// finished bubbling, but the setTimeout() to clear lastEvent hasn't fired yet | ||||
| 			} | ||||
| 			if(!evt.target){ // check to see if it has been fixed yet | ||||
| 				evt.target = evt.srcElement; | ||||
| 				evt.currentTarget = (sender || evt.srcElement); | ||||
| 				if(evt.type == "mouseover"){ | ||||
| 					evt.relatedTarget = evt.fromElement; | ||||
| 				} | ||||
| 				if(evt.type == "mouseout"){ | ||||
| 					evt.relatedTarget = evt.toElement; | ||||
| 				} | ||||
| 				if(!evt.stopPropagation){ | ||||
| 					evt.stopPropagation = stopPropagation; | ||||
| 					evt.preventDefault = preventDefault; | ||||
| 				} | ||||
| 				switch(evt.type){ | ||||
| 					case "keypress": | ||||
| 						var c = ("charCode" in evt ? evt.charCode : evt.keyCode); | ||||
| 						if (c==10){ | ||||
| 							// CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla | ||||
| 							c=0; | ||||
| 							evt.keyCode = 13; | ||||
| 						}else if(c==13||c==27){ | ||||
| 							c=0; // Mozilla considers ENTER and ESC non-printable | ||||
| 						}else if(c==3){ | ||||
| 							c=99; // Mozilla maps CTRL-BREAK to CTRL-c | ||||
| 						} | ||||
| 						// Mozilla sets keyCode to 0 when there is a charCode | ||||
| 						// but that stops the event on IE. | ||||
| 						evt.charCode = c; | ||||
| 						_setKeyChar(evt); | ||||
| 						break; | ||||
| 				} | ||||
| 			} | ||||
| 			return evt; | ||||
| 		}; | ||||
| 		var lastEvent, IESignal = function(handle){ | ||||
| 			this.handle = handle; | ||||
| 		}; | ||||
| 		IESignal.prototype.remove = function(){ | ||||
| 			delete _dojoIEListeners_[this.handle]; | ||||
| 		}; | ||||
| 		var fixListener = function(listener){ | ||||
| 			// this is a minimal function for closing on the previous listener with as few as variables as possible | ||||
| 			return function(evt){ | ||||
| 				evt = on._fixEvent(evt, this); | ||||
| 				var result = listener.call(this, evt); | ||||
| 				if(evt.modified){ | ||||
| 					// cache the last event and reuse it if we can | ||||
| 					if(!lastEvent){ | ||||
| 						setTimeout(function(){ | ||||
| 							lastEvent = null; | ||||
| 						}); | ||||
| 					} | ||||
| 					lastEvent = evt; | ||||
| 				} | ||||
| 				return result; | ||||
| 			}; | ||||
| 		}; | ||||
| 		var fixAttach = function(target, type, listener){ | ||||
| 			listener = fixListener(listener); | ||||
| 			if(((target.ownerDocument ? target.ownerDocument.parentWindow : target.parentWindow || target.window || window) != top ||  | ||||
| 						has("jscript") < 5.8) &&  | ||||
| 					!has("config-_allow_leaks")){ | ||||
| 				// IE will leak memory on certain handlers in frames (IE8 and earlier) and in unattached DOM nodes for JScript 5.7 and below. | ||||
| 				// Here we use global redirection to solve the memory leaks | ||||
| 				if(typeof _dojoIEListeners_ == "undefined"){ | ||||
| 					_dojoIEListeners_ = []; | ||||
| 				} | ||||
| 				var emitter = target[type]; | ||||
| 				if(!emitter || !emitter.listeners){ | ||||
| 					var oldListener = emitter; | ||||
| 					emitter = Function('event', 'var callee = arguments.callee; for(var i = 0; i<callee.listeners.length; i++){var listener = _dojoIEListeners_[callee.listeners[i]]; if(listener){listener.call(this,event);}}'); | ||||
| 					emitter.listeners = []; | ||||
| 					target[type] = emitter; | ||||
| 					emitter.global = this; | ||||
| 					if(oldListener){ | ||||
| 						emitter.listeners.push(_dojoIEListeners_.push(oldListener) - 1); | ||||
| 					} | ||||
| 				} | ||||
| 				var handle; | ||||
| 				emitter.listeners.push(handle = (emitter.global._dojoIEListeners_.push(listener) - 1)); | ||||
| 				return new IESignal(handle); | ||||
| 			} | ||||
| 			return aspect.after(target, type, listener, true); | ||||
| 		}; | ||||
|  | ||||
| 		var _setKeyChar = function(evt){ | ||||
| 			evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; | ||||
| 			evt.charOrCode = evt.keyChar || evt.keyCode; | ||||
| 		}; | ||||
| 		// Called in Event scope | ||||
| 		var stopPropagation = function(){ | ||||
| 			this.cancelBubble = true; | ||||
| 		}; | ||||
| 		var preventDefault = on._preventDefault = function(){ | ||||
| 			// Setting keyCode to 0 is the only way to prevent certain keypresses (namely | ||||
| 			// ctrl-combinations that correspond to menu accelerator keys). | ||||
| 			// Otoh, it prevents upstream listeners from getting this information | ||||
| 			// Try to split the difference here by clobbering keyCode only for ctrl | ||||
| 			// combinations. If you still need to access the key upstream, bubbledKeyCode is | ||||
| 			// provided as a workaround. | ||||
| 			this.bubbledKeyCode = this.keyCode; | ||||
| 			if(this.ctrlKey){ | ||||
| 				try{ | ||||
| 					// squelch errors when keyCode is read-only | ||||
| 					// (e.g. if keyCode is ctrl or shift) | ||||
| 					this.keyCode = 0; | ||||
| 				}catch(e){ | ||||
| 				} | ||||
| 			} | ||||
| 			this.defaultPrevented = true; | ||||
| 			this.returnValue = false; | ||||
| 			this.modified = true; // mark it as modified  (for defaultPrevented flag) so the event will be cached in IE | ||||
| 		}; | ||||
| 	} | ||||
| 	if(has("touch")){  | ||||
| 		var Event = function(){}; | ||||
| 		var windowOrientation = window.orientation;  | ||||
| 		var fixTouchListener = function(listener){  | ||||
| 			return function(originalEvent){  | ||||
| 				//Event normalization(for ontouchxxx and resize):  | ||||
| 				//1.incorrect e.pageX|pageY in iOS  | ||||
| 				//2.there are no "e.rotation", "e.scale" and "onorientationchange" in Android | ||||
| 				//3.More TBD e.g. force | screenX | screenX | clientX | clientY | radiusX | radiusY | ||||
|  | ||||
| 				// see if it has already been corrected | ||||
| 				var event = originalEvent.corrected; | ||||
| 				if(!event){ | ||||
| 					var type = originalEvent.type; | ||||
| 					try{ | ||||
| 						delete originalEvent.type; // on some JS engines (android), deleting properties make them mutable | ||||
| 					}catch(e){}  | ||||
| 					if(originalEvent.type){ | ||||
| 						// deleting properties doesn't work (older iOS), have to use delegation | ||||
| 						if(has('mozilla')){ | ||||
| 							// Firefox doesn't like delegated properties, so we have to copy | ||||
| 							var event = {}; | ||||
| 							for(var name in originalEvent){ | ||||
| 								event[name] = originalEvent[name]; | ||||
| 							} | ||||
| 						}else{ | ||||
| 							// old iOS branch | ||||
| 							Event.prototype = originalEvent; | ||||
| 							var event = new Event; | ||||
| 						} | ||||
| 						// have to delegate methods to make them work | ||||
| 						event.preventDefault = function(){ | ||||
| 							originalEvent.preventDefault(); | ||||
| 						}; | ||||
| 						event.stopPropagation = function(){ | ||||
| 							originalEvent.stopPropagation(); | ||||
| 						}; | ||||
| 					}else{ | ||||
| 						// deletion worked, use property as is | ||||
| 						event = originalEvent; | ||||
| 						event.type = type; | ||||
| 					} | ||||
| 					originalEvent.corrected = event; | ||||
| 					if(type == 'resize'){ | ||||
| 						if(windowOrientation == window.orientation){  | ||||
| 							return null;//double tap causes an unexpected 'resize' in Android | ||||
| 						}  | ||||
| 						windowOrientation = window.orientation; | ||||
| 						event.type = "orientationchange";  | ||||
| 						return listener.call(this, event); | ||||
| 					} | ||||
| 					// We use the original event and augment, rather than doing an expensive mixin operation | ||||
| 					if(!("rotation" in event)){ // test to see if it has rotation | ||||
| 						event.rotation = 0;  | ||||
| 						event.scale = 1; | ||||
| 					} | ||||
| 					//use event.changedTouches[0].pageX|pageY|screenX|screenY|clientX|clientY|target | ||||
| 					var firstChangeTouch = event.changedTouches[0]; | ||||
| 					for(var i in firstChangeTouch){ // use for-in, we don't need to have dependency on dojo/_base/lang here | ||||
| 						delete event[i]; // delete it first to make it mutable | ||||
| 						event[i] = firstChangeTouch[i]; | ||||
| 					} | ||||
| 				} | ||||
| 				return listener.call(this, event);  | ||||
| 			};  | ||||
| 		};  | ||||
| 	} | ||||
| 	return on; | ||||
| }); | ||||
							
								
								
									
										133
									
								
								debian/missing-sources/dojo/promise/Promise.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								debian/missing-sources/dojo/promise/Promise.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,133 @@ | ||||
| define([ | ||||
| 	"../_base/lang" | ||||
| ], function(lang){ | ||||
| 	"use strict"; | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/promise/Promise | ||||
|  | ||||
| 	function throwAbstract(){ | ||||
| 		throw new TypeError("abstract"); | ||||
| 	} | ||||
|  | ||||
| 	return lang.extend(function Promise(){ | ||||
| 		// summary: | ||||
| 		//		The public interface to a deferred. | ||||
| 		// description: | ||||
| 		//		The public interface to a deferred. All promises in Dojo are | ||||
| 		//		instances of this class. | ||||
| 	}, { | ||||
| 		then: function(callback, errback, progback){ | ||||
| 			// summary: | ||||
| 			//		Add new callbacks to the promise. | ||||
| 			// description: | ||||
| 			//		Add new callbacks to the deferred. Callbacks can be added | ||||
| 			//		before or after the deferred is fulfilled. | ||||
| 			// callback: Function? | ||||
| 			//		Callback to be invoked when the promise is resolved. | ||||
| 			//		Receives the resolution value. | ||||
| 			// errback: Function? | ||||
| 			//		Callback to be invoked when the promise is rejected. | ||||
| 			//		Receives the rejection error. | ||||
| 			// progback: Function? | ||||
| 			//		Callback to be invoked when the promise emits a progress | ||||
| 			//		update. Receives the progress update. | ||||
| 			// returns: dojo/promise/Promise | ||||
| 			//		Returns a new promise for the result of the callback(s). | ||||
| 			//		This can be used for chaining many asynchronous operations. | ||||
|  | ||||
| 			throwAbstract(); | ||||
| 		}, | ||||
|  | ||||
| 		cancel: function(reason, strict){ | ||||
| 			// summary: | ||||
| 			//		Inform the deferred it may cancel its asynchronous operation. | ||||
| 			// description: | ||||
| 			//		Inform the deferred it may cancel its asynchronous operation. | ||||
| 			//		The deferred's (optional) canceler is invoked and the | ||||
| 			//		deferred will be left in a rejected state. Can affect other | ||||
| 			//		promises that originate with the same deferred. | ||||
| 			// reason: any | ||||
| 			//		A message that may be sent to the deferred's canceler, | ||||
| 			//		explaining why it's being canceled. | ||||
| 			// strict: Boolean? | ||||
| 			//		If strict, will throw an error if the deferred has already | ||||
| 			//		been fulfilled and consequently cannot be canceled. | ||||
| 			// returns: any | ||||
| 			//		Returns the rejection reason if the deferred was canceled | ||||
| 			//		normally. | ||||
|  | ||||
| 			throwAbstract(); | ||||
| 		}, | ||||
|  | ||||
| 		isResolved: function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the promise has been resolved. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			throwAbstract(); | ||||
| 		}, | ||||
|  | ||||
| 		isRejected: function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the promise has been rejected. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			throwAbstract(); | ||||
| 		}, | ||||
|  | ||||
| 		isFulfilled: function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the promise has been resolved or rejected. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			throwAbstract(); | ||||
| 		}, | ||||
|  | ||||
| 		isCanceled: function(){ | ||||
| 			// summary: | ||||
| 			//		Checks whether the promise has been canceled. | ||||
| 			// returns: Boolean | ||||
|  | ||||
| 			throwAbstract(); | ||||
| 		}, | ||||
|  | ||||
| 		always: function(callbackOrErrback){ | ||||
| 			// summary: | ||||
| 			//		Add a callback to be invoked when the promise is resolved | ||||
| 			//		or rejected. | ||||
| 			// callbackOrErrback: Function? | ||||
| 			//		A function that is used both as a callback and errback. | ||||
| 			// returns: dojo/promise/Promise | ||||
| 			//		Returns a new promise for the result of the callback/errback. | ||||
|  | ||||
| 			return this.then(callbackOrErrback, callbackOrErrback); | ||||
| 		}, | ||||
|  | ||||
| 		otherwise: function(errback){ | ||||
| 			// summary: | ||||
| 			//		Add new errbacks to the promise. | ||||
| 			// errback: Function? | ||||
| 			//		Callback to be invoked when the promise is rejected. | ||||
| 			// returns: dojo/promise/Promise | ||||
| 			//		Returns a new promise for the result of the errback. | ||||
|  | ||||
| 			return this.then(null, errback); | ||||
| 		}, | ||||
|  | ||||
| 		trace: function(){ | ||||
| 			return this; | ||||
| 		}, | ||||
|  | ||||
| 		traceRejected: function(){ | ||||
| 			return this; | ||||
| 		}, | ||||
|  | ||||
| 		toString: function(){ | ||||
| 			// returns: string | ||||
| 			//		Returns `[object Promise]`. | ||||
|  | ||||
| 			return "[object Promise]"; | ||||
| 		} | ||||
| 	}); | ||||
| }); | ||||
							
								
								
									
										76
									
								
								debian/missing-sources/dojo/promise/all.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								debian/missing-sources/dojo/promise/all.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
| define([ | ||||
| 	"../_base/array", | ||||
| 	"../Deferred", | ||||
| 	"../when" | ||||
| ], function(array, Deferred, when){ | ||||
| 	"use strict"; | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/promise/all | ||||
|  | ||||
| 	var some = array.some; | ||||
|  | ||||
| 	return function all(objectOrArray){ | ||||
| 		// summary: | ||||
| 		//		Takes multiple promises and returns a new promise that is fulfilled | ||||
| 		//		when all promises have been fulfilled. | ||||
| 		// description: | ||||
| 		//		Takes multiple promises and returns a new promise that is fulfilled | ||||
| 		//		when all promises have been fulfilled. If one of the promises is rejected, | ||||
| 		//		the returned promise is also rejected. Canceling the returned promise will | ||||
| 		//		*not* cancel any passed promises. | ||||
| 		// objectOrArray: Object|Array? | ||||
| 		//		The promise will be fulfilled with a list of results if invoked with an | ||||
| 		//		array, or an object of results when passed an object (using the same | ||||
| 		//		keys). If passed neither an object or array it is resolved with an | ||||
| 		//		undefined value. | ||||
| 		// returns: dojo/promise/Promise | ||||
|  | ||||
| 		var object, array; | ||||
| 		if(objectOrArray instanceof Array){ | ||||
| 			array = objectOrArray; | ||||
| 		}else if(objectOrArray && typeof objectOrArray === "object"){ | ||||
| 			object = objectOrArray; | ||||
| 		} | ||||
|  | ||||
| 		var results; | ||||
| 		var keyLookup = []; | ||||
| 		if(object){ | ||||
| 			array = []; | ||||
| 			for(var key in object){ | ||||
| 				if(Object.hasOwnProperty.call(object, key)){ | ||||
| 					keyLookup.push(key); | ||||
| 					array.push(object[key]); | ||||
| 				} | ||||
| 			} | ||||
| 			results = {}; | ||||
| 		}else if(array){ | ||||
| 			results = []; | ||||
| 		} | ||||
|  | ||||
| 		if(!array || !array.length){ | ||||
| 			return new Deferred().resolve(results); | ||||
| 		} | ||||
|  | ||||
| 		var deferred = new Deferred(); | ||||
| 		deferred.promise.always(function(){ | ||||
| 			results = keyLookup = null; | ||||
| 		}); | ||||
| 		var waiting = array.length; | ||||
| 		some(array, function(valueOrPromise, index){ | ||||
| 			if(!object){ | ||||
| 				keyLookup.push(index); | ||||
| 			} | ||||
| 			when(valueOrPromise, function(value){ | ||||
| 				if(!deferred.isFulfilled()){ | ||||
| 					results[keyLookup[index]] = value; | ||||
| 					if(--waiting === 0){ | ||||
| 						deferred.resolve(results); | ||||
| 					} | ||||
| 				} | ||||
| 			}, deferred.reject); | ||||
| 			return deferred.isFulfilled(); | ||||
| 		}); | ||||
| 		return deferred.promise;	// dojo/promise/Promise | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										105
									
								
								debian/missing-sources/dojo/promise/instrumentation.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								debian/missing-sources/dojo/promise/instrumentation.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| define([ | ||||
| 	"./tracer", | ||||
| 	"../has", | ||||
| 	"../_base/lang", | ||||
| 	"../_base/array" | ||||
| ], function(tracer, has, lang, arrayUtil){ | ||||
| 	function logError(error, rejection, deferred){ | ||||
| 		var stack = ""; | ||||
| 		if(error && error.stack){ | ||||
| 			stack += error.stack; | ||||
| 		} | ||||
| 		if(rejection && rejection.stack){ | ||||
| 			stack += "\n    ----------------------------------------\n    rejected" + rejection.stack.split("\n").slice(1).join("\n").replace(/^\s+/, " "); | ||||
| 		} | ||||
| 		if(deferred && deferred.stack){ | ||||
| 			stack += "\n    ----------------------------------------\n" + deferred.stack; | ||||
| 		} | ||||
| 		console.error(error, stack); | ||||
| 	} | ||||
|  | ||||
| 	function reportRejections(error, handled, rejection, deferred){ | ||||
| 		if(!handled){ | ||||
| 			logError(error, rejection, deferred); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	var errors = []; | ||||
| 	var activeTimeout = false; | ||||
| 	var unhandledWait = 1000; | ||||
| 	function trackUnhandledRejections(error, handled, rejection, deferred){ | ||||
| 		if(handled){ | ||||
| 			arrayUtil.some(errors, function(obj, ix){ | ||||
| 				if(obj.error === error){ | ||||
| 					errors.splice(ix, 1); | ||||
| 					return true; | ||||
| 				} | ||||
| 			}); | ||||
| 		}else if(!arrayUtil.some(errors, function(obj){ return obj.error === error; })){ | ||||
| 			errors.push({ | ||||
| 				error: error, | ||||
| 				rejection: rejection, | ||||
| 				deferred: deferred, | ||||
| 				timestamp: new Date().getTime() | ||||
| 			}); | ||||
| 		} | ||||
|  | ||||
| 		if(!activeTimeout){ | ||||
| 			activeTimeout = setTimeout(logRejected, unhandledWait); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	function logRejected(){ | ||||
| 		var now = new Date().getTime(); | ||||
| 		var reportBefore = now - unhandledWait; | ||||
| 		errors = arrayUtil.filter(errors, function(obj){ | ||||
| 			if(obj.timestamp < reportBefore){ | ||||
| 				logError(obj.error, obj.rejection, obj.deferred); | ||||
| 				return false; | ||||
| 			} | ||||
| 			return true; | ||||
| 		}); | ||||
|  | ||||
| 		if(errors.length){ | ||||
| 			activeTimeout = setTimeout(logRejected, errors[0].timestamp + unhandledWait - now); | ||||
| 		}else{ | ||||
| 			activeTimeout = false; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return function(Deferred){ | ||||
| 		// summary: | ||||
| 		//		Initialize instrumentation for the Deferred class. | ||||
| 		// description: | ||||
| 		//		Initialize instrumentation for the Deferred class. | ||||
| 		//		Done automatically by `dojo/Deferred` if the | ||||
| 		//		`deferredInstrumentation` and `useDeferredInstrumentation` | ||||
| 		//		config options are set. | ||||
| 		// | ||||
| 		//		Sets up `dojo/promise/tracer` to log to the console. | ||||
| 		// | ||||
| 		//		Sets up instrumentation of rejected deferreds so unhandled | ||||
| 		//		errors are logged to the console. | ||||
|  | ||||
| 		var usage = has("config-useDeferredInstrumentation"); | ||||
| 		if(usage){ | ||||
| 			tracer.on("resolved", lang.hitch(console, "log", "resolved")); | ||||
| 			tracer.on("rejected", lang.hitch(console, "log", "rejected")); | ||||
| 			tracer.on("progress", lang.hitch(console, "log", "progress")); | ||||
|  | ||||
| 			var args = []; | ||||
| 			if(typeof usage === "string"){ | ||||
| 				args = usage.split(","); | ||||
| 				usage = args.shift(); | ||||
| 			} | ||||
| 			if(usage === "report-rejections"){ | ||||
| 				Deferred.instrumentRejected = reportRejections; | ||||
| 			}else if(usage === "report-unhandled-rejections" || usage === true || usage === 1){ | ||||
| 				Deferred.instrumentRejected = trackUnhandledRejections; | ||||
| 				unhandledWait = parseInt(args[0], 10) || unhandledWait; | ||||
| 			}else{ | ||||
| 				throw new Error("Unsupported instrumentation usage <" + usage + ">"); | ||||
| 			} | ||||
| 		} | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										85
									
								
								debian/missing-sources/dojo/promise/tracer.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								debian/missing-sources/dojo/promise/tracer.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| define([ | ||||
| 	"../_base/lang", | ||||
| 	"./Promise", | ||||
| 	"../Evented" | ||||
| ], function(lang, Promise, Evented){ | ||||
| 	"use strict"; | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/promise/tracer | ||||
|  | ||||
| 	/*===== | ||||
| 	return { | ||||
| 		// summary: | ||||
| 		//		Trace promise fulfillment. | ||||
| 		// description: | ||||
| 		//		Trace promise fulfillment. Calling `.trace()` or `.traceError()` on a | ||||
| 		//		promise enables tracing. Will emit `resolved`, `rejected` or `progress` | ||||
| 		//		events. | ||||
|  | ||||
| 		on: function(type, listener){ | ||||
| 			// summary: | ||||
| 			//		Subscribe to traces. | ||||
| 			// description: | ||||
| 			//		See `dojo/Evented#on()`. | ||||
| 			// type: String | ||||
| 			//		`resolved`, `rejected`, or `progress` | ||||
| 			// listener: Function | ||||
| 			//		The listener is passed the traced value and any arguments | ||||
| 			//		that were used with the `.trace()` call. | ||||
| 		} | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
| 	var evented = new Evented; | ||||
| 	var emit = evented.emit; | ||||
| 	evented.emit = null; | ||||
| 	// Emit events asynchronously since they should not change the promise state. | ||||
| 	function emitAsync(args){ | ||||
| 		setTimeout(function(){ | ||||
| 			emit.apply(evented, args); | ||||
| 		}, 0); | ||||
| 	} | ||||
|  | ||||
| 	Promise.prototype.trace = function(){ | ||||
| 		// summary: | ||||
| 		//		Trace the promise. | ||||
| 		// description: | ||||
| 		//		Tracing allows you to transparently log progress, | ||||
| 		//		resolution and rejection of promises, without affecting the | ||||
| 		//		promise itself. Any arguments passed to `trace()` are | ||||
| 		//		emitted in trace events. See `dojo/promise/tracer` on how | ||||
| 		//		to handle traces. | ||||
| 		// returns: dojo/promise/Promise | ||||
| 		//		The promise instance `trace()` is called on. | ||||
|  | ||||
| 		var args = lang._toArray(arguments); | ||||
| 		this.then( | ||||
| 			function(value){ emitAsync(["resolved", value].concat(args)); }, | ||||
| 			function(error){ emitAsync(["rejected", error].concat(args)); }, | ||||
| 			function(update){ emitAsync(["progress", update].concat(args)); } | ||||
| 		); | ||||
| 		return this; | ||||
| 	}; | ||||
|  | ||||
| 	Promise.prototype.traceRejected = function(){ | ||||
| 		// summary: | ||||
| 		//		Trace rejection of the promise. | ||||
| 		// description: | ||||
| 		//		Tracing allows you to transparently log progress, | ||||
| 		//		resolution and rejection of promises, without affecting the | ||||
| 		//		promise itself. Any arguments passed to `trace()` are | ||||
| 		//		emitted in trace events. See `dojo/promise/tracer` on how | ||||
| 		//		to handle traces. | ||||
| 		// returns: dojo/promise/Promise | ||||
| 		//		The promise instance `traceRejected()` is called on. | ||||
|  | ||||
| 		var args = lang._toArray(arguments); | ||||
| 		this.otherwise(function(error){ | ||||
| 			emitAsync(["rejected", error].concat(args)); | ||||
| 		}); | ||||
| 		return this; | ||||
| 	}; | ||||
|  | ||||
| 	return evented; | ||||
| }); | ||||
							
								
								
									
										705
									
								
								debian/missing-sources/dojo/query.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										705
									
								
								debian/missing-sources/dojo/query.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,705 @@ | ||||
| define(["./_base/kernel", "./has", "./dom", "./on", "./_base/array", "./_base/lang", "./selector/_loader", "./selector/_loader!default"], | ||||
| 	function(dojo, has, dom, on, array, lang, loader, defaultEngine){ | ||||
|  | ||||
| 	"use strict"; | ||||
|  | ||||
| 	has.add("array-extensible", function(){ | ||||
| 		// test to see if we can extend an array (not supported in old IE) | ||||
| 		return lang.delegate([], {length: 1}).length == 1 && !has("bug-for-in-skips-shadowed"); | ||||
| 	}); | ||||
| 	 | ||||
| 	var ap = Array.prototype, aps = ap.slice, apc = ap.concat, forEach = array.forEach; | ||||
|  | ||||
| 	var tnl = function(/*Array*/ a, /*dojo/NodeList?*/ parent, /*Function?*/ NodeListCtor){ | ||||
| 		// summary: | ||||
| 		//		decorate an array to make it look like a `dojo/NodeList`. | ||||
| 		// a: | ||||
| 		//		Array of nodes to decorate. | ||||
| 		// parent: | ||||
| 		//		An optional parent NodeList that generated the current | ||||
| 		//		list of nodes. Used to call _stash() so the parent NodeList | ||||
| 		//		can be accessed via end() later. | ||||
| 		// NodeListCtor: | ||||
| 		//		An optional constructor function to use for any | ||||
| 		//		new NodeList calls. This allows a certain chain of | ||||
| 		//		NodeList calls to use a different object than dojo/NodeList. | ||||
| 		var nodeList = new (NodeListCtor || this._NodeListCtor || nl)(a); | ||||
| 		return parent ? nodeList._stash(parent) : nodeList; | ||||
| 	}; | ||||
|  | ||||
| 	var loopBody = function(f, a, o){ | ||||
| 		a = [0].concat(aps.call(a, 0)); | ||||
| 		o = o || dojo.global; | ||||
| 		return function(node){ | ||||
| 			a[0] = node; | ||||
| 			return f.apply(o, a); | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	// adapters | ||||
|  | ||||
| 	var adaptAsForEach = function(f, o){ | ||||
| 		// summary: | ||||
| 		//		adapts a single node function to be used in the forEach-type | ||||
| 		//		actions. The initial object is returned from the specialized | ||||
| 		//		function. | ||||
| 		// f: Function | ||||
| 		//		a function to adapt | ||||
| 		// o: Object? | ||||
| 		//		an optional context for f | ||||
| 		return function(){ | ||||
| 			this.forEach(loopBody(f, arguments, o)); | ||||
| 			return this;	// Object | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	var adaptAsMap = function(f, o){ | ||||
| 		// summary: | ||||
| 		//		adapts a single node function to be used in the map-type | ||||
| 		//		actions. The return is a new array of values, as via `dojo.map` | ||||
| 		// f: Function | ||||
| 		//		a function to adapt | ||||
| 		// o: Object? | ||||
| 		//		an optional context for f | ||||
| 		return function(){ | ||||
| 			return this.map(loopBody(f, arguments, o)); | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	var adaptAsFilter = function(f, o){ | ||||
| 		// summary: | ||||
| 		//		adapts a single node function to be used in the filter-type actions | ||||
| 		// f: Function | ||||
| 		//		a function to adapt | ||||
| 		// o: Object? | ||||
| 		//		an optional context for f | ||||
| 		return function(){ | ||||
| 			return this.filter(loopBody(f, arguments, o)); | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	var adaptWithCondition = function(f, g, o){ | ||||
| 		// summary: | ||||
| 		//		adapts a single node function to be used in the map-type | ||||
| 		//		actions, behaves like forEach() or map() depending on arguments | ||||
| 		// f: Function | ||||
| 		//		a function to adapt | ||||
| 		// g: Function | ||||
| 		//		a condition function, if true runs as map(), otherwise runs as forEach() | ||||
| 		// o: Object? | ||||
| 		//		an optional context for f and g | ||||
| 		return function(){ | ||||
| 			var a = arguments, body = loopBody(f, a, o); | ||||
| 			if(g.call(o || dojo.global, a)){ | ||||
| 				return this.map(body);	// self | ||||
| 			} | ||||
| 			this.forEach(body); | ||||
| 			return this;	// self | ||||
| 		}; | ||||
| 	}; | ||||
|  | ||||
| 	var NodeList = function(array){ | ||||
| 		// summary: | ||||
| 		//		Array-like object which adds syntactic | ||||
| 		//		sugar for chaining, common iteration operations, animation, and | ||||
| 		//		node manipulation. NodeLists are most often returned as the | ||||
| 		//		result of dojo.query() calls. | ||||
| 		// description: | ||||
| 		//		NodeList instances provide many utilities that reflect | ||||
| 		//		core Dojo APIs for Array iteration and manipulation, DOM | ||||
| 		//		manipulation, and event handling. Instead of needing to dig up | ||||
| 		//		functions in the dojo.* namespace, NodeLists generally make the | ||||
| 		//		full power of Dojo available for DOM manipulation tasks in a | ||||
| 		//		simple, chainable way. | ||||
| 		// example: | ||||
| 		//		create a node list from a node | ||||
| 		//		|	new query.NodeList(dojo.byId("foo")); | ||||
| 		// example: | ||||
| 		//		get a NodeList from a CSS query and iterate on it | ||||
| 		//		|	var l = dojo.query(".thinger"); | ||||
| 		//		|	l.forEach(function(node, index, nodeList){ | ||||
| 		//		|		console.log(index, node.innerHTML); | ||||
| 		//		|	}); | ||||
| 		// example: | ||||
| 		//		use native and Dojo-provided array methods to manipulate a | ||||
| 		//		NodeList without needing to use dojo.* functions explicitly: | ||||
| 		//		|	var l = dojo.query(".thinger"); | ||||
| 		//		|	// since NodeLists are real arrays, they have a length | ||||
| 		//		|	// property that is both readable and writable and | ||||
| 		//		|	// push/pop/shift/unshift methods | ||||
| 		//		|	console.log(l.length); | ||||
| 		//		|	l.push(dojo.create("span")); | ||||
| 		//		| | ||||
| 		//		|	// dojo's normalized array methods work too: | ||||
| 		//		|	console.log( l.indexOf(dojo.byId("foo")) ); | ||||
| 		//		|	// ...including the special "function as string" shorthand | ||||
| 		//		|	console.log( l.every("item.nodeType == 1") ); | ||||
| 		//		| | ||||
| 		//		|	// NodeLists can be [..] indexed, or you can use the at() | ||||
| 		//		|	// function to get specific items wrapped in a new NodeList: | ||||
| 		//		|	var node = l[3]; // the 4th element | ||||
| 		//		|	var newList = l.at(1, 3); // the 2nd and 4th elements | ||||
| 		// example: | ||||
| 		//		the style functions you expect are all there too: | ||||
| 		//		|	// style() as a getter... | ||||
| 		//		|	var borders = dojo.query(".thinger").style("border"); | ||||
| 		//		|	// ...and as a setter: | ||||
| 		//		|	dojo.query(".thinger").style("border", "1px solid black"); | ||||
| 		//		|	// class manipulation | ||||
| 		//		|	dojo.query("li:nth-child(even)").addClass("even"); | ||||
| 		//		|	// even getting the coordinates of all the items | ||||
| 		//		|	var coords = dojo.query(".thinger").coords(); | ||||
| 		// example: | ||||
| 		//		DOM manipulation functions from the dojo.* namespace area also available: | ||||
| 		//		|	// remove all of the elements in the list from their | ||||
| 		//		|	// parents (akin to "deleting" them from the document) | ||||
| 		//		|	dojo.query(".thinger").orphan(); | ||||
| 		//		|	// place all elements in the list at the front of #foo | ||||
| 		//		|	dojo.query(".thinger").place("foo", "first"); | ||||
| 		// example: | ||||
| 		//		Event handling couldn't be easier. `dojo.connect` is mapped in, | ||||
| 		//		and shortcut handlers are provided for most DOM events: | ||||
| 		//		|	// like dojo.connect(), but with implicit scope | ||||
| 		//		|	dojo.query("li").connect("onclick", console, "log"); | ||||
| 		//		| | ||||
| 		//		|	// many common event handlers are already available directly: | ||||
| 		//		|	dojo.query("li").onclick(console, "log"); | ||||
| 		//		|	var toggleHovered = dojo.hitch(dojo, "toggleClass", "hovered"); | ||||
| 		//		|	dojo.query("p") | ||||
| 		//		|		.onmouseenter(toggleHovered) | ||||
| 		//		|		.onmouseleave(toggleHovered); | ||||
| 		// example: | ||||
| 		//		chainability is a key advantage of NodeLists: | ||||
| 		//		|	dojo.query(".thinger") | ||||
| 		//		|		.onclick(function(e){ /* ... */ }) | ||||
| 		//		|		.at(1, 3, 8) // get a subset | ||||
| 		//		|			.style("padding", "5px") | ||||
| 		//		|			.forEach(console.log); | ||||
| 		var isNew = this instanceof nl && has("array-extensible"); | ||||
| 		if(typeof array == "number"){ | ||||
| 			array = Array(array); | ||||
| 		} | ||||
| 		var nodeArray = (array && "length" in array) ? array : arguments; | ||||
| 		if(isNew || !nodeArray.sort){ | ||||
| 			// make sure it's a real array before we pass it on to be wrapped  | ||||
| 			var target = isNew ? this : [], | ||||
| 				l = target.length = nodeArray.length; | ||||
| 			for(var i = 0; i < l; i++){ | ||||
| 				target[i] = nodeArray[i]; | ||||
| 			} | ||||
| 			if(isNew){ | ||||
| 				// called with new operator, this means we are going to use this instance and push | ||||
| 				// the nodes on to it. This is usually much faster since the NodeList properties | ||||
| 				//	don't need to be copied (unless the list of nodes is extremely large). | ||||
| 				return target; | ||||
| 			} | ||||
| 			nodeArray = target; | ||||
| 		} | ||||
| 		// called without new operator, use a real array and copy prototype properties, | ||||
| 		// this is slower and exists for back-compat. Should be removed in 2.0. | ||||
| 		lang._mixin(nodeArray, nlp); | ||||
| 		nodeArray._NodeListCtor = function(array){ | ||||
| 			// call without new operator to preserve back-compat behavior | ||||
| 			return nl(array); | ||||
| 		}; | ||||
| 		return nodeArray; | ||||
| 	}; | ||||
| 	 | ||||
| 	var nl = NodeList, nlp = nl.prototype =  | ||||
| 		has("array-extensible") ? [] : {};// extend an array if it is extensible | ||||
|  | ||||
| 	// expose adapters and the wrapper as private functions | ||||
|  | ||||
| 	nl._wrap = nlp._wrap = tnl; | ||||
| 	nl._adaptAsMap = adaptAsMap; | ||||
| 	nl._adaptAsForEach = adaptAsForEach; | ||||
| 	nl._adaptAsFilter  = adaptAsFilter; | ||||
| 	nl._adaptWithCondition = adaptWithCondition; | ||||
|  | ||||
| 	// mass assignment | ||||
|  | ||||
| 	// add array redirectors | ||||
| 	forEach(["slice", "splice"], function(name){ | ||||
| 		var f = ap[name]; | ||||
| 		//Use a copy of the this array via this.slice() to allow .end() to work right in the splice case. | ||||
| 		// CANNOT apply ._stash()/end() to splice since it currently modifies | ||||
| 		// the existing this array -- it would break backward compatibility if we copy the array before | ||||
| 		// the splice so that we can use .end(). So only doing the stash option to this._wrap for slice. | ||||
| 		nlp[name] = function(){ return this._wrap(f.apply(this, arguments), name == "slice" ? this : null); }; | ||||
| 	}); | ||||
| 	// concat should be here but some browsers with native NodeList have problems with it | ||||
|  | ||||
| 	// add array.js redirectors | ||||
| 	forEach(["indexOf", "lastIndexOf", "every", "some"], function(name){ | ||||
| 		var f = array[name]; | ||||
| 		nlp[name] = function(){ return f.apply(dojo, [this].concat(aps.call(arguments, 0))); }; | ||||
| 	}); | ||||
|  | ||||
| 	lang.extend(NodeList, { | ||||
| 		// copy the constructors | ||||
| 		constructor: nl, | ||||
| 		_NodeListCtor: nl, | ||||
| 		toString: function(){ | ||||
| 			// Array.prototype.toString can't be applied to objects, so we use join | ||||
| 			return this.join(","); | ||||
| 		}, | ||||
| 		_stash: function(parent){ | ||||
| 			// summary: | ||||
| 			//		private function to hold to a parent NodeList. end() to return the parent NodeList. | ||||
| 			// | ||||
| 			// example: | ||||
| 			//		How to make a `dojo/NodeList` method that only returns the third node in | ||||
| 			//		the dojo/NodeList but allows access to the original NodeList by using this._stash: | ||||
| 			//	|	dojo.extend(NodeList, { | ||||
| 			//	|		third: function(){ | ||||
| 			//	|			var newNodeList = NodeList(this[2]); | ||||
| 			//	|			return newNodeList._stash(this); | ||||
| 			//	|		} | ||||
| 			//	|	}); | ||||
| 			//	|	// then see how _stash applies a sub-list, to be .end()'ed out of | ||||
| 			//	|	dojo.query(".foo") | ||||
| 			//	|		.third() | ||||
| 			//	|			.addClass("thirdFoo") | ||||
| 			//	|		.end() | ||||
| 			//	|		// access to the orig .foo list | ||||
| 			//	|		.removeClass("foo") | ||||
| 			//	| | ||||
| 			// | ||||
| 			this._parent = parent; | ||||
| 			return this; // dojo/NodeList | ||||
| 		}, | ||||
|  | ||||
| 		on: function(eventName, listener){ | ||||
| 			// summary: | ||||
| 			//		Listen for events on the nodes in the NodeList. Basic usage is: | ||||
| 			//		| query(".my-class").on("click", listener); | ||||
| 			//		This supports event delegation by using selectors as the first argument with the event names as | ||||
| 			//		pseudo selectors. For example: | ||||
| 			//		| dojo.query("#my-list").on("li:click", listener); | ||||
| 			//		This will listen for click events within `<li>` elements that are inside the `#my-list` element. | ||||
| 			//		Because on supports CSS selector syntax, we can use comma-delimited events as well: | ||||
| 			//		| dojo.query("#my-list").on("li button:mouseover, li:click", listener); | ||||
| 			var handles = this.map(function(node){ | ||||
| 				return on(node, eventName, listener); // TODO: apply to the NodeList so the same selector engine is used for matches | ||||
| 			}); | ||||
| 			handles.remove = function(){ | ||||
| 				for(var i = 0; i < handles.length; i++){ | ||||
| 					handles[i].remove(); | ||||
| 				} | ||||
| 			}; | ||||
| 			return handles; | ||||
| 		}, | ||||
|  | ||||
| 		end: function(){ | ||||
| 			// summary: | ||||
| 			//		Ends use of the current `NodeList` by returning the previous NodeList | ||||
| 			//		that generated the current NodeList. | ||||
| 			// description: | ||||
| 			//		Returns the `NodeList` that generated the current `NodeList`. If there | ||||
| 			//		is no parent NodeList, an empty NodeList is returned. | ||||
| 			// example: | ||||
| 			//	|	dojo.query("a") | ||||
| 			//	|		.filter(".disabled") | ||||
| 			//	|			// operate on the anchors that only have a disabled class | ||||
| 			//	|			.style("color", "grey") | ||||
| 			//	|		.end() | ||||
| 			//	|		// jump back to the list of anchors | ||||
| 			//	|		.style(...) | ||||
| 			// | ||||
| 			if(this._parent){ | ||||
| 				return this._parent; | ||||
| 			}else{ | ||||
| 				//Just return empty list. | ||||
| 				return new this._NodeListCtor(0); | ||||
| 			} | ||||
| 		}, | ||||
|  | ||||
| 		// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array#Methods | ||||
|  | ||||
| 		// FIXME: handle return values for #3244 | ||||
| 		//		http://trac.dojotoolkit.org/ticket/3244 | ||||
|  | ||||
| 		// FIXME: | ||||
| 		//		need to wrap or implement: | ||||
| 		//			join (perhaps w/ innerHTML/outerHTML overload for toString() of items?) | ||||
| 		//			reduce | ||||
| 		//			reduceRight | ||||
|  | ||||
| 		/*===== | ||||
| 		slice: function(begin, end){ | ||||
| 			// summary: | ||||
| 			//		Returns a new NodeList, maintaining this one in place | ||||
| 			// description: | ||||
| 			//		This method behaves exactly like the Array.slice method | ||||
| 			//		with the caveat that it returns a dojo/NodeList and not a | ||||
| 			//		raw Array. For more details, see Mozilla's [slice | ||||
| 			//		documentation](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/slice) | ||||
| 			// begin: Integer | ||||
| 			//		Can be a positive or negative integer, with positive | ||||
| 			//		integers noting the offset to begin at, and negative | ||||
| 			//		integers denoting an offset from the end (i.e., to the left | ||||
| 			//		of the end) | ||||
| 			// end: Integer? | ||||
| 			//		Optional parameter to describe what position relative to | ||||
| 			//		the NodeList's zero index to end the slice at. Like begin, | ||||
| 			//		can be positive or negative. | ||||
| 			return this._wrap(a.slice.apply(this, arguments)); | ||||
| 		}, | ||||
|  | ||||
| 		splice: function(index, howmany, item){ | ||||
| 			// summary: | ||||
| 			//		Returns a new NodeList, manipulating this NodeList based on | ||||
| 			//		the arguments passed, potentially splicing in new elements | ||||
| 			//		at an offset, optionally deleting elements | ||||
| 			// description: | ||||
| 			//		This method behaves exactly like the Array.splice method | ||||
| 			//		with the caveat that it returns a dojo/NodeList and not a | ||||
| 			//		raw Array. For more details, see Mozilla's [splice | ||||
| 			//		documentation](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice) | ||||
| 			//		For backwards compatibility, calling .end() on the spliced NodeList | ||||
| 			//		does not return the original NodeList -- splice alters the NodeList in place. | ||||
| 			// index: Integer | ||||
| 			//		begin can be a positive or negative integer, with positive | ||||
| 			//		integers noting the offset to begin at, and negative | ||||
| 			//		integers denoting an offset from the end (i.e., to the left | ||||
| 			//		of the end) | ||||
| 			// howmany: Integer? | ||||
| 			//		Optional parameter to describe what position relative to | ||||
| 			//		the NodeList's zero index to end the slice at. Like begin, | ||||
| 			//		can be positive or negative. | ||||
| 			// item: Object...? | ||||
| 			//		Any number of optional parameters may be passed in to be | ||||
| 			//		spliced into the NodeList | ||||
| 			return this._wrap(a.splice.apply(this, arguments));	// dojo/NodeList | ||||
| 		}, | ||||
|  | ||||
| 		indexOf: function(value, fromIndex){ | ||||
| 			// summary: | ||||
| 			//		see dojo.indexOf(). The primary difference is that the acted-on | ||||
| 			//		array is implicitly this NodeList | ||||
| 			// value: Object | ||||
| 			//		The value to search for. | ||||
| 			// fromIndex: Integer? | ||||
| 			//		The location to start searching from. Optional. Defaults to 0. | ||||
| 			// description: | ||||
| 			//		For more details on the behavior of indexOf, see Mozilla's | ||||
| 			//		[indexOf | ||||
| 			//		docs](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf) | ||||
| 			// returns: | ||||
| 			//		Positive Integer or 0 for a match, -1 of not found. | ||||
| 			return d.indexOf(this, value, fromIndex); // Integer | ||||
| 		}, | ||||
|  | ||||
| 		lastIndexOf: function(value, fromIndex){ | ||||
| 			// summary: | ||||
| 			//		see dojo.lastIndexOf(). The primary difference is that the | ||||
| 			//		acted-on array is implicitly this NodeList | ||||
| 			// description: | ||||
| 			//		For more details on the behavior of lastIndexOf, see | ||||
| 			//		Mozilla's [lastIndexOf | ||||
| 			//		docs](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf) | ||||
| 			// value: Object | ||||
| 			//		The value to search for. | ||||
| 			// fromIndex: Integer? | ||||
| 			//		The location to start searching from. Optional. Defaults to 0. | ||||
| 			// returns: | ||||
| 			//		Positive Integer or 0 for a match, -1 of not found. | ||||
| 			return d.lastIndexOf(this, value, fromIndex); // Integer | ||||
| 		}, | ||||
|  | ||||
| 		every: function(callback, thisObject){ | ||||
| 			// summary: | ||||
| 			//		see `dojo.every()` and the [Array.every | ||||
| 			//		docs](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every). | ||||
| 			//		Takes the same structure of arguments and returns as | ||||
| 			//		dojo.every() with the caveat that the passed array is | ||||
| 			//		implicitly this NodeList | ||||
| 			// callback: Function | ||||
| 			//		the callback | ||||
| 			// thisObject: Object? | ||||
| 			//		the context | ||||
| 			return d.every(this, callback, thisObject); // Boolean | ||||
| 		}, | ||||
|  | ||||
| 		some: function(callback, thisObject){ | ||||
| 			// summary: | ||||
| 			//		Takes the same structure of arguments and returns as | ||||
| 			//		`dojo.some()` with the caveat that the passed array is | ||||
| 			//		implicitly this NodeList.  See `dojo.some()` and Mozilla's | ||||
| 			//		[Array.some | ||||
| 			//		documentation](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some). | ||||
| 			// callback: Function | ||||
| 			//		the callback | ||||
| 			// thisObject: Object? | ||||
| 			//		the context | ||||
| 			return d.some(this, callback, thisObject); // Boolean | ||||
| 		}, | ||||
| 		=====*/ | ||||
|  | ||||
| 		concat: function(item){ | ||||
| 			// summary: | ||||
| 			//		Returns a new NodeList comprised of items in this NodeList | ||||
| 			//		as well as items passed in as parameters | ||||
| 			// description: | ||||
| 			//		This method behaves exactly like the Array.concat method | ||||
| 			//		with the caveat that it returns a `NodeList` and not a | ||||
| 			//		raw Array. For more details, see the [Array.concat | ||||
| 			//		docs](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/concat) | ||||
| 			// item: Object? | ||||
| 			//		Any number of optional parameters may be passed in to be | ||||
| 			//		spliced into the NodeList | ||||
|  | ||||
| 			//return this._wrap(apc.apply(this, arguments)); | ||||
| 			// the line above won't work for the native NodeList, or for Dojo NodeLists either :-( | ||||
|  | ||||
| 			// implementation notes: | ||||
| 			// Array.concat() doesn't recognize native NodeLists or Dojo NodeLists | ||||
| 			// as arrays, and so does not inline them into a unioned array, but | ||||
| 			// appends them as single entities. Both the original NodeList and the | ||||
| 			// items passed in as parameters must be converted to raw Arrays | ||||
| 			// and then the concatenation result may be re-_wrap()ed as a Dojo NodeList. | ||||
|  | ||||
| 			var t = aps.call(this, 0), | ||||
| 				m = array.map(arguments, function(a){ | ||||
| 					return aps.call(a, 0); | ||||
| 				}); | ||||
| 			return this._wrap(apc.apply(t, m), this);	// dojo/NodeList | ||||
| 		}, | ||||
|  | ||||
| 		map: function(/*Function*/ func, /*Function?*/ obj){ | ||||
| 			// summary: | ||||
| 			//		see dojo.map(). The primary difference is that the acted-on | ||||
| 			//		array is implicitly this NodeList and the return is a | ||||
| 			//		NodeList (a subclass of Array) | ||||
| 			return this._wrap(array.map(this, func, obj), this); // dojo/NodeList | ||||
| 		}, | ||||
|  | ||||
| 		forEach: function(callback, thisObj){ | ||||
| 			// summary: | ||||
| 			//		see `dojo.forEach()`. The primary difference is that the acted-on | ||||
| 			//		array is implicitly this NodeList. If you want the option to break out | ||||
| 			//		of the forEach loop, use every() or some() instead. | ||||
| 			forEach(this, callback, thisObj); | ||||
| 			// non-standard return to allow easier chaining | ||||
| 			return this; // dojo/NodeList | ||||
| 		}, | ||||
| 		filter: function(/*String|Function*/ filter){ | ||||
| 			// summary: | ||||
| 			//		"masks" the built-in javascript filter() method (supported | ||||
| 			//		in Dojo via `dojo.filter`) to support passing a simple | ||||
| 			//		string filter in addition to supporting filtering function | ||||
| 			//		objects. | ||||
| 			// filter: | ||||
| 			//		If a string, a CSS rule like ".thinger" or "div > span". | ||||
| 			// example: | ||||
| 			//		"regular" JS filter syntax as exposed in dojo.filter: | ||||
| 			//		|	dojo.query("*").filter(function(item){ | ||||
| 			//		|		// highlight every paragraph | ||||
| 			//		|		return (item.nodeName == "p"); | ||||
| 			//		|	}).style("backgroundColor", "yellow"); | ||||
| 			// example: | ||||
| 			//		the same filtering using a CSS selector | ||||
| 			//		|	dojo.query("*").filter("p").styles("backgroundColor", "yellow"); | ||||
|  | ||||
| 			var a = arguments, items = this, start = 0; | ||||
| 			if(typeof filter == "string"){ // inline'd type check | ||||
| 				items = query._filterResult(this, a[0]); | ||||
| 				if(a.length == 1){ | ||||
| 					// if we only got a string query, pass back the filtered results | ||||
| 					return items._stash(this); // dojo/NodeList | ||||
| 				} | ||||
| 				// if we got a callback, run it over the filtered items | ||||
| 				start = 1; | ||||
| 			} | ||||
| 			return this._wrap(array.filter(items, a[start], a[start + 1]), this);	// dojo/NodeList | ||||
| 		}, | ||||
| 		instantiate: function(/*String|Object*/ declaredClass, /*Object?*/ properties){ | ||||
| 			// summary: | ||||
| 			//		Create a new instance of a specified class, using the | ||||
| 			//		specified properties and each node in the NodeList as a | ||||
| 			//		srcNodeRef. | ||||
| 			// example: | ||||
| 			//		Grabs all buttons in the page and converts them to dijit/form/Button's. | ||||
| 			//	|	var buttons = query("button").instantiate(Button, {showLabel: true}); | ||||
| 			var c = lang.isFunction(declaredClass) ? declaredClass : lang.getObject(declaredClass); | ||||
| 			properties = properties || {}; | ||||
| 			return this.forEach(function(node){ | ||||
| 				new c(properties, node); | ||||
| 			});	// dojo/NodeList | ||||
| 		}, | ||||
| 		at: function(/*===== index =====*/){ | ||||
| 			// summary: | ||||
| 			//		Returns a new NodeList comprised of items in this NodeList | ||||
| 			//		at the given index or indices. | ||||
| 			// | ||||
| 			// index: Integer... | ||||
| 			//		One or more 0-based indices of items in the current | ||||
| 			//		NodeList. A negative index will start at the end of the | ||||
| 			//		list and go backwards. | ||||
| 			// | ||||
| 			// example: | ||||
| 			//	Shorten the list to the first, second, and third elements | ||||
| 			//	|	query("a").at(0, 1, 2).forEach(fn); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//	Retrieve the first and last elements of a unordered list: | ||||
| 			//	|	query("ul > li").at(0, -1).forEach(cb); | ||||
| 			// | ||||
| 			// example: | ||||
| 			//	Do something for the first element only, but end() out back to | ||||
| 			//	the original list and continue chaining: | ||||
| 			//	|	query("a").at(0).onclick(fn).end().forEach(function(n){ | ||||
| 			//	|		console.log(n); // all anchors on the page. | ||||
| 			//	|	}) | ||||
|  | ||||
| 			var t = new this._NodeListCtor(0); | ||||
| 			forEach(arguments, function(i){ | ||||
| 				if(i < 0){ i = this.length + i; } | ||||
| 				if(this[i]){ t.push(this[i]); } | ||||
| 			}, this); | ||||
| 			return t._stash(this); // dojo/NodeList | ||||
| 		} | ||||
| 	}); | ||||
|  | ||||
| 	function queryForEngine(engine, NodeList){ | ||||
| 		var query = function(/*String*/ query, /*String|DOMNode?*/ root){ | ||||
| 			// summary: | ||||
| 			//		Returns nodes which match the given CSS selector, searching the | ||||
| 			//		entire document by default but optionally taking a node to scope | ||||
| 			//		the search by. Returns an instance of NodeList. | ||||
| 			if(typeof root == "string"){ | ||||
| 				root = dom.byId(root); | ||||
| 				if(!root){ | ||||
| 					return new NodeList([]); | ||||
| 				} | ||||
| 			} | ||||
| 			var results = typeof query == "string" ? engine(query, root) : query ? (query.end && query.on) ? query : [query] : []; | ||||
| 			if(results.end && results.on){ | ||||
| 				// already wrapped | ||||
| 				return results; | ||||
| 			} | ||||
| 			return new NodeList(results); | ||||
| 		}; | ||||
| 		query.matches = engine.match || function(node, selector, root){ | ||||
| 			// summary: | ||||
| 			//		Test to see if a node matches a selector | ||||
| 			return query.filter([node], selector, root).length > 0; | ||||
| 		}; | ||||
| 		// the engine provides a filtering function, use it to for matching | ||||
| 		query.filter = engine.filter || function(nodes, selector, root){ | ||||
| 			// summary: | ||||
| 			//		Filters an array of nodes. Note that this does not guarantee to return a NodeList, just an array. | ||||
| 			return query(selector, root).filter(function(node){ | ||||
| 				return array.indexOf(nodes, node) > -1; | ||||
| 			}); | ||||
| 		}; | ||||
| 		if(typeof engine != "function"){ | ||||
| 			var search = engine.search; | ||||
| 			engine = function(selector, root){ | ||||
| 				// Slick does it backwards (or everyone else does it backwards, probably the latter) | ||||
| 				return search(root || document, selector); | ||||
| 			}; | ||||
| 		} | ||||
| 		return query; | ||||
| 	} | ||||
| 	var query = queryForEngine(defaultEngine, NodeList); | ||||
| 	/*===== | ||||
| 	query = function(selector, context){ | ||||
| 		// summary: | ||||
| 		//		This modules provides DOM querying functionality. The module export is a function | ||||
| 		//		that can be used to query for DOM nodes by CSS selector and returns a NodeList | ||||
| 		//		representing the matching nodes. | ||||
| 		// selector: String | ||||
| 		//		A CSS selector to search for. | ||||
| 		// context: String|DomNode? | ||||
| 		//		An optional context to limit the searching scope. Only nodes under `context` will be | ||||
| 		//		scanned. | ||||
| 		// example: | ||||
| 		//		add an onclick handler to every submit button in the document | ||||
| 		//		which causes the form to be sent via Ajax instead: | ||||
| 		//	|	require(["dojo/query"], function(query){ | ||||
| 		//	|		query("input[type='submit']").on("click", function(e){ | ||||
| 		//	|			dojo.stopEvent(e); // prevent sending the form | ||||
| 		//	|			var btn = e.target; | ||||
| 		//	|			dojo.xhrPost({ | ||||
| 		//	|				form: btn.form, | ||||
| 		//	|				load: function(data){ | ||||
| 		//	|					// replace the form with the response | ||||
| 		//	|					var div = dojo.doc.createElement("div"); | ||||
| 		//	|					dojo.place(div, btn.form, "after"); | ||||
| 		//	|					div.innerHTML = data; | ||||
| 		//	|					dojo.style(btn.form, "display", "none"); | ||||
| 		//	|				} | ||||
| 		//	|			}); | ||||
| 		//	|		}); | ||||
| 		// |	}); | ||||
| 		// | ||||
| 		// description: | ||||
| 		//		dojo/query is responsible for loading the appropriate query engine and wrapping | ||||
| 		//		its results with a `NodeList`. You can use dojo/query with a specific selector engine | ||||
| 		//		by using it as a plugin. For example, if you installed the sizzle package, you could | ||||
| 		//		use it as the selector engine with: | ||||
| 		//		|	require(["dojo/query!sizzle"], function(query){ | ||||
| 		//		|		query("div")... | ||||
| 		// | ||||
| 		//		The id after the ! can be a module id of the selector engine or one of the following values: | ||||
| 		// | ||||
| 		//		- acme: This is the default engine used by Dojo base, and will ensure that the full | ||||
| 		//		Acme engine is always loaded. | ||||
| 		// | ||||
| 		//		- css2: If the browser has a native selector engine, this will be used, otherwise a | ||||
| 		//		very minimal lightweight selector engine will be loaded that can do simple CSS2 selectors | ||||
| 		//		(by #id, .class, tag, and [name=value] attributes, with standard child or descendant (>) | ||||
| 		//		operators) and nothing more. | ||||
| 		// | ||||
| 		//		- css2.1: If the browser has a native selector engine, this will be used, otherwise the | ||||
| 		//		full Acme engine will be loaded. | ||||
| 		// | ||||
| 		//		- css3: If the browser has a native selector engine with support for CSS3 pseudo | ||||
| 		//		selectors (most modern browsers except IE8), this will be used, otherwise the | ||||
| 		//		full Acme engine will be loaded. | ||||
| 		// | ||||
| 		//		- Or the module id of a selector engine can be used to explicitly choose the selector engine | ||||
| 		// | ||||
| 		//		For example, if you are using CSS3 pseudo selectors in module, you can specify that | ||||
| 		//		you will need support them with: | ||||
| 		//		|	require(["dojo/query!css3"], function(query){ | ||||
| 		//		|		query('#t > h3:nth-child(odd)')... | ||||
| 		// | ||||
| 		//		You can also choose the selector engine/load configuration by setting the query-selector: | ||||
| 		//		For example: | ||||
| 		//		|	<script data-dojo-config="query-selector:'css3'" src="dojo.js"></script> | ||||
| 		// | ||||
| 		return new NodeList(); // dojo/NodeList | ||||
| 	 }; | ||||
| 	 =====*/ | ||||
|  | ||||
| 	// the query that is returned from this module is slightly different than dojo.query, | ||||
| 	// because dojo.query has to maintain backwards compatibility with returning a | ||||
| 	// true array which has performance problems. The query returned from the module | ||||
| 	// does not use true arrays, but rather inherits from Array, making it much faster to | ||||
| 	// instantiate. | ||||
| 	dojo.query = queryForEngine(defaultEngine, function(array){ | ||||
| 		// call it without the new operator to invoke the back-compat behavior that returns a true array | ||||
| 		return NodeList(array);	// dojo/NodeList | ||||
| 	}); | ||||
|  | ||||
| 	query.load = function(id, parentRequire, loaded){ | ||||
| 		// summary: | ||||
| 		//		can be used as AMD plugin to conditionally load new query engine | ||||
| 		// example: | ||||
| 		//	|	require(["dojo/query!custom"], function(qsa){ | ||||
| 		//	|		// loaded selector/custom.js as engine | ||||
| 		//	|		qsa("#foobar").forEach(...); | ||||
| 		//	|	}); | ||||
| 		loader.load(id, parentRequire, function(engine){ | ||||
| 			loaded(queryForEngine(engine, NodeList)); | ||||
| 		}); | ||||
| 	}; | ||||
|  | ||||
| 	dojo._filterQueryResult = query._filterResult = function(nodes, selector, root){ | ||||
| 		return new NodeList(query.filter(nodes, selector, root)); | ||||
| 	}; | ||||
| 	dojo.NodeList = query.NodeList = NodeList; | ||||
| 	return query; | ||||
| }); | ||||
							
								
								
									
										153
									
								
								debian/missing-sources/dojo/ready.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								debian/missing-sources/dojo/ready.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,153 @@ | ||||
| define(["./_base/kernel", "./has", "require", "./has!host-browser?./domReady", "./_base/lang"], function(dojo, has, require, domReady, lang){ | ||||
| 	// module: | ||||
| 	//		dojo/ready | ||||
| 	// note: | ||||
| 	//		This module should be unnecessary in dojo 2.0 | ||||
|  | ||||
| 	var | ||||
| 		// truthy if DOMContentLoaded or better (e.g., window.onload fired) has been achieved | ||||
| 		isDomReady = 0, | ||||
|  | ||||
| 		// The queue of functions waiting to execute as soon as dojo.ready conditions satisfied | ||||
| 		loadQ = [], | ||||
|  | ||||
| 		// prevent recursion in onLoad | ||||
| 		onLoadRecursiveGuard = 0, | ||||
|  | ||||
| 		handleDomReady = function(){ | ||||
| 			isDomReady = 1; | ||||
| 			dojo._postLoad = dojo.config.afterOnLoad = true; | ||||
| 			onEvent(); | ||||
| 		}, | ||||
|  | ||||
| 		onEvent = function(){ | ||||
| 			// Called when some state changes: | ||||
| 			//		- dom ready | ||||
| 			//		- dojo/domReady has finished processing everything in its queue | ||||
| 			//		- task added to loadQ | ||||
| 			//		- require() has finished loading all currently requested modules | ||||
| 			// | ||||
| 			// Run the functions queued with dojo.ready if appropriate. | ||||
|  | ||||
|  | ||||
| 			//guard against recursions into this function | ||||
| 			if(onLoadRecursiveGuard){ | ||||
| 				return; | ||||
| 			} | ||||
| 			onLoadRecursiveGuard = 1; | ||||
|  | ||||
| 			// Run tasks in queue if require() is finished loading modules, the dom is ready, and there are no | ||||
| 			// pending tasks registered via domReady(). | ||||
| 			// The last step is necessary so that a user defined dojo.ready() callback is delayed until after the | ||||
| 			// domReady() calls inside of dojo.	  Failure can be seen on dijit/tests/robot/Dialog_ally.html on IE8 | ||||
| 			// because the dijit/focus.js domReady() callback doesn't execute until after the test starts running. | ||||
| 			while(isDomReady && (!domReady || domReady._Q.length == 0) && (require.idle ? require.idle() : true) && loadQ.length){ | ||||
| 				var f = loadQ.shift(); | ||||
| 				try{ | ||||
| 					f(); | ||||
| 				}catch(e){ | ||||
| 					// force the dojo.js on("error") handler do display the message | ||||
| 					e.info = e.message; | ||||
| 					if(require.signal){ | ||||
| 						require.signal("error", e); | ||||
| 					}else{ | ||||
| 						throw e; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			onLoadRecursiveGuard = 0; | ||||
| 		}; | ||||
|  | ||||
| 	// Check if we should run the next queue operation whenever require() finishes loading modules or domReady | ||||
| 	// finishes processing it's queue. | ||||
| 	require.on && require.on("idle", onEvent); | ||||
| 	if(domReady){ | ||||
| 		domReady._onQEmpty = onEvent; | ||||
| 	} | ||||
|  | ||||
| 	var ready = dojo.ready = dojo.addOnLoad = function(priority, context, callback){ | ||||
| 		// summary: | ||||
| 		//		Add a function to execute on DOM content loaded and all requested modules have arrived and been evaluated. | ||||
| 		//		In most cases, the `domReady` plug-in should suffice and this method should not be needed. | ||||
| 		// | ||||
| 		//		When called in a non-browser environment, just checks that all requested modules have arrived and been | ||||
| 		//		evaluated. | ||||
| 		// priority: Integer? | ||||
| 		//		The order in which to exec this callback relative to other callbacks, defaults to 1000 | ||||
| 		// context: Object?|Function | ||||
| 		//		The context in which to run execute callback, or a callback if not using context | ||||
| 		// callback: Function? | ||||
| 		//		The function to execute. | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	Simple DOM and Modules ready syntax | ||||
| 		//	|	require(["dojo/ready"], function(ready){ | ||||
| 		//	|		ready(function(){ alert("Dom ready!"); }); | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	Using a priority | ||||
| 		//	|	require(["dojo/ready"], function(ready){ | ||||
| 		//	|		ready(2, function(){ alert("low priority ready!"); }) | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	Using context | ||||
| 		//	|	require(["dojo/ready"], function(ready){ | ||||
| 		//	|		ready(foo, function(){ | ||||
| 		//	|			// in here, this == foo | ||||
| 		//	|		}); | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		// example: | ||||
| 		//	Using dojo/hitch style args: | ||||
| 		//	|	require(["dojo/ready"], function(ready){ | ||||
| 		//	|		var foo = { dojoReady: function(){ console.warn(this, "dojo dom and modules ready."); } }; | ||||
| 		//	|		ready(foo, "dojoReady"); | ||||
| 		//	|	}); | ||||
|  | ||||
| 		var hitchArgs = lang._toArray(arguments); | ||||
| 		if(typeof priority != "number"){ | ||||
| 			callback = context; | ||||
| 			context = priority; | ||||
| 			priority = 1000; | ||||
| 		}else{ | ||||
| 			hitchArgs.shift(); | ||||
| 		} | ||||
| 		callback = callback ? | ||||
| 			lang.hitch.apply(dojo, hitchArgs) : | ||||
| 			function(){ | ||||
| 				context(); | ||||
| 			}; | ||||
| 		callback.priority = priority; | ||||
| 		for(var i = 0; i < loadQ.length && priority >= loadQ[i].priority; i++){} | ||||
| 		loadQ.splice(i, 0, callback); | ||||
| 		onEvent(); | ||||
| 	}; | ||||
|  | ||||
| 	has.add("dojo-config-addOnLoad", 1); | ||||
| 	if(has("dojo-config-addOnLoad")){ | ||||
| 		var dca = dojo.config.addOnLoad; | ||||
| 		if(dca){ | ||||
| 			ready[(lang.isArray(dca) ? "apply" : "call")](dojo, dca); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if(has("dojo-sync-loader") && dojo.config.parseOnLoad && !dojo.isAsync){ | ||||
| 		ready(99, function(){ | ||||
| 			if(!dojo.parser){ | ||||
| 				dojo.deprecated("Add explicit require(['dojo/parser']);", "", "2.0"); | ||||
| 				require(["dojo/parser"]); | ||||
| 			} | ||||
| 		}); | ||||
| 	} | ||||
|  | ||||
| 	if(domReady){ | ||||
| 		domReady(handleDomReady); | ||||
| 	}else{ | ||||
| 		handleDomReady(); | ||||
| 	} | ||||
|  | ||||
| 	return ready; | ||||
| }); | ||||
							
								
								
									
										28
									
								
								debian/missing-sources/dojo/router.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								debian/missing-sources/dojo/router.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| define([ | ||||
| 	"./router/RouterBase" | ||||
| ], function(RouterBase){ | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/router | ||||
|  | ||||
| /*===== | ||||
| return { | ||||
| 	// summary: | ||||
| 	//		A singleton-style instance of dojo/router/RouterBase. See that | ||||
| 	//		module for specifics. | ||||
| 	// example: | ||||
| 	//	|	router.register("/widgets/:id", function(evt){ | ||||
| 	//	|		// If "/widgets/3" was matched, | ||||
| 	//	|		// evt.params.id === "3" | ||||
| 	//	|		xhr.get({ | ||||
| 	//	|			url: "/some/path/" + evt.params.id, | ||||
| 	//	|			load: function(data){ | ||||
| 	//	|				// ... | ||||
| 	//	|			} | ||||
| 	//	|		}); | ||||
| 	//	|	}); | ||||
| }; | ||||
| =====*/ | ||||
|  | ||||
| 	return new RouterBase({}); | ||||
| }); | ||||
							
								
								
									
										376
									
								
								debian/missing-sources/dojo/router/RouterBase.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										376
									
								
								debian/missing-sources/dojo/router/RouterBase.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,376 @@ | ||||
| define([ | ||||
| 	"dojo/_base/declare", | ||||
| 	"dojo/hash", | ||||
| 	"dojo/topic" | ||||
| ], function(declare, hash, topic){ | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/router/RouterBase | ||||
|  | ||||
| 	// Creating a basic trim to avoid needing the full dojo/string module | ||||
| 	// similarly to dojo/_base/lang's trim | ||||
| 	var trim; | ||||
| 	if(String.prototype.trim){ | ||||
| 		trim = function(str){ return str.trim(); }; | ||||
| 	}else{ | ||||
| 		trim = function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }; | ||||
| 	} | ||||
|  | ||||
| 	// Firing of routes on the route object is always the same, | ||||
| 	// no clean way to expose this on the prototype since it's for the | ||||
| 	// internal router objects. | ||||
| 	function fireRoute(params, currentPath, newPath){ | ||||
| 		var queue, isStopped, isPrevented, eventObj, callbackArgs, i, l; | ||||
|  | ||||
| 		queue = this.callbackQueue; | ||||
| 		isStopped = false; | ||||
| 		isPrevented = false; | ||||
| 		eventObj = { | ||||
| 			stopImmediatePropagation: function(){ isStopped = true; }, | ||||
| 			preventDefault: function(){ isPrevented = true; }, | ||||
| 			oldPath: currentPath, | ||||
| 			newPath: newPath, | ||||
| 			params: params | ||||
| 		}; | ||||
|  | ||||
| 		callbackArgs = [eventObj]; | ||||
|  | ||||
| 		if(params instanceof Array){ | ||||
| 			callbackArgs = callbackArgs.concat(params); | ||||
| 		}else{ | ||||
| 			for(var key in params){ | ||||
| 				callbackArgs.push(params[key]); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		for(i=0, l=queue.length; i<l; ++i){ | ||||
| 			if(!isStopped){ | ||||
| 				queue[i].apply(null, callbackArgs); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		return !isPrevented; | ||||
| 	} | ||||
|  | ||||
| 	// Our actual class-like object | ||||
| 	var RouterBase = declare(null, { | ||||
| 		// summary: | ||||
| 		//		A module that allows one to easily map hash-based structures into | ||||
| 		//		callbacks. The router module is a singleton, offering one central | ||||
| 		//		point for all registrations of this type. | ||||
| 		// example: | ||||
| 		//	|	var router = new RouterBase({}); | ||||
| 		//	|	router.register("/widgets/:id", function(evt){ | ||||
| 		//	|		// If "/widgets/3" was matched, | ||||
| 		//	|		// evt.params.id === "3" | ||||
| 		//	|		xhr.get({ | ||||
| 		//	|			url: "/some/path/" + evt.params.id, | ||||
| 		//	|			load: function(data){ | ||||
| 		//	|				// ... | ||||
| 		//	|			} | ||||
| 		//	|		}); | ||||
| 		//	|	}); | ||||
|  | ||||
| 		_routes: null, | ||||
| 		_routeIndex: null, | ||||
| 		_started: false, | ||||
| 		_currentPath: "", | ||||
|  | ||||
| 		idMatch: /:(\w[\w\d]*)/g, | ||||
| 		idReplacement: "([^\\/]+)", | ||||
| 		globMatch: /\*(\w[\w\d]*)/, | ||||
| 		globReplacement: "(.+)", | ||||
|  | ||||
| 		constructor: function(kwArgs){ | ||||
| 			// A couple of safety initializations | ||||
| 			this._routes = []; | ||||
| 			this._routeIndex = {}; | ||||
|  | ||||
| 			// Simple constructor-style "Decorate myself all over" for now | ||||
| 			for(var i in kwArgs){ | ||||
| 				if(kwArgs.hasOwnProperty(i)){ | ||||
| 					this[i] = kwArgs[i]; | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
|  | ||||
| 		register: function(/*String|RegExp*/ route, /*Function*/ callback){ | ||||
| 			// summary: | ||||
| 			//		Registers a route to a handling callback | ||||
| 			// description: | ||||
| 			//		Given either a string or a regular expression, the router | ||||
| 			//		will monitor the page's hash and respond to changes that | ||||
| 			//		match the string or regex as provided. | ||||
| 			// | ||||
| 			//		When provided a regex for the route: | ||||
| 			// | ||||
| 			//		- Matching is performed, and the resulting capture groups | ||||
| 			//		are passed through to the callback as an array. | ||||
| 			// | ||||
| 			//		When provided a string for the route: | ||||
| 			// | ||||
| 			//		- The string is parsed as a URL-like structure, like | ||||
| 			//		"/foo/bar" | ||||
| 			//		- If any portions of that URL are prefixed with a colon | ||||
| 			//		(:), they will be parsed out and provided to the callback | ||||
| 			//		as properties of an object. | ||||
| 			//		- If the last piece of the URL-like structure is prefixed | ||||
| 			//		with a star (*) instead of a colon, it will be replaced in | ||||
| 			//		the resulting regex with a greedy (.+) match and | ||||
| 			//		anything remaining on the hash will be provided as a | ||||
| 			//		property on the object passed into the callback. Think of | ||||
| 			//		it like a basic means of globbing the end of a route. | ||||
| 			// example: | ||||
| 			//	|	router.register("/foo/:bar/*baz", function(object){ | ||||
| 			//	|		// If the hash was "/foo/abc/def/ghi", | ||||
| 			//	|		// object.bar === "abc" | ||||
| 			//	|		// object.baz === "def/ghi" | ||||
| 			//	|	}); | ||||
| 			// returns: Object | ||||
| 			//		A plain JavaScript object to be used as a handle for | ||||
| 			//		either removing this specific callback's registration, as | ||||
| 			//		well as to add new callbacks with the same route initially | ||||
| 			//		used. | ||||
| 			// route: String|RegExp | ||||
| 			//		A string or regular expression which will be used when | ||||
| 			//		monitoring hash changes. | ||||
| 			// callback: Function | ||||
| 			//		When the hash matches a pattern as described in the route, | ||||
| 			//		this callback will be executed. It will receive an event | ||||
| 			//		object that will have several properties: | ||||
| 			// | ||||
| 			//		- params: Either an array or object of properties pulled | ||||
| 			//		from the new hash | ||||
| 			//		- oldPath: The hash in its state before the change | ||||
| 			//		- newPath: The new hash being shifted to | ||||
| 			//		- preventDefault: A method that will stop hash changes | ||||
| 			//		from being actually applied to the active hash. This only | ||||
| 			//		works if the hash change was initiated using `router.go`, | ||||
| 			//		as changes initiated more directly to the location.hash | ||||
| 			//		property will already be in place | ||||
| 			//		- stopImmediatePropagation: When called, will stop any | ||||
| 			//		further bound callbacks on this particular route from | ||||
| 			//		being executed. If two distinct routes are bound that are | ||||
| 			//		different, but both happen to match the current hash in | ||||
| 			//		some way, this will *not* keep other routes from receiving | ||||
| 			//		notice of the change. | ||||
|  | ||||
| 			return this._registerRoute(route, callback); | ||||
| 		}, | ||||
|  | ||||
| 		registerBefore: function(/*String|RegExp*/ route, /*Function*/ callback){ | ||||
| 			// summary: | ||||
| 			//		Registers a route to a handling callback, except before | ||||
| 			//		any previously registered callbacks | ||||
| 			// description: | ||||
| 			//		Much like the `register` method, `registerBefore` allows | ||||
| 			//		us to register route callbacks to happen before any | ||||
| 			//		previously registered callbacks. See the documentation for | ||||
| 			//		`register` for more details and examples. | ||||
|  | ||||
| 			return this._registerRoute(route, callback, true); | ||||
| 		}, | ||||
|  | ||||
| 		go: function(path, replace){ | ||||
| 			// summary: | ||||
| 			//		A simple pass-through to make changing the hash easy, | ||||
| 			//		without having to require dojo/hash directly. It also | ||||
| 			//		synchronously fires off any routes that match. | ||||
| 			// example: | ||||
| 			//	|	router.go("/foo/bar"); | ||||
|  | ||||
| 			var applyChange; | ||||
|  | ||||
| 			if(typeof path !== "string"){return false;} | ||||
|  | ||||
| 			path = trim(path); | ||||
| 			applyChange = this._handlePathChange(path); | ||||
|  | ||||
| 			if(applyChange){ | ||||
| 				hash(path, replace); | ||||
| 			} | ||||
|  | ||||
| 			return applyChange; | ||||
| 		}, | ||||
|  | ||||
| 		startup: function(defaultPath){ | ||||
| 			// summary: | ||||
| 			//		This method must be called to activate the router. Until | ||||
| 			//		startup is called, no hash changes will trigger route | ||||
| 			//		callbacks. | ||||
|  | ||||
| 			if(this._started){ return; } | ||||
|  | ||||
| 			var self = this, | ||||
| 				startingPath = hash(); | ||||
|  | ||||
| 			this._started = true; | ||||
| 			this._hashchangeHandle = topic.subscribe("/dojo/hashchange", function(){ | ||||
| 				self._handlePathChange.apply(self, arguments); | ||||
| 			}); | ||||
|  | ||||
| 			if(!startingPath){ | ||||
| 				// If there is no initial starting point, push our defaultPath into our | ||||
| 				// history as the starting point | ||||
| 				this.go(defaultPath, true); | ||||
| 			}else{ | ||||
| 				// Handle the starting path | ||||
| 				this._handlePathChange(startingPath); | ||||
| 			} | ||||
| 		}, | ||||
|  | ||||
| 		destroy: function(){ | ||||
| 			this._hashchangeHandle.remove(); | ||||
| 			this._routes = null; | ||||
| 			this._routeIndex = null; | ||||
| 		}, | ||||
|  | ||||
| 		_handlePathChange: function(newPath){ | ||||
| 			var i, j, li, lj, routeObj, result, | ||||
| 				allowChange, parameterNames, params, | ||||
| 				routes = this._routes, | ||||
| 				currentPath = this._currentPath; | ||||
|  | ||||
| 			if(!this._started || newPath === currentPath){ return allowChange; } | ||||
|  | ||||
| 			allowChange = true; | ||||
|  | ||||
| 			for(i=0, li=routes.length; i<li; ++i){ | ||||
| 				routeObj = routes[i]; | ||||
| 				result = routeObj.route.exec(newPath); | ||||
|  | ||||
| 				if(result){ | ||||
| 					if(routeObj.parameterNames){ | ||||
| 						parameterNames = routeObj.parameterNames; | ||||
| 						params = {}; | ||||
|  | ||||
| 						for(j=0, lj=parameterNames.length; j<lj; ++j){ | ||||
| 							params[parameterNames[j]] = result[j+1]; | ||||
| 						} | ||||
| 					}else{ | ||||
| 						params = result.slice(1); | ||||
| 					} | ||||
| 					allowChange = routeObj.fire(params, currentPath, newPath); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if(allowChange){ | ||||
| 				this._currentPath = newPath; | ||||
| 			} | ||||
|  | ||||
| 			return allowChange; | ||||
| 		}, | ||||
|  | ||||
| 		_convertRouteToRegExp: function(route){ | ||||
| 			// Sub in based on IDs and globs | ||||
| 			route = route.replace(this.idMatch, this.idReplacement); | ||||
| 			route = route.replace(this.globMatch, this.globReplacement); | ||||
| 			// Make sure it's an exact match | ||||
| 			route = "^" + route + "$"; | ||||
|  | ||||
| 			return new RegExp(route); | ||||
| 		}, | ||||
|  | ||||
| 		_getParameterNames: function(route){ | ||||
| 			var idMatch = this.idMatch, | ||||
| 				globMatch = this.globMatch, | ||||
| 				parameterNames = [], match; | ||||
|  | ||||
| 			idMatch.lastIndex = 0; | ||||
|  | ||||
| 			while((match = idMatch.exec(route)) !== null){ | ||||
| 				parameterNames.push(match[1]); | ||||
| 			} | ||||
| 			if((match = globMatch.exec(route)) !== null){ | ||||
| 				parameterNames.push(match[1]); | ||||
| 			} | ||||
|  | ||||
| 			return parameterNames.length > 0 ? parameterNames : null; | ||||
| 		}, | ||||
|  | ||||
| 		_indexRoutes: function(){ | ||||
| 			var i, l, route, routeIndex, routes = this._routes; | ||||
|  | ||||
| 			// Start a new route index | ||||
| 			routeIndex = this._routeIndex = {}; | ||||
|  | ||||
| 			// Set it up again | ||||
| 			for(i=0, l=routes.length; i<l; ++i){ | ||||
| 				route = routes[i]; | ||||
| 				routeIndex[route.route] = i; | ||||
| 			} | ||||
| 		}, | ||||
|  | ||||
| 		_registerRoute: function(/*String|RegExp*/route, /*Function*/callback, /*Boolean?*/isBefore){ | ||||
| 			var index, exists, routeObj, callbackQueue, removed, | ||||
| 				self = this, routes = this._routes, | ||||
| 				routeIndex = this._routeIndex; | ||||
|  | ||||
| 			// Try to fetch the route if it already exists. | ||||
| 			// This works thanks to stringifying of regex | ||||
| 			index = this._routeIndex[route]; | ||||
| 			exists = typeof index !== "undefined"; | ||||
| 			if(exists){ | ||||
| 				routeObj = routes[index]; | ||||
| 			} | ||||
|  | ||||
| 			// If we didn't get one, make a default start point | ||||
| 			if(!routeObj){ | ||||
| 				routeObj = { | ||||
| 					route: route, | ||||
| 					callbackQueue: [], | ||||
| 					fire: fireRoute | ||||
| 				}; | ||||
| 			} | ||||
|  | ||||
| 			callbackQueue = routeObj.callbackQueue; | ||||
|  | ||||
| 			if(typeof route == "string"){ | ||||
| 				routeObj.parameterNames = this._getParameterNames(route); | ||||
| 				routeObj.route = this._convertRouteToRegExp(route); | ||||
| 			} | ||||
|  | ||||
| 			if(isBefore){ | ||||
| 				callbackQueue.unshift(callback); | ||||
| 			}else{ | ||||
| 				callbackQueue.push(callback); | ||||
| 			} | ||||
|  | ||||
| 			if(!exists){ | ||||
| 				index = routes.length; | ||||
| 				routeIndex[route] = index; | ||||
| 				routes.push(routeObj); | ||||
| 			} | ||||
|  | ||||
| 			// Useful in a moment to keep from re-removing routes | ||||
| 			removed = false; | ||||
|  | ||||
| 			return { // Object | ||||
| 				remove: function(){ | ||||
| 					var i, l; | ||||
|  | ||||
| 					if(removed){ return; } | ||||
|  | ||||
| 					for(i=0, l=callbackQueue.length; i<l; ++i){ | ||||
| 						if(callbackQueue[i] === callback){ | ||||
| 							callbackQueue.splice(i, 1); | ||||
| 						} | ||||
| 					} | ||||
|  | ||||
|  | ||||
| 					if(callbackQueue.length === 0){ | ||||
| 						routes.splice(index, 1); | ||||
| 						self._indexRoutes(); | ||||
| 					} | ||||
|  | ||||
| 					removed = true; | ||||
| 				}, | ||||
| 				register: function(callback, isBefore){ | ||||
| 					return self.register(route, callback, isBefore); | ||||
| 				} | ||||
| 			}; | ||||
| 		} | ||||
| 	}); | ||||
|  | ||||
| 	return RouterBase; | ||||
| }); | ||||
							
								
								
									
										80
									
								
								debian/missing-sources/dojo/sniff.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								debian/missing-sources/dojo/sniff.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | ||||
| define(["./has"], function(has){ | ||||
| 	// module: | ||||
| 	//		dojo/sniff | ||||
|  | ||||
| 	/*===== | ||||
| 	return function(){ | ||||
| 		// summary: | ||||
| 		//		This module sets has() flags based on the current browser. | ||||
| 		//		It returns the has() function. | ||||
| 	}; | ||||
| 	=====*/ | ||||
|  | ||||
| 	if(has("host-browser")){ | ||||
| 		var n = navigator, | ||||
| 			dua = n.userAgent, | ||||
| 			dav = n.appVersion, | ||||
| 			tv = parseFloat(dav); | ||||
|  | ||||
| 		has.add("air", dua.indexOf("AdobeAIR") >= 0); | ||||
| 		has.add("msapp", parseFloat(dua.split("MSAppHost/")[1]) || undefined); | ||||
| 		has.add("khtml", dav.indexOf("Konqueror") >= 0 ? tv : undefined); | ||||
| 		has.add("webkit", parseFloat(dua.split("WebKit/")[1]) || undefined); | ||||
| 		has.add("chrome", parseFloat(dua.split("Chrome/")[1]) || undefined); | ||||
| 		has.add("safari", dav.indexOf("Safari")>=0 && !has("chrome") ? parseFloat(dav.split("Version/")[1]) : undefined); | ||||
| 		has.add("mac", dav.indexOf("Macintosh") >= 0); | ||||
| 		has.add("quirks", document.compatMode == "BackCompat"); | ||||
| 		if(dua.match(/(iPhone|iPod|iPad)/)){ | ||||
| 			var p = RegExp.$1.replace(/P/, "p"); | ||||
| 			var v = dua.match(/OS ([\d_]+)/) ? RegExp.$1 : "1"; | ||||
| 			var os = parseFloat(v.replace(/_/, ".").replace(/_/g, "")); | ||||
| 			has.add(p, os);		// "iphone", "ipad" or "ipod" | ||||
| 			has.add("ios", os); | ||||
| 		} | ||||
| 		has.add("android", parseFloat(dua.split("Android ")[1]) || undefined); | ||||
| 		has.add("bb", (dua.indexOf("BlackBerry") >= 0 || dua.indexOf("BB10") >= 0) && parseFloat(dua.split("Version/")[1]) || undefined); | ||||
|  | ||||
| 		has.add("svg", typeof SVGAngle !== "undefined"); | ||||
|  | ||||
| 		if(!has("webkit")){ | ||||
| 			// Opera | ||||
| 			if(dua.indexOf("Opera") >= 0){ | ||||
| 				// see http://dev.opera.com/articles/view/opera-ua-string-changes and http://www.useragentstring.com/pages/Opera/ | ||||
| 				// 9.8 has both styles; <9.8, 9.9 only old style | ||||
| 				has.add("opera", tv >= 9.8 ? parseFloat(dua.split("Version/")[1]) || tv : tv); | ||||
| 			} | ||||
|  | ||||
| 			// Mozilla and firefox | ||||
| 			if(dua.indexOf("Gecko") >= 0 && !has("khtml") && !has("webkit")){ | ||||
| 				has.add("mozilla", tv); | ||||
| 			} | ||||
| 			if(has("mozilla")){ | ||||
| 				//We really need to get away from this. Consider a sane isGecko approach for the future. | ||||
| 				has.add("ff", parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined); | ||||
| 			} | ||||
|  | ||||
| 			// IE | ||||
| 			if(document.all && !has("opera")){ | ||||
| 				var isIE = parseFloat(dav.split("MSIE ")[1]) || undefined; | ||||
|  | ||||
| 				//In cases where the page has an HTTP header or META tag with | ||||
| 				//X-UA-Compatible, then it is in emulation mode. | ||||
| 				//Make sure isIE reflects the desired version. | ||||
| 				//document.documentMode of 5 means quirks mode. | ||||
| 				//Only switch the value if documentMode's major version | ||||
| 				//is different from isIE's major version. | ||||
| 				var mode = document.documentMode; | ||||
| 				if(mode && mode != 5 && Math.floor(isIE) != mode){ | ||||
| 					isIE = mode; | ||||
| 				} | ||||
|  | ||||
| 				has.add("ie", isIE); | ||||
| 			} | ||||
|  | ||||
| 			// Wii | ||||
| 			has.add("wii", typeof opera != "undefined" && opera.wiiremote); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return has; | ||||
| }); | ||||
							
								
								
									
										164
									
								
								debian/missing-sources/dojo/store/Memory.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								debian/missing-sources/dojo/store/Memory.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,164 @@ | ||||
| define(["../_base/declare", "./util/QueryResults", "./util/SimpleQueryEngine" /*=====, "./api/Store" =====*/], | ||||
| function(declare, QueryResults, SimpleQueryEngine /*=====, Store =====*/){ | ||||
|  | ||||
| // module: | ||||
| //		dojo/store/Memory | ||||
|  | ||||
| // No base class, but for purposes of documentation, the base class is dojo/store/api/Store | ||||
| var base = null; | ||||
| /*===== base = Store; =====*/ | ||||
|  | ||||
| return declare("dojo.store.Memory", base, { | ||||
| 	// summary: | ||||
| 	//		This is a basic in-memory object store. It implements dojo/store/api/Store. | ||||
| 	constructor: function(options){ | ||||
| 		// summary: | ||||
| 		//		Creates a memory object store. | ||||
| 		// options: dojo/store/Memory | ||||
| 		//		This provides any configuration information that will be mixed into the store. | ||||
| 		//		This should generally include the data property to provide the starting set of data. | ||||
| 		for(var i in options){ | ||||
| 			this[i] = options[i]; | ||||
| 		} | ||||
| 		this.setData(this.data || []); | ||||
| 	}, | ||||
| 	// data: Array | ||||
| 	//		The array of all the objects in the memory store | ||||
| 	data:null, | ||||
|  | ||||
| 	// idProperty: String | ||||
| 	//		Indicates the property to use as the identity property. The values of this | ||||
| 	//		property should be unique. | ||||
| 	idProperty: "id", | ||||
|  | ||||
| 	// index: Object | ||||
| 	//		An index of data indices into the data array by id | ||||
| 	index:null, | ||||
|  | ||||
| 	// queryEngine: Function | ||||
| 	//		Defines the query engine to use for querying the data store | ||||
| 	queryEngine: SimpleQueryEngine, | ||||
| 	get: function(id){ | ||||
| 		// summary: | ||||
| 		//		Retrieves an object by its identity | ||||
| 		// id: Number | ||||
| 		//		The identity to use to lookup the object | ||||
| 		// returns: Object | ||||
| 		//		The object in the store that matches the given id. | ||||
| 		return this.data[this.index[id]]; | ||||
| 	}, | ||||
| 	getIdentity: function(object){ | ||||
| 		// summary: | ||||
| 		//		Returns an object's identity | ||||
| 		// object: Object | ||||
| 		//		The object to get the identity from | ||||
| 		// returns: Number | ||||
| 		return object[this.idProperty]; | ||||
| 	}, | ||||
| 	put: function(object, options){ | ||||
| 		// summary: | ||||
| 		//		Stores an object | ||||
| 		// object: Object | ||||
| 		//		The object to store. | ||||
| 		// options: dojo/store/api/Store.PutDirectives? | ||||
| 		//		Additional metadata for storing the data.  Includes an "id" | ||||
| 		//		property if a specific id is to be used. | ||||
| 		// returns: Number | ||||
| 		var data = this.data, | ||||
| 			index = this.index, | ||||
| 			idProperty = this.idProperty; | ||||
| 		var id = object[idProperty] = (options && "id" in options) ? options.id : idProperty in object ? object[idProperty] : Math.random(); | ||||
| 		if(id in index){ | ||||
| 			// object exists | ||||
| 			if(options && options.overwrite === false){ | ||||
| 				throw new Error("Object already exists"); | ||||
| 			} | ||||
| 			// replace the entry in data | ||||
| 			data[index[id]] = object; | ||||
| 		}else{ | ||||
| 			// add the new object | ||||
| 			index[id] = data.push(object) - 1; | ||||
| 		} | ||||
| 		return id; | ||||
| 	}, | ||||
| 	add: function(object, options){ | ||||
| 		// summary: | ||||
| 		//		Creates an object, throws an error if the object already exists | ||||
| 		// object: Object | ||||
| 		//		The object to store. | ||||
| 		// options: dojo/store/api/Store.PutDirectives? | ||||
| 		//		Additional metadata for storing the data.  Includes an "id" | ||||
| 		//		property if a specific id is to be used. | ||||
| 		// returns: Number | ||||
| 		(options = options || {}).overwrite = false; | ||||
| 		// call put with overwrite being false | ||||
| 		return this.put(object, options); | ||||
| 	}, | ||||
| 	remove: function(id){ | ||||
| 		// summary: | ||||
| 		//		Deletes an object by its identity | ||||
| 		// id: Number | ||||
| 		//		The identity to use to delete the object | ||||
| 		// returns: Boolean | ||||
| 		//		Returns true if an object was removed, falsy (undefined) if no object matched the id | ||||
| 		var index = this.index; | ||||
| 		var data = this.data; | ||||
| 		if(id in index){ | ||||
| 			data.splice(index[id], 1); | ||||
| 			// now we have to reindex | ||||
| 			this.setData(data); | ||||
| 			return true; | ||||
| 		} | ||||
| 	}, | ||||
| 	query: function(query, options){ | ||||
| 		// summary: | ||||
| 		//		Queries the store for objects. | ||||
| 		// query: Object | ||||
| 		//		The query to use for retrieving objects from the store. | ||||
| 		// options: dojo/store/api/Store.QueryOptions? | ||||
| 		//		The optional arguments to apply to the resultset. | ||||
| 		// returns: dojo/store/api/Store.QueryResults | ||||
| 		//		The results of the query, extended with iterative methods. | ||||
| 		// | ||||
| 		// example: | ||||
| 		//		Given the following store: | ||||
| 		// | ||||
| 		// 	|	var store = new Memory({ | ||||
| 		// 	|		data: [ | ||||
| 		// 	|			{id: 1, name: "one", prime: false }, | ||||
| 		//	|			{id: 2, name: "two", even: true, prime: true}, | ||||
| 		//	|			{id: 3, name: "three", prime: true}, | ||||
| 		//	|			{id: 4, name: "four", even: true, prime: false}, | ||||
| 		//	|			{id: 5, name: "five", prime: true} | ||||
| 		//	|		] | ||||
| 		//	|	}); | ||||
| 		// | ||||
| 		//	...find all items where "prime" is true: | ||||
| 		// | ||||
| 		//	|	var results = store.query({ prime: true }); | ||||
| 		// | ||||
| 		//	...or find all items where "even" is true: | ||||
| 		// | ||||
| 		//	|	var results = store.query({ even: true }); | ||||
| 		return QueryResults(this.queryEngine(query, options)(this.data)); | ||||
| 	}, | ||||
| 	setData: function(data){ | ||||
| 		// summary: | ||||
| 		//		Sets the given data as the source for this store, and indexes it | ||||
| 		// data: Object[] | ||||
| 		//		An array of objects to use as the source of data. | ||||
| 		if(data.items){ | ||||
| 			// just for convenience with the data format IFRS expects | ||||
| 			this.idProperty = data.identifier; | ||||
| 			data = this.data = data.items; | ||||
| 		}else{ | ||||
| 			this.data = data; | ||||
| 		} | ||||
| 		this.index = {}; | ||||
| 		for(var i = 0, l = data.length; i < l; i++){ | ||||
| 			this.index[data[i][this.idProperty]] = i; | ||||
| 		} | ||||
| 	} | ||||
| }); | ||||
|  | ||||
| }); | ||||
							
								
								
									
										187
									
								
								debian/missing-sources/dojo/store/Observable.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								debian/missing-sources/dojo/store/Observable.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,187 @@ | ||||
| define(["../_base/kernel", "../_base/lang", "../when", "../_base/array" /*=====, "./api/Store" =====*/ | ||||
| ], function(kernel, lang, when, array /*=====, Store =====*/){ | ||||
|  | ||||
| // module: | ||||
| //		dojo/store/Observable | ||||
|  | ||||
| var Observable = function(/*Store*/ store){ | ||||
| 	// summary: | ||||
| 	//		The Observable store wrapper takes a store and sets an observe method on query() | ||||
| 	//		results that can be used to monitor results for changes. | ||||
| 	// | ||||
| 	// description: | ||||
| 	//		Observable wraps an existing store so that notifications can be made when a query | ||||
| 	//		is performed. | ||||
| 	// | ||||
| 	// example: | ||||
| 	//		Create a Memory store that returns an observable query, and then log some | ||||
| 	//		information about that query. | ||||
| 	// | ||||
| 	//	|	var store = Observable(new Memory({ | ||||
| 	//	|		data: [ | ||||
| 	//	|			{id: 1, name: "one", prime: false}, | ||||
| 	//	|			{id: 2, name: "two", even: true, prime: true}, | ||||
| 	//	|			{id: 3, name: "three", prime: true}, | ||||
| 	//	|			{id: 4, name: "four", even: true, prime: false}, | ||||
| 	//	|			{id: 5, name: "five", prime: true} | ||||
| 	//	|		] | ||||
| 	//	|	})); | ||||
| 	//	|	var changes = [], results = store.query({ prime: true }); | ||||
| 	//	|	var observer = results.observe(function(object, previousIndex, newIndex){ | ||||
| 	//	|		changes.push({previousIndex:previousIndex, newIndex:newIndex, object:object}); | ||||
| 	//	|	}); | ||||
| 	// | ||||
| 	//		See the Observable tests for more information. | ||||
|  | ||||
| 	var undef, queryUpdaters = [], revision = 0; | ||||
| 	// a Comet driven store could directly call notify to notify observers when data has | ||||
| 	// changed on the backend | ||||
| 	// create a new instance | ||||
| 	store = lang.delegate(store); | ||||
| 	 | ||||
| 	store.notify = function(object, existingId){ | ||||
| 		revision++; | ||||
| 		var updaters = queryUpdaters.slice(); | ||||
| 		for(var i = 0, l = updaters.length; i < l; i++){ | ||||
| 			updaters[i](object, existingId); | ||||
| 		} | ||||
| 	}; | ||||
| 	var originalQuery = store.query; | ||||
| 	store.query = function(query, options){ | ||||
| 		options = options || {}; | ||||
| 		var results = originalQuery.apply(this, arguments); | ||||
| 		if(results && results.forEach){ | ||||
| 			var nonPagedOptions = lang.mixin({}, options); | ||||
| 			delete nonPagedOptions.start; | ||||
| 			delete nonPagedOptions.count; | ||||
|  | ||||
| 			var queryExecutor = store.queryEngine && store.queryEngine(query, nonPagedOptions); | ||||
| 			var queryRevision = revision; | ||||
| 			var listeners = [], queryUpdater; | ||||
| 			results.observe = function(listener, includeObjectUpdates){ | ||||
| 				if(listeners.push(listener) == 1){ | ||||
| 					// first listener was added, create the query checker and updater | ||||
| 					queryUpdaters.push(queryUpdater = function(changed, existingId){ | ||||
| 						when(results, function(resultsArray){ | ||||
| 							var atEnd = resultsArray.length != options.count; | ||||
| 							var i, l, listener; | ||||
| 							if(++queryRevision != revision){ | ||||
| 								throw new Error("Query is out of date, you must observe() the query prior to any data modifications"); | ||||
| 							} | ||||
| 							var removedObject, removedFrom = -1, insertedInto = -1; | ||||
| 							if(existingId !== undef){ | ||||
| 								// remove the old one | ||||
| 								for(i = 0, l = resultsArray.length; i < l; i++){ | ||||
| 									var object = resultsArray[i]; | ||||
| 									if(store.getIdentity(object) == existingId){ | ||||
| 										removedObject = object; | ||||
| 										removedFrom = i; | ||||
| 										if(queryExecutor || !changed){// if it was changed and we don't have a queryExecutor, we shouldn't remove it because updated objects would be eliminated | ||||
| 											resultsArray.splice(i, 1); | ||||
| 										} | ||||
| 										break; | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 							if(queryExecutor){ | ||||
| 								// add the new one | ||||
| 								if(changed && | ||||
| 										// if a matches function exists, use that (probably more efficient) | ||||
| 										(queryExecutor.matches ? queryExecutor.matches(changed) : queryExecutor([changed]).length)){ | ||||
|  | ||||
| 									var firstInsertedInto = removedFrom > -1 ?  | ||||
| 										removedFrom : // put back in the original slot so it doesn't move unless it needs to (relying on a stable sort below) | ||||
| 										resultsArray.length; | ||||
| 									resultsArray.splice(firstInsertedInto, 0, changed); // add the new item | ||||
| 									insertedInto = array.indexOf(queryExecutor(resultsArray), changed); // sort it | ||||
| 									// we now need to push the chagne back into the original results array | ||||
| 									resultsArray.splice(firstInsertedInto, 1); // remove the inserted item from the previous index | ||||
| 									 | ||||
| 									if((options.start && insertedInto == 0) || | ||||
| 										(!atEnd && insertedInto == resultsArray.length)){ | ||||
| 										// if it is at the end of the page, assume it goes into the prev or next page | ||||
| 										insertedInto = -1; | ||||
| 									}else{ | ||||
| 										resultsArray.splice(insertedInto, 0, changed); // and insert into the results array with the correct index | ||||
| 									} | ||||
| 								} | ||||
| 							}else if(changed){ | ||||
| 								// we don't have a queryEngine, so we can't provide any information | ||||
| 								// about where it was inserted or moved to. If it is an update, we leave it's position alone, other we at least indicate a new object | ||||
| 								if(existingId !== undef){ | ||||
| 									// an update, keep the index the same | ||||
| 									insertedInto = removedFrom; | ||||
| 								}else if(!options.start){ | ||||
| 									// a new object | ||||
| 									insertedInto = store.defaultIndex || 0; | ||||
| 									resultsArray.splice(insertedInto, 0, changed); | ||||
| 								} | ||||
| 							} | ||||
| 							if((removedFrom > -1 || insertedInto > -1) && | ||||
| 									(includeObjectUpdates || !queryExecutor || (removedFrom != insertedInto))){ | ||||
| 								var copyListeners = listeners.slice(); | ||||
| 								for(i = 0;listener = copyListeners[i]; i++){ | ||||
| 									listener(changed || removedObject, removedFrom, insertedInto); | ||||
| 								} | ||||
| 							} | ||||
| 						}); | ||||
| 					}); | ||||
| 				} | ||||
| 				var handle = {}; | ||||
| 				// TODO: Remove cancel in 2.0. | ||||
| 				handle.remove = handle.cancel = function(){ | ||||
| 					// remove this listener | ||||
| 					var index = array.indexOf(listeners, listener); | ||||
| 					if(index > -1){ // check to make sure we haven't already called cancel | ||||
| 						listeners.splice(index, 1); | ||||
| 						if(!listeners.length){ | ||||
| 							// no more listeners, remove the query updater too | ||||
| 							queryUpdaters.splice(array.indexOf(queryUpdaters, queryUpdater), 1); | ||||
| 						} | ||||
| 					} | ||||
| 				}; | ||||
| 				return handle; | ||||
| 			}; | ||||
| 		} | ||||
| 		return results; | ||||
| 	}; | ||||
| 	var inMethod; | ||||
| 	function whenFinished(method, action){ | ||||
| 		var original = store[method]; | ||||
| 		if(original){ | ||||
| 			store[method] = function(value){ | ||||
| 				if(inMethod){ | ||||
| 					// if one method calls another (like add() calling put()) we don't want two events | ||||
| 					return original.apply(this, arguments); | ||||
| 				} | ||||
| 				inMethod = true; | ||||
| 				try{ | ||||
| 					var results = original.apply(this, arguments); | ||||
| 					when(results, function(results){ | ||||
| 						action((typeof results == "object" && results) || value); | ||||
| 					}); | ||||
| 					return results; | ||||
| 				}finally{ | ||||
| 					inMethod = false; | ||||
| 				} | ||||
| 			}; | ||||
| 		} | ||||
| 	} | ||||
| 	// monitor for updates by listening to these methods | ||||
| 	whenFinished("put", function(object){ | ||||
| 		store.notify(object, store.getIdentity(object)); | ||||
| 	}); | ||||
| 	whenFinished("add", function(object){ | ||||
| 		store.notify(object); | ||||
| 	}); | ||||
| 	whenFinished("remove", function(id){ | ||||
| 		store.notify(undefined, id); | ||||
| 	}); | ||||
|  | ||||
| 	return store; | ||||
| }; | ||||
|  | ||||
| lang.setObject("dojo.store.Observable", Observable); | ||||
|  | ||||
| return Observable; | ||||
| }); | ||||
							
								
								
									
										63
									
								
								debian/missing-sources/dojo/store/util/QueryResults.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								debian/missing-sources/dojo/store/util/QueryResults.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| define(["../../_base/array", "../../_base/lang", "../../when" | ||||
| ], function(array, lang, when){ | ||||
|  | ||||
| // module: | ||||
| //		dojo/store/util/QueryResults | ||||
|  | ||||
| var QueryResults = function(results){ | ||||
| 	// summary: | ||||
| 	//		A function that wraps the results of a store query with additional | ||||
| 	//		methods. | ||||
| 	// description: | ||||
| 	//		QueryResults is a basic wrapper that allows for array-like iteration | ||||
| 	//		over any kind of returned data from a query.  While the simplest store | ||||
| 	//		will return a plain array of data, other stores may return deferreds or | ||||
| 	//		promises; this wrapper makes sure that *all* results can be treated | ||||
| 	//		the same. | ||||
| 	// | ||||
| 	//		Additional methods include `forEach`, `filter` and `map`. | ||||
| 	// results: Array|dojo/promise/Promise | ||||
| 	//		The result set as an array, or a promise for an array. | ||||
| 	// returns: | ||||
| 	//		An array-like object that can be used for iterating over. | ||||
| 	// example: | ||||
| 	//		Query a store and iterate over the results. | ||||
| 	// | ||||
| 	//	|	store.query({ prime: true }).forEach(function(item){ | ||||
| 	//	|		//	do something | ||||
| 	//	|	}); | ||||
|  | ||||
| 	if(!results){ | ||||
| 		return results; | ||||
| 	} | ||||
| 	// if it is a promise it may be frozen | ||||
| 	if(results.then){ | ||||
| 		results = lang.delegate(results); | ||||
| 	} | ||||
| 	function addIterativeMethod(method){ | ||||
| 		if(!results[method]){ | ||||
| 			results[method] = function(){ | ||||
| 				var args = arguments; | ||||
| 				return when(results, function(results){ | ||||
| 					Array.prototype.unshift.call(args, results); | ||||
| 					return QueryResults(array[method].apply(array, args)); | ||||
| 				}); | ||||
| 			}; | ||||
| 		} | ||||
| 	} | ||||
| 	addIterativeMethod("forEach"); | ||||
| 	addIterativeMethod("filter"); | ||||
| 	addIterativeMethod("map"); | ||||
| 	if(!results.total){ | ||||
| 		results.total = when(results, function(results){ | ||||
| 			return results.length; | ||||
| 		}); | ||||
| 	} | ||||
| 	return results; // Object | ||||
| }; | ||||
|  | ||||
| lang.setObject("dojo.store.util.QueryResults", QueryResults); | ||||
|  | ||||
| return QueryResults; | ||||
|  | ||||
| }); | ||||
							
								
								
									
										110
									
								
								debian/missing-sources/dojo/store/util/SimpleQueryEngine.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								debian/missing-sources/dojo/store/util/SimpleQueryEngine.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| define(["../../_base/array" /*=====, "../api/Store" =====*/], function(arrayUtil /*=====, Store =====*/){ | ||||
|  | ||||
| // module: | ||||
| //		dojo/store/util/SimpleQueryEngine | ||||
|  | ||||
| return function(query, options){ | ||||
| 	// summary: | ||||
| 	//		Simple query engine that matches using filter functions, named filter | ||||
| 	//		functions or objects by name-value on a query object hash | ||||
| 	// | ||||
| 	// description: | ||||
| 	//		The SimpleQueryEngine provides a way of getting a QueryResults through | ||||
| 	//		the use of a simple object hash as a filter.  The hash will be used to | ||||
| 	//		match properties on data objects with the corresponding value given. In | ||||
| 	//		other words, only exact matches will be returned. | ||||
| 	// | ||||
| 	//		This function can be used as a template for more complex query engines; | ||||
| 	//		for example, an engine can be created that accepts an object hash that | ||||
| 	//		contains filtering functions, or a string that gets evaluated, etc. | ||||
| 	// | ||||
| 	//		When creating a new dojo.store, simply set the store's queryEngine | ||||
| 	//		field as a reference to this function. | ||||
| 	// | ||||
| 	// query: Object | ||||
| 	//		An object hash with fields that may match fields of items in the store. | ||||
| 	//		Values in the hash will be compared by normal == operator, but regular expressions | ||||
| 	//		or any object that provides a test() method are also supported and can be | ||||
| 	//		used to match strings by more complex expressions | ||||
| 	//		(and then the regex's or object's test() method will be used to match values). | ||||
| 	// | ||||
| 	// options: dojo/store/api/Store.QueryOptions? | ||||
| 	//		An object that contains optional information such as sort, start, and count. | ||||
| 	// | ||||
| 	// returns: Function | ||||
| 	//		A function that caches the passed query under the field "matches".  See any | ||||
| 	//		of the "query" methods on dojo.stores. | ||||
| 	// | ||||
| 	// example: | ||||
| 	//		Define a store with a reference to this engine, and set up a query method. | ||||
| 	// | ||||
| 	//	|	var myStore = function(options){ | ||||
| 	//	|		//	...more properties here | ||||
| 	//	|		this.queryEngine = SimpleQueryEngine; | ||||
| 	//	|		//	define our query method | ||||
| 	//	|		this.query = function(query, options){ | ||||
| 	//	|			return QueryResults(this.queryEngine(query, options)(this.data)); | ||||
| 	//	|		}; | ||||
| 	//	|	}; | ||||
|  | ||||
| 	// create our matching query function | ||||
| 	switch(typeof query){ | ||||
| 		default: | ||||
| 			throw new Error("Can not query with a " + typeof query); | ||||
| 		case "object": case "undefined": | ||||
| 			var queryObject = query; | ||||
| 			query = function(object){ | ||||
| 				for(var key in queryObject){ | ||||
| 					var required = queryObject[key]; | ||||
| 					if(required && required.test){ | ||||
| 						// an object can provide a test method, which makes it work with regex | ||||
| 						if(!required.test(object[key], object)){ | ||||
| 							return false; | ||||
| 						} | ||||
| 					}else if(required != object[key]){ | ||||
| 						return false; | ||||
| 					} | ||||
| 				} | ||||
| 				return true; | ||||
| 			}; | ||||
| 			break; | ||||
| 		case "string": | ||||
| 			// named query | ||||
| 			if(!this[query]){ | ||||
| 				throw new Error("No filter function " + query + " was found in store"); | ||||
| 			} | ||||
| 			query = this[query]; | ||||
| 			// fall through | ||||
| 		case "function": | ||||
| 			// fall through | ||||
| 	} | ||||
| 	function execute(array){ | ||||
| 		// execute the whole query, first we filter | ||||
| 		var results = arrayUtil.filter(array, query); | ||||
| 		// next we sort | ||||
| 		var sortSet = options && options.sort; | ||||
| 		if(sortSet){ | ||||
| 			results.sort(typeof sortSet == "function" ? sortSet : function(a, b){ | ||||
| 				for(var sort, i=0; sort = sortSet[i]; i++){ | ||||
| 					var aValue = a[sort.attribute]; | ||||
| 					var bValue = b[sort.attribute]; | ||||
| 					if (aValue != bValue){ | ||||
| 						return !!sort.descending == (aValue == null || aValue > bValue) ? -1 : 1; | ||||
| 					} | ||||
| 				} | ||||
| 				return 0; | ||||
| 			}); | ||||
| 		} | ||||
| 		// now we paginate | ||||
| 		if(options && (options.start || options.count)){ | ||||
| 			var total = results.length; | ||||
| 			results = results.slice(options.start || 0, (options.start || 0) + (options.count || Infinity)); | ||||
| 			results.total = total; | ||||
| 		} | ||||
| 		return results; | ||||
| 	} | ||||
| 	execute.matches = query; | ||||
| 	return execute; | ||||
| }; | ||||
|  | ||||
| }); | ||||
							
								
								
									
										162
									
								
								debian/missing-sources/dojo/string.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								debian/missing-sources/dojo/string.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,162 @@ | ||||
| define([ | ||||
| 	"./_base/kernel",	// kernel.global | ||||
| 	"./_base/lang" | ||||
| ], function(kernel, lang){ | ||||
|  | ||||
| // module: | ||||
| //		dojo/string | ||||
|  | ||||
| var string = { | ||||
| 	// summary: | ||||
| 	//		String utilities for Dojo | ||||
| }; | ||||
| lang.setObject("dojo.string", string); | ||||
|  | ||||
| string.rep = function(/*String*/str, /*Integer*/num){ | ||||
| 	// summary: | ||||
| 	//		Efficiently replicate a string `n` times. | ||||
| 	// str: | ||||
| 	//		the string to replicate | ||||
| 	// num: | ||||
| 	//		number of times to replicate the string | ||||
|  | ||||
| 	if(num <= 0 || !str){ return ""; } | ||||
|  | ||||
| 	var buf = []; | ||||
| 	for(;;){ | ||||
| 		if(num & 1){ | ||||
| 			buf.push(str); | ||||
| 		} | ||||
| 		if(!(num >>= 1)){ break; } | ||||
| 		str += str; | ||||
| 	} | ||||
| 	return buf.join("");	// String | ||||
| }; | ||||
|  | ||||
| string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boolean?*/end){ | ||||
| 	// summary: | ||||
| 	//		Pad a string to guarantee that it is at least `size` length by | ||||
| 	//		filling with the character `ch` at either the start or end of the | ||||
| 	//		string. Pads at the start, by default. | ||||
| 	// text: | ||||
| 	//		the string to pad | ||||
| 	// size: | ||||
| 	//		length to provide padding | ||||
| 	// ch: | ||||
| 	//		character to pad, defaults to '0' | ||||
| 	// end: | ||||
| 	//		adds padding at the end if true, otherwise pads at start | ||||
| 	// example: | ||||
| 	//	|	// Fill the string to length 10 with "+" characters on the right.  Yields "Dojo++++++". | ||||
| 	//	|	string.pad("Dojo", 10, "+", true); | ||||
|  | ||||
| 	if(!ch){ | ||||
| 		ch = '0'; | ||||
| 	} | ||||
| 	var out = String(text), | ||||
| 		pad = string.rep(ch, Math.ceil((size - out.length) / ch.length)); | ||||
| 	return end ? out + pad : pad + out;	// String | ||||
| }; | ||||
|  | ||||
| string.substitute = function(	/*String*/		template, | ||||
| 									/*Object|Array*/map, | ||||
| 									/*Function?*/	transform, | ||||
| 									/*Object?*/		thisObject){ | ||||
| 	// summary: | ||||
| 	//		Performs parameterized substitutions on a string. Throws an | ||||
| 	//		exception if any parameter is unmatched. | ||||
| 	// template: | ||||
| 	//		a string with expressions in the form `${key}` to be replaced or | ||||
| 	//		`${key:format}` which specifies a format function. keys are case-sensitive. | ||||
| 	// map: | ||||
| 	//		hash to search for substitutions | ||||
| 	// transform: | ||||
| 	//		a function to process all parameters before substitution takes | ||||
| 	//		place, e.g. mylib.encodeXML | ||||
| 	// thisObject: | ||||
| 	//		where to look for optional format function; default to the global | ||||
| 	//		namespace | ||||
| 	// example: | ||||
| 	//		Substitutes two expressions in a string from an Array or Object | ||||
| 	//	|	// returns "File 'foo.html' is not found in directory '/temp'." | ||||
| 	//	|	// by providing substitution data in an Array | ||||
| 	//	|	string.substitute( | ||||
| 	//	|		"File '${0}' is not found in directory '${1}'.", | ||||
| 	//	|		["foo.html","/temp"] | ||||
| 	//	|	); | ||||
| 	//	| | ||||
| 	//	|	// also returns "File 'foo.html' is not found in directory '/temp'." | ||||
| 	//	|	// but provides substitution data in an Object structure.  Dotted | ||||
| 	//	|	// notation may be used to traverse the structure. | ||||
| 	//	|	string.substitute( | ||||
| 	//	|		"File '${name}' is not found in directory '${info.dir}'.", | ||||
| 	//	|		{ name: "foo.html", info: { dir: "/temp" } } | ||||
| 	//	|	); | ||||
| 	// example: | ||||
| 	//		Use a transform function to modify the values: | ||||
| 	//	|	// returns "file 'foo.html' is not found in directory '/temp'." | ||||
| 	//	|	string.substitute( | ||||
| 	//	|		"${0} is not found in ${1}.", | ||||
| 	//	|		["foo.html","/temp"], | ||||
| 	//	|		function(str){ | ||||
| 	//	|			// try to figure out the type | ||||
| 	//	|			var prefix = (str.charAt(0) == "/") ? "directory": "file"; | ||||
| 	//	|			return prefix + " '" + str + "'"; | ||||
| 	//	|		} | ||||
| 	//	|	); | ||||
| 	// example: | ||||
| 	//		Use a formatter | ||||
| 	//	|	// returns "thinger -- howdy" | ||||
| 	//	|	string.substitute( | ||||
| 	//	|		"${0:postfix}", ["thinger"], null, { | ||||
| 	//	|			postfix: function(value, key){ | ||||
| 	//	|				return value + " -- howdy"; | ||||
| 	//	|			} | ||||
| 	//	|		} | ||||
| 	//	|	); | ||||
|  | ||||
| 	thisObject = thisObject || kernel.global; | ||||
| 	transform = transform ? | ||||
| 		lang.hitch(thisObject, transform) : function(v){ return v; }; | ||||
|  | ||||
| 	return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, | ||||
| 		function(match, key, format){ | ||||
| 			var value = lang.getObject(key, false, map); | ||||
| 			if(format){ | ||||
| 				value = lang.getObject(format, false, thisObject).call(thisObject, value, key); | ||||
| 			} | ||||
| 			return transform(value, key).toString(); | ||||
| 		}); // String | ||||
| }; | ||||
|  | ||||
| string.trim = String.prototype.trim ? | ||||
| 	lang.trim : // aliasing to the native function | ||||
| 	function(str){ | ||||
| 		str = str.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; | ||||
| 	}; | ||||
|  | ||||
| /*===== | ||||
|  string.trim = function(str){ | ||||
| 	 // summary: | ||||
| 	 //		Trims whitespace from both sides of the string | ||||
| 	 // str: String | ||||
| 	 //		String to be trimmed | ||||
| 	 // returns: String | ||||
| 	 //		Returns the trimmed string | ||||
| 	 // description: | ||||
| 	 //		This version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript). | ||||
| 	 //		The short yet performant version of this function is dojo.trim(), | ||||
| 	 //		which is part of Dojo base.  Uses String.prototype.trim instead, if available. | ||||
| 	 return "";	// String | ||||
|  }; | ||||
|  =====*/ | ||||
|  | ||||
| 	return string; | ||||
| }); | ||||
							
								
								
									
										38
									
								
								debian/missing-sources/dojo/topic.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								debian/missing-sources/dojo/topic.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| define(["./Evented"], function(Evented){ | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/topic | ||||
|  | ||||
| 	var hub = new Evented; | ||||
| 	return { | ||||
| 		// summary: | ||||
| 		//		Pubsub hub. | ||||
| 		// example: | ||||
| 		//		| 	topic.subscribe("some/topic", function(event){ | ||||
| 		//		|	... do something with event | ||||
| 		//		|	}); | ||||
| 		//		|	topic.publish("some/topic", {name:"some event", ...}); | ||||
|  | ||||
| 		publish: function(topic, event){ | ||||
| 			// summary: | ||||
| 			//		Publishes a message to a topic on the pub/sub hub. All arguments after | ||||
| 			//		the first will be passed to the subscribers, so any number of arguments | ||||
| 			//		can be provided (not just event). | ||||
| 			// topic: String | ||||
| 			//		The name of the topic to publish to | ||||
| 			// event: Object | ||||
| 			//		An event to distribute to the topic listeners | ||||
| 			return hub.emit.apply(hub, arguments); | ||||
| 		}, | ||||
|  | ||||
| 		subscribe: function(topic, listener){ | ||||
| 			// summary: | ||||
| 			//		Subscribes to a topic on the pub/sub hub | ||||
| 			// topic: String | ||||
| 			//		The topic to subscribe to | ||||
| 			// listener: Function | ||||
| 			//		A function to call when a message is published to the given topic | ||||
| 			return hub.on.apply(hub, arguments); | ||||
| 		} | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										55
									
								
								debian/missing-sources/dojo/when.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								debian/missing-sources/dojo/when.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| define([ | ||||
| 	"./Deferred", | ||||
| 	"./promise/Promise" | ||||
| ], function(Deferred, Promise){ | ||||
| 	"use strict"; | ||||
|  | ||||
| 	// module: | ||||
| 	//		dojo/when | ||||
|  | ||||
| 	return function when(valueOrPromise, callback, errback, progback){ | ||||
| 		// summary: | ||||
| 		//		Transparently applies callbacks to values and/or promises. | ||||
| 		// description: | ||||
| 		//		Accepts promises but also transparently handles non-promises. If no | ||||
| 		//		callbacks are provided returns a promise, regardless of the initial | ||||
| 		//		value. Foreign promises are converted. | ||||
| 		// | ||||
| 		//		If callbacks are provided and the initial value is not a promise, | ||||
| 		//		the callback is executed immediately with no error handling. Returns | ||||
| 		//		a promise if the initial value is a promise, or the result of the | ||||
| 		//		callback otherwise. | ||||
| 		// valueOrPromise: | ||||
| 		//		Either a regular value or an object with a `then()` method that | ||||
| 		//		follows the Promises/A specification. | ||||
| 		// callback: Function? | ||||
| 		//		Callback to be invoked when the promise is resolved, or a non-promise | ||||
| 		//		is received. | ||||
| 		// errback: Function? | ||||
| 		//		Callback to be invoked when the promise is rejected. | ||||
| 		// progback: Function? | ||||
| 		//		Callback to be invoked when the promise emits a progress update. | ||||
| 		// returns: dojo/promise/Promise | ||||
| 		//		Promise, or if a callback is provided, the result of the callback. | ||||
|  | ||||
| 		var receivedPromise = valueOrPromise && typeof valueOrPromise.then === "function"; | ||||
| 		var nativePromise = receivedPromise && valueOrPromise instanceof Promise; | ||||
|  | ||||
| 		if(!receivedPromise){ | ||||
| 			if(arguments.length > 1){ | ||||
| 				return callback ? callback(valueOrPromise) : valueOrPromise; | ||||
| 			}else{ | ||||
| 				return new Deferred().resolve(valueOrPromise); | ||||
| 			} | ||||
| 		}else if(!nativePromise){ | ||||
| 			var deferred = new Deferred(valueOrPromise.cancel); | ||||
| 			valueOrPromise.then(deferred.resolve, deferred.reject, deferred.progress); | ||||
| 			valueOrPromise = deferred.promise; | ||||
| 		} | ||||
|  | ||||
| 		if(callback || errback || progback){ | ||||
| 			return valueOrPromise.then(callback, errback, progback); | ||||
| 		} | ||||
| 		return valueOrPromise; | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										8829
									
								
								debian/missing-sources/jquery-2.0.3.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8829
									
								
								debian/missing-sources/jquery-2.0.3.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										212
									
								
								debian/missing-sources/patternfly.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										212
									
								
								debian/missing-sources/patternfly.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,212 @@ | ||||
| // PatternFly Namespace | ||||
| var PatternFly = PatternFly || {}; | ||||
|  | ||||
| // Util: PatternFly Sidebar  | ||||
| // Set height of sidebar-pf to height of document minus height of navbar-pf if not mobile | ||||
| (function($) { | ||||
|   sidebar = function() { | ||||
|     var documentHeight = 0; | ||||
|     var navbarpfHeight = 0; | ||||
|     var colHeight = 0; | ||||
|     if ( $('.navbar-pf .navbar-toggle').is(':hidden') ) { | ||||
|       documentHeight = $(document).height(); | ||||
|       navbarpfHeight = $('.navbar-pf').outerHeight(); | ||||
|       colHeight = documentHeight - navbarpfHeight; | ||||
|     } | ||||
|     $('.sidebar-pf').parent('.row').children('[class*="col-"]').css({ "min-height":colHeight}); | ||||
|   } | ||||
|   $(document).ready(function() { | ||||
|     // Call sidebar() on ready if .sidebar-pf exists and .datatable does not exist | ||||
|     if ($('.sidebar-pf').length > 0 && $('.datatable').length == 0) { | ||||
|       sidebar(); | ||||
|     } | ||||
|   }); | ||||
|   $(window).resize(function() { | ||||
|     // Call sidebar() on resize if .sidebar-pf exists | ||||
|     if ($('.sidebar-pf').length > 0) { | ||||
|       sidebar(); | ||||
|     } | ||||
|   }); | ||||
| })(jQuery); | ||||
|  | ||||
| // Util: PatternFly Popovers | ||||
| // Add data-close="true" to insert close X icon | ||||
| (function($) { | ||||
|   PatternFly.popovers = function( selector ) { | ||||
|     var allpopovers = $(selector); | ||||
|      | ||||
|     // Initialize | ||||
|     allpopovers.popover(); | ||||
|      | ||||
|     // Add close icons | ||||
|     allpopovers.filter('[data-close=true]').each(function(index, element) { | ||||
|       var $this = $(element), | ||||
|         title = $this.attr('data-original-title') + '<button type="button" class="close" aria-hidden="true"><span class="pficon pficon-close"></span></button>'; | ||||
|  | ||||
|       $this.attr('data-original-title', title); | ||||
|     }); | ||||
|      | ||||
|     // Bind Close Icon to Toggle Display | ||||
|     allpopovers.on('click', function(e) { | ||||
|       var $this = $(this); | ||||
|         $title = $this.next('.popover').find('.popover-title'); | ||||
|        | ||||
|       // Only if data-close is true add class "x" to title for right padding | ||||
|       $title.find('.close').parent('.popover-title').addClass('closable'); | ||||
|        | ||||
|       // Bind x icon to close popover | ||||
|       $title.find('.close').on('click', function() { | ||||
|         $this.popover('toggle'); | ||||
|       }); | ||||
|        | ||||
|       // Prevent href="#" page scroll to top | ||||
|       e.preventDefault(); | ||||
|     }); | ||||
|   }; | ||||
| })(jQuery); | ||||
|  | ||||
|  | ||||
| // Util: DataTables Settings | ||||
| (function($) { | ||||
|   if ($.fn.dataTableExt) { | ||||
|     /* Set the defaults for DataTables initialisation */ | ||||
|     $.extend( true, $.fn.dataTable.defaults, { | ||||
|       "bDestroy": true, | ||||
|       "bAutoWidth": false, | ||||
|       "iDisplayLength": 20, | ||||
|       "sDom":  | ||||
|         "<'dataTables_header' f i r >" +  | ||||
|         "<'table-responsive'  t >" +  | ||||
|         "<'dataTables_footer' p >", | ||||
|       "oLanguage": { | ||||
|         "sInfo": "Showing <b>_START_</b> to <b>_END_</b> of <b>_TOTAL_</b> Items", | ||||
|         "sInfoFiltered" : "(of <b>_MAX_</b>)", | ||||
|         "sInfoEmpty" : "Showing <b>0</b> Results", | ||||
|         "sZeroRecords":  | ||||
|           "<p>Suggestions</p>" +  | ||||
|           "<ul>" +  | ||||
|             "<li>Check the syntax of the search term.</li>" + | ||||
|             "<li>Check that the correct menu option is chosen (token ID vs. user ID).</li>" + | ||||
|             "<li>Use wildcards (* to match zero or more characters or ? to match a single character).</li>" + | ||||
|             "<li>Clear the search field, then click Search to return to the 20 most recent records.</li>" + | ||||
|           "</ul>", | ||||
|         "sSearch": "" | ||||
|       }, | ||||
|       "sPaginationType": "bootstrap_input" | ||||
|     }); | ||||
|  | ||||
|     /* Default class modification */ | ||||
|     $.extend( $.fn.dataTableExt.oStdClasses, { | ||||
|       "sWrapper": "dataTables_wrapper" | ||||
|     }); | ||||
|  | ||||
|     /* API method to get paging information */ | ||||
|     $.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings ) { | ||||
|       return { | ||||
|         "iStart":         oSettings._iDisplayStart, | ||||
|         "iEnd":           oSettings.fnDisplayEnd(), | ||||
|         "iLength":        oSettings._iDisplayLength, | ||||
|         "iTotal":         oSettings.fnRecordsTotal(), | ||||
|         "iFilteredTotal": oSettings.fnRecordsDisplay(), | ||||
|         "iPage":          oSettings._iDisplayLength === -1 ? | ||||
|           0 : Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ), | ||||
|         "iTotalPages":    oSettings._iDisplayLength === -1 ? | ||||
|           0 : Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength ) | ||||
|       }; | ||||
|     }; | ||||
|  | ||||
|     /* Combination of Bootstrap + Input Text style pagination control */ | ||||
|     $.extend( $.fn.dataTableExt.oPagination, { | ||||
|       "bootstrap_input": { | ||||
|         "fnInit": function( oSettings, nPaging, fnDraw ) { | ||||
|           var oLang = oSettings.oLanguage.oPaginate; | ||||
|           var fnClickHandler = function ( e ) { | ||||
|             e.preventDefault(); | ||||
|             if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) { | ||||
|               fnDraw( oSettings ); | ||||
|             } | ||||
|           }; | ||||
|  | ||||
|           $(nPaging).append( | ||||
|             '<ul class="pagination">'+ | ||||
|               '<li class="first disabled"><span class="i fa fa-angle-double-left"></span></li>' + | ||||
|               '<li class="prev disabled"><span class="i fa fa-angle-left"></span></li>' + | ||||
|             '</ul>' +  | ||||
|             '<div class="pagination-input">' +  | ||||
|               '<input type="text" class="paginate_input">' +  | ||||
|               '<span class="paginate_of">of <b>3</b></span>' +  | ||||
|             '</div>' +  | ||||
|             '<ul class="pagination">'+ | ||||
|               '<li class="next disabled"><span class="i fa fa-angle-right"></span></li>' + | ||||
|               '<li class="last disabled"><span class="i fa fa-angle-double-right"></span></li>' + | ||||
|             '</ul>' | ||||
|           ); | ||||
|            | ||||
|           var els = $('li', nPaging); | ||||
|           $(els[0]).bind( 'click.DT', { action: "first" }, fnClickHandler ); | ||||
|           $(els[1]).bind( 'click.DT', { action: "previous" }, fnClickHandler ); | ||||
|           $(els[2]).bind( 'click.DT', { action: "next" }, fnClickHandler ); | ||||
|           $(els[3]).bind( 'click.DT', { action: "last" }, fnClickHandler ); | ||||
|            | ||||
|           var nInput = $('input', nPaging); | ||||
|           $(nInput).keyup( function (e) { | ||||
|               if ( e.which == 38 || e.which == 39 ) { | ||||
|                 this.value++; | ||||
|               } | ||||
|               else if ( (e.which == 37 || e.which == 40) && this.value > 1 ) { | ||||
|                 this.value--; | ||||
|               } | ||||
|                  | ||||
|               if ( this.value == "" || this.value.match(/[^0-9]/) ) { | ||||
|                 /* Nothing entered or non-numeric character */ | ||||
|                 return; | ||||
|               } | ||||
|                  | ||||
|               var iNewStart = oSettings._iDisplayLength * (this.value - 1); | ||||
|               if ( iNewStart > oSettings.fnRecordsDisplay() ) { | ||||
|                 /* Display overrun */ | ||||
|                 oSettings._iDisplayStart = (Math.ceil((oSettings.fnRecordsDisplay()-1) / | ||||
|                   oSettings._iDisplayLength)-1) * oSettings._iDisplayLength; | ||||
|                 fnDraw( oSettings ); | ||||
|                 return; | ||||
|               } | ||||
|                  | ||||
|               oSettings._iDisplayStart = iNewStart; | ||||
|               fnDraw( oSettings ); | ||||
|           }); | ||||
|         }, | ||||
|  | ||||
|         "fnUpdate": function ( oSettings, fnDraw ) { | ||||
|           var oPaging = oSettings.oInstance.fnPagingInfo(), | ||||
|             an = oSettings.aanFeatures.p, | ||||
|             i, | ||||
|             ien, | ||||
|             iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength), | ||||
|             iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1; | ||||
|  | ||||
|           for ( i=0, ien=an.length ; i<ien ; i++ ) { | ||||
|             $('.paginate_input').val(iCurrentPage); | ||||
|             $('.paginate_of b').html(iPages); | ||||
|              | ||||
|             // Add / remove disabled classes from the static elements | ||||
|             if ( oPaging.iPage === 0 ) { | ||||
|               $('li.first', an[i]).addClass('disabled'); | ||||
|               $('li.prev', an[i]).addClass('disabled'); | ||||
|             } else { | ||||
|               $('li.first', an[i]).removeClass('disabled'); | ||||
|               $('li.prev', an[i]).removeClass('disabled'); | ||||
|             } | ||||
|  | ||||
|             if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) { | ||||
|               $('li.next', an[i]).addClass('disabled'); | ||||
|               $('li.last', an[i]).addClass('disabled'); | ||||
|             } else { | ||||
|               $('li.next', an[i]).removeClass('disabled'); | ||||
|               $('li.last', an[i]).removeClass('disabled'); | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
| })(jQuery); | ||||
							
								
								
									
										614
									
								
								debian/missing-sources/qrcode.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										614
									
								
								debian/missing-sources/qrcode.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,614 @@ | ||||
| /** | ||||
|  * @fileoverview | ||||
|  * - Using the 'QRCode for Javascript library' | ||||
|  * - Fixed dataset of 'QRCode for Javascript library' for support full-spec. | ||||
|  * - this library has no dependencies. | ||||
|  *  | ||||
|  * @author davidshimjs | ||||
|  * @see <a href="http://www.d-project.com/" target="_blank">http://www.d-project.com/</a> | ||||
|  * @see <a href="http://jeromeetienne.github.com/jquery-qrcode/" target="_blank">http://jeromeetienne.github.com/jquery-qrcode/</a> | ||||
|  */ | ||||
| var QRCode; | ||||
|  | ||||
| (function () { | ||||
| 	//--------------------------------------------------------------------- | ||||
| 	// QRCode for JavaScript | ||||
| 	// | ||||
| 	// Copyright (c) 2009 Kazuhiko Arase | ||||
| 	// | ||||
| 	// URL: http://www.d-project.com/ | ||||
| 	// | ||||
| 	// Licensed under the MIT license: | ||||
| 	//   http://www.opensource.org/licenses/mit-license.php | ||||
| 	// | ||||
| 	// The word "QR Code" is registered trademark of  | ||||
| 	// DENSO WAVE INCORPORATED | ||||
| 	//   http://www.denso-wave.com/qrcode/faqpatent-e.html | ||||
| 	// | ||||
| 	//--------------------------------------------------------------------- | ||||
| 	function QR8bitByte(data) { | ||||
| 		this.mode = QRMode.MODE_8BIT_BYTE; | ||||
| 		this.data = data; | ||||
| 		this.parsedData = []; | ||||
|  | ||||
| 		// Added to support UTF-8 Characters | ||||
| 		for (var i = 0, l = this.data.length; i < l; i++) { | ||||
| 			var byteArray = []; | ||||
| 			var code = this.data.charCodeAt(i); | ||||
|  | ||||
| 			if (code > 0x10000) { | ||||
| 				byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18); | ||||
| 				byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12); | ||||
| 				byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6); | ||||
| 				byteArray[3] = 0x80 | (code & 0x3F); | ||||
| 			} else if (code > 0x800) { | ||||
| 				byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12); | ||||
| 				byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6); | ||||
| 				byteArray[2] = 0x80 | (code & 0x3F); | ||||
| 			} else if (code > 0x80) { | ||||
| 				byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6); | ||||
| 				byteArray[1] = 0x80 | (code & 0x3F); | ||||
| 			} else { | ||||
| 				byteArray[0] = code; | ||||
| 			} | ||||
|  | ||||
| 			this.parsedData.push(byteArray); | ||||
| 		} | ||||
|  | ||||
| 		this.parsedData = Array.prototype.concat.apply([], this.parsedData); | ||||
|  | ||||
| 		if (this.parsedData.length != this.data.length) { | ||||
| 			this.parsedData.unshift(191); | ||||
| 			this.parsedData.unshift(187); | ||||
| 			this.parsedData.unshift(239); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	QR8bitByte.prototype = { | ||||
| 		getLength: function (buffer) { | ||||
| 			return this.parsedData.length; | ||||
| 		}, | ||||
| 		write: function (buffer) { | ||||
| 			for (var i = 0, l = this.parsedData.length; i < l; i++) { | ||||
| 				buffer.put(this.parsedData[i], 8); | ||||
| 			} | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	function QRCodeModel(typeNumber, errorCorrectLevel) { | ||||
| 		this.typeNumber = typeNumber; | ||||
| 		this.errorCorrectLevel = errorCorrectLevel; | ||||
| 		this.modules = null; | ||||
| 		this.moduleCount = 0; | ||||
| 		this.dataCache = null; | ||||
| 		this.dataList = []; | ||||
| 	} | ||||
|  | ||||
| 	QRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+","+col);} | ||||
| 	return this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row<this.moduleCount;row++){this.modules[row]=new Array(this.moduleCount);for(var col=0;col<this.moduleCount;col++){this.modules[row][col]=null;}} | ||||
| 	this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(test,maskPattern);if(this.typeNumber>=7){this.setupTypeNumber(test);} | ||||
| 	if(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);} | ||||
| 	this.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}} | ||||
| 	return pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row<this.modules.length;row++){var y=row*cs;for(var col=0;col<this.modules[row].length;col++){var x=col*cs;var dark=this.modules[row][col];if(dark){qr_mc.beginFill(0,100);qr_mc.moveTo(x,y);qr_mc.lineTo(x+cs,y);qr_mc.lineTo(x+cs,y+cs);qr_mc.lineTo(x,y+cs);qr_mc.endFill();}}} | ||||
| 	return qr_mc;},setupTimingPattern:function(){for(var r=8;r<this.moduleCount-8;r++){if(this.modules[r][6]!=null){continue;} | ||||
| 	this.modules[r][6]=(r%2==0);} | ||||
| 	for(var c=8;c<this.moduleCount-8;c++){if(this.modules[6][c]!=null){continue;} | ||||
| 	this.modules[6][c]=(c%2==0);}},setupPositionAdjustPattern:function(){var pos=QRUtil.getPatternPosition(this.typeNumber);for(var i=0;i<pos.length;i++){for(var j=0;j<pos.length;j++){var row=pos[i];var col=pos[j];if(this.modules[row][col]!=null){continue;} | ||||
| 	for(var r=-2;r<=2;r++){for(var c=-2;c<=2;c++){if(r==-2||r==2||c==-2||c==2||(r==0&&c==0)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}}}},setupTypeNumber:function(test){var bits=QRUtil.getBCHTypeNumber(this.typeNumber);for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;} | ||||
| 	for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}} | ||||
| 	for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}} | ||||
| 	this.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex<data.length){dark=(((data[byteIndex]>>>bitIndex)&1)==1);} | ||||
| 	var mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;} | ||||
| 	this.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}} | ||||
| 	row+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;i<dataList.length;i++){var data=dataList[i];buffer.put(data.mode,4);buffer.put(data.getLength(),QRUtil.getLengthInBits(data.mode,typeNumber));data.write(buffer);} | ||||
| 	var totalDataCount=0;for(var i=0;i<rsBlocks.length;i++){totalDataCount+=rsBlocks[i].dataCount;} | ||||
| 	if(buffer.getLengthInBits()>totalDataCount*8){throw new Error("code length overflow. (" | ||||
| 	+buffer.getLengthInBits() | ||||
| 	+">" | ||||
| 	+totalDataCount*8 | ||||
| 	+")");} | ||||
| 	if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);} | ||||
| 	while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);} | ||||
| 	while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;} | ||||
| 	buffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;} | ||||
| 	buffer.put(QRCodeModel.PAD1,8);} | ||||
| 	return QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r<rsBlocks.length;r++){var dcCount=rsBlocks[r].dataCount;var ecCount=rsBlocks[r].totalCount-dcCount;maxDcCount=Math.max(maxDcCount,dcCount);maxEcCount=Math.max(maxEcCount,ecCount);dcdata[r]=new Array(dcCount);for(var i=0;i<dcdata[r].length;i++){dcdata[r][i]=0xff&buffer.buffer[i+offset];} | ||||
| 	offset+=dcCount;var rsPoly=QRUtil.getErrorCorrectPolynomial(ecCount);var rawPoly=new QRPolynomial(dcdata[r],rsPoly.getLength()-1);var modPoly=rawPoly.mod(rsPoly);ecdata[r]=new Array(rsPoly.getLength()-1);for(var i=0;i<ecdata[r].length;i++){var modIndex=i+modPoly.getLength()-ecdata[r].length;ecdata[r][i]=(modIndex>=0)?modPoly.get(modIndex):0;}} | ||||
| 	var totalCodeCount=0;for(var i=0;i<rsBlocks.length;i++){totalCodeCount+=rsBlocks[i].totalCount;} | ||||
| 	var data=new Array(totalCodeCount);var index=0;for(var i=0;i<maxDcCount;i++){for(var r=0;r<rsBlocks.length;r++){if(i<dcdata[r].length){data[index++]=dcdata[r][i];}}} | ||||
| 	for(var i=0;i<maxEcCount;i++){for(var r=0;r<rsBlocks.length;r++){if(i<ecdata[r].length){data[index++]=ecdata[r][i];}}} | ||||
| 	return data;};var QRMode={MODE_NUMBER:1<<0,MODE_ALPHA_NUM:1<<1,MODE_8BIT_BYTE:1<<2,MODE_KANJI:1<<3};var QRErrorCorrectLevel={L:1,M:0,Q:3,H:2};var QRMaskPattern={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var QRUtil={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:(1<<10)|(1<<8)|(1<<5)|(1<<4)|(1<<2)|(1<<1)|(1<<0),G18:(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<5)|(1<<2)|(1<<0),G15_MASK:(1<<14)|(1<<12)|(1<<10)|(1<<4)|(1<<1),getBCHTypeInfo:function(data){var d=data<<10;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)>=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));} | ||||
| 	return((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));} | ||||
| 	return(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;} | ||||
| 	return digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error("bad maskPattern:"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i<errorCorrectLength;i++){a=a.multiply(new QRPolynomial([1,QRMath.gexp(i)],0));} | ||||
| 	return a;},getLengthInBits:function(mode,type){if(1<=type&&type<10){switch(mode){case QRMode.MODE_NUMBER:return 10;case QRMode.MODE_ALPHA_NUM:return 9;case QRMode.MODE_8BIT_BYTE:return 8;case QRMode.MODE_KANJI:return 8;default:throw new Error("mode:"+mode);}}else if(type<27){switch(mode){case QRMode.MODE_NUMBER:return 12;case QRMode.MODE_ALPHA_NUM:return 11;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 10;default:throw new Error("mode:"+mode);}}else if(type<41){switch(mode){case QRMode.MODE_NUMBER:return 14;case QRMode.MODE_ALPHA_NUM:return 13;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 12;default:throw new Error("mode:"+mode);}}else{throw new Error("type:"+type);}},getLostPoint:function(qrCode){var moduleCount=qrCode.getModuleCount();var lostPoint=0;for(var row=0;row<moduleCount;row++){for(var col=0;col<moduleCount;col++){var sameCount=0;var dark=qrCode.isDark(row,col);for(var r=-1;r<=1;r++){if(row+r<0||moduleCount<=row+r){continue;} | ||||
| 	for(var c=-1;c<=1;c++){if(col+c<0||moduleCount<=col+c){continue;} | ||||
| 	if(r==0&&c==0){continue;} | ||||
| 	if(dark==qrCode.isDark(row+r,col+c)){sameCount++;}}} | ||||
| 	if(sameCount>5){lostPoint+=(3+sameCount-5);}}} | ||||
| 	for(var row=0;row<moduleCount-1;row++){for(var col=0;col<moduleCount-1;col++){var count=0;if(qrCode.isDark(row,col))count++;if(qrCode.isDark(row+1,col))count++;if(qrCode.isDark(row,col+1))count++;if(qrCode.isDark(row+1,col+1))count++;if(count==0||count==4){lostPoint+=3;}}} | ||||
| 	for(var row=0;row<moduleCount;row++){for(var col=0;col<moduleCount-6;col++){if(qrCode.isDark(row,col)&&!qrCode.isDark(row,col+1)&&qrCode.isDark(row,col+2)&&qrCode.isDark(row,col+3)&&qrCode.isDark(row,col+4)&&!qrCode.isDark(row,col+5)&&qrCode.isDark(row,col+6)){lostPoint+=40;}}} | ||||
| 	for(var col=0;col<moduleCount;col++){for(var row=0;row<moduleCount-6;row++){if(qrCode.isDark(row,col)&&!qrCode.isDark(row+1,col)&&qrCode.isDark(row+2,col)&&qrCode.isDark(row+3,col)&&qrCode.isDark(row+4,col)&&!qrCode.isDark(row+5,col)&&qrCode.isDark(row+6,col)){lostPoint+=40;}}} | ||||
| 	var darkCount=0;for(var col=0;col<moduleCount;col++){for(var row=0;row<moduleCount;row++){if(qrCode.isDark(row,col)){darkCount++;}}} | ||||
| 	var ratio=Math.abs(100*darkCount/moduleCount/moduleCount-50)/5;lostPoint+=ratio*10;return lostPoint;}};var QRMath={glog:function(n){if(n<1){throw new Error("glog("+n+")");} | ||||
| 	return QRMath.LOG_TABLE[n];},gexp:function(n){while(n<0){n+=255;} | ||||
| 	while(n>=256){n-=255;} | ||||
| 	return QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<<i;} | ||||
| 	for(var i=8;i<256;i++){QRMath.EXP_TABLE[i]=QRMath.EXP_TABLE[i-4]^QRMath.EXP_TABLE[i-5]^QRMath.EXP_TABLE[i-6]^QRMath.EXP_TABLE[i-8];} | ||||
| 	for(var i=0;i<255;i++){QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]]=i;} | ||||
| 	function QRPolynomial(num,shift){if(num.length==undefined){throw new Error(num.length+"/"+shift);} | ||||
| 	var offset=0;while(offset<num.length&&num[offset]==0){offset++;} | ||||
| 	this.num=new Array(num.length-offset+shift);for(var i=0;i<num.length-offset;i++){this.num[i]=num[i+offset];}} | ||||
| 	QRPolynomial.prototype={get:function(index){return this.num[index];},getLength:function(){return this.num.length;},multiply:function(e){var num=new Array(this.getLength()+e.getLength()-1);for(var i=0;i<this.getLength();i++){for(var j=0;j<e.getLength();j++){num[i+j]^=QRMath.gexp(QRMath.glog(this.get(i))+QRMath.glog(e.get(j)));}} | ||||
| 	return new QRPolynomial(num,0);},mod:function(e){if(this.getLength()-e.getLength()<0){return this;} | ||||
| 	var ratio=QRMath.glog(this.get(0))-QRMath.glog(e.get(0));var num=new Array(this.getLength());for(var i=0;i<this.getLength();i++){num[i]=this.get(i);} | ||||
| 	for(var i=0;i<e.getLength();i++){num[i]^=QRMath.gexp(QRMath.glog(e.get(i))+ratio);} | ||||
| 	return new QRPolynomial(num,0).mod(e);}};function QRRSBlock(totalCount,dataCount){this.totalCount=totalCount;this.dataCount=dataCount;} | ||||
| 	QRRSBlock.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];QRRSBlock.getRSBlocks=function(typeNumber,errorCorrectLevel){var rsBlock=QRRSBlock.getRsBlockTable(typeNumber,errorCorrectLevel);if(rsBlock==undefined){throw new Error("bad rs block @ typeNumber:"+typeNumber+"/errorCorrectLevel:"+errorCorrectLevel);} | ||||
| 	var length=rsBlock.length/3;var list=[];for(var i=0;i<length;i++){var count=rsBlock[i*3+0];var totalCount=rsBlock[i*3+1];var dataCount=rsBlock[i*3+2];for(var j=0;j<count;j++){list.push(new QRRSBlock(totalCount,dataCount));}} | ||||
| 	return list;};QRRSBlock.getRsBlockTable=function(typeNumber,errorCorrectLevel){switch(errorCorrectLevel){case QRErrorCorrectLevel.L:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+0];case QRErrorCorrectLevel.M:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+1];case QRErrorCorrectLevel.Q:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+2];case QRErrorCorrectLevel.H:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+3];default:return undefined;}};function QRBitBuffer(){this.buffer=[];this.length=0;} | ||||
| 	QRBitBuffer.prototype={get:function(index){var bufIndex=Math.floor(index/8);return((this.buffer[bufIndex]>>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i<length;i++){this.putBit(((num>>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);} | ||||
| 	if(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));} | ||||
| 	this.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]]; | ||||
| 	 | ||||
| 	function _isSupportCanvas() { | ||||
| 		return typeof CanvasRenderingContext2D != "undefined"; | ||||
| 	} | ||||
| 	 | ||||
| 	// android 2.x doesn't support Data-URI spec | ||||
| 	function _getAndroid() { | ||||
| 		var android = false; | ||||
| 		var sAgent = navigator.userAgent; | ||||
| 		 | ||||
| 		if (/android/i.test(sAgent)) { // android | ||||
| 			android = true; | ||||
| 			var aMat = sAgent.toString().match(/android ([0-9]\.[0-9])/i); | ||||
| 			 | ||||
| 			if (aMat && aMat[1]) { | ||||
| 				android = parseFloat(aMat[1]); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return android; | ||||
| 	} | ||||
| 	 | ||||
| 	var svgDrawer = (function() { | ||||
|  | ||||
| 		var Drawing = function (el, htOption) { | ||||
| 			this._el = el; | ||||
| 			this._htOption = htOption; | ||||
| 		}; | ||||
|  | ||||
| 		Drawing.prototype.draw = function (oQRCode) { | ||||
| 			var _htOption = this._htOption; | ||||
| 			var _el = this._el; | ||||
| 			var nCount = oQRCode.getModuleCount(); | ||||
| 			var nWidth = Math.floor(_htOption.width / nCount); | ||||
| 			var nHeight = Math.floor(_htOption.height / nCount); | ||||
|  | ||||
| 			this.clear(); | ||||
|  | ||||
| 			function makeSVG(tag, attrs) { | ||||
| 				var el = document.createElementNS('http://www.w3.org/2000/svg', tag); | ||||
| 				for (var k in attrs) | ||||
| 					if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]); | ||||
| 				return el; | ||||
| 			} | ||||
|  | ||||
| 			var svg = makeSVG("svg" , {'viewBox': '0 0 ' + String(nCount) + " " + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight}); | ||||
| 			svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); | ||||
| 			_el.appendChild(svg); | ||||
|  | ||||
| 			svg.appendChild(makeSVG("rect", {"fill": _htOption.colorLight, "width": "100%", "height": "100%"})); | ||||
| 			svg.appendChild(makeSVG("rect", {"fill": _htOption.colorDark, "width": "1", "height": "1", "id": "template"})); | ||||
|  | ||||
| 			for (var row = 0; row < nCount; row++) { | ||||
| 				for (var col = 0; col < nCount; col++) { | ||||
| 					if (oQRCode.isDark(row, col)) { | ||||
| 						var child = makeSVG("use", {"x": String(col), "y": String(row)}); | ||||
| 						child.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template") | ||||
| 						svg.appendChild(child); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}; | ||||
| 		Drawing.prototype.clear = function () { | ||||
| 			while (this._el.hasChildNodes()) | ||||
| 				this._el.removeChild(this._el.lastChild); | ||||
| 		}; | ||||
| 		return Drawing; | ||||
| 	})(); | ||||
|  | ||||
| 	var useSVG = document.documentElement.tagName.toLowerCase() === "svg"; | ||||
|  | ||||
| 	// Drawing in DOM by using Table tag | ||||
| 	var Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () { | ||||
| 		var Drawing = function (el, htOption) { | ||||
| 			this._el = el; | ||||
| 			this._htOption = htOption; | ||||
| 		}; | ||||
| 			 | ||||
| 		/** | ||||
| 		 * Draw the QRCode | ||||
| 		 *  | ||||
| 		 * @param {QRCode} oQRCode | ||||
| 		 */ | ||||
| 		Drawing.prototype.draw = function (oQRCode) { | ||||
|             var _htOption = this._htOption; | ||||
|             var _el = this._el; | ||||
| 			var nCount = oQRCode.getModuleCount(); | ||||
| 			var nWidth = Math.floor(_htOption.width / nCount); | ||||
| 			var nHeight = Math.floor(_htOption.height / nCount); | ||||
| 			var aHTML = ['<table style="border:0;border-collapse:collapse;">']; | ||||
| 			 | ||||
| 			for (var row = 0; row < nCount; row++) { | ||||
| 				aHTML.push('<tr>'); | ||||
| 				 | ||||
| 				for (var col = 0; col < nCount; col++) { | ||||
| 					aHTML.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:' + nWidth + 'px;height:' + nHeight + 'px;background-color:' + (oQRCode.isDark(row, col) ? _htOption.colorDark : _htOption.colorLight) + ';"></td>'); | ||||
| 				} | ||||
| 				 | ||||
| 				aHTML.push('</tr>'); | ||||
| 			} | ||||
| 			 | ||||
| 			aHTML.push('</table>'); | ||||
| 			_el.innerHTML = aHTML.join(''); | ||||
| 			 | ||||
| 			// Fix the margin values as real size. | ||||
| 			var elTable = _el.childNodes[0]; | ||||
| 			var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2; | ||||
| 			var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2; | ||||
| 			 | ||||
| 			if (nLeftMarginTable > 0 && nTopMarginTable > 0) { | ||||
| 				elTable.style.margin = nTopMarginTable + "px " + nLeftMarginTable + "px";	 | ||||
| 			} | ||||
| 		}; | ||||
| 		 | ||||
| 		/** | ||||
| 		 * Clear the QRCode | ||||
| 		 */ | ||||
| 		Drawing.prototype.clear = function () { | ||||
| 			this._el.innerHTML = ''; | ||||
| 		}; | ||||
| 		 | ||||
| 		return Drawing; | ||||
| 	})() : (function () { // Drawing in Canvas | ||||
| 		function _onMakeImage() { | ||||
| 			this._elImage.src = this._elCanvas.toDataURL("image/png"); | ||||
| 			this._elImage.style.display = "block"; | ||||
| 			this._elCanvas.style.display = "none";			 | ||||
| 		} | ||||
| 		 | ||||
| 		// Android 2.1 bug workaround | ||||
| 		// http://code.google.com/p/android/issues/detail?id=5141 | ||||
| 		if (this._android && this._android <= 2.1) { | ||||
| 	    	var factor = 1 / window.devicePixelRatio; | ||||
| 	        var drawImage = CanvasRenderingContext2D.prototype.drawImage;  | ||||
| 	    	CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) { | ||||
| 	    		if (("nodeName" in image) && /img/i.test(image.nodeName)) { | ||||
| 		        	for (var i = arguments.length - 1; i >= 1; i--) { | ||||
| 		            	arguments[i] = arguments[i] * factor; | ||||
| 		        	} | ||||
| 	    		} else if (typeof dw == "undefined") { | ||||
| 	    			arguments[1] *= factor; | ||||
| 	    			arguments[2] *= factor; | ||||
| 	    			arguments[3] *= factor; | ||||
| 	    			arguments[4] *= factor; | ||||
| 	    		} | ||||
| 	    		 | ||||
| 	        	drawImage.apply(this, arguments);  | ||||
| 	    	}; | ||||
| 		} | ||||
| 		 | ||||
| 		/** | ||||
| 		 * Check whether the user's browser supports Data URI or not | ||||
| 		 *  | ||||
| 		 * @private | ||||
| 		 * @param {Function} fSuccess Occurs if it supports Data URI | ||||
| 		 * @param {Function} fFail Occurs if it doesn't support Data URI | ||||
| 		 */ | ||||
| 		function _safeSetDataURI(fSuccess, fFail) { | ||||
|             var self = this; | ||||
|             self._fFail = fFail; | ||||
|             self._fSuccess = fSuccess; | ||||
|  | ||||
|             // Check it just once | ||||
|             if (self._bSupportDataURI === null) { | ||||
|                 var el = document.createElement("img"); | ||||
|                 var fOnError = function() { | ||||
|                     self._bSupportDataURI = false; | ||||
|  | ||||
|                     if (self._fFail) { | ||||
|                         self._fFail.call(self); | ||||
|                     } | ||||
|                 }; | ||||
|                 var fOnSuccess = function() { | ||||
|                     self._bSupportDataURI = true; | ||||
|  | ||||
|                     if (self._fSuccess) { | ||||
|                         self._fSuccess.call(self); | ||||
|                     } | ||||
|                 }; | ||||
|  | ||||
|                 el.onabort = fOnError; | ||||
|                 el.onerror = fOnError; | ||||
|                 el.onload = fOnSuccess; | ||||
|                 el.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // the Image contains 1px data. | ||||
|                 return; | ||||
|             } else if (self._bSupportDataURI === true && self._fSuccess) { | ||||
|                 self._fSuccess.call(self); | ||||
|             } else if (self._bSupportDataURI === false && self._fFail) { | ||||
|                 self._fFail.call(self); | ||||
|             } | ||||
| 		}; | ||||
| 		 | ||||
| 		/** | ||||
| 		 * Drawing QRCode by using canvas | ||||
| 		 *  | ||||
| 		 * @constructor | ||||
| 		 * @param {HTMLElement} el | ||||
| 		 * @param {Object} htOption QRCode Options  | ||||
| 		 */ | ||||
| 		var Drawing = function (el, htOption) { | ||||
|     		this._bIsPainted = false; | ||||
|     		this._android = _getAndroid(); | ||||
| 		 | ||||
| 			this._htOption = htOption; | ||||
| 			this._elCanvas = document.createElement("canvas"); | ||||
| 			this._elCanvas.width = htOption.width; | ||||
| 			this._elCanvas.height = htOption.height; | ||||
| 			el.appendChild(this._elCanvas); | ||||
| 			this._el = el; | ||||
| 			this._oContext = this._elCanvas.getContext("2d"); | ||||
| 			this._bIsPainted = false; | ||||
| 			this._elImage = document.createElement("img"); | ||||
| 			this._elImage.alt = "Scan me!"; | ||||
| 			this._elImage.style.display = "none"; | ||||
| 			this._el.appendChild(this._elImage); | ||||
| 			this._bSupportDataURI = null; | ||||
| 		}; | ||||
| 			 | ||||
| 		/** | ||||
| 		 * Draw the QRCode | ||||
| 		 *  | ||||
| 		 * @param {QRCode} oQRCode  | ||||
| 		 */ | ||||
| 		Drawing.prototype.draw = function (oQRCode) { | ||||
|             var _elImage = this._elImage; | ||||
|             var _oContext = this._oContext; | ||||
|             var _htOption = this._htOption; | ||||
|              | ||||
| 			var nCount = oQRCode.getModuleCount(); | ||||
| 			var nWidth = _htOption.width / nCount; | ||||
| 			var nHeight = _htOption.height / nCount; | ||||
| 			var nRoundedWidth = Math.round(nWidth); | ||||
| 			var nRoundedHeight = Math.round(nHeight); | ||||
|  | ||||
| 			_elImage.style.display = "none"; | ||||
| 			this.clear(); | ||||
| 			 | ||||
| 			for (var row = 0; row < nCount; row++) { | ||||
| 				for (var col = 0; col < nCount; col++) { | ||||
| 					var bIsDark = oQRCode.isDark(row, col); | ||||
| 					var nLeft = col * nWidth; | ||||
| 					var nTop = row * nHeight; | ||||
| 					_oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; | ||||
| 					_oContext.lineWidth = 1; | ||||
| 					_oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;					 | ||||
| 					_oContext.fillRect(nLeft, nTop, nWidth, nHeight); | ||||
| 					 | ||||
| 					// 안티 앨리어싱 방지 처리 | ||||
| 					_oContext.strokeRect( | ||||
| 						Math.floor(nLeft) + 0.5, | ||||
| 						Math.floor(nTop) + 0.5, | ||||
| 						nRoundedWidth, | ||||
| 						nRoundedHeight | ||||
| 					); | ||||
| 					 | ||||
| 					_oContext.strokeRect( | ||||
| 						Math.ceil(nLeft) - 0.5, | ||||
| 						Math.ceil(nTop) - 0.5, | ||||
| 						nRoundedWidth, | ||||
| 						nRoundedHeight | ||||
| 					); | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			this._bIsPainted = true; | ||||
| 		}; | ||||
| 			 | ||||
| 		/** | ||||
| 		 * Make the image from Canvas if the browser supports Data URI. | ||||
| 		 */ | ||||
| 		Drawing.prototype.makeImage = function () { | ||||
| 			if (this._bIsPainted) { | ||||
| 				_safeSetDataURI.call(this, _onMakeImage); | ||||
| 			} | ||||
| 		}; | ||||
| 			 | ||||
| 		/** | ||||
| 		 * Return whether the QRCode is painted or not | ||||
| 		 *  | ||||
| 		 * @return {Boolean} | ||||
| 		 */ | ||||
| 		Drawing.prototype.isPainted = function () { | ||||
| 			return this._bIsPainted; | ||||
| 		}; | ||||
| 		 | ||||
| 		/** | ||||
| 		 * Clear the QRCode | ||||
| 		 */ | ||||
| 		Drawing.prototype.clear = function () { | ||||
| 			this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height); | ||||
| 			this._bIsPainted = false; | ||||
| 		}; | ||||
| 		 | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * @param {Number} nNumber | ||||
| 		 */ | ||||
| 		Drawing.prototype.round = function (nNumber) { | ||||
| 			if (!nNumber) { | ||||
| 				return nNumber; | ||||
| 			} | ||||
| 			 | ||||
| 			return Math.floor(nNumber * 1000) / 1000; | ||||
| 		}; | ||||
| 		 | ||||
| 		return Drawing; | ||||
| 	})(); | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Get the type by string length | ||||
| 	 *  | ||||
| 	 * @private | ||||
| 	 * @param {String} sText | ||||
| 	 * @param {Number} nCorrectLevel | ||||
| 	 * @return {Number} type | ||||
| 	 */ | ||||
| 	function _getTypeNumber(sText, nCorrectLevel) {			 | ||||
| 		var nType = 1; | ||||
| 		var length = _getUTF8Length(sText); | ||||
| 		 | ||||
| 		for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) { | ||||
| 			var nLimit = 0; | ||||
| 			 | ||||
| 			switch (nCorrectLevel) { | ||||
| 				case QRErrorCorrectLevel.L : | ||||
| 					nLimit = QRCodeLimitLength[i][0]; | ||||
| 					break; | ||||
| 				case QRErrorCorrectLevel.M : | ||||
| 					nLimit = QRCodeLimitLength[i][1]; | ||||
| 					break; | ||||
| 				case QRErrorCorrectLevel.Q : | ||||
| 					nLimit = QRCodeLimitLength[i][2]; | ||||
| 					break; | ||||
| 				case QRErrorCorrectLevel.H : | ||||
| 					nLimit = QRCodeLimitLength[i][3]; | ||||
| 					break; | ||||
| 			} | ||||
| 			 | ||||
| 			if (length <= nLimit) { | ||||
| 				break; | ||||
| 			} else { | ||||
| 				nType++; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if (nType > QRCodeLimitLength.length) { | ||||
| 			throw new Error("Too long data"); | ||||
| 		} | ||||
| 		 | ||||
| 		return nType; | ||||
| 	} | ||||
|  | ||||
| 	function _getUTF8Length(sText) { | ||||
| 		var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a'); | ||||
| 		return replacedText.length + (replacedText.length != sText ? 3 : 0); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * @class QRCode | ||||
| 	 * @constructor | ||||
| 	 * @example  | ||||
| 	 * new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie"); | ||||
| 	 * | ||||
| 	 * @example | ||||
| 	 * var oQRCode = new QRCode("test", { | ||||
| 	 *    text : "http://naver.com", | ||||
| 	 *    width : 128, | ||||
| 	 *    height : 128 | ||||
| 	 * }); | ||||
| 	 *  | ||||
| 	 * oQRCode.clear(); // Clear the QRCode. | ||||
| 	 * oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode. | ||||
| 	 * | ||||
| 	 * @param {HTMLElement|String} el target element or 'id' attribute of element. | ||||
| 	 * @param {Object|String} vOption | ||||
| 	 * @param {String} vOption.text QRCode link data | ||||
| 	 * @param {Number} [vOption.width=256] | ||||
| 	 * @param {Number} [vOption.height=256] | ||||
| 	 * @param {String} [vOption.colorDark="#000000"] | ||||
| 	 * @param {String} [vOption.colorLight="#ffffff"] | ||||
| 	 * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H]  | ||||
| 	 */ | ||||
| 	QRCode = function (el, vOption) { | ||||
| 		this._htOption = { | ||||
| 			width : 256,  | ||||
| 			height : 256, | ||||
| 			typeNumber : 4, | ||||
| 			colorDark : "#000000", | ||||
| 			colorLight : "#ffffff", | ||||
| 			correctLevel : QRErrorCorrectLevel.H | ||||
| 		}; | ||||
| 		 | ||||
| 		if (typeof vOption === 'string') { | ||||
| 			vOption	= { | ||||
| 				text : vOption | ||||
| 			}; | ||||
| 		} | ||||
| 		 | ||||
| 		// Overwrites options | ||||
| 		if (vOption) { | ||||
| 			for (var i in vOption) { | ||||
| 				this._htOption[i] = vOption[i]; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if (typeof el == "string") { | ||||
| 			el = document.getElementById(el); | ||||
| 		} | ||||
|  | ||||
| 		if (this._htOption.useSVG) { | ||||
| 			Drawing = svgDrawer; | ||||
| 		} | ||||
| 		 | ||||
| 		this._android = _getAndroid(); | ||||
| 		this._el = el; | ||||
| 		this._oQRCode = null; | ||||
| 		this._oDrawing = new Drawing(this._el, this._htOption); | ||||
| 		 | ||||
| 		if (this._htOption.text) { | ||||
| 			this.makeCode(this._htOption.text);	 | ||||
| 		} | ||||
| 	}; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Make the QRCode | ||||
| 	 *  | ||||
| 	 * @param {String} sText link data | ||||
| 	 */ | ||||
| 	QRCode.prototype.makeCode = function (sText) { | ||||
| 		this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel); | ||||
| 		this._oQRCode.addData(sText); | ||||
| 		this._oQRCode.make(); | ||||
| 		this._el.title = sText; | ||||
| 		this._oDrawing.draw(this._oQRCode);			 | ||||
| 		this.makeImage(); | ||||
| 	}; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Make the Image from Canvas element | ||||
| 	 * - It occurs automatically | ||||
| 	 * - Android below 3 doesn't support Data-URI spec. | ||||
| 	 *  | ||||
| 	 * @private | ||||
| 	 */ | ||||
| 	QRCode.prototype.makeImage = function () { | ||||
| 		if (typeof this._oDrawing.makeImage == "function" && (!this._android || this._android >= 3)) { | ||||
| 			this._oDrawing.makeImage(); | ||||
| 		} | ||||
| 	}; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Clear the QRCode | ||||
| 	 */ | ||||
| 	QRCode.prototype.clear = function () { | ||||
| 		this._oDrawing.clear(); | ||||
| 	}; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * @name QRCode.CorrectLevel | ||||
| 	 */ | ||||
| 	QRCode.CorrectLevel = QRErrorCorrectLevel; | ||||
| })(); | ||||
							
								
								
									
										14
									
								
								debian/patches/dnssec-race-wa.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								debian/patches/dnssec-race-wa.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| diff --git a/ipaserver/install/opendnssecinstance.py b/ipaserver/install/opendnssecinstance.py | ||||
| index 95029fd5e..9b800f509 100644 | ||||
| --- a/ipaserver/install/opendnssecinstance.py | ||||
| +++ b/ipaserver/install/opendnssecinstance.py | ||||
| @@ -306,6 +306,9 @@ class OpenDNSSECInstance(service.Service): | ||||
|   | ||||
|      def __start(self): | ||||
|          self.restart()  # needed to reload conf files | ||||
| +        import time | ||||
| +        while not os.path.exists('/run/opendnssec/enforcer.sock'): | ||||
| +            time.sleep(1) | ||||
|          tasks.run_ods_policy_import() | ||||
|          if self.kasp_db_file: | ||||
|              # regenerate zonelist.xml | ||||
							
								
								
									
										12
									
								
								debian/patches/fix-chrony-service-name.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								debian/patches/fix-chrony-service-name.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| diff --git a/ipaplatform/debian/services.py b/ipaplatform/debian/services.py | ||||
| index 812bbdaf2..9750fdeaa 100644 | ||||
| --- a/ipaplatform/debian/services.py | ||||
| +++ b/ipaplatform/debian/services.py | ||||
| @@ -20,6 +20,7 @@ debian_system_units = redhat_services.redhat_system_units.copy() | ||||
|  # For beginning just remap names to add .service | ||||
|  # As more services will migrate to systemd, unit names will deviate and | ||||
|  # mapping will be kept in this dictionary | ||||
| +debian_system_units['chronyd'] = 'chrony.service' | ||||
|  debian_system_units['httpd'] = 'apache2.service' | ||||
|  debian_system_units['kadmin'] = 'krb5-admin-server.service' | ||||
|  debian_system_units['krb5kdc'] = 'krb5-kdc.service' | ||||
							
								
								
									
										8
									
								
								debian/patches/fix-sssd-socket-activation.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								debian/patches/fix-sssd-socket-activation.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| --- a/install/share/advise/legacy/sssd.conf.template | ||||
| +++ b/install/share/advise/legacy/sssd.conf.template | ||||
| @@ -1,5 +1,4 @@ | ||||
|  [sssd] | ||||
| -services = nss, pam | ||||
|  config_file_version = 2 | ||||
|  domains = default | ||||
|  re_expression = (?P<name>.+) | ||||
							
								
								
									
										11
									
								
								debian/patches/migrate-to-gpg.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								debian/patches/migrate-to-gpg.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| --- a/ipaplatform/base/paths.py | ||||
| +++ b/ipaplatform/base/paths.py | ||||
| @@ -176,7 +176,7 @@ class BasePathNamespace: | ||||
|      CHROMIUM_BROWSER = "/usr/bin/chromium-browser" | ||||
|      FIREFOX = "/usr/bin/firefox" | ||||
|      GETCERT = "/usr/bin/getcert" | ||||
| -    GPG2 = "/usr/bin/gpg2" | ||||
| +    GPG2 = "/usr/bin/gpg" | ||||
|      GPG_CONF = "/usr/bin/gpgconf" | ||||
|      GPG_CONNECT_AGENT = "/usr/bin/gpg-connect-agent" | ||||
|      GPG_AGENT = "/usr/bin/gpg-agent" | ||||
							
								
								
									
										796
									
								
								debian/patches/pkcs11-openssl-for-bind.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										796
									
								
								debian/patches/pkcs11-openssl-for-bind.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,796 @@ | ||||
| --- a/daemons/dnssec/ipa-dnskeysync-replica.in | ||||
| +++ b/daemons/dnssec/ipa-dnskeysync-replica.in | ||||
| @@ -145,7 +145,7 @@ def ldap2replica_zone_keys_sync(ldapkeyd | ||||
|   | ||||
|   | ||||
|  # IPA framework initialization | ||||
| -standard_logging_setup(verbose=True, debug=True) | ||||
| +standard_logging_setup(debug=True) | ||||
|  ipalib.api.bootstrap(context='dns', confdir=paths.ETC_IPA, in_server=True) | ||||
|  ipalib.api.finalize() | ||||
|   | ||||
| --- a/daemons/dnssec/ipa-dnskeysyncd.in | ||||
| +++ b/daemons/dnssec/ipa-dnskeysyncd.in | ||||
| @@ -23,12 +23,9 @@ logger = logging.getLogger(os.path.basen | ||||
|   | ||||
|   | ||||
|  # IPA framework initialization | ||||
| -standard_logging_setup(verbose=True) | ||||
| +standard_logging_setup(debug=True) | ||||
|  api.bootstrap(context='dns', confdir=paths.ETC_IPA, in_server=True) | ||||
|  api.finalize() | ||||
| -if api.env.debug: | ||||
| -    root_logger = logging.getLogger() | ||||
| -    root_logger.setLevel(logging.DEBUG) | ||||
|   | ||||
|  # Global state | ||||
|  watcher_running = True | ||||
| --- a/daemons/dnssec/ipa-ods-exporter.in | ||||
| +++ b/daemons/dnssec/ipa-ods-exporter.in | ||||
| @@ -29,12 +29,12 @@ import dns.dnssec | ||||
|  from gssapi.exceptions import GSSError | ||||
|  import six | ||||
|  import systemd.daemon | ||||
| -import systemd.journal | ||||
|   | ||||
|  import ipalib | ||||
|  from ipalib.constants import SOFTHSM_DNSSEC_TOKEN_LABEL | ||||
|  from ipalib.install.kinit import kinit_keytab | ||||
|  from ipapython.dn import DN | ||||
| +from ipapython.ipa_log_manager import standard_logging_setup | ||||
|  from ipapython import ipaldap | ||||
|  from ipaplatform.paths import paths | ||||
|  from ipaserver.dnssec.abshsm import sync_pkcs11_metadata, wrappingmech_name2id | ||||
| @@ -650,20 +650,8 @@ def cleanup_ldap_zone(ldap, dns_dn, zone | ||||
|          ldap.delete_entry(ldap_key) | ||||
|   | ||||
|   | ||||
| -# this service is usually socket-activated | ||||
| -root_logger = logging.getLogger() | ||||
| -root_logger.addHandler(systemd.journal.JournalHandler()) | ||||
| -root_logger.setLevel(level=logging.DEBUG) | ||||
| - | ||||
| -if len(sys.argv) > 2: | ||||
| -    print(__doc__) | ||||
| -    sys.exit(1) | ||||
| -# program was likely invoked from console, log to it | ||||
| -elif len(sys.argv) == 2: | ||||
| -    console = logging.StreamHandler() | ||||
| -    root_logger.addHandler(console) | ||||
| - | ||||
|  # IPA framework initialization | ||||
| +standard_logging_setup(debug=True) | ||||
|  ipalib.api.bootstrap(context='dns', confdir=paths.ETC_IPA, in_server=True) | ||||
|  ipalib.api.finalize() | ||||
|   | ||||
| --- a/freeipa.spec.in | ||||
| +++ b/freeipa.spec.in | ||||
| @@ -99,6 +99,15 @@ | ||||
|  %global httpd_version 2.4.41-6.1 | ||||
|  %endif | ||||
|   | ||||
| +# BIND employs 'pkcs11' OpenSSL engine instead of native PKCS11 | ||||
| +%if 0%{?fedora} >= 31 | ||||
| +    %global with_bind_pkcs11 0 | ||||
| +    %global openssl_pkcs11_version 0.4.10-6 | ||||
| +    %global softhsm_version 2.5.0-4 | ||||
| +%else | ||||
| +    %global with_bind_pkcs11 1 | ||||
| +%endif | ||||
| + | ||||
|  # Don't use Fedora's Python dependency generator on Fedora 30/rawhide yet. | ||||
|  # Some packages don't provide new dist aliases. | ||||
|  # https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/ | ||||
| @@ -463,8 +472,13 @@ Requires: %{name}-server = %{version}-%{ | ||||
|  Requires: bind-dyndb-ldap >= 11.0-2 | ||||
|  Requires: bind >= 9.11.0-6.P2 | ||||
|  Requires: bind-utils >= 9.11.0-6.P2 | ||||
| +%if 0%{?with_bind_pkcs11} | ||||
|  Requires: bind-pkcs11 >= 9.11.0-6.P2 | ||||
|  Requires: bind-pkcs11-utils >= 9.11.0-6.P2 | ||||
| +%else | ||||
| +Requires: softhsm >= %{softhsm_version} | ||||
| +Requires: openssl-pkcs11 >= %{openssl_pkcs11_version} | ||||
| +%endif | ||||
|  %if 0%{?fedora} >= 32 | ||||
|  # See https://bugzilla.redhat.com/show_bug.cgi?id=1825812 | ||||
|  Requires: opendnssec >= 2.1.6-5 | ||||
| --- a/install/share/Makefile.am | ||||
| +++ b/install/share/Makefile.am | ||||
| @@ -48,6 +48,8 @@ dist_app_DATA =				\ | ||||
|  	bind.ipa-ext.conf.template		\ | ||||
|  	bind.ipa-options-ext.conf.template	\ | ||||
|  	bind.named.conf.template	\ | ||||
| +	bind.openssl.cnf.template	\ | ||||
| +	bind.openssl.cryptopolicy.cnf.template	\ | ||||
|  	certmap.conf.template		\ | ||||
|  	kdc.conf.template		\ | ||||
|  	kdc_extensions.template		\ | ||||
| --- /dev/null | ||||
| +++ b/install/share/bind.openssl.cnf.template | ||||
| @@ -0,0 +1,14 @@ | ||||
| +# OpenSSL configuration file | ||||
| +# File generated by IPA instalation | ||||
| +openssl_conf = openssl_init | ||||
| + | ||||
| +[openssl_init] | ||||
| +engines = engine_section | ||||
| + | ||||
| +[engine_section] | ||||
| +$OPENSSL_ENGINE = ${OPENSSL_ENGINE}_section | ||||
| + | ||||
| +[${OPENSSL_ENGINE}_section] | ||||
| +engine_id = $OPENSSL_ENGINE | ||||
| +MODULE_PATH = $SOFTHSM_MODULE | ||||
| +init=0 | ||||
| --- /dev/null | ||||
| +++ b/install/share/bind.openssl.cryptopolicy.cnf.template | ||||
| @@ -0,0 +1,21 @@ | ||||
| +# OpenSSL configuration file | ||||
| +# File generated by IPA instalation | ||||
| +openssl_conf = openssl_init | ||||
| + | ||||
| +[openssl_init] | ||||
| +ssl_conf = ssl_configuration | ||||
| +engines = engine_section | ||||
| + | ||||
| +[ssl_configuration] | ||||
| +system_default = crypto_policy | ||||
| + | ||||
| +[crypto_policy] | ||||
| +.include $CRYPTO_POLICY_FILE | ||||
| + | ||||
| +[engine_section] | ||||
| +$OPENSSL_ENGINE = ${OPENSSL_ENGINE}_section | ||||
| + | ||||
| +[${OPENSSL_ENGINE}_section] | ||||
| +engine_id = $OPENSSL_ENGINE | ||||
| +MODULE_PATH = $SOFTHSM_MODULE | ||||
| +init=0 | ||||
| --- a/ipaplatform/base/constants.py | ||||
| +++ b/ipaplatform/base/constants.py | ||||
| @@ -23,6 +23,8 @@ class BaseConstantsNamespace: | ||||
|      NAMED_USER = "named" | ||||
|      NAMED_GROUP = "named" | ||||
|      NAMED_DATA_DIR = "data/" | ||||
| +    NAMED_OPTIONS_VAR = "OPTIONS" | ||||
| +    NAMED_OPENSSL_ENGINE = None | ||||
|      NAMED_ZONE_COMMENT = "" | ||||
|      PKI_USER = 'pkiuser' | ||||
|      PKI_GROUP = 'pkiuser' | ||||
| --- a/ipaplatform/base/paths.py | ||||
| +++ b/ipaplatform/base/paths.py | ||||
| @@ -26,6 +26,7 @@ import os | ||||
|   | ||||
|  class BasePathNamespace: | ||||
|      BIN_HOSTNAMECTL = "/bin/hostnamectl" | ||||
| +    CRYPTO_POLICY_OPENSSLCNF_FILE = None | ||||
|      ECHO = "/bin/echo" | ||||
|      FIPS_MODE_SETUP = "/usr/bin/fips-mode-setup" | ||||
|      GZIP = "/bin/gzip" | ||||
| @@ -69,6 +70,7 @@ class BasePathNamespace: | ||||
|      IPA_DEFAULT_CONF = "/etc/ipa/default.conf" | ||||
|      IPA_DNSKEYSYNCD_KEYTAB = "/etc/ipa/dnssec/ipa-dnskeysyncd.keytab" | ||||
|      IPA_ODS_EXPORTER_KEYTAB = "/etc/ipa/dnssec/ipa-ods-exporter.keytab" | ||||
| +    DNSSEC_OPENSSL_CONF = None | ||||
|      DNSSEC_SOFTHSM2_CONF = "/etc/ipa/dnssec/softhsm2.conf" | ||||
|      DNSSEC_SOFTHSM_PIN_SO = "/etc/ipa/dnssec/softhsm_pin_so" | ||||
|      IPA_NSSDB_DIR = "/etc/ipa/nssdb" | ||||
| @@ -253,8 +255,6 @@ class BasePathNamespace: | ||||
|      IPA_REPLICA_CONNCHECK = "/usr/sbin/ipa-replica-conncheck" | ||||
|      IPA_RMKEYTAB = "/usr/sbin/ipa-rmkeytab" | ||||
|      IPACTL = "/usr/sbin/ipactl" | ||||
| -    NAMED = "/usr/sbin/named" | ||||
| -    NAMED_PKCS11 = "/usr/sbin/named-pkcs11" | ||||
|      CHRONYC = "/usr/bin/chronyc" | ||||
|      CHRONYD = "/usr/sbin/chronyd" | ||||
|      PKIDESTROY = "/usr/sbin/pkidestroy" | ||||
| --- a/ipaplatform/fedora/constants.py | ||||
| +++ b/ipaplatform/fedora/constants.py | ||||
| @@ -27,4 +27,6 @@ class FedoraConstantsNamespace(RedHatCon | ||||
|      if HAS_NFS_CONF: | ||||
|          SECURE_NFS_VAR = None | ||||
|   | ||||
| +    NAMED_OPENSSL_ENGINE = "pkcs11" | ||||
| + | ||||
|  constants = FedoraConstantsNamespace() | ||||
| --- a/ipaplatform/fedora/paths.py | ||||
| +++ b/ipaplatform/fedora/paths.py | ||||
| @@ -36,6 +36,8 @@ class FedoraPathNamespace(RedHatPathName | ||||
|      NAMED_CRYPTO_POLICY_FILE = "/etc/crypto-policies/back-ends/bind.config" | ||||
|      if HAS_NFS_CONF: | ||||
|          SYSCONFIG_NFS = '/etc/nfs.conf' | ||||
| +    DNSSEC_OPENSSL_CONF = "/etc/ipa/dnssec/openssl.cnf" | ||||
| +    DNSSEC_KEYFROMLABEL = "/usr/sbin/dnssec-keyfromlabel" | ||||
|   | ||||
|   | ||||
|  paths = FedoraPathNamespace() | ||||
| --- a/ipaplatform/fedora/services.py | ||||
| +++ b/ipaplatform/fedora/services.py | ||||
| @@ -29,6 +29,8 @@ from ipaplatform.redhat import services | ||||
|  # Mappings from service names as FreeIPA code references to these services | ||||
|  # to their actual systemd service names | ||||
|  fedora_system_units = redhat_services.redhat_system_units.copy() | ||||
| +fedora_system_units['named'] = fedora_system_units['named-regular'] | ||||
| +fedora_system_units['named-conflict'] = fedora_system_units['named-pkcs11'] | ||||
|   | ||||
|   | ||||
|  # Service classes that implement Fedora-specific behaviour | ||||
| @@ -41,6 +43,8 @@ class FedoraService(redhat_services.RedH | ||||
|  # of specified name | ||||
|   | ||||
|  def fedora_service_class_factory(name, api=None): | ||||
| +    if name in ['named', 'named-conflict']: | ||||
| +        return FedoraService(name, api) | ||||
|      return redhat_services.redhat_service_class_factory(name, api) | ||||
|   | ||||
|   | ||||
| --- a/ipaplatform/redhat/paths.py | ||||
| +++ b/ipaplatform/redhat/paths.py | ||||
| @@ -31,6 +31,9 @@ from ipaplatform.base.paths import BaseP | ||||
|   | ||||
|   | ||||
|  class RedHatPathNamespace(BasePathNamespace): | ||||
| +    CRYPTO_POLICY_OPENSSLCNF_FILE = ( | ||||
| +        '/etc/crypto-policies/back-ends/opensslcnf.config' | ||||
| +    ) | ||||
|      # https://docs.python.org/2/library/platform.html#cross-platform | ||||
|      if sys.maxsize > 2**32: | ||||
|          LIBSOFTHSM2_SO = BasePathNamespace.LIBSOFTHSM2_SO_64 | ||||
| --- a/ipaplatform/redhat/services.py | ||||
| +++ b/ipaplatform/redhat/services.py | ||||
| @@ -68,6 +68,7 @@ redhat_system_units['ipa-dnskeysyncd'] = | ||||
|  redhat_system_units['named-regular'] = 'named.service' | ||||
|  redhat_system_units['named-pkcs11'] = 'named-pkcs11.service' | ||||
|  redhat_system_units['named'] = redhat_system_units['named-pkcs11'] | ||||
| +redhat_system_units['named-conflict'] = redhat_system_units['named-regular'] | ||||
|  redhat_system_units['ods-enforcerd'] = 'ods-enforcerd.service' | ||||
|  redhat_system_units['ods_enforcerd'] = redhat_system_units['ods-enforcerd'] | ||||
|  redhat_system_units['ods-signerd'] = 'ods-signerd.service' | ||||
| --- a/ipaserver/dnssec/bindmgr.py | ||||
| +++ b/ipaserver/dnssec/bindmgr.py | ||||
| @@ -16,11 +16,14 @@ import stat | ||||
|  import six | ||||
|   | ||||
|  import ipalib.constants | ||||
| + | ||||
|  from ipapython.dn import DN | ||||
|  from ipapython import ipautil | ||||
| +from ipaplatform.constants import constants as platformconstants | ||||
|  from ipaplatform.paths import paths | ||||
|   | ||||
|  from ipaserver.dnssec.temp import TemporaryDirectory | ||||
| +from ipaserver.install import installutils | ||||
|   | ||||
|  logger = logging.getLogger(__name__) | ||||
|   | ||||
| @@ -133,8 +136,11 @@ class BINDMgr: | ||||
|              cmd.extend(['-f', 'KSK']) | ||||
|          if attrs.get('idnsSecKeyRevoke', [b'FALSE'])[0].upper() == b'TRUE': | ||||
|              cmd.extend(['-R', datetime.now().strftime(time_bindfmt)]) | ||||
| +        if platformconstants.NAMED_OPENSSL_ENGINE is not None: | ||||
| +            cmd.extend(['-E', platformconstants.NAMED_OPENSSL_ENGINE]) | ||||
|          cmd.append(zone.to_text()) | ||||
|   | ||||
| +        installutils.check_entropy() | ||||
|          # keys has to be readable by ODS & named | ||||
|          result = ipautil.run(cmd, capture_output=True) | ||||
|          basename = result.output.strip() | ||||
| --- a/ipaserver/install/bindinstance.py | ||||
| +++ b/ipaserver/install/bindinstance.py | ||||
| @@ -663,7 +663,7 @@ class BindInstance(service.Service): | ||||
|          self.no_dnssec_validation = False | ||||
|          self.sub_dict = None | ||||
|          self.reverse_zones = () | ||||
| -        self.named_regular = services.service('named-regular', api) | ||||
| +        self.named_conflict = services.service('named-conflict', api) | ||||
|   | ||||
|      suffix = ipautil.dn_attribute_property('_suffix') | ||||
|   | ||||
| @@ -770,7 +770,7 @@ class BindInstance(service.Service): | ||||
|          # named has to be started after softhsm initialization | ||||
|          # self.step("restarting named", self.__start) | ||||
|   | ||||
| -        self.step("configuring named to start on boot", self.__enable) | ||||
| +        self.step("configuring named to start on boot", self.switch_service) | ||||
|          self.step( | ||||
|              "changing resolv.conf to point to ourselves", | ||||
|              self.setup_resolv_conf | ||||
| @@ -783,19 +783,16 @@ class BindInstance(service.Service): | ||||
|   | ||||
|      def __start(self): | ||||
|          try: | ||||
| -            if self.get_state("running") is None: | ||||
| -                # first time store status | ||||
| -                self.backup_state("running", self.is_running()) | ||||
|              self.restart() | ||||
|          except Exception as e: | ||||
|              logger.error("Named service failed to start (%s)", e) | ||||
|              print("named service failed to start") | ||||
|   | ||||
| +    def switch_service(self): | ||||
| +        self.mask_conflict() | ||||
| +        self.__enable() | ||||
| + | ||||
|      def __enable(self): | ||||
| -        if self.get_state("enabled") is None: | ||||
| -            self.backup_state("enabled", self.is_running()) | ||||
| -            self.backup_state("named-regular-enabled", | ||||
| -                              self.named_regular.is_running()) | ||||
|          # We do not let the system start IPA components on its own, | ||||
|          # Instead we reply on the IPA init script to start only enabled | ||||
|          # components as found in our LDAP configuration tree | ||||
| @@ -806,20 +803,19 @@ class BindInstance(service.Service): | ||||
|              # don't crash, just report error | ||||
|              logger.error("DNS service already exists") | ||||
|   | ||||
| -        # disable named, we need to run named-pkcs11 only | ||||
| -        if self.get_state("named-regular-running") is None: | ||||
| -            # first time store status | ||||
| -            self.backup_state("named-regular-running", | ||||
| -                              self.named_regular.is_running()) | ||||
| +    def mask_conflict(self): | ||||
| +        # disable named-conflict (either named or named-pkcs11) | ||||
|          try: | ||||
| -            self.named_regular.stop() | ||||
| +            self.named_conflict.stop() | ||||
|          except Exception as e: | ||||
| -            logger.debug("Unable to stop named (%s)", e) | ||||
| +            logger.debug("Unable to stop %s (%s)", | ||||
| +                         self.named_conflict.systemd_name, e) | ||||
|   | ||||
|          try: | ||||
| -            self.named_regular.mask() | ||||
| +            self.named_conflict.mask() | ||||
|          except Exception as e: | ||||
| -            logger.debug("Unable to mask named (%s)", e) | ||||
| +            logger.debug("Unable to mask %s (%s)", | ||||
| +                         self.named_conflict.systemd_name, e) | ||||
|   | ||||
|      def _get_dnssec_validation(self): | ||||
|          """get dnssec-validation value | ||||
| @@ -1318,11 +1314,6 @@ class BindInstance(service.Service): | ||||
|          if self.is_configured(): | ||||
|              self.print_msg("Unconfiguring %s" % self.service_name) | ||||
|   | ||||
| -        running = self.restore_state("running") | ||||
| -        enabled = self.restore_state("enabled") | ||||
| -        named_regular_running = self.restore_state("named-regular-running") | ||||
| -        named_regular_enabled = self.restore_state("named-regular-enabled") | ||||
| - | ||||
|          self.dns_backup.clear_records(self.api.Backend.ldap2.isconnected()) | ||||
|   | ||||
|          try: | ||||
| @@ -1337,23 +1328,10 @@ class BindInstance(service.Service): | ||||
|   | ||||
|          ipautil.rmtree(paths.BIND_LDAP_DNS_IPA_WORKDIR) | ||||
|   | ||||
| -        # disabled by default, by ldap_configure() | ||||
| -        if enabled: | ||||
| -            self.enable() | ||||
| -        else: | ||||
| -            self.disable() | ||||
| - | ||||
| -        if running: | ||||
| -            self.restart() | ||||
| -        else: | ||||
| -            self.stop() | ||||
| - | ||||
| -        self.named_regular.unmask() | ||||
| -        if named_regular_enabled: | ||||
| -            self.named_regular.enable() | ||||
| +        self.disable() | ||||
| +        self.stop() | ||||
|   | ||||
| -        if named_regular_running: | ||||
| -            self.named_regular.start() | ||||
| +        self.named_conflict.unmask() | ||||
|   | ||||
|          ipautil.remove_file(paths.NAMED_CONF_BAK) | ||||
|          ipautil.remove_file(paths.NAMED_CUSTOM_CONF) | ||||
| --- a/ipaserver/install/dnskeysyncinstance.py | ||||
| +++ b/ipaserver/install/dnskeysyncinstance.py | ||||
| @@ -4,11 +4,12 @@ | ||||
|   | ||||
|  from __future__ import print_function, absolute_import | ||||
|   | ||||
| -import logging | ||||
|  import errno | ||||
| +import grp | ||||
| +import logging | ||||
|  import os | ||||
|  import pwd | ||||
| -import grp | ||||
| +import re | ||||
|  import shutil | ||||
|  import stat | ||||
|   | ||||
| @@ -56,10 +57,10 @@ class DNSKeySyncInstance(service.Service | ||||
|              keytab=paths.IPA_DNSKEYSYNCD_KEYTAB | ||||
|          ) | ||||
|          self.extra_config = [u'dnssecVersion 1', ]  # DNSSEC enabled | ||||
| -        self.named_uid = None | ||||
| -        self.named_gid = None | ||||
| -        self.ods_uid = None | ||||
| -        self.ods_gid = None | ||||
| +        self.named_uid = self.__get_named_uid() | ||||
| +        self.named_gid = self.__get_named_gid() | ||||
| +        self.ods_uid = self.__get_ods_uid() | ||||
| +        self.ods_gid = self.__get_ods_gid() | ||||
|   | ||||
|      suffix = ipautil.dn_attribute_property('_suffix') | ||||
|   | ||||
| @@ -67,12 +68,6 @@ class DNSKeySyncInstance(service.Service | ||||
|          """ | ||||
|          Setting up correct permissions to allow write/read access for daemons | ||||
|          """ | ||||
| -        if self.named_uid is None: | ||||
| -            self.named_uid = self.__get_named_uid() | ||||
| - | ||||
| -        if self.named_gid is None: | ||||
| -            self.named_gid = self.__get_named_gid() | ||||
| - | ||||
|          if not os.path.exists(paths.BIND_LDAP_DNS_IPA_WORKDIR): | ||||
|              os.mkdir(paths.BIND_LDAP_DNS_IPA_WORKDIR, 0o770) | ||||
|          # dnssec daemons require to have access into the directory | ||||
| @@ -133,20 +128,19 @@ class DNSKeySyncInstance(service.Service | ||||
|          except KeyError: | ||||
|              raise RuntimeError("Named GID not found") | ||||
|   | ||||
| -    def __check_dnssec_status(self): | ||||
| -        self.named_uid = self.__get_named_uid() | ||||
| -        self.named_gid = self.__get_named_gid() | ||||
| - | ||||
| +    def __get_ods_uid(self): | ||||
|          try: | ||||
| -            self.ods_uid = pwd.getpwnam(constants.ODS_USER).pw_uid | ||||
| +            return pwd.getpwnam(constants.ODS_USER).pw_uid | ||||
|          except KeyError: | ||||
|              raise RuntimeError("OpenDNSSEC UID not found") | ||||
|   | ||||
| +    def __get_ods_gid(self): | ||||
|          try: | ||||
| -            self.ods_gid = grp.getgrnam(constants.ODS_GROUP).gr_gid | ||||
| +            return grp.getgrnam(constants.ODS_GROUP).gr_gid | ||||
|          except KeyError: | ||||
|              raise RuntimeError("OpenDNSSEC GID not found") | ||||
|   | ||||
| +    def __check_dnssec_status(self): | ||||
|          if not dns_container_exists(self.suffix): | ||||
|              raise RuntimeError("DNS container does not exist") | ||||
|   | ||||
| @@ -164,10 +158,94 @@ class DNSKeySyncInstance(service.Service | ||||
|   | ||||
|          self._ldap_mod("dnssec.ldif", {'SUFFIX': self.suffix, }) | ||||
|   | ||||
| -    def __setup_softhsm(self): | ||||
| -        assert self.ods_uid is not None | ||||
| -        assert self.named_gid is not None | ||||
| +    def _are_named_options_configured(self, options): | ||||
| +        """Check whether the sysconfig of named is patched | ||||
|   | ||||
| +        Additional command line options for named are passed | ||||
| +        via OPTIONS env variable. Since custom options can be | ||||
| +        supplied by a vendor, at least, the base parsing of such | ||||
| +        is required. | ||||
| +        Current named command line options: | ||||
| +        NS_MAIN_ARGS "46A:c:C:d:D:E:fFgi:lL:M:m:n:N:p:P:sS:t:T:U:u:vVx:X:" | ||||
| +        If there are several same options the last passed wins. | ||||
| +        """ | ||||
| +        if options: | ||||
| +            pattern = r"[ ]*-[a-zA-Z46]*E[ ]*(.*?)(?: |$)" | ||||
| +            engines = re.findall(pattern, options) | ||||
| +            if engines and engines[-1] == constants.NAMED_OPENSSL_ENGINE: | ||||
| +                return True | ||||
| + | ||||
| +        return False | ||||
| + | ||||
| +    def setup_named_openssl_conf(self): | ||||
| +        if constants.NAMED_OPENSSL_ENGINE is not None: | ||||
| +            logger.debug("Setup OpenSSL config for BIND") | ||||
| +            # setup OpenSSL config for BIND, | ||||
| +            # this one is needed because FreeIPA installation | ||||
| +            # disables p11-kit-proxy PKCS11 module | ||||
| +            conf_file_dict = { | ||||
| +                'OPENSSL_ENGINE': constants.NAMED_OPENSSL_ENGINE, | ||||
| +                'SOFTHSM_MODULE': paths.LIBSOFTHSM2_SO, | ||||
| +                'CRYPTO_POLICY_FILE': paths.CRYPTO_POLICY_OPENSSLCNF_FILE, | ||||
| +            } | ||||
| +            if paths.CRYPTO_POLICY_OPENSSLCNF_FILE is None: | ||||
| +                opensslcnf_tmpl = "bind.openssl.cnf.template" | ||||
| +            else: | ||||
| +                opensslcnf_tmpl = "bind.openssl.cryptopolicy.cnf.template" | ||||
| + | ||||
| +            named_openssl_txt = ipautil.template_file( | ||||
| +                os.path.join(paths.USR_SHARE_IPA_DIR, opensslcnf_tmpl), | ||||
| +                conf_file_dict | ||||
| +            ) | ||||
| +            with open(paths.DNSSEC_OPENSSL_CONF, 'w') as f: | ||||
| +                os.fchmod(f.fileno(), 0o640) | ||||
| +                os.fchown(f.fileno(), 0, self.named_gid) | ||||
| +                f.write(named_openssl_txt) | ||||
| + | ||||
| +    def setup_named_sysconfig(self): | ||||
| +        logger.debug("Setup BIND sysconfig") | ||||
| +        sysconfig = paths.SYSCONFIG_NAMED | ||||
| +        self.fstore.backup_file(sysconfig) | ||||
| + | ||||
| +        directivesetter.set_directive( | ||||
| +            sysconfig, | ||||
| +            'SOFTHSM2_CONF', paths.DNSSEC_SOFTHSM2_CONF, | ||||
| +            quotes=False, separator='=') | ||||
| + | ||||
| +        if constants.NAMED_OPENSSL_ENGINE is not None: | ||||
| +            directivesetter.set_directive( | ||||
| +                sysconfig, | ||||
| +                'OPENSSL_CONF', paths.DNSSEC_OPENSSL_CONF, | ||||
| +                quotes=False, separator='=') | ||||
| + | ||||
| +            options = directivesetter.get_directive( | ||||
| +                paths.SYSCONFIG_NAMED, | ||||
| +                constants.NAMED_OPTIONS_VAR, | ||||
| +                separator="=" | ||||
| +            ) or '' | ||||
| +            if not self._are_named_options_configured(options): | ||||
| +                engine_cmd = "-E {}".format(constants.NAMED_OPENSSL_ENGINE) | ||||
| +                new_options = ' '.join([options, engine_cmd]) | ||||
| +                directivesetter.set_directive( | ||||
| +                    sysconfig, | ||||
| +                    constants.NAMED_OPTIONS_VAR, new_options, | ||||
| +                    quotes=True, separator='=') | ||||
| + | ||||
| +    def setup_ipa_dnskeysyncd_sysconfig(self): | ||||
| +        logger.debug("Setup ipa-dnskeysyncd sysconfig") | ||||
| +        sysconfig = paths.SYSCONFIG_IPA_DNSKEYSYNCD | ||||
| +        directivesetter.set_directive( | ||||
| +            sysconfig, | ||||
| +            'SOFTHSM2_CONF', paths.DNSSEC_SOFTHSM2_CONF, | ||||
| +            quotes=False, separator='=') | ||||
| + | ||||
| +        if constants.NAMED_OPENSSL_ENGINE is not None: | ||||
| +            directivesetter.set_directive( | ||||
| +                sysconfig, | ||||
| +                'OPENSSL_CONF', paths.DNSSEC_OPENSSL_CONF, | ||||
| +                quotes=False, separator='=') | ||||
| + | ||||
| +    def __setup_softhsm(self): | ||||
|          token_dir_exists = os.path.exists(paths.DNSSEC_TOKENS_DIR) | ||||
|   | ||||
|          # create dnssec directory | ||||
| @@ -186,23 +264,15 @@ class DNSKeySyncInstance(service.Service | ||||
|                                 'tokens_dir': paths.DNSSEC_TOKENS_DIR | ||||
|                              } | ||||
|          logger.debug("Creating new softhsm config file") | ||||
| -        named_fd = open(paths.DNSSEC_SOFTHSM2_CONF, 'w') | ||||
| -        named_fd.seek(0) | ||||
| -        named_fd.truncate(0) | ||||
| -        named_fd.write(softhsm_conf_txt) | ||||
| -        named_fd.close() | ||||
| -        os.chmod(paths.DNSSEC_SOFTHSM2_CONF, 0o644) | ||||
| - | ||||
| -        # setting up named to use softhsm2 | ||||
| -        if not self.fstore.has_file(paths.SYSCONFIG_NAMED): | ||||
| -            self.fstore.backup_file(paths.SYSCONFIG_NAMED) | ||||
| - | ||||
| -        # setting up named and ipa-dnskeysyncd to use our softhsm2 config | ||||
| -        for sysconfig in [paths.SYSCONFIG_NAMED, | ||||
| -                          paths.SYSCONFIG_IPA_DNSKEYSYNCD]: | ||||
| -            directivesetter.set_directive(sysconfig, 'SOFTHSM2_CONF', | ||||
| -                                          paths.DNSSEC_SOFTHSM2_CONF, | ||||
| -                                          quotes=False, separator='=') | ||||
| +        with open(paths.DNSSEC_SOFTHSM2_CONF, 'w') as f: | ||||
| +            os.fchmod(f.fileno(), 0o644) | ||||
| +            f.write(softhsm_conf_txt) | ||||
| + | ||||
| +        # setting up named and ipa-dnskeysyncd to use our softhsm2 and | ||||
| +        # openssl configs | ||||
| +        self.setup_named_openssl_conf() | ||||
| +        self.setup_named_sysconfig() | ||||
| +        self.setup_ipa_dnskeysyncd_sysconfig() | ||||
|   | ||||
|          if (token_dir_exists and os.path.exists(paths.DNSSEC_SOFTHSM_PIN) and | ||||
|                  os.path.exists(paths.DNSSEC_SOFTHSM_PIN_SO)): | ||||
| @@ -231,23 +301,17 @@ class DNSKeySyncInstance(service.Service | ||||
|              entropy_bits=0, special=None, min_len=pin_length) | ||||
|   | ||||
|          logger.debug("Saving user PIN to %s", paths.DNSSEC_SOFTHSM_PIN) | ||||
| -        named_fd = open(paths.DNSSEC_SOFTHSM_PIN, 'w') | ||||
| -        named_fd.seek(0) | ||||
| -        named_fd.truncate(0) | ||||
| -        named_fd.write(pin) | ||||
| -        named_fd.close() | ||||
| -        os.chmod(paths.DNSSEC_SOFTHSM_PIN, 0o770) | ||||
| -        # chown to ods:named | ||||
| -        os.chown(paths.DNSSEC_SOFTHSM_PIN, self.ods_uid, self.named_gid) | ||||
| +        with open(paths.DNSSEC_SOFTHSM_PIN, 'w') as f: | ||||
| +            # chown to ods:named | ||||
| +            os.fchown(f.fileno(), self.ods_uid, self.named_gid) | ||||
| +            os.fchmod(f.fileno(), 0o660) | ||||
| +            f.write(pin) | ||||
|   | ||||
|          logger.debug("Saving SO PIN to %s", paths.DNSSEC_SOFTHSM_PIN_SO) | ||||
| -        named_fd = open(paths.DNSSEC_SOFTHSM_PIN_SO, 'w') | ||||
| -        named_fd.seek(0) | ||||
| -        named_fd.truncate(0) | ||||
| -        named_fd.write(pin_so) | ||||
| -        named_fd.close() | ||||
| -        # owner must be root | ||||
| -        os.chmod(paths.DNSSEC_SOFTHSM_PIN_SO, 0o400) | ||||
| +        with open(paths.DNSSEC_SOFTHSM_PIN_SO, 'w') as f: | ||||
| +            # owner must be root | ||||
| +            os.fchmod(f.fileno(), 0o400) | ||||
| +            f.write(pin_so) | ||||
|   | ||||
|          # initialize SoftHSM | ||||
|   | ||||
| @@ -377,7 +441,7 @@ class DNSKeySyncInstance(service.Service | ||||
|                  os.chown(dir_path, self.ods_uid, self.named_gid) | ||||
|              for filename in files: | ||||
|                  file_path = os.path.join(root, filename) | ||||
| -                os.chmod(file_path, 0o770 | stat.S_ISGID) | ||||
| +                os.chmod(file_path, 0o660 | stat.S_ISGID) | ||||
|                  # chown to ods:named | ||||
|                  os.chown(file_path, self.ods_uid, self.named_gid) | ||||
|   | ||||
| @@ -389,7 +453,6 @@ class DNSKeySyncInstance(service.Service | ||||
|              logger.error("DNSKeySync service already exists") | ||||
|   | ||||
|      def __setup_principal(self): | ||||
| -        assert self.ods_gid is not None | ||||
|          ipautil.remove_keytab(self.keytab) | ||||
|          installutils.kadmin_addprinc(self.principal) | ||||
|   | ||||
| --- a/ipaserver/install/ipa_backup.py | ||||
| +++ b/ipaserver/install/ipa_backup.py | ||||
| @@ -185,6 +185,7 @@ class Backup(admintool.AdminTool): | ||||
|          paths.OPENDNSSEC_KASP_FILE, | ||||
|          paths.OPENDNSSEC_ZONELIST_FILE, | ||||
|          paths.OPENDNSSEC_KASP_DB, | ||||
| +        paths.DNSSEC_OPENSSL_CONF, | ||||
|          paths.DNSSEC_SOFTHSM2_CONF, | ||||
|          paths.DNSSEC_SOFTHSM_PIN_SO, | ||||
|          paths.IPA_ODS_EXPORTER_KEYTAB, | ||||
| --- a/ipaserver/install/kra.py | ||||
| +++ b/ipaserver/install/kra.py | ||||
| @@ -106,9 +106,9 @@ def install(api, replica_config, options | ||||
|   | ||||
|      # Restart apache for new proxy config file | ||||
|      services.knownservices.httpd.restart(capture_output=True) | ||||
| -    # Restarted named-pkcs11 to restore bind-dyndb-ldap operation, see | ||||
| +    # Restarted named to restore bind-dyndb-ldap operation, see | ||||
|      # https://pagure.io/freeipa/issue/5813 | ||||
| -    named = services.knownservices.named  # alias for named-pkcs11 | ||||
| +    named = services.knownservices.named  # alias for current named | ||||
|      if named.is_running(): | ||||
|          named.restart(capture_output=True) | ||||
|   | ||||
| --- a/ipaserver/install/opendnssecinstance.py | ||||
| +++ b/ipaserver/install/opendnssecinstance.py | ||||
| @@ -269,7 +269,7 @@ class OpenDNSSECInstance(service.Service | ||||
|                      os.chown(dir_path, self.ods_uid, self.named_gid)  # chown to ods:named | ||||
|                  for filename in files: | ||||
|                      file_path = os.path.join(root, filename) | ||||
| -                    os.chmod(file_path, 0o770 | stat.S_ISGID) | ||||
| +                    os.chmod(file_path, 0o660 | stat.S_ISGID) | ||||
|                      os.chown(file_path, self.ods_uid, self.named_gid)  # chown to ods:named | ||||
|   | ||||
|          finally: | ||||
| --- a/ipaserver/install/server/upgrade.py | ||||
| +++ b/ipaserver/install/server/upgrade.py | ||||
| @@ -509,6 +509,24 @@ def ca_initialize_hsm_state(ca): | ||||
|          ca.set_hsm_state(config) | ||||
|   | ||||
|   | ||||
| +def dnssec_set_openssl_engine(dnskeysyncd): | ||||
| +    """ | ||||
| +    Setup OpenSSL engine for BIND | ||||
| +    """ | ||||
| +    if constants.NAMED_OPENSSL_ENGINE is None: | ||||
| +        return False | ||||
| + | ||||
| +    if sysupgrade.get_upgrade_state('dns', 'openssl_engine'): | ||||
| +        return False | ||||
| + | ||||
| +    logger.info('[Set OpenSSL engine for BIND]') | ||||
| +    dnskeysyncd.setup_named_openssl_conf() | ||||
| +    dnskeysyncd.setup_named_sysconfig() | ||||
| +    dnskeysyncd.setup_ipa_dnskeysyncd_sysconfig() | ||||
| +    sysupgrade.set_upgrade_state('dns', 'openssl_engine', True) | ||||
| + | ||||
| +    return True | ||||
| + | ||||
|   | ||||
|  def certificate_renewal_update(ca, kra, ds, http): | ||||
|      """ | ||||
| @@ -1395,7 +1413,10 @@ def upgrade_bind(fstore): | ||||
|          logger.info("DNS service is not configured") | ||||
|          return False | ||||
|   | ||||
| -    # get rid of old upgrade states | ||||
| +    bind_switch_service(bind) | ||||
| + | ||||
| +    # get rid of old states | ||||
| +    bind_old_states(bind) | ||||
|      bind_old_upgrade_states() | ||||
|   | ||||
|      # only upgrade with drop-in is missing and /etc/resolv.conf is a link to | ||||
| @@ -1428,6 +1449,38 @@ def upgrade_bind(fstore): | ||||
|      return changed | ||||
|   | ||||
|   | ||||
| +def bind_switch_service(bind): | ||||
| +    """ | ||||
| +    Mask either named or named-pkcs11, we need to run only one, | ||||
| +    running both can cause unexpected errors. | ||||
| +    """ | ||||
| +    named_conflict_name = bind.named_conflict.systemd_name | ||||
| +    named_conflict_old = sysupgrade.get_upgrade_state('dns', 'conflict_named') | ||||
| + | ||||
| +    # nothing changed | ||||
| +    if named_conflict_old and named_conflict_old == named_conflict_name: | ||||
| +        return False | ||||
| + | ||||
| +    bind.switch_service() | ||||
| + | ||||
| +    sysupgrade.set_upgrade_state('dns', 'conflict_named', named_conflict_name) | ||||
| +    return True | ||||
| + | ||||
| + | ||||
| +def bind_old_states(bind): | ||||
| +    """Remove old states | ||||
| +    """ | ||||
| +    # no longer used states | ||||
| +    old_states = [ | ||||
| +        "enabled", | ||||
| +        "running", | ||||
| +        "named-regular-enabled", | ||||
| +        "named-regular-running", | ||||
| +    ] | ||||
| +    for state in old_states: | ||||
| +        bind.delete_state(state) | ||||
| + | ||||
| + | ||||
|  def bind_old_upgrade_states(): | ||||
|      """Remove old upgrade states | ||||
|      """ | ||||
| @@ -1673,6 +1726,9 @@ def upgrade_configuration(): | ||||
|              if not dnskeysyncd.is_configured(): | ||||
|                  dnskeysyncd.create_instance(fqdn, api.env.realm) | ||||
|                  dnskeysyncd.start_dnskeysyncd() | ||||
| +            else: | ||||
| +                if dnssec_set_openssl_engine(dnskeysyncd): | ||||
| +                    dnskeysyncd.start_dnskeysyncd() | ||||
|   | ||||
|      cleanup_kdc(fstore) | ||||
|      cleanup_adtrust(fstore) | ||||
| --- a/ipaserver/install/service.py | ||||
| +++ b/ipaserver/install/service.py | ||||
| @@ -533,6 +533,9 @@ class Service: | ||||
|      def get_state(self, key): | ||||
|          return self.sstore.get_state(self.service_name, key) | ||||
|   | ||||
| +    def delete_state(self, key): | ||||
| +        self.sstore.delete_state(self.service_name, key) | ||||
| + | ||||
|      def print_msg(self, message): | ||||
|          print_msg(message, self.output_fd) | ||||
|   | ||||
| @@ -660,6 +663,7 @@ class Service: | ||||
|          ] | ||||
|          extra_config_opts.extend(config) | ||||
|   | ||||
| +        self.unmask() | ||||
|          self.disable() | ||||
|   | ||||
|          set_service_entry_config( | ||||
| --- a/ipatests/test_integration/test_commands.py | ||||
| +++ b/ipatests/test_integration/test_commands.py | ||||
| @@ -989,7 +989,7 @@ class TestIPACommand(IntegrationTest): | ||||
|   | ||||
|          # get minimum version from current crypto-policy | ||||
|          openssl_cnf = self.master.get_file_contents( | ||||
| -            "/etc/crypto-policies/back-ends/opensslcnf.config", | ||||
| +            paths.CRYPTO_POLICY_OPENSSLCNF_FILE, | ||||
|              encoding="utf-8" | ||||
|          ) | ||||
|          mo = re.search(r"MinProtocol\s*=\s*(TLSv[0-9.]+)", openssl_cnf) | ||||
							
								
								
									
										11
									
								
								debian/patches/series
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								debian/patches/series
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| # upstreamed | ||||
| pkcs11-openssl-for-bind.diff | ||||
|  | ||||
| # not upstreamable | ||||
|  | ||||
| # send upstream | ||||
| migrate-to-gpg.diff | ||||
| dnssec-race-wa.diff | ||||
| use-bind9.16.diff | ||||
| fix-sssd-socket-activation.diff | ||||
| fix-chrony-service-name.diff | ||||
							
								
								
									
										24
									
								
								debian/patches/use-bind9.16.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								debian/patches/use-bind9.16.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| --- a/ipaplatform/debian/paths.py | ||||
| +++ b/ipaplatform/debian/paths.py | ||||
| @@ -58,7 +58,7 @@ class DebianPathNamespace(BasePathNamesp | ||||
|      SYSCONFIG_IPA_DNSKEYSYNCD = "/etc/default/ipa-dnskeysyncd" | ||||
|      SYSCONFIG_IPA_ODS_EXPORTER = "/etc/default/ipa-ods-exporter" | ||||
|      SYSCONFIG_KRB5KDC_DIR = "/etc/default/krb5-kdc" | ||||
| -    SYSCONFIG_NAMED = "/etc/default/bind9" | ||||
| +    SYSCONFIG_NAMED = "/etc/default/named" | ||||
|      SYSCONFIG_NFS = "/etc/default/nfs-common" | ||||
|      SYSCONFIG_NTPD = "/etc/default/ntp" | ||||
|      SYSCONFIG_ODS = "/etc/default/opendnssec" | ||||
| --- a/ipaplatform/debian/services.py | ||||
| +++ b/ipaplatform/debian/services.py | ||||
| @@ -23,8 +23,8 @@ debian_system_units = redhat_services.re | ||||
|  debian_system_units['httpd'] = 'apache2.service' | ||||
|  debian_system_units['kadmin'] = 'krb5-admin-server.service' | ||||
|  debian_system_units['krb5kdc'] = 'krb5-kdc.service' | ||||
| -debian_system_units['named-regular'] = 'bind9.service' | ||||
| -debian_system_units['named-pkcs11'] = 'bind9-pkcs11.service' | ||||
| +debian_system_units['named-regular'] = 'named.service' | ||||
| +debian_system_units['named-pkcs11'] = 'named-pkcs11.service' | ||||
|  debian_system_units['named'] = debian_system_units['named-pkcs11'] | ||||
|  debian_system_units['pki-tomcatd'] = 'pki-tomcatd.service' | ||||
|  debian_system_units['pki_tomcatd'] = debian_system_units['pki-tomcatd'] | ||||
							
								
								
									
										7
									
								
								debian/pydist-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								debian/pydist-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| dbus_python python3-dbus-python | ||||
| dogtag_pki pki-server | ||||
| ipaclient python3-ipaclient | ||||
| ipalib python3-ipalib | ||||
| ipaplatform python3-ipaplatform | ||||
| ipapython python3-ipapython | ||||
| jwcrypto python3-jwcrypto | ||||
							
								
								
									
										9
									
								
								debian/python3-ipaclient.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								debian/python3-ipaclient.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| usr/lib/python*/dist-packages/ipaclient-*.egg-info | ||||
| usr/lib/python*/dist-packages/ipaclient/*.py | ||||
| usr/lib/python*/dist-packages/ipaclient/csrgen/profiles/*.json | ||||
| usr/lib/python*/dist-packages/ipaclient/csrgen/rules/*.json | ||||
| usr/lib/python*/dist-packages/ipaclient/csrgen/templates/*.tmpl | ||||
| usr/lib/python*/dist-packages/ipaclient/install/*.py | ||||
| usr/lib/python*/dist-packages/ipaclient/plugins/*.py | ||||
| usr/lib/python*/dist-packages/ipaclient/remote_plugins/*.py | ||||
| usr/lib/python*/dist-packages/ipaclient/remote_plugins/2_*/*.py | ||||
							
								
								
									
										6
									
								
								debian/python3-ipalib.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								debian/python3-ipalib.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| usr/lib/python*/dist-packages/ipalib-*.egg-info | ||||
| usr/lib/python*/dist-packages/ipalib/* | ||||
| usr/lib/python*/dist-packages/ipaplatform-*.egg-info | ||||
| usr/lib/python*/dist-packages/ipaplatform/* | ||||
| usr/lib/python*/dist-packages/ipapython-*.egg-info | ||||
| usr/lib/python*/dist-packages/ipapython/* | ||||
							
								
								
									
										46
									
								
								debian/python3-ipaserver.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								debian/python3-ipaserver.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| usr/lib/python*/dist-packages/ipaserver-*.egg-info | ||||
| usr/lib/python*/dist-packages/ipaserver/__init__* | ||||
| usr/lib/python*/dist-packages/ipaserver/advise/* | ||||
| usr/lib/python*/dist-packages/ipaserver/dcerpc.py | ||||
| usr/lib/python*/dist-packages/ipaserver/dcerpc_common.py | ||||
| usr/lib/python*/dist-packages/ipaserver/dns_data_management* | ||||
| usr/lib/python*/dist-packages/ipaserver/dnssec/* | ||||
| usr/lib/python*/dist-packages/ipaserver/install/__init__.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/adtrust.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/adtrustinstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/bindinstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/ca.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/cainstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/certs.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/conncheck.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/custodiainstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/dns.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/dnskeysyncinstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/dogtag.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/dogtaginstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/dsinstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/httpinstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/installutils.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/ipa_*.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/ipactl.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/kra.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/krainstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/krbinstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/ldapupdate.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/odsexporterinstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/opendnssecinstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/otpdinstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/plugins | ||||
| usr/lib/python*/dist-packages/ipaserver/install/replication.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/schemaupdate.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/server/* | ||||
| usr/lib/python*/dist-packages/ipaserver/install/service.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/sysupgrade.py | ||||
| usr/lib/python*/dist-packages/ipaserver/install/upgradeinstance.py | ||||
| usr/lib/python*/dist-packages/ipaserver/masters.py | ||||
| usr/lib/python*/dist-packages/ipaserver/p11helper.py | ||||
| usr/lib/python*/dist-packages/ipaserver/plugins/* | ||||
| usr/lib/python*/dist-packages/ipaserver/rpcserver* | ||||
| usr/lib/python*/dist-packages/ipaserver/secrets/* | ||||
| usr/lib/python*/dist-packages/ipaserver/servroles* | ||||
| usr/lib/python*/dist-packages/ipaserver/topology* | ||||
							
								
								
									
										2
									
								
								debian/python3-ipatests.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								debian/python3-ipatests.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| usr/lib/python*/dist-packages/ipatests-* | ||||
| usr/lib/python*/dist-packages/ipatests/* | ||||
							
								
								
									
										2
									
								
								debian/python3-ipatests.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								debian/python3-ipatests.lintian-overrides
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # no need to be executable | ||||
| python3-ipatests: script-not-executable usr/lib/python*/dist-packages/ipatests/test_integration/scripts/caless-create-pki | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user